eltomjan / KDD

// ==UserScript==
// @name         KDD
// @namespace    https://github.com/eltomjan
// @namespace    https://openuserjs.org/users/eltomjan
// @version      1
// @copyright    2019, El Tom Elzein
// @licence      MIT
// @description  KDD improvement 4 real blind users...
// @author       El Tom Elzein
// @include      *kdd.cz*
// @grant        none
// ==/UserScript==

// ==OpenUserJS==
// @author eltomjan
// ==/OpenUserJS==

(function() {
    'use strict';
    if(location.host.indexOf(".kdd.cz") < 0) return;
    var pages = "?page=uzivatel|?page=moje-novinky-tyden|?page=moje-novinky-login|?base-search|?url=|?page=vyhledavani".split('|')
    var found = -1;
    for(var i=0;i<pages.length;i++) if(location.search.startsWith(pages[i])) found = i;
    if(location.search.startsWith('?')) {
        if(found != -1) {
            var links = '<a href="index.php?url=kniha&count-per-page=30&page=moje-novinky-tyden">Nové knihy týden</a>'
            + ' <a href="index.php?url=kniha&count-per-page=30&page=moje-novinky-login" accesskey="m">Nové knihy přihlášení</a>'
            + ' <a href="index.php?page=odhlaseni" accesskey="x">Odhlášení</a>'
            var spn = document.createElement("SPAN");
            spn.innerHTML = links;
            document.cookie = "no-css=1";
            document.body.insertBefore(spn, document.body.firstChild);
            if(found === 0) return;
        }
    }
    if(found < 1) return;
    var tab = document.getElementsByTagName("TABLE");
    if (tab.length) {
        //document.getElementById("menu").style.display="none";
        //document.getElementById("left-clmn").style.display="none";
        var row = tab[0].rows;
        for(var r=1;r<row.length;r++) {
            var col = row[r].cells;
            for(var c=0;c<col.length;c++) {
                if(col[c].firstChild && col[c].firstChild.nodeName == "#text") {
                    var short = col[c].innerText.replace(/'/g," apostrof ");
                    if(short.length > 1000) short = "kontrol á kontrol cé " + short.substr(0,900);
                    col[c].innerHTML = "<textarea title='"+row[0].cells[c].innerText +" "
                        + short
                        +"' rows=20 cols=40>"
                        + col[c].innerText
                        + "</textarea>";
                }
            }
        }
        document.onkeydown = function(e)
        {
            var pg = " PageUp PageDown".indexOf(e.code);
            if(pg > 0) {
                if(null !== document.getElementsByTagName("INPUT")[0].form) return;
                var buttonsNo = 1 + !document.getElementsByTagName("INPUT")[1].form;
                var page = document.getElementsByName("stranka")[0];
                if(pg == 1) {
                    //if(buttonsNo > 1 || document.getElementsByTagName("INPUT")[0].outerHTML.indexOf("stranka=1") < 0) {
                    if(page && page.value != "0") {
                        document.getElementsByTagName("INPUT")[0].onclick();
                    }
                } else {
                    //if(buttonsNo == 1 && document.getElementsByTagName("INPUT")[0].outerHTML.indexOf("stranka=1") < 0) return;
                    if(!page || document.getElementsByTagName("INPUT")[buttonsNo-1].outerHTML.indexOf("stranka="+ (page.value*1+1)) > 0) {
                        document.getElementsByTagName("INPUT")[buttonsNo-1].onclick();
                    }
                }
                return;
            }
            var el = e.rangeParent;
            if(!el) el = e.originalTarget;
            if(!el) return;
            while(el && el.tagName != "TD") el = el.parentElement;
            if(!el) {
                if(!e.code.startsWith("Arrow")) return;
                var tab = document.getElementsByTagName("TABLE");
                if (tab.length) el = tab[0].rows[1].cells[0]; else return;
            }
            var ci = el.cellIndex;
            while(el && el.tagName != "TR") el = el.parentElement;
            var ri = el.rowIndex;
            if(e.code == "ArrowLeft") {
                if(ci > 0) ci--; else return;
            } else if(e.code == "ArrowRight") {
                ci++;
            } else if(e.code == "ArrowDown") {
                ri++;
            } else if(e.code == "ArrowUp") {
                if(ri > 1) ri--; else return;
            }
            do {
                while(el && el.tagName != "TABLE") el = el.parentElement;
                if(el.rows.length > ri) el = el.rows[ri]; else return;
                if(el.cells.length > ci) el = el.cells[ci]; else return;
                if(el) {
                    if(el.firstChild) {
                        while(el.firstChild && el.firstChild.nodeName != "#text") el = el.firstChild;
                        if(el) el.focus();
                    } else {
                        if(e.code == "ArrowLeft") {
                            if(ci > 0) {
                                ci--;
                                continue;
                            } else return;
                        } else if(e.code == "ArrowRight") {
                            ci++;
                            continue;
                        }
                    }
                } return;
            } while(true);
        };
        document.onkeydown({"rangeParent":row[1].cells[0], "code":""});
    }
})();