Guest User

Untitled

a guest
Jul 17th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. var dispatcher = {
  2. location: window.location,
  3. stash : [],
  4.  
  5. connect: function(paths, action) {
  6. if (paths || paths === 0) {
  7. paths = paths.valueOf();
  8. if (!(typeof paths == 'object' && !(paths instanceof RegExp))) // webkit: typeof RegExp == 'function'
  9. paths = { pathname: paths };
  10. dispatcher.stash.push([paths, action]);
  11. }
  12. return dispatcher;
  13. },
  14.  
  15. and: function() {
  16. var stash = dispatcher.stash,
  17. length = stash.length;
  18. length && (stash[length - 1][2] = true);
  19. return dispatcher;
  20. },
  21.  
  22. dispatch: function(location) {
  23. location = location || dispatcher.location;
  24. var stash = dispatcher.stash,
  25. params = {};
  26. for (var i = 0, c; c = stash[i]; ++i) {
  27. var paths = c[0], action = c[1], chain = c[2];
  28. var matched = false;
  29. for (var k in paths) {
  30. var v = paths[k];
  31. var path = location[k];
  32. if (!path) {
  33. matched = false;
  34. continue;
  35. }
  36. var m = dispatcher.match(v, path);
  37. matched = !!m;
  38. if (matched) {
  39. params[k] = m;
  40. } else {
  41. break;
  42. }
  43. }
  44. if (matched) {
  45. if (action)
  46. action(params);
  47. if (!chain) break;
  48. }
  49. else if (chain)
  50. break;
  51. }
  52. dispatcher.clear();
  53. return dispatcher;
  54. },
  55.  
  56. match: function(value, path) {
  57. var ret;
  58. if (value instanceof RegExp)
  59. ret = value.exec(path) || false;
  60. else {
  61. value = value.toString();
  62. ret = (path.indexOf(value) != -1) && value;
  63. }
  64. return ret;
  65. },
  66.  
  67. clear: function() {
  68. dispatcher.stash = [];
  69. return dispatcher;
  70. }
  71. };
Add Comment
Please, Sign In to add comment