Created
July 16, 2016 03:10
-
-
Save hyperreality/2b6255a59ca02388a691d405ca4849af to your computer and use it in GitHub Desktop.
Greasemonkey script to uncensor the Something Awful forums
This file contains 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 Something Awful Unfilter | |
// @namespace http://localhost | |
// @description Uncensor Something Awful forums for unregistered guests | |
// @include http://*somethingawful.com/* | |
// @include https://*somethingawful.com/* | |
// @version 1 | |
// @grant none | |
// ==/UserScript== | |
(function () { | |
'use strict'; | |
var words = { | |
'poo poo':'shit', | |
'loving':'fucking', | |
'gently caress':'fuck', | |
'hosed':'fucked', | |
'loving':'fucking', | |
'surprise sex':'rape', | |
'making GBS threads':'shitting', | |
'drat':'damn' | |
}; | |
var regexs = [], replacements = [], | |
tagsWhitelist = ['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