Skip to content

Instantly share code, notes, and snippets.

@jarpy
Last active June 18, 2018 04:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jarpy/1531c6a83481b43a38136b532137decf to your computer and use it in GitHub Desktop.
Save jarpy/1531c6a83481b43a38136b532137decf to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Replace lots of terms on an AJAX'd page
// @include *
// @grant none
// ==/UserScript==
(function() {
var replaceArry = [
[/([^0-9])[0-9]([^0-9])/g, '$1🎲$2'],
[/^[0-9]$/, '🎲'],
// etc.
];
var numTerms = replaceArry.length;
var transTimer = setInterval (translateTermsOnPage, 1000);
function translateTermsOnPage () {
/*--- Replace text on the page without busting links or javascript
functionality.
*/
var txtWalker = document.createTreeWalker (
document.body,
NodeFilter.SHOW_TEXT, {
acceptNode: function (node) {
if (node.nodeValue.trim() ) {
return NodeFilter.FILTER_ACCEPT;
}
//-- Skip whitespace-only nodes
return NodeFilter.FILTER_SKIP;
}
},
false
);
var txtNode = null;
while (txtNode = txtWalker.nextNode () ) {
txtNode.nodeValue = replaceAllTerms (txtNode.nodeValue);
}
//
//--- Now replace user-visible attributes.
//
var placeholderNodes = document.querySelectorAll ("[placeholder]");
replaceManyAttributeTexts (placeholderNodes, "placeholder");
var titleNodes = document.querySelectorAll ("[title]");
replaceManyAttributeTexts (titleNodes, "title");
}
function replaceAllTerms (oldTxt) {
for (var J = 0; J < numTerms; J++) {
oldTxt = oldTxt.replace (replaceArry[J][0], replaceArry[J][1]);
}
return oldTxt;
}
function replaceManyAttributeTexts (nodeList, attributeName) {
for (var J = nodeList.length - 1; J >= 0; --J) {
var node = nodeList[J];
var oldText = node.getAttribute (attributeName);
if (oldText) {
oldText = replaceAllTerms (oldText);
node.setAttribute (attributeName, oldText);
}
else
throw "attributeName does not match nodeList in replaceManyAttributeTexts";
}
}
translateTermsOnPage();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment