Last active
November 16, 2016 21:49
-
-
Save pdaian/41e1f164ccd8c2012bbd5c9426a81adf to your computer and use it in GitHub Desktop.
Gina : As @RealDonaldTrump intended it to be spelled
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 Gina - Correct incorrect spellings of Gina | |
// @namespace ginaftw | |
// @description Bend the web to your will to properly spell Gina, as @realDonaldTrump intended. | |
// @include http://* | |
// @include https://* | |
// @include file://* | |
// @exclude http://userscripts.org/scripts/review/* | |
// @exclude http://userscripts.org/scripts/edit/* | |
// @exclude http://userscripts.org/scripts/edit_src/* | |
// @exclude https://userscripts.org/scripts/review/* | |
// @exclude https://userscripts.org/scripts/edit/* | |
// @exclude https://userscripts.org/scripts/edit_src/* | |
// @copyright JoeSimmons, modified by Philip Daian | |
// @version 1.0 | |
// @license http://creativecommons.org/licenses/by-nc-nd/3.0/us/ | |
// @grant none | |
// ==/UserScript== | |
(function () { | |
'use strict'; | |
/* | |
NOTE: | |
You can use \\* to match actual asterisks instead of using it as a wildcard! | |
The examples below show a wildcard in use and a regular asterisk replacement. | |
*/ | |
var words = { | |
/////////////////////////////////////////////////////// | |
// Syntax: 'Search word' : 'Replace word', | |
'China' : 'Gina', | |
'china' : 'gina', | |
/////////////////////////////////////////////////////// | |
'':''}; | |
////////////////////////////////////////////////////////////////////////////// | |
// This is where the real code is | |
// Don't edit below this | |
////////////////////////////////////////////////////////////////////////////// | |
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