From dc3103496c3863cb2d187a8ac9c2408624586fca Mon Sep 17 00:00:00 2001 From: "Stuart P. Bentley" Date: Mon, 19 Mar 2012 15:27:22 -0700 Subject: [PATCH] Version 2.1 - simplified locking --- leopard.user.js | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/leopard.user.js b/leopard.user.js index 6cc8763..bab26e3 100644 --- a/leopard.user.js +++ b/leopard.user.js @@ -1,13 +1,12 @@ // ==UserScript== // @name s/keyboard/leopard/g -// @version 2.0 +// @version 2.1 // @description Replaces the word "keyboard" with "leopard". // @match *://*/* // @updateURL http://userscripts.org/scripts/source/128626.meta.js // @downloadURL https://userscripts.org/scripts/source/128626.user.js // ==/UserScript== - function leopardize(str) { return str.replace(/keyboard/g,"leopard") .replace(/Keyboard/g,"Leopard") @@ -16,8 +15,14 @@ function leopardize(str) { .replace(/K[Ee][Yy][Bb][Oo][Aa][Rr][Dd]/g,"Leopard") } +var replacingContent = false + function replaceTextContent(node) { + //flag that content is being replaced so the event it generates + //won't trigger another replacement + replacingContent = true node.textContent = leopardize(node.textContent) + replacingContent = false } function changeTextNodes(node) { @@ -35,25 +40,19 @@ function changeTextNodes(node) { } } -var replacement_running - -function lock_safe(f,param) { - if(!replacement_running){ - replacement_running = true - f(param) - replacement_running = false - } -} - function insertion_listener(event) { - lock_safe(changeTextNodes,event.target) + //change any new text nodes in a node that is added to the body + changeTextNodes(event.target) } function cdm_listener(event) { - lock_safe(replaceTextContent,event.target) + //avoid infinite loop by ignoring events triggered by replacement + if(!replacingContent){ + replaceTextContent(event.target) + } } changeTextNodes(document.body) +document.title = leopardize(document.title) document.body.addEventListener ("DOMNodeInserted", insertion_listener, false) document.body.addEventListener ("DOMCharacterDataModified", cdm_listener, false) -document.title = leopardize(document.title)