Fixes encoded ampersands on Wayback Machine's captures graph and problems that arise when trailing slashes are missing in an URL
当前为
// ==UserScript==
// @name Wayback Machine Small Bug Fixes
// @namespace DoomTay
// @description Fixes encoded ampersands on Wayback Machine's captures graph and problems that arise when trailing slashes are missing in an URL
// @version 1.1.0
// @include http://web.archive.org/web/*
// @include https://web.archive.org/web/*
// @grant none
// ==/UserScript==
var toolbarNav = document.getElementById("wm-graph-anchor");
var shouldHaveTrailingSlash = window.location.href.lastIndexOf("/") > -1 && window.location.href.lastIndexOf(".") < window.location.href.lastIndexOf("/");
var hasTrailingSlash = window.location.href.lastIndexOf("/") == window.location.href.length - 1;
var pics = document.images;
var links = document.links;
var lastFolder = window.location.href.substring(window.location.href.lastIndexOf("/") + 1);
function fixLink()
{
while(toolbarNav.href.indexOf("&") > -1) toolbarNav.href = toolbarNav.href.replace("&","&");
}
if(toolbarNav) fixLink();
if(shouldHaveTrailingSlash && !hasTrailingSlash)
{
for(var l = 0; l < links.length; l++)
{
//Skip over stuff related to the Wayback Machine toolbar and data URIs
if((document.getElementById("wm-ipp") && document.getElementById("wm-ipp").contains(links[l]))) continue;
if(links[l].hash) continue;
links[l].href = lastFolder + "/" + relativeToAbsolute(links[l].href);
}
for(var i = 0; i < pics.length; i++)
{
//Skip over stuff related to the Wayback Machine toolbar and data URIs
if((document.getElementById("wm-ipp") && document.getElementById("wm-ipp").contains(pics[i])) || pics[i].src.indexOf("data:") > -1) continue;
pics[i].src = lastFolder + "/" + relativeToAbsolute(pics[i].src);
}
}
function relativeToAbsolute(url)
{
return url.substring(url.indexOf(window.location.href) + window.location.href.length - (lastFolder.length - 1));
}
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if(mutation.type == "attributes") fixLink();
});
});
var config = { attributes: true, childList: true, characterData: true, subtree: true, attributeFilter: ["href"] };
observer.observe(toolbarNav, config);