1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +01:00

favicon and title pass-through: improvements from #356, closes #342

- only add icons if in top frame, fix indent
- favicon: move icon and title logic to default_banner to allow overriding default behavior (eg. Webrecorder uses its own favicon)
- title: prepend original page title with 'pywb Live: ' or 'pywb Archived: ' in default banner to avoid confusion with actual site, also works for frameless mode.
This commit is contained in:
Ilya Kreymer 2018-08-19 16:53:30 -07:00 committed by Ilya Kreymer
parent dd76ed2818
commit 841687fcc0
3 changed files with 54 additions and 38 deletions

View File

@ -61,27 +61,36 @@ This file is part of pywb, https://github.com/webrecorder/pywb
function set_banner(url, ts, is_live, title) {
var capture_str;
var title_str;
if (!ts) {
return;
}
var date_str = ts_to_date(ts, true);
if (title) {
capture_str = '"' + title + '"';
capture_str = title;
} else {
capture_str = url;
}
title_str = capture_str;
capture_str = "<b id='title_or_url'>" + capture_str + "</b>";
if (is_live) {
title_str = " pywb Live: " + title_str;
capture_str += "<i>Live on&nbsp;</i>";
} else {
title_str += "pywb Archived: " + title_str;
capture_str += "<i>Archived on&nbsp;</i>";
}
capture_str += ts_to_date(ts, true);
title_str += " (" + date_str + ")";
capture_str += date_str;
document.querySelector("#_wb_capture_info").innerHTML = capture_str;
window.document.title = title_str;
}
if (window.top != window) {
@ -118,6 +127,25 @@ This file is part of pywb, https://github.com/webrecorder/pywb
return;
}
// favicon update
if (type === 'load') {
var head = document.querySelector('head');
var oldLink = document.querySelectorAll("link[rel*='icon']");
for (var i = 0; i < oldLink.length; i++) {
head.removeChild(oldLink[i]);
}
if (state.icons) {
for (var i = 0; i < state.icons.length; i++) {
var icon = state.icons[i];
var link = document.createElement('link');
link.rel = icon.rel;
link.href = icon.href;
head.appendChild(link);
}
}
}
set_banner(state.url, state.ts, state.is_live, title);
});
}

View File

@ -109,23 +109,6 @@ function ContentFrame(content_info) {
this.handle_message = function(state) {
var type = state.wb_type;
if (type === 'load') {
window.document.title = state.title + ' ' + state.ts;
var head = document.querySelector('head');
var oldLink = document.querySelectorAll("link[rel*='icon']");
for (var i = 0; i < oldLink.length; i++) {
head.removeChild(oldLink[i]);
}
var len = state.icons.length;
for (var i = 0; i < len; i++) {
var icon = state.icons[i];
var link = document.createElement('link');
link.rel = icon.rel;
link.href = icon.href;
head.appendChild(link);
}
}
if (type == "load" || type == "replace-url") {
this.set_url(state);

View File

@ -3619,26 +3619,31 @@ var _WBWombat = function($wbwindow, wbinfo) {
return;
}
var icons = [];
var hicons = $wbwindow.document.querySelectorAll("link[rel*='icon']");
for (var i = 0; i < hicons.length; i++) {
var hicon = hicons[i];
icons.push({
rel: hicon.rel,
href: wb_getAttribute.call(hicon, 'href')
})
}
if ($wbwindow != $wbwindow.__WB_replay_top) {
return;
}
var message = {
"icons": icons,
"url": $wbwindow.WB_wombat_location.href,
"ts": wbinfo.timestamp,
"request_ts": wbinfo.request_ts,
"is_live": wbinfo.is_live,
"title": $wbwindow.document ? $wbwindow.document.title : "",
"readyState": $wbwindow.document.readyState,
"wb_type": "load"
}
var icons = [];
var hicons = $wbwindow.document.querySelectorAll("link[rel*='icon']");
for (var i = 0; i < hicons.length; i++) {
var hicon = hicons[i];
icons.push({
rel: hicon.rel,
href: wb_getAttribute.call(hicon, 'href')
})
}
var message = {
"icons": icons,
"url": $wbwindow.WB_wombat_location.href,
"ts": wbinfo.timestamp,
"request_ts": wbinfo.request_ts,
"is_live": wbinfo.is_live,
"title": $wbwindow.document ? $wbwindow.document.title : "",
"readyState": $wbwindow.document.readyState,
"wb_type": "load"
}
send_top_message(message);
}