Skip to content

Instantly share code, notes, and snippets.

@Forceflow
Last active March 4, 2023 23:53
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 Forceflow/4d907d9ab3b8564918487cc007c41c5b to your computer and use it in GitHub Desktop.
Save Forceflow/4d907d9ab3b8564918487cc007c41c5b to your computer and use it in GitHub Desktop.
DeWokeIfy
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');
@Forceflow
Copy link
Author

Forceflow commented Apr 21, 2022

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).

@Forceflow
Copy link
Author

Forceflow commented Apr 21, 2022

Suggestie op twitter : goede suggestie, maar maakt scripts met variabelen "woke" kapot. En waarschijnlijk nog andere dingen.

@bgotink
Copy link

bgotink commented Apr 21, 2022

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')

@Forceflow
Copy link
Author

@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!

@Forceflow
Copy link
Author

@bgotink We gaan dit moeten aanpassen om "wokeness" ook te vervangen. Welke code golfer gebruik je?

@bgotink
Copy link

bgotink commented Feb 22, 2023

@Forceflow dit was ambachtelijk met de hand geschreven. Wat willen we gebruiken als vervanging voor "wokeness"?

@Forceflow
Copy link
Author

"een beetje empathie hebben"?

@bgotink
Copy link

bgotink commented Mar 1, 2023

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');

@Forceflow
Copy link
Author

Yer a wizard, @bgotink

@bgotink
Copy link

bgotink commented Mar 4, 2023

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');

@Forceflow
Copy link
Author

Updated :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment