EH mpv - Keyboard Page Navigation

Jump between pages with keyboard shortcut

目前为 2019-02-06 提交的版本。查看 最新版本

// ==UserScript==
// @name         EH mpv - Keyboard Page Navigation
// @namespace    http://fabulous.cupcake.jp.net/
// @version      20190206.1
// @description  Jump between pages with keyboard shortcut
// @author       FabulousCupcake
// @match        https://exhentai.org/mpv/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

const DEBUG = false;

const key = {
    LETTER_W:    87,
    LETTER_A:    65,
    LETTER_S:    83,
    LETTER_D:    68,
    ARROW_LEFT:  37,
    ARROW_UP:    38,
    ARROW_RIGHT: 39,
    ARROW_DOWN:  40,
}

function dlog(msg) {
    if (!DEBUG) return;
    console.log(`EHmpv-KPN: ${msg}`);
}

const getCurrentPageNum = () => {
    const paneCoords = document.querySelector("#pane_images").getBoundingClientRect();
    const x = paneCoords.x + (paneCoords.width / 2)
    const y = paneCoords.y;

    const currentElement = document.elementFromPoint(x,y);
    const currentId = currentElement.id.match(/_(\d+)/)[1];

    dlog(`Currently on page ${currentId}`);
    return parseInt(currentId);
}

const jumpToPage = num => {
    const jumpTarget = document.querySelector(`a[name="page${num}"]`);

    if (!jumpTarget) return;

    jumpTarget.scrollIntoView();
    dlog(`Jumping to page ${num}`);
}

const jumpForward = () => jumpToPage(getCurrentPageNum() + 1);
const jumpBack = () => jumpToPage(getCurrentPageNum() - 1);

const insertKeyBinds = () => {
    window.addEventListener('keydown', e => {
        const code = e.which || e.charCode || e.keyCode;

        switch(code) {
        case key.ARROW_LEFT:
        case key.ARROW_UP:
        case key.LETTER_W:
        case key.LETTER_A:
            jumpBack();
            break;

        case key.ARROW_RIGHT:
        case key.ARROW_DOWN:
        case key.LETTER_S:
        case key.LETTER_D:
            jumpForward();
            break;

        default:
            return;
        }

        e.preventDefault();
    });
}

insertKeyBinds();