Something Awful Forums - Uncensor

By Tesiph Last update Nov 1, 2007 — Installed 249 times.
// ==UserScript==
// @name          Something Awful Forums - Uncensor
// @namespace     none
// @description   Uncensor the Somethin Awful forums when not logged in.
// @include       http://forums.somethingawful.com/*
// ==/UserScript==

/* Inspired by http://userscripts.org/scripts/show/9350 by dweezil-n0xad
 * Based on a script in Mark Pilgram's "Dive into Greasemonkey"
 */ 

var replacements, regex, key, textnodes, node, s;

replacements = {
	"rear end in a top hat": "asshole",
	"rear end": "ass",
	"lovely": "fucked",
	"loving": "fucking",
	"poo poo": "shit",
	"gently caress": "fuck",
	"making GBS threads": "shitting",
	"stinkyhole": "cunt",
	"drat": "damn",
	"surprise sex": "rape"
};

regex = {};
regex_upper = {};
replacements_upper = {};

for (key in replacements) {
    regex[key] = new RegExp(key, 'g');
    regex_upper[key] = new RegExp('(^|[A-Z] |[^\\w\\s][ ]?)'+key+'(?= [A-Z]|[^\\w\\s]|$)', 'g');
    replacements_upper[key] = '$1' + replacements[key].toUpperCase();
}

textnodes = document.evaluate(
    "//text()",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

for (var i = 0; i < textnodes.snapshotLength; i++) {
    node = textnodes.snapshotItem(i);
    s = node.data;
    for (key in replacements) {
	s = s.replace(regex_upper[key], replacements_upper[key]);
	s = s.replace(regex[key], replacements[key]);
    }
    node.data = s;
}