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

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

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