-
Notifications
You must be signed in to change notification settings - Fork 0
/
rou.min.js
12 lines (11 loc) · 5.02 KB
/
rou.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/**
* Rou
*
* Copyright (c) 2013 Filatov Dmitry (dfilatov@yandex-team.ru)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* @version 0.1.5
*/
(function(e){var t=function(){var e={},t=function(t){return e[t]},n=function(n,r,i){var s={exports:{}};i.apply(this,[t,s.exports,s].concat(r.slice(3).map(function(t){return e[t]}))),e["./"+n]=s.exports};return n("matchers/method",["require","exports","module"],function(e,t,n){function r(e){if(!e.method)throw"method matcher: method expected";this._methods=Array.isArray(e.method)?e.method.map(function(e){return e.toLowerCase()}):[e.method.toLowerCase()]}r.prototype={match:function(e){return this._methods.indexOf(e.method?e.method.toLowerCase():"get")>-1}},n.exports=r}),n("matchers/param",["require","exports","module"],function(e,t,n){function r(e){if(!e.name)throw"param matcher: name expected";this._name=e.name,this._cond=e.cond}r.prototype={match:function(e){var t=typeof this._cond;return t==="undefined"?this.match=function(e){return!!e.query[this._name]}:t==="boolean"?this.match=function(e){return this._cond?typeof e.query[this._name]!="undefined":typeof e.query[this._name]=="undefined"}:t==="string"?this.match=function(e){return this._cond===e.query[this._name]}:Array.isArray(this._cond)?this.match=function(e){return this._cond.indexOf(e.query[this._name])>-1}:this._cond instanceof RegExp?this.match=function(e){return this._cond.test(e.query[this._name])}:t==="function"?this.match=function(e){return!!this._cond(e.query[this._name])}:this.match=function(e){return this._cond==e.query[this._name]},this.match(e)}},n.exports=r}),n("matchers/custom",["require","exports","module"],function(e,t,n){function r(e){this._fn=e.fn}r.prototype={match:function(e){return(this.match=this._fn)(e)}},n.exports=r}),n("matcher",["require","exports","module","./matchers/method","./matchers/param","./matchers/custom"],function(e,t,n){var r={method:e("./matchers/method"),param:e("./matchers/param"),custom:e("./matchers/custom")};n.exports=function(e,t){return new r[e](t)}}),n("rule",["require","exports","module","./matcher"],function(e,t,n){function i(e,t){this._router=e,this._matchers=[],this._paramsToMatch=[],t=t.replace(/\{([^}]+)\}/g,function(e,t){return this._paramsToMatch.push(t),"([^/]+)"}.bind(this)),this._pathRE=RegExp("^"+s(t)+"$")}function s(e){var t=e.trim();return t.charAt(0)!=="/"&&(t="/"+t),t.charAt(t.length-1)!=="/"&&(t+="/"),t}var r=e("./matcher");i.prototype={method:function(e){return this._matchers.push(r("method",{method:e})),this},param:function(e,t){return this._matchers.push(r("param",{name:e,cond:t})),this},match:function(e){return this._matchers.push(r("custom",{fn:e})),this},then:function(e,t){return this._router._add(this,e,t)},_match:function(e){var t=this._pathRE.exec(s(e.path));if(!t)return null;e.query=this._mergeParams(t.slice(1),e.query);var n,r=0;while(n=this._matchers[r++])if(!n.match(e))return null;return e},_mergeParams:function(e,t){var n={},r,i=0;while(r=this._paramsToMatch[i])n[r]=e[i++];if(t)for(var s in t)t.hasOwnProperty(s)&&(n[s]=t[s]);return n}},n.exports=i}),n("utils",["require","exports","module"],function(e,t,n){var r=Object.prototype.toString;n.exports={merge:function(){var e={};for(var t=0,n=arguments.length;t<n;t++){var r=arguments[t];if(r)for(var i in r)r.hasOwnProperty(i)&&(e[i]=r[i])}return e}}}),n("router",["require","exports","module","./rule","./utils"],function(e,t,n){var r=e("./rule"),i=e("./utils"),s=function(){this._routes=[],this._rewrites=[],this._fallback=null,this._curRouteArgs=null,this._matchedRewrites=[]};s.prototype={when:function(e){return new r(this,e)},otherwise:function(e,t){return this._fallback={action:e,params:t},this},route:function(e){var t=!!this._curRouteArgs;t||(this._curRouteArgs=arguments),!this._doRewrites(e)&&!this._doRouting(e)&&this._doFallback(e),t||(this._curRouteArgs=null,this._matchedRewrites=[])},_doRewrites:function(e){var t,n,r=0;while(t=this._rewrites[r++])if(this._matchedRewrites.indexOf(t)<0&&(n=t.rule._match(e)))return this._matchedRewrites.push(t),this.route(this._applyRewrite(t,n)),!0;return!1},_doRouting:function(e){var t=e.query,n=!1,r,i,s=0;while(r=this._routes[s++])if(i=r.rule._match(e)){n=!0;if(this._applyRoute(r,i)!==!1)return!0;e.query=t}return n},_applyRewrite:function(e,t){return t.path=e.action.replace(/\{([^}]+)\}/g,function(e,n){var r=t.query[n];if(r)return delete t.query[n],r}),e.params&&(t.query=i.merge(t.query,e.params)),t},_applyRoute:function(e){return e.action.apply(null,this._curRouteArgs)},_add:function(e,t,n){var r={rule:e,action:t,params:n};return typeof t=="string"?this._rewrites.push(r):this._routes.push(r),this},_doFallback:function(e){var t=this._fallback;if(!t)return;typeof t.action=="string"?this._matchedRewrites.indexOf(t)<0&&(this._matchedRewrites.push(t),this.route(this._applyRewrite(t,e))):t.action.apply(null,this._curRouteArgs)}},n.exports=function(){return new s}}),t("./router")}();typeof exports=="object"?module.exports=t:typeof define=="function"?define(function(e,n,r){r.exports=t}):e.Rou=t})(this);