- // ==UserScript==
- // @name Wayback Machine - toolbar toggler
- // @name:fr Wayback Machine - (dé)masquer la barre d'outils
- // @namespace https://github.com/Procyon-b
- // @version 0.8
- // @description A way to toggle the WaybackMachine's toolbar
- // @description:fr Une méthode pour masquer/afficher la barre d'outils de WaybackMachine (web.archive.org)
- // @author Achernar
- // @match *://web.archive.org/web/*
- // @grant none
- // @run-at document-start
- // @noframes
- // ==/UserScript==
-
- (function() {
- "use strict";
-
- function addStyle(e,s) {
- if (!e) return;
- var st=document.createElement("style");
- st.textContent=s;
- e.appendChild(st);
- }
-
- function fix(ev) {
- var TO, st, sts = document.getElementsByTagName('style');
- addStyle( (document.head || document.documentElement), '#wm-ipp-base {opacity:0; min-height:1px;position:absolute;} #wm-ipp-base:hover {opacity: 1;} #wm-ipp-base.forcePriority {oposition:relative; z-index:99999;} body > #wm-ipp-print, body> #donato {display: none;}');
-
- // remove this style if present
- for (st of sts) {
- try{
- if (st.innerText.search('.wb-autocomplete-suggestions')+1) {
- st.innerText='';
- break;
- }
- }catch(e){}
- }
-
- // remove all added styles
- var wbSt, del=[];
- for (let el of document.body.childNodes) {
- if (el.nodeType==8) {
- if (!wbSt && (el.data==' BEGIN WAYBACK TOOLBAR INSERT ')) wbSt=true;
- else if (wbSt && (el.data==' END WAYBACK TOOLBAR INSERT ')) {
- for (let i=0; i<del.length; i++) del[i].parentNode.removeChild(del[i]);
- break;
- }
- continue;
- }
- if (!wbSt) continue;
- if (el.nodeName=='STYLE') del.push(el);
- }
-
- // remove archive.org stylesheets
- sts=document.querySelectorAll('link[rel=stylesheet]');
- for (st of sts) {
- if (st.href.startsWith('https://web.archive.org/_static/') && !(st.href.search('/iconochive.css')+1) ) {
- st.parentNode.removeChild(st);
- }
- }
-
- // change "close" icon color
- if (!sr) sr=e.sr;
- if (sr) {
- let s='#wm-tb-close .iconochive-remove-circle {color: #26d926 !important;}';
- try{ addStyle(sr, s);
- }catch(er){
- let st=document.createElement('style');
- st.textContent=s;
- sr.appendChild(st);
- }
- }
-
- this.removeEventListener('dblclick', fix);
- document.body.addEventListener('keydown',function(ev){
- force=ev.altKey && ev.ctrlKey;
- if (force && !forceState) {
- e.classList.add('forcePriority');
- forceState=force;
- if (TO) clearTimeout(TO);
- TO=setTimeout(function(){
- e.classList.remove('forcePriority');
- forceState=false;
- TO=0;
- },3000);
-
- if (sr) {
- let e = sr.querySelector('[style*="display: none;"]')
- if (e) e.style.display='';
- }
- }
- });
- }
-
- var e=document.getElementById('wm-ipp-base'), initCnt=100, sr, TO, force=false, forceState=false;
-
- var obs = new MutationObserver(function(mutL) {
- for (let mut of mutL) {
- let e=mut.addedNodes[0];
- if (e && (e.id=='wm-ipp-base')) {
- if (TO) clearTimeout(TO);
- obs.disconnect();
- init();
- }
- }
- });
- //obs.observe(document.documentElement, {attributes: false, subtree: true, childList: true });
-
- function init() {
- e=document.getElementById('wm-ipp-base');
- if (!e) {
- if (--initCnt > 0) TO=setTimeout(init, 50);
- else if (initCnt > -5) TO=setTimeout(init, 3000);
- return;
- }
- obs.disconnect();
-
- e.addEventListener('dblclick', fix);
- let ne=e.nextElementSibling;
- if (ne && (ne.id=='donato')) ne.parentNode.removeChild(ne);
- }
- //init();
-
- // catch attachShadow
- var s=document.createElement('script');
- s.textContent=`(function(){
- var options={attributes: false, subtree: true, childList: true };
- var obs = new MutationObserver(function(mutL) {
- for (let mut of mutL) {
- let e=mut.addedNodes[0];
- if (e && (e.id=='wm-ipp-base')) {
- var oldAS=e.attachShadow;
- e.attachShadow=function(m){
- e.sr=oldAS.call(e,m);
- return e.sr;
- }
- obs.disconnect();
- }
- }
- });
- obs.observe(document.documentElement, options);
- })()`;
-
- var injected=0;
- function inject() {
- if (injected++) return;
-
- var sc=document.documentElement.insertBefore(s,document.head);
- sc.parentNode.removeChild(sc);
- }
-
- var started=0;
- function start() {
- if (started++) return;
- inject();
- init();
- obs.observe(document.documentElement, {attributes: false, subtree: true, childList: true });
- }
-
- tryUntil(inject, 0);
- tryUntil(function(){
- obs.observe(document.documentElement, {attributes: false, subtree: true, childList: true });
- }, 0);
-
- function tryUntil(F, TO=150, c=-1, fail) {
- if (!c--) {
- fail && fail();
- return;
- }
- try{F();}catch(e){setTimeout(function(){tryUntil(F,TO,c,fail);}, TO)}
- }
-
- if (document.readyState != 'loading') start();
- else {
- document.addEventListener('DOMContentLoaded', start);
- window.addEventListener('load', start);
- }
-
-
- })();