Komica: F5

Scroll to top while you press F5.

// ==UserScript==
// @name         Komica: F5
// @version      1.0.6
// @description  Scroll to top while you press F5.
// @author       Hayao-Gai
// @namespace	 https://github.com/HayaoGai
// @icon         https://i.imgur.com/ltLDPGc.jpg
// @include      http://*.komica.org/*/*
// @include      https://*.komica.org/*/*
// @grant        none
// ==/UserScript==

/* jshint esversion: 6 */

(function() {
    'use strict';

    const red = `<svg width="45" height="45" viewBox="0 0 128 128"><g transform="translate(0,128) scale(0.1,-0.1)" fill="#800000" stroke="none"><path d="M482 1260 c-113 -30 -206 -84 -293 -170 -336 -335 -203 -899 251 -1060 89 -31 248 -38 345 -16 121 29 209 79 305 176 129 129 190 269 190 441 0 113 -16 184 -67 289 -131 271 -441 416 -731 340z m261 -155 c91 -19 160 -58 234 -131 277 -273 124 -740 -265 -806 -310 -53 -595 232 -543 544 34 204 181 356 386 398 61 12 114 11 188 -5z"/><path d="M463 817 c-125 -125 -143 -147 -143 -175 0 -43 38 -82 80 -82 25 0 45 13 96 62 l64 61 0 -157 c0 -153 1 -157 25 -181 15 -16 36 -25 55 -25 19 0 40 9 55 25 24 23 25 28 25 175 0 82 3 150 7 150 3 0 32 -25 64 -55 45 -43 65 -55 89 -55 42 0 80 39 80 82 0 28 -18 50 -143 175 -128 128 -146 143 -177 143 -31 0 -49 -15 -177 -143z"/></g></svg>`;
    const white = `<svg width="45" height="45" viewBox="0 0 128 128"><g transform="translate(0,128) scale(0.1,-0.1)" fill="white" stroke="none"><path d="M482 1260 c-113 -30 -206 -84 -293 -170 -336 -335 -203 -899 251 -1060 89 -31 248 -38 345 -16 121 29 209 79 305 176 129 129 190 269 190 441 0 113 -16 184 -67 289 -131 271 -441 416 -731 340z m261 -155 c91 -19 160 -58 234 -131 277 -273 124 -740 -265 -806 -310 -53 -595 232 -543 544 34 204 181 356 386 398 61 12 114 11 188 -5z"/><path d="M463 817 c-125 -125 -143 -147 -143 -175 0 -43 38 -82 80 -82 25 0 45 13 96 62 l64 61 0 -157 c0 -153 1 -157 25 -181 15 -16 36 -25 55 -25 19 0 40 9 55 25 24 23 25 28 25 175 0 82 3 150 7 150 3 0 32 -25 64 -55 45 -43 65 -55 89 -55 42 0 80 39 80 82 0 28 -18 50 -143 175 -128 128 -146 143 -177 143 -31 0 -49 -15 -177 -143z"/></g></svg>`;
    let ctrl, r;

    defineCSS();

    window.addEventListener("load", () => {
        arrowButton();
        detectTheme();
        keyListener();
    });

    function arrowButton() {
        const div = document.createElement("div");
        div.classList.add("arrow");
        div.innerHTML = isDark() ? white : red;
        div.addEventListener("click", () => {
            goTop();
            location.reload();
        });
        document.body.appendChild(div);
    }

    function detectTheme() {
        const select = document.querySelector("select#theme-selector");
        select.addEventListener("change", () => {
            const color1 = window.getComputedStyle(document.querySelector("html")).getPropertyValue("background-color");
            for (let i = 0; i < 10; i++) {
                setTimeout(() => {
                    const color2 = window.getComputedStyle(document.querySelector("html")).getPropertyValue("background-color");
                    if (color1 !== color2) {
                        i = 6;
                        const div = document.querySelector("div.arrow");
                        div.innerHTML = isDark() ? white : red;
                    }
                }, 100 * i);
            }
        });
    }

    function isDark() {
        return !!document.querySelector("select#theme-selector").value;
    }

    function keyListener() {
        document.addEventListener("keydown", e => {
            if (e.keyCode === 116) goTop();
            if (e.keyCode === 17) ctrl = true;
            else if (e.keyCode === 82) r = true;
            if (ctrl && r) goTop();
        });
        document.addEventListener("keyup", e => {
            if (e.keyCode === 17) ctrl = false;
            else if (e.keyCode === 82) r = false;
        });
    }

    function goTop() {
        window.scrollTo(0, 0);
    }

    function defineCSS() {
        const style = document.createElement("style");
        style.type = "text/css";
        style.innerHTML =
            `.arrow {
                 position: fixed;
                 right: 50px;
                 bottom: 30px;
                 cursor: pointer;
             }`;
        document.head.appendChild(style);
    }

})();