<commit_before>define([
    '/api/config?cb=' + Math.random().toString(16).substring(2),
    '/common/realtime-input.js',
    '/common/messages.js',
    '/common/crypto.js',
    '/common/marked.js',
    '/common/convert.js',
    '/bower_components/jquery/dist/jquery.min.js',
    '/customize/pad.js'
], function (Config, Realtime, Messages, Crypto, Marked, Convert) { 
    var $ = jQuery;

    var Vdom = Convert.core.vdom,
        Hyperjson = Convert.core.hyperjson,
        Hyperscript = Convert.core.hyperscript;

    window.Vdom = Vdom;
    window.Hyperjson = Hyperjson;
    window.Hyperscript = Hyperscript;
    
    $(window).on('hashchange', function() {
        window.location.reload();
    });
    if (window.location.href.indexOf('#') === -1) {
        window.location.href = window.location.href + '#' + Crypto.genKey();
        return;
    }

    var key = Crypto.parseKey(window.location.hash.substring(1));

    var $textarea = $('textarea'),
        $target = $('#target');

    var stripScripts = function (md) {
        return md.replace(/<[\s\S]*?script[\s\S]*?>[\s\S]*?<\/script[\s\S]*?>/ig, "");
    };

    window.$textarea = $textarea;

    // set markdwon rendering options
    Marked.setOptions({
        sanitize: true
    });

    window.draw = (function () {
        var target = $target[0],
            inner = $target.find('#inner')[0];

        if (!target) { throw new Error(); }

        var Previous = Convert.dom.to.vdom(inner);
        return function (md) {
            // strip scripts or people get xss
            var rendered = stripScripts(Marked(md||""));
            // make a dom
            var R = $('<div id="inner">'+rendered+'</div>')[0];
            var New = Convert.dom.to.vdom(R);
            var patches = Vdom.diff(Previous, New);
            Vdom.patch(inner, patches);
            Previous = New;
            return patches;
        };
    }());

    window.colour = (function () {
        var r = 0.6,
            n = 24,
            i = 0,
            t = [],
            rgb = [0,2,4];

        while(i<n)t.push(i++);

        var colours = t.map(function (c, I) {
            return '#'+ rgb.map(function (j) {
                var x = ((Math.sin(r*(I+22)+j)*127+128) *0x01<<0)
                    .toString(16);
                return x.length<2?"0"+x:x;
            }).join("");
        });

        var J = 0;
        return function () {
            var j = J++;
            if (colours[j]) {
                return colours[j];
            }
            J = 0;
            return colours[0];
        };
    }());

    var redrawTimeout;

    var $inner = $('#inner');

    window.makeRainbow = false
    var makeRainbows = function () {
        $inner
            .find('*:not(.untouched)')
            .css({
                'border': '5px solid '+colour(),
                margin: '5px'
            })
            .addClass('untouched');
    };

    var lazyDraw = function (md) {
        redrawTimeout && clearTimeout(redrawTimeout);
        redrawTimeout = setTimeout(function () {
            draw(md);
            makeRainbow && makeRainbows();
        }, 450);
    };

    var rts = $textarea.toArray().map(function (e, i) {
        var rt = Realtime.start(e, // window
            Config.websocketURL, // websocketUrl
            Crypto.rand64(8), // userName
            key.channel, // channel
            key.cryptKey,
            null,
            function (){
                lazyDraw($textarea.val());
            }); // cryptKey
        return rt;
    })[0];

    //rts.onEvent
    window.rts = rts;

    $textarea.on('change keyup keydown', function () {
        redrawTimeout && clearTimeout(redrawTimeout);
        redrawTimeout = setTimeout(function () {
            lazyDraw($textarea.val());
        }, 500);
    });
});<commit_msg>remove unused functions from render/main.js<commit_after>define([
    '/api/config?cb=' + Math.random().toString(16).substring(2),
    '/common/realtime-input.js',
    '/common/messages.js',
    '/common/crypto.js',
    '/common/marked.js',
    '/common/convert.js',
    '/bower_components/jquery/dist/jquery.min.js',
    '/customize/pad.js'
], function (Config, Realtime, Messages, Crypto, Marked, Convert) { 
    var $ = jQuery;

    var Vdom = Convert.core.vdom,
        Hyperjson = Convert.core.hyperjson,
        Hyperscript = Convert.core.hyperscript;

    window.Vdom = Vdom;
    window.Hyperjson = Hyperjson;
    window.Hyperscript = Hyperscript;
    
    $(window).on('hashchange', function() {
        window.location.reload();
    });
    if (window.location.href.indexOf('#') === -1) {
        window.location.href = window.location.href + '#' + Crypto.genKey();
        return;
    }

    var key = Crypto.parseKey(window.location.hash.substring(1));

    var $textarea = $('textarea'),
        $target = $('#target');

    window.$textarea = $textarea;

    // set markdown rendering options :: strip html to prevent XSS
    Marked.setOptions({
        sanitize: true
    });

    window.draw = (function () {
        var target = $target[0],
            inner = $target.find('#inner')[0];

        if (!target) { throw new Error(); }

        var Previous = Convert.dom.to.vdom(inner);
        return function (md) {
            var rendered = Marked(md||"");
            // make a dom
            var R = $('<div id="inner">'+rendered+'</div>')[0];
            var New = Convert.dom.to.vdom(R);
            var patches = Vdom.diff(Previous, New);
            Vdom.patch(inner, patches);
            Previous = New;
            return patches;
        };
    }());

    window.colour = (function () {
        var r = 0.6,
            n = 24,
            i = 0,
            t = [],
            rgb = [0,2,4];

        while(i<n)t.push(i++);

        var colours = t.map(function (c, I) {
            return '#'+ rgb.map(function (j) {
                var x = ((Math.sin(r*(I+22)+j)*127+128) *0x01<<0)
                    .toString(16);
                return x.length<2?"0"+x:x;
            }).join("");
        });

        var J = 0;
        return function () {
            var j = J++;
            if (colours[j]) {
                return colours[j];
            }
            J = 0;
            return colours[0];
        };
    }());

    var $inner = $('#inner');

    window.makeRainbow = false
    var makeRainbows = function () {
        $inner
            .find('*:not(.untouched)')
            .css({
                'border': '5px solid '+colour(),
                margin: '5px'
            })
            .addClass('untouched');
    };

    var redrawTimeout;
    var lazyDraw = function (md) {
        redrawTimeout && clearTimeout(redrawTimeout);
        redrawTimeout = setTimeout(function () {
            draw(md);
            makeRainbow && makeRainbows();
        }, 450);
    };

    var rts = $textarea.toArray().map(function (e, i) {
        var rt = Realtime.start(e, // window
            Config.websocketURL, // websocketUrl
            Crypto.rand64(8), // userName
            key.channel, // channel
            key.cryptKey, // cryptkey
            null, // docBody
            function (){ // onChange received
                lazyDraw($textarea.val());
            });
        return rt;
    })[0];

    window.rts = rts;

    $textarea.on('change keyup keydown', function () {
        redrawTimeout && clearTimeout(redrawTimeout);
        redrawTimeout = setTimeout(function () {
            lazyDraw($textarea.val());
        }, 500);
    });
});
{'fraction_non_alphanumeric': 0.16345001996539332, 'fraction_numerical': 0.012511646479435645, 'mean_word_length': 1.6912607449856734, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '764590', 'n_tokens_mistral': 2392, 'n_tokens_neox': 2237, 'n_words': 449}