thorio/KGrabber

View on GitHub
src/js/ui/widget.js

Summary

Maintainability
A
0 mins
Test Coverage
const shared = require("./shared"),
    html = require("../html"),
    config = require("../config"),
    util = require("../util"),
    log = util.log,
    page = require("./page"),
    start = require("../start"),
    preferencesUI = require("./preferences");

exports.show = () => {
    inject();
    load();
    setServer(config.preferenceManager.getPreferredServer(page.location.hostname));
    let noCaptchaServer = config.sites.current().noCaptchaServer;
    if (noCaptchaServer != null) {
        markAvailableServers(util.last(page.episodeList()), noCaptchaServer);
    }
};

function inject() {
    $(`#rightside .rightBox:eq(0)`).after(html.widget);
    config.sites.current().applyPatch("widget");
}

function load() {
    let epCount = page.episodeCount();

    $("#KG-input-to").val(epCount)
        .attr("max", epCount);
    $("#KG-input-from").attr("max", epCount);
    for (let server of config.sites.current().servers) {
        $(`<option value="${server.identifier}">${server.name}</>`)
            .appendTo("#KG-widget-server");
    }
    setHandlers();
    shared.applyColors();
}

function setHandlers() {
    $("#KG-input-from, #KG-input-to").on("keydown", (e) => {
        if (e.keyCode == 13) {
            $("#KG-input-start").click();
        }
    });
    $("#KG-widget-server").change(() => {
        config.preferenceManager.setPreferredServer(page.location.hostname, getServer());
    });
    $(".KG-preferences-button").click(() => {
        preferencesUI.show();
    });
    $("#KG-input-start").click(() => {
        start(getStartEpisode(), getEndEpisode(), getServer());
    });
}

//grays out servers that aren't available on the latest episode
async function markAvailableServers(url, server) {
    let servers = [];
    let html = await $.get(`${url}&s=${server}`);
    $(html).find("#selectServer").children().each((i, obj) => {
        servers.push(obj.value.match(/s=\w+/g)[0].slice(2, Infinity));
    });
    if (servers.length == 0) {
        log.warn("no servers found");
    }

    $("#KG-widget-server option").each((i, obj) => {
        if (servers.indexOf(obj.value) < 0) {
            $(obj).css("color", "#888");
        }
    });
}

let setServer = (server) =>
    $("#KG-widget-server").val(server);

let getServer = exports.getServer = () =>
    $("#KG-widget-server").val();

let getStartEpisode = () =>
    $('#KG-input-from').val() - 1;

let getEndEpisode = () =>
    $('#KG-input-to').val() - 1;