Last active
December 28, 2019 15:06
-
-
Save zakx/017a91636ddca785cd7bfed52f7a9ab5 to your computer and use it in GitHub Desktop.
Userscript to remove "at scale" from websites
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name drop "at scale" | |
// @namespace http://tampermonkey.net/ | |
// @version 0.1 | |
// @description try to take over the world! | |
// @author zakx | |
// @match http://*/* | |
// @match https://*/* | |
// @grant none | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
var words = { | |
' at scale': '', | |
'at scale': '', | |
/////////////////////////////////////////////////////// | |
'': '' | |
}; | |
var regexs = [], | |
replacements = [], | |
tagsWhitelist = ['PRE', 'BLOCKQUOTE', 'CODE', 'INPUT', 'BUTTON', 'TEXTAREA'], | |
rIsRegexp = /^\/(.+)\/([gim]+)?$/, | |
word, text, texts, i, userRegexp; | |
// prepareRegex by JoeSimmons | |
// used to take a string and ready it for use in new RegExp() | |
function prepareRegex (string) { | |
return string.replace (/([\[\]\^\&\$\.\(\)\?\/\\\+\{\}\|])/g, '\\$1'); | |
} | |
// function to decide whether a parent tag will have its text replaced or not | |
function isTagOk (tag) { | |
return tagsWhitelist.indexOf (tag) === -1; | |
} | |
delete words['']; // so the user can add each entry ending with a comma, | |
// I put an extra empty key/value pair in the object. | |
// so we need to remove it before continuing | |
// convert the 'words' JSON object to an Array | |
for (word in words) { | |
if (typeof word === 'string' && words.hasOwnProperty (word) ) { | |
userRegexp = word.match (rIsRegexp); | |
// add the search/needle/query | |
if (userRegexp) { | |
regexs.push ( | |
new RegExp (userRegexp[1], 'g') | |
); | |
} | |
else { | |
regexs.push ( | |
new RegExp (prepareRegex (word) | |
.replace (/\\?\*/g, function (fullMatch) { | |
return fullMatch === '\\*' ? '*' : '[^ ]*'; | |
} ), | |
'g' | |
) | |
); | |
} | |
// add the replacement | |
replacements.push(words[word]); | |
} | |
} | |
// do the replacement | |
texts = document.evaluate ('//body//text()[ normalize-space(.) != "" ]', document, null, 6, null); | |
for (i = 0; text = texts.snapshotItem (i); i += 1) { | |
if (isTagOk (text.parentNode.tagName) ) { | |
regexs.forEach (function (value, index) { | |
text.data = text.data.replace (value, replacements[index]); | |
} ); | |
} | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment