// ==UserScript== // @name Twitch/Chatango Dyslexia Giver (Scramble Words) // @namespace Twitch/Chatango Dyslexia Giver (Scramble Words) // @description Gives you "dyslexia" on Twitch and HTML5 Chatango. Code from https://geon.github.io/programming/2016/03/03/dsxyliea // @include *//st.chatango.com/* // @include *twitch.tv/* // @version 1.02 // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js // @downloadURL https://update.greasyfork.icu/scripts/17846/TwitchChatango%20Dyslexia%20Giver%20%28Scramble%20Words%29.user.js // @updateURL https://update.greasyfork.icu/scripts/17846/TwitchChatango%20Dyslexia%20Giver%20%28Scramble%20Words%29.meta.js // ==/UserScript== this.$ = this.jQuery = jQuery.noConflict(true); "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($("span")); function isLetter(char) { return /^[\d]$/.test(char); } var wordsInTextNodes = []; console.log(textNodes.length); 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() { var textNodes = getTextNodesIn($("span")); 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; }; 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); });