diff --git a/pywb/static/wombat.js b/pywb/static/wombat.js index 3cf4967d..44f6289f 100644 --- a/pywb/static/wombat.js +++ b/pywb/static/wombat.js @@ -18,7 +18,7 @@ This file is part of pywb, https://github.com/ikreymer/pywb */ //============================================ -// Wombat JS-Rewriting Library v2.27 +// Wombat JS-Rewriting Library v2.30 //============================================ @@ -88,13 +88,20 @@ var _WBWombat = function($wbwindow, wbinfo) { } //============================================ - function equals_any(string, arr) { - for (var i = 0; i < arr.length; i++) { - if (string === arr[i]) { - return arr[i]; - } + function should_rewrite_attr(tagName, attr) { + if (attr == "href" || attr == "src") { + return true; } - return undefined; + + if (tagName == "VIDEO" && attr == "poster") { + return true; + } + + if (tagName == "META" && attr == "content") { + return true; + } + + return false; } //============================================ @@ -138,10 +145,9 @@ var _WBWombat = function($wbwindow, wbinfo) { var HREF_TAGS = ["LINK", "A"]; - var REWRITE_ATTRS = ["src", "href", "poster"]; - var URL_PROPS = ["href", "hash", "pathname", "host", "hostname", "protocol", "origin", "search", "port"]; + //============================================ function rewrite_url_(url, use_rel, mod) { // If undefined, just return it @@ -865,35 +871,6 @@ var _WBWombat = function($wbwindow, wbinfo) { } } - //============================================ - function init_base_override() - { - if (!Object.defineProperty) { - return; - } - - // element .getAttribute() - orig_getAttribute = $wbwindow.HTMLBaseElement.prototype.getAttribute; - - $wbwindow.HTMLBaseElement.prototype.getAttribute = function(name) { - var result = orig_getAttribute.call(this, name); - if (name == "href") { - result = extract_orig(result); - } - return result; - } - - // element .href - var base_href_get = function() { - return this.getAttribute("href"); - }; - - def_prop($wbwindow.HTMLBaseElement.prototype, "href", undefined, base_href_get); - - // Shared baseURI - override_prop_extract($wbwindow.Node.prototype, "baseURI"); - } - //============================================ function override_prop_extract(proto, prop, cond) { var orig_getter = get_orig_getter(proto, prop); @@ -914,10 +891,13 @@ var _WBWombat = function($wbwindow, wbinfo) { //============================================ function override_attr_props() { function is_rw_attr(attr) { - if (attr && equals_any(attr.nodeName, REWRITE_ATTRS)) { - return true; + if (!attr) { + return false; } - return false; + + var tagName = attr.ownerElement && attr.ownerElement.tagName; + + return should_rewrite_attr(tagName, attr.nodeName); } override_prop_extract($wbwindow.Attr.prototype, "nodeValue", is_rw_attr); @@ -941,7 +921,7 @@ var _WBWombat = function($wbwindow, wbinfo) { $wbwindow.Element.prototype.setAttribute = function(name, value) { if (name) { var lowername = name.toLowerCase(); - if (equals_any(lowername, REWRITE_ATTRS) && typeof(value) == "string") { + if (typeof(value) == "string" && should_rewrite_attr(this.tagName, lowername)) { if (!this._no_rewrite) { var old_value = value; @@ -976,7 +956,7 @@ var _WBWombat = function($wbwindow, wbinfo) { $wbwindow.Element.prototype.getAttribute = function(name) { var result = orig_getAttribute.call(this, name); - if (equals_any(name.toLowerCase(), REWRITE_ATTRS)) { + if (should_rewrite_attr(this.tagName, name)) { result = extract_orig(result); } else if (starts_with(name, "data-") && starts_with(result, VALID_PREFIXES)) { result = extract_orig(result); @@ -1480,20 +1460,6 @@ var _WBWombat = function($wbwindow, wbinfo) { } //============================================ -/* function add_attr_overrides(tagName, created) - { - if (!created || created._src != undefined || created._href != undefined) { - return; - } - - if (equals_any(tagName, SRC_TAGS)) { - override_attr(created, "src"); - } else if (equals_any(tagName, HREF_TAGS)) { - override_attr(created, "href"); - } - } -*/ - //============================================ function get_orig_getter(obj, prop) { var orig_getter; @@ -1627,6 +1593,9 @@ var _WBWombat = function($wbwindow, wbinfo) { override_attr($wbwindow.HTMLInputElement.prototype, "src", "oe_"); override_attr($wbwindow.HTMLEmbedElement.prototype, "src", "oe_"); override_attr($wbwindow.HTMLObjectElement.prototype, "data", "oe_"); + + override_attr($wbwindow.HTMLBaseElement.prototype, "href", "mp_"); + override_attr($wbwindow.HTMLMetaElement.prototype, "content", "mp_"); override_anchor_elem(); @@ -2633,6 +2602,9 @@ var _WBWombat = function($wbwindow, wbinfo) { override_prop_extract($wbwindow.Document.prototype, "URL"); override_prop_extract($wbwindow.Document.prototype, "documentURI"); + // Node.baseURI override + override_prop_extract($wbwindow.Node.prototype, "baseURI"); + // Attr nodeValue and value override_attr_props(); @@ -2646,9 +2618,6 @@ var _WBWombat = function($wbwindow, wbinfo) { override_frames_access($wbwindow); - // base override - init_base_override(); - // setAttribute if (!wb_opts.skip_setAttribute) { init_setAttribute_override();