From 841687fcc0a3ace3d10e73a5e60cc3f461b962fc Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Sun, 19 Aug 2018 16:53:30 -0700 Subject: [PATCH] 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. --- pywb/static/default_banner.js | 32 ++++++++++++++++++++++++-- pywb/static/wb_frame.js | 17 -------------- pywb/static/wombat.js | 43 +++++++++++++++++++---------------- 3 files changed, 54 insertions(+), 38 deletions(-) diff --git a/pywb/static/default_banner.js b/pywb/static/default_banner.js index 3497b0b0..640c6d70 100644 --- a/pywb/static/default_banner.js +++ b/pywb/static/default_banner.js @@ -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 = "" + capture_str + ""; if (is_live) { + title_str = " pywb Live: " + title_str; capture_str += "Live on "; } else { + title_str += "pywb Archived: " + title_str; capture_str += "Archived on "; } - 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); }); } diff --git a/pywb/static/wb_frame.js b/pywb/static/wb_frame.js index 6f90e3ed..d743e658 100644 --- a/pywb/static/wb_frame.js +++ b/pywb/static/wb_frame.js @@ -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); diff --git a/pywb/static/wombat.js b/pywb/static/wombat.js index ab2d2dc4..74f4dc46 100644 --- a/pywb/static/wombat.js +++ b/pywb/static/wombat.js @@ -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); }