-
-
Save Forceflow/4d907d9ab3b8564918487cc007c41c5b to your computer and use it in GitHub Desktop.
javascript:(function x(d,r,s='ensen met e'+r,i=document.createNodeIterator(d,5),n,e){while(n=i.nextNode()){n.nodeType>1?e?.tagName!='STYLE'&&(n.nodeValue=n.nodeValue.replace(/woke(r?s)?/ig,(m,l)=>l?(m>'Wp'?'m':'M')+s:(m>'Wp'?'e':'E')+r)):(n=(e=n).shadowRoot)&&x(n,r,s)}})(document,'en beetje empathie'); |
Suggestie op twitter : goede suggestie, maar maakt scripts met variabelen "woke" kapot. En waarschijnlijk nog andere dingen.
Versie die
- overweg kan met ShadowDOM (AFAIK niet in gebruik bij de grote media in België, maar dat kan verkeren);
- stylesheets met rust laat, want in tegenstelling tot scripts gaan browsers wél de CSS herevalueren wanneer de textContent in een stylesheet wijzigt (in het oorspronkelijke script laat je styles in de
<head>
met rust, maar eventuele styles in de<body>
hebben het wel vlaggen); - ook de titel van de tab wijzigt; en
- enkel de tekst wijzigt maar bvb. een afbeelding met 'woke' in de URL laat staan (iets dat met
innerHTML
kapot zou zijn cf. twittersuggestie)
N.B. Attributen voor screen readers worden niet mee opgepikt, dus gebruikers daarvan kunnen eindigen met een mix van "woke" en "een beetje empathie".
function replace(documentOrFragment) {
const iterator = document.createNodeIterator(
documentOrFragment,
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,
);
let node;
while ((node = iterator.nextNode())) {
if (node.nodeType === Node.ELEMENT_NODE) {
if (node.shadowRoot) {
replace(node.shadowRoot);
}
} else if (node.parentElement.tagName !== 'STYLE') {
// node must be a text node now due to the filter passed to the iterator
// Note: String.prototype.replaceAll also exists, but using a global
// regex in regular replace is 27% faster in Chrome
node.nodeValue = node.nodeValue
.replace(/Woker?s/g, 'Mensen met een beetje empathie')
.replace(/woker?s/g, 'mensen met een beetje empathie')
.replace(/Woke/g, 'Een beetje empathie')
.replace(/woke/g, 'een beetje empathie');
}
}
}
replace(document);
Lichtjes gegolfd om het script in te korten tot 291 bytes:
(function x(d,r,s='ensen met e'+r,i=document.createNodeIterator(d,5),n,e){while(n=i.nextNode()){n.nodeType>1?e?.tagName!='STYLE'&&(n.nodeValue=n.nodeValue.replace(/woke(r?s)?/ig,(m,l)=>l?(m>'Wp'?'m':'M')+s:(m>'Wp'?'e':'E')+r)):(n=(e=n).shadowRoot)&&x(n,r,s)}})(document,'en beetje empathie')
@bgotink Now this is some Javascript-fu I can get behind. Great job!
Paar keer getest met m'n favoriete woke opiniestukken, works beautifully.
Versie op website vervangen. I'll buy you a 🍺 next time!
@bgotink We gaan dit moeten aanpassen om "wokeness" ook te vervangen. Welke code golfer gebruik je?
@Forceflow dit was ambachtelijk met de hand geschreven. Wat willen we gebruiken als vervanging voor "wokeness"?
"een beetje empathie hebben"?
javascript:(function x(d,r,s='ensen met e'+r,t=r+' hebben',i=document.createNodeIterator(d,5),n,e){while(n=i.nextNode()){n.nodeType>1?e?.tagName!='STYLE'&&(n.nodeValue=n.nodeValue.replace(/woke(?:(ness)?|(r?s)?)/ig,(m,k,l)=>k?(m>'Wp'?'e':'E')+t:l?(m>'Wp'?'m':'M')+s:(m>'Wp'?'e':'E')+r)):(n=(e=n).shadowRoot)&&x(n,r,s)}})(document,'en beetje empathie');
Yer a wizard, @bgotink
Na het lezen van https://www.demorgen.be/politiek/bart-eeckhout-fileert-nieuwe-boek-van-bart-de-wever-over-woke-hier-spreekt-een-politicus-die-het-einde-van-zijn-loopbaan-voelt-naderen~b19dfe37/ voel ik een nood om ook "wokisme" te vervangen
javascript:(function x(d,r,s='ensen met e'+r,t=r+' hebben',i=document.createNodeIterator(d,5),n,e){while(n=i.nextNode()){n.nodeType>1?e?.tagName!='STYLE'&&(n.nodeValue=n.nodeValue.replace(/wok(?:e|(isme|eness)|(er?s))/ig,(m,k,l)=>k?(m>'Wp'?'e':'E')+t:l?(m>'Wp'?'m':'M')+s:(m>'Wp'?'e':'E')+r)):(n=(e=n).shadowRoot)&&x(n,r,s)}})(document,'en beetje empathie');
Updated :)
Voor mensen die willen verbeteren: pas gerust aan, en geef even commentaar. Enige limiet is denk ik de max lengte van URL's in bookmark-velden van browsers (65536 voor Firefox, bvb).