stuppid_bot

Роутер для юзер-скриптов

Jun 1st, 2013
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // encoding: windows-1251
  2. (function() {  
  3.     function Router() {
  4.         var t = this, routes = [];
  5.        
  6.         t.addRoute = function(rule, cb) {
  7.             if ( ( typeof rule == 'string' || (typeof rule == 'object' && rule.constructor == RegExp) ) && typeof cb == 'function') {
  8.                 routes.push(rule, cb);
  9.             }
  10.         };
  11.        
  12.         t.run = function() {
  13.             var cur, fn;
  14.            
  15.             (fn = function() {
  16.                 if (cur != location.href) {
  17.                     cur = location.href;                  
  18.                     // вызывается каждый раз при изменении местоположения
  19.                     if (typeof t.onLocationChange == 'function') {
  20.                         t.onLocationChange();
  21.                     }                  
  22.                     // обрабатываем маршруты
  23.                     for (var i = 0, l = routes.length, match; i < l; ++i) {
  24.                         if (typeof routes[i] == 'string') {
  25.                             if (routes[i] == location.pathname) {
  26.                                 return routes[++i]();
  27.                             }
  28.                         }
  29.                         else {
  30.                             match = routes[i].exec(location.pathname);
  31.                            
  32.                             if (match) {
  33.                                 return routes[++i].apply( null, match.slice(1) );
  34.                             }
  35.                         }
  36.                        
  37.                         ++i;
  38.                     }                
  39.                     // если маршрут не найден
  40.                     if (typeof t.defaultRoute == 'function') {
  41.                         t.defaultRoute();
  42.                     }
  43.                 }
  44.             })();
  45.            
  46.             setInterval(fn, 40);
  47.         };
  48.     }
  49.    
  50.     var router = new Router;
  51.    
  52.     router.onLocationChange = function() {
  53.         alert('Адрес изменился');
  54.     };
  55.    
  56.     router.defaultRoute = function() {
  57.         alert('Действие по-умолчанию');
  58.     };
  59.    
  60.     router.addRoute('/friends', function() {
  61.         alert('Делаем что-то с друзьями');
  62.     });
  63.    
  64.     router.run();
  65. })();
Advertisement
Add Comment
Please, Sign In to add comment