// ==UserScript== // @name Dyslexic Experience // @namespace http://geon.github.io/programming/2016/03/03/dsxyliea // @version 1.0 // @description Read like someone with Dyslexia. Experience it yourself. // @author You // @match http://tampermonkey.net/index.php?version=3.12.58&ext=dhdg&updated=true // @grant none //* I exported this code directly from "http://geon.github.io/programming/2016/03/03/dsxyliea" The reason I exported this code and uploaded it here is so others, such as //* yourself can (somewhat) experience what it is like to have dyslexia in your own point of view while browsing your favorite sites. *// // @downloadURL https://update.greasyfork.icu/scripts/17845/Dyslexic%20Experience.user.js // @updateURL https://update.greasyfork.icu/scripts/17845/Dyslexic%20Experience.meta.js // ==/UserScript== /* jshint -W097 */ 'use strict'; "use strict"; $(function(){ var getTextNodesIn = function(el) { return $(el).find(":not(iframe,script)").addBack().contents().filter(function() { return this.nodeType == 3; }); }; // var textNodes = getTextNodesIn($("p, h1, h2, h3")); var textNodes = getTextNodesIn($("*")); function isLetter(char) { return /^[\d]$/.test(char); } var wordsInTextNodes = []; for (var i = 0; i < textNodes.length; i++) { var node = textNodes[i]; var words = [] var re = /\w+/g; var match; while ((match = re.exec(node.nodeValue)) != null) { var word = match[0]; var position = match.index; words.push({ length: word.length, position: position }); } wordsInTextNodes[i] = words; }; function messUpWords () { for (var i = 0; i < textNodes.length; i++) { var node = textNodes[i]; for (var j = 0; j < wordsInTextNodes[i].length; j++) { // Only change a tenth of the words each round. if (Math.random() > 1/10) { continue; } var wordMeta = wordsInTextNodes[i][j]; var word = node.nodeValue.slice(wordMeta.position, wordMeta.position + wordMeta.length); var before = node.nodeValue.slice(0, wordMeta.position); var after = node.nodeValue.slice(wordMeta.position + wordMeta.length); node.nodeValue = before + messUpWord(word) + after; }; }; } function messUpWord (word) { if (word.length < 3) { return word; } return word[0] + messUpMessyPart(word.slice(1, -1)) + word[word.length - 1]; } function messUpMessyPart (messyPart) { if (messyPart.length < 2) { return messyPart; } var a, b; while (!(a < b)) { a = getRandomInt(0, messyPart.length - 1); b = getRandomInt(0, messyPart.length - 1); } return messyPart.slice(0, a) + messyPart[b] + messyPart.slice(a+1, b) + messyPart[a] + messyPart.slice(b+1); } // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } setInterval(messUpWords, 50); });