Twitch/Chatango Dyslexia Giver (Scramble Words)

Gives you "dyslexia" on Twitch and HTML5 Chatango. Code from https://geon.github.io/programming/2016/03/03/dsxyliea

// ==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
// ==/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);
});