Fun with Wikipedia.org, appealing for 'Ⓐnarchy!!'' on every 'A'
当前为
// ==UserScript==
// @name Wikipedia Anarchy Hack
// @namespace greasyfork
// @description Fun with Wikipedia.org, appealing for 'Ⓐnarchy!!'' on every 'A'
// @author Noudio
// @license MIT
// @homepage -
// @include http://wikipedia.org/*
// @include https://wikipedia.org/*
// @include http://*.wikipedia.org/*
// @include https://*.wikipedia.org/*
// @include http://wikimedia.org/*
// @include https://wikimedia.org/*
// @include http://*.wikimedia.org/*
// @include https://*.wikimedia.org/*
// @run-at document-idle
// @version 1.2
// ==/UserScript==
(function() {
function isDomain(x) {
return document.domain.substring(document.domain.indexOf(x)) == x;
}
var isPedia = isDomain("wikipedia.org");
var isMedia = isDomain("wikimedia.org");
if (!isPedia && !isMedia)
return;
console.log('anarchy1!');
function doSomething(element) {
exclNr = Math.floor(Math.random()*4.0);
element.nodeValue = element.nodeValue.replace(/A([A-Za-z]*)/g,
function(a,b){
if (b != '') return "Ⓐ"+b+" - Ⓐnarchy"+"!".repeat(exclNr)+" -";
return "Ⓐ";
});
console.log('anarchy el:'+element.nodeValue);
}
function recurse(element)
{
if (element.childNodes.length > 0)
for (var i = 0; i < element.childNodes.length; i++)
recurse(element.childNodes[i]);
// do only something for capital letters A
if (element.nodeType == Node.TEXT_NODE && /A/.test(element.nodeValue))
doSomething(element);
}
var nodeBody = document.body;
recurse(nodeBody);
// observe dom
var observeDOM = (function(){
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
return function( obj, callback ){
if( !obj || obj.nodeType !== 1 ) return;
if( MutationObserver ){
// define a new observer
var mutationObserver = new MutationObserver(callback)
// have the observer observe for changes in children
mutationObserver.observe( obj, { childList:true, subtree:true })
return mutationObserver
}
// browser support fallback
else if( window.addEventListener ){
obj.addEventListener('DOMNodeInserted', callback, false)
obj.addEventListener('DOMNodeRemoved', callback, false)
}
}
})();
// Observe the body element and apply anarchy for added elements:
observeDOM( document.body, function(m){
var addedNodes = [], removedNodes = [];
m.forEach(record => record.addedNodes.length & addedNodes.push(...record.addedNodes))
m.forEach(record => record.removedNodes.length & removedNodes.push(...record.removedNodes))
console.clear();
//console.log('Added:', addedNodes, 'Removed:', removedNodes);
console.log('Added:', addedNodes);
addedNodes.forEach(n => recurse(n));
});
})();
//Taf!