TamperMonkeyRouter

Router for TamperMonkey scripts

Tento skript by neměl být instalován přímo. Jedná se o knihovnu, kterou by měly jiné skripty využívat pomocí meta příkazu // @require https://update.greatest.deepsurf.us/scripts/468396/1203270/TamperMonkeyRouter.js

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name         TamperMonkeyRouter
// @name:zh-CN   TamperMonkey路由
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Router for TamperMonkey scripts
// @author       HowardZhangdqs
// @grant        none
// @license      WTFPL
// ==/UserScript==

(function () {
    'use strict';

    const Router = class Router {
        // static opt = {
        //     hashchange: false,

        // };

        // constructor(options = {}) {
        //     this.opt = Object.assign(this.opt, options || {});
        // }

        static getParamType(param) {
            const _t = typeof param
            return (_t == "object"
                ? Object.prototype.toString.call(param).slice(8, -1)
                : _t
            ).toLowerCase();
        }

        static is_match(src, input) {
            if (src.length == 0 && input.length == 0) return true;
            if (src[0] == "*" && src.length == 1) return true;
            if (src.length == 0 || input.length == 0) return false;

            if (src[0] == "?")
                return this.is_match(src.substring(1), input.substring(1));
            else
                if (src[0] == "*")
                    return this.is_match(src.substring(1), input) || this.is_match(src.substring(1), input.substring(1)) || this.is_match(src, input.substring(1));
                else
                    if (src[0] == input[0])
                        return this.is_match(src.substring(1), input.substring(1));
                    else return false;
        }

        router(path, callback) {
            const href = window.location.href;
            if (Router.getParamType(path) == "string") {
                if (Router.is_match(path, href)) (() => { callback(); })();
            } else if (Router.getParamType(path) == "regexp") {
                if (path.test(href)) (() => { callback(); })();
            } else {
                throw new Error("Invalid type `" + Router.getParamType(path) + "` of input");
            }
        }

    }

    window.TamperMonkeyRouter = new Router().router;
})();