acenturyandabit / Github_show_top_entries

// ==UserScript==
// @name         Github_show_top_entries
// @version      1.0
// @description  Show or hide repositories on github dashboard.
// @copyright    2019, Steven Liu (no.website.yet)
// @license      MIT
// @author       acenturyandabit
// @match        https://github.com
// @grant        none
// ==/UserScript==

(function () {
    // add a hidden item
    let hidden = document.createElement("div");
    hidden.innerHTML = `<p style="cursor:pointer; user-select:none">Show hidden items</p><ul style="list-style:none"></ul>`;
    hidden.children[1].style.display = "none";
    hidden.children[0].addEventListener("click", (e) => {
        if (hidden.children[1].style.display == "block") {
            hidden.children[1].style.display = "none";
        } else {
            hidden.children[1].style.display = "block"
        }
    })
    document.querySelector(".dashboard-sidebar.js-sticky").appendChild(hidden);
    //refresh when 'show more' clicked
    document.querySelector("button[type='submit']").addEventListener("click", () => {
        setTimeout(refresh, 10000);
    })

    //event handler for eye clicks in main container
    document.querySelector(".js-repos-container").addEventListener("click", (e) => {
        if (e.target.matches("span.hide")) {
            let id = e.target.parentElement.querySelector("a[href]").href;
            let unwanted = JSON.parse(localStorage.getItem("unwanted"));
            if (!unwanted) unwanted = {};
            unwanted[id] = true;
            localStorage.setItem("unwanted", JSON.stringify(unwanted));
            refresh();
        }
    })

    //event handler for eye clicks in hidden area
    hidden.addEventListener("click", (e) => {
        if (e.target.matches("span.hide")) {
            let id = e.target.parentElement.querySelector("a[href]").href;
            let unwanted = JSON.parse(localStorage.getItem("unwanted"));
            if (!unwanted) unwanted = {};
            unwanted[id] = false;
            //move back to rightful place
            document.querySelector("ul[data-filterable-for='dashboard-repos-filter-left']").appendChild(e.target.parentElement.parentElement);
            localStorage.setItem("unwanted", JSON.stringify(unwanted));
            refresh();
        }
    })

    function refresh() {
        let unwanted = JSON.parse(localStorage.getItem("unwanted"));
        if (!unwanted) unwanted = {};
        let visible = document.querySelectorAll("ul[data-filterable-for='dashboard-repos-filter-left'] li");
        for (let i = 0; i < visible.length; i++) {
            //add hide button, if not already there
            if (!visible[i].querySelector("span.hide")) {
                let span = document.createElement("span");
                span.classList.add("hide");
                span.innerHTML = "&#128065;";
                let ti = visible[i].children[0];
                ti.style.display = "inline-block";
                ti.insertBefore(span, ti.children[0]);
                span.appendChild(ti.children[1])
            }
            let id = visible[i].querySelector("a[href]").href;
            if (unwanted[id]) {
                hidden.children[1].appendChild(visible[i]);
            }
        }
    }
    refresh();

})();