Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var dispatcher = {
- dispatchees: [],
- connect: function (pattern, action, options) {
- dispatcher.dispatchees.push({
- pattern: pattern,
- action: action,
- options: options || {}
- });
- return dispatcher;
- },
- match: function (pattern, data) {
- if (pattern instanceof RegExp) {
- return pattern.exec(data.pathname);
- }
- return false;
- },
- dispatch: function (info, options) {
- var data = (typeof info == 'object' && 'pathname' in info) ? info : { pathname: info.toString() };
- var length = dispatcher.dispatchees.length;
- for (var i = 0; i < length; i++) {
- var dispatchee = dispatcher.dispatchees[i];
- var matches = dispatcher.match(dispatchee.pattern, data);
- if ( matches ) {
- if ( dispatchee.options.onMatchedToPath &&
- typeof dispatchee.options.onMatchedToPath == 'function' ) {
- to_process = dispatchee.options.onMatchedToPath.apply(dispatchee, [data, options]);
- if (!to_process) continue;
- }
- if (dispatchee.action && typeof dispatchee.action == 'function') {
- var to_chain = dispatchee.action.apply(dispatchee, [data, matches, options || {}, i]);
- if (!to_chain) return {
- dispatchee: dispatchee,
- matches: matches,
- data: data
- };
- continue;
- }
- return true;
- }
- }
- return false;
- }
- };
Add Comment
Please, Sign In to add comment