🏠

Greasy Fork is available in English.

router.user.js

Exalea - Routeur pour le P.D.O.

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/4097/13108/routeruserjs.js

提问、发表评价,或者 举报这个脚本
/**
*  Prototype d'un routeur (Singleton)
*/
{
/**
*  Constructeur
*
*  @returns {Router} this Instance courante (permet l'utilisation de méthodes chaînées)
*  @constructor
*
*  @author Exalea
*/
var Router = function () {
/**
*  Liste des routes disponibles (de type Route)
*
*  @type {Route[]}
*
*  @author Exalea
*/
this.routes = [];
return this;
};
/**
*  Ajout d'une route de type Route au routeur
*
*  @param {Route} route Route à ajouter
*
*  @author Exalea
*/
Router.prototype.addRoute = function (route) {
if (route instanceof Route) {
this.routes.push(route);
}
};
/**
*  Ajout d'une route via une expression régulière et une méthode de callback
*
*  @param {string} regex Expression régulière de la future route créée
*  @param {function} callback Méthode callback de la future route créée
*
*  @author Exalea
*/
Router.prototype.add = function (regex, callback) {
this.addRoute(new Route(regex, callback));
};
/**
*  Application de l'ensemble des routes du routeur à une URL selon le principe 'first match, first applied'
*
*  @param {string} url L'URL à tester
*
*  @author Exalea
*/
Router.prototype.apply = function (url) {
loop: for (var key in this.routes) {
var route = this.routes[key];
if (route instanceof Route)
if (route.apply(url)) break loop;
}
};
/**
*  Implémentation du pattern Singleton
*
*  @returns {Router}
*/
Router.getInstance = function () {
if (Router.instance == null)
Router.instance = new Router();
return Router.instance;
};
/**
*  Sucre syntaxique : ajout d'un accès statique aux méthodes du Singleton
*/
{
Router.addRoute = function (route) {
return Router.getInstance().addRoute(route);
};
Router.add = function (regex, callback) {
return Router.getInstance().add(regex, callback);
};
Router.apply = function (url) {
return Router.getInstance().apply(url);
};
}
}