router.user.js

Exalea - Routeur pour le P.D.O.

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.gf.qytechs.cn/scripts/4097/13108/routeruserjs.js

  1. /**
  2. * Prototype d'un routeur (Singleton)
  3. */
  4. {
  5. /**
  6. * Constructeur
  7. *
  8. * @returns {Router} this Instance courante (permet l'utilisation de méthodes chaînées)
  9. * @constructor
  10. *
  11. * @author Exalea
  12. */
  13. var Router = function () {
  14. /**
  15. * Liste des routes disponibles (de type Route)
  16. *
  17. * @type {Route[]}
  18. *
  19. * @author Exalea
  20. */
  21. this.routes = [];
  22. return this;
  23. };
  24.  
  25. /**
  26. * Ajout d'une route de type Route au routeur
  27. *
  28. * @param {Route} route Route à ajouter
  29. *
  30. * @author Exalea
  31. */
  32. Router.prototype.addRoute = function (route) {
  33. if (route instanceof Route) {
  34. this.routes.push(route);
  35. }
  36. };
  37.  
  38. /**
  39. * Ajout d'une route via une expression régulière et une méthode de callback
  40. *
  41. * @param {string} regex Expression régulière de la future route créée
  42. * @param {function} callback Méthode callback de la future route créée
  43. *
  44. * @author Exalea
  45. */
  46. Router.prototype.add = function (regex, callback) {
  47. this.addRoute(new Route(regex, callback));
  48. };
  49.  
  50. /**
  51. * Application de l'ensemble des routes du routeur à une URL selon le principe 'first match, first applied'
  52. *
  53. * @param {string} url L'URL à tester
  54. *
  55. * @author Exalea
  56. */
  57. Router.prototype.apply = function (url) {
  58. loop: for (var key in this.routes) {
  59. var route = this.routes[key];
  60. if (route instanceof Route)
  61. if (route.apply(url)) break loop;
  62. }
  63. };
  64.  
  65. /**
  66. * Implémentation du pattern Singleton
  67. *
  68. * @returns {Router}
  69. */
  70. Router.getInstance = function () {
  71. if (Router.instance == null)
  72. Router.instance = new Router();
  73. return Router.instance;
  74. };
  75.  
  76. /**
  77. * Sucre syntaxique : ajout d'un accès statique aux méthodes du Singleton
  78. */
  79. {
  80. Router.addRoute = function (route) {
  81. return Router.getInstance().addRoute(route);
  82. };
  83.  
  84. Router.add = function (regex, callback) {
  85. return Router.getInstance().add(regex, callback);
  86. };
  87.  
  88. Router.apply = function (url) {
  89. return Router.getInstance().apply(url);
  90. };
  91. }
  92. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址