/** * @license dotJEM Angular Routing * (c) 2012-2014 dotJEM (Jens Melgaard) * License: MIT * * @module angular-routing */ var dotjem;!function(a,b,c,d){"use strict";function e(a,b){return x(new(x(function(){},{prototype:a})),b)}function f(a){return s(a)?a:a.$fullname||a.fullname}function g(a){if(!u(a))return!1;for(var b=Error("Incorrect injection annotation! Expected an array of strings with the last element as a function"),c=0,d=a.length;d>c;c++)if(d-1>c){if(!s(a[c]))throw b}else if(!r(a[c])&&!s(a[c]))throw b;return!0}function h(a){return g(a)||r(a)}function i(a,b,c){var d=y(a||{});return d.$all=y(a||{}),d.$path=y(b||{}),d.$search=y(c||{}),d}function j(a,b){var c=[];return w(a,function(a,b){c.push(k(b,!0)+(a===!0?"":"="+k(a,!0)))}),c.length?b+c.join("&"):""}function k(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,b?"%20":"+")}function l(a){return a.replace(C,"\\$&")}function m(){function a(a){for(var b=0,c=f.length;c>b;b++)if(f[b].name===a)return b;return-1}function b(){return w(f,function(a,b){a.rank=b}),i}function c(a,b){var c=g.hasOwnProperty(a);return g[a]=b,c}function d(b){f.splice(a(b),1)}function e(a,b){return{name:a,stage:b}}var f=[],g={},h={},i=this;this.replace=function(b,c){var d=a(b);if(-1===d)throw new Error("No stages was registered under the name '"+b+"', use insert instead.");return c=e(b,c),f[d]=c,g[b]=c,i},this.append=function(a,g){return g=e(a,g),c(a,g)&&d(a),f.push(g),b()},this.prepend=function(a,g){return g=e(a,g),c(a,g)&&d(a),f.unshift(g),b()},this.insert=function(g,h){return h=e(g,h),{after:function(e){return c(g,h)&&d(g),f.splice(a(e)+1,0,h),b()},before:function(e){return c(g,h)&&d(g),f.splice(a(e),0,h),b()}}},this.error=function(a,b){return h[a]=b,this},this.$get=["$q","$inject",function(a,b){var c={};return c.run=function(c){var d=f.map(function(a){return b.create(a.stage)}),e=a.defer(),g=a.when(c);return w(d,function(a){g=g.then(function(){return c.$error?void 0:a(c)})}),g.then(e.resolve,e.reject),e.promise.catch(function(a){c.$error=a,w(h,function(a){(a=b.create(a))(c)})}),e},c}]}function n(){var a=new RegExp("^(((http|https|ftp)://([\\w-\\d]+\\.)+[\\w-\\d]+){0,1}(/?[\\w~,;\\-\\./?%&+#=]*))$","i");this.$get=["$http","$q","$injector","$templateCache",function(b,c,d,e){function f(a){return b.get(a,{cache:e}).then(function(a){return a.data})}function g(a,b){return c.when(d.invoke(a,a,b))}function h(a,b){if(p(a.url))return f(a.url);if(p(a.fn))return g(a.fn,b);if(p(a.html))return c.when(a.html);throw new Error("Object must define url, fn or html.")}var i=function(b,d){if(s(b))return a.test(b)?f(b):c.when(b);if(r(b)||u(b))return g(b,d);if(t(b))return h(b,d);throw new Error("Template must be either an url as string, function or a object defining either url, fn or html.")},j=function(a,b){return j.fn(a,b)};return j.fn=i,j}]}function o(){this.$get=["$rootScope","$q","$template",function(a,b,c){function d(a){if(q(a))throw new Error("Must define a view name.")}function e(b){a.$broadcast(E.VIEW_UPDATE,b)}function f(b,c){a.$broadcast(E.VIEW_REFRESH,b,c)}function g(b,c){a.$broadcast(E.VIEW_PREP,b,c)}function h(a,b){return b in a&&null!==a[b]}function i(a){return y.completed?(q(a)?w(v,function(a,b){z.clear(b)}):(delete v[a],e(a)),z):y.clear(a)}function j(a,b){var g=b.template,i=b.controller,j=b.locals,l=b.sticky;return d(a),y.completed?(h(v,a)||(v[a]={version:-1}),v[a].template=c(g,j),v[a].controller=i,v[a].locals=j,k(a,l)?f(a,{$locals:j,sticky:l}):(v[a].version++,v[a].sticky=l,e(a)),z):y.update(a,b)}function k(a,b){return p(b)&&s(b)&&a in v&&v[a].sticky===b}function l(a,b){var f=b.template,g=b.controller,i=b.locals,j=b.sticky;return d(a),y.completed?(h(v,a)||(v[a]={template:c(f,i),controller:g,locals:i,sticky:j,version:0},e(a)),z):y.create(a,b)}function m(a){return q(a)?n():o(v[a])}function n(){var a={};return angular.forEach(v,function(b,c){a[c]=o(b)}),a}function o(a){if(null===a||q(a))return a;var b={};return angular.forEach(a,function(a,c){b[c]=a}),b}function r(a,b){return y.completed?(q(a)?w(v,function(a,c){z.refresh(c,b)}):(b=b||{},b.$locals=v[a]&&v[a].locals,f(a,b)),z):y.refresh(a,b)}function t(a,b){var c=a in v,d=k(a,b.args.sticky);switch(b.act){case"clear":return"unload";case"update":return d?"refresh":"update";case"create":return c?"keep":"load";case"refresh":return"refresh"}return"invalid"}function u(){function a(){var a,b={};return a={completed:!1,pending:function(a){if(p(a)){var c=b[a];return{action:t(a,c),args:c.args}}var d={};return w(b,function(a,b){d[b]={action:t(b,a)}}),d},commit:function(){return a.completed?a:(a.completed=!0,w(b,function(a){a.fn()}),b={},a)},cancel:function(){return g(name,{type:"cancel"}),a.completed=!0,a},clear:function(c){return q(c)?(w(v,function(b,c){a.clear(c)}),a):(b[c]={act:"clear",args:{name:c},fn:function(){i(c)}},a)},prepUpdate:function(b,c){return g(b,{type:"update"}),function(d){return c.locals=x({},c.locals,d),a.update(b,c),a}},prepCreate:function(b,c){return g(b,{type:"create"}),function(d){return c.locals=x({},c.locals,d),a.create(b,c),a}},update:function(c,e){return d(c),b[c]={act:"update",args:e,fn:function(){j(c,e)}},a},create:function(c,e){return d(c),h(b,c)&&"clear"!==b[c].act||(b[c]={act:"create",args:e,fn:function(){l(c,e)}}),a},refresh:function(c,d){return q(c)?(w(v,function(b,c){a.refresh(c,d)}),a):(b[c]={act:"refresh",args:{name:c,data:d},fn:function(){r(c,d)}},a)},get:m}}if(!y.completed)throw new Error("Can't start multiple transactions");return y=a()}var v={},y={completed:!0},z={get:m,clear:i,refresh:r,update:j,create:l,beginUpdate:u};return z}]}angular.module("dotjem.routing",[]);var p=angular.isDefined,q=angular.isUndefined,r=angular.isFunction,s=angular.isString,t=angular.isObject,u=angular.isArray,v=function(a){return"boolean"==typeof a},w=angular.forEach,x=angular.extend,y=angular.copy,z=angular.equals,A=(angular.element,angular.noop),B="$root",C=/[-\/\\^$*+?.()|[\]{}]/g,D={routeCannotBeUndefined:"Can not set route to undefined.",valueCouldNotBeMatchedByRegex:"Value could not be matched by the regular expression parameter.",regexConverterNotValid:"The Regular-expression converter was not initialized with a valid object.",invalidNumericValue:"Value was not acceptable for a numeric parameter.",invalidBrowserPathExpression:"Invalid path expression.",expressionOutOfBounds:"Expression out of bounds.",couldNotFindStateForPath:"Could find state for path."},E={LOCATION_CHANGE:"$locationChangeSuccess",ROUTE_UPDATE:"$routeUpdate",ROUTE_CHANGE_START:"$routeChangeStart",ROUTE_CHANGE_SUCCESS:"$routeChangeSuccess",ROUTE_CHANGE_ERROR:"$routeChangeError",STATE_UPDATE:"$stateUpdate",STATE_CHANGE_START:"$stateChangeStart",STATE_CHANGE_SUCCESS:"$stateChangeSuccess",STATE_CHANGE_ERROR:"$stateChangeError",VIEW_UPDATE:"$viewUpdate",VIEW_REFRESH:"$viewRefresh",VIEW_PREP:"$viewPrep"},F=["$locationProvider",function(a){function b(a){var b=null;return function(c,d){return null===b&&(b=a?s(a)?function(b,c){var d=f(a,c.params);b.path(d).search(c.params).replace()}:function(b,c){b.url(a(c.pathParams,b.path(),b.search())).replace()}:A),b(c,d)}}function c(a,b,c){var d;if(c&&(d=c.trim(),"{"===d[0]&&"}"===d[d.length-1]||"["===d[0]&&"]"===d[d.length-1]))try{c=angular.fromJson(d)}catch(e){}return{name:a,converter:function(){return n[b](c)}}}function f(a,b){var d="",e=0;return w(g(a),function(f){var g=function(a){return a.toString()},h=c(f.name,f.converter,f.args).converter(),i=b[f.name];if(q(i))throw Error("Could not find parameter '"+f.name+"' when building url for route '"+a+"', ensure that all required parameters are provided.");!r(h)&&p(h.format)&&(g=h.format),d+=a.slice(e,f.index)+"/"+g(i),e=f.lastIndex,delete b[f.name]}),d+=a.substr(e)}function g(a){var b,c=[];if(null===a)return c;for(;null!==(b=v.exec(a));)c.push({name:b[4]||b[11],catchAll:"*"===(b[3]||b[10]),converter:b[7]||"",args:b[9],index:b.index,lastIndex:v.lastIndex});return c}function h(a){var b="^",d="",e=[],f=0,h="",i={};return null===a?{name:null,params:i}:"/"===a?{exp:new RegExp("^[/]?$",h),segments:[],name:d,params:i}:(w(g(a),function(g,h){var j="";b+=l(a.slice(f,g.index)),b+=g.catchAll?"/(.*)":"/([^\\/?]*)",""!==g.converter&&(j=":"+g.converter),d+=a.slice(f,g.index)+"/$"+h+j,i[g.name]={id:h,converter:g.converter},e.push(c(g.name,g.converter,g.args)),f=g.lastIndex}),b+=l(a.substr(f)),d+=a.substr(f),u||(d=d.toLowerCase(),h+="i"),"/"===b[b.length-1]&&(b=b.substr(0,b.length-1)),{exp:new RegExp(b+"/?([?](.*))?$",h),segments:e,name:d,params:i})}function i(a,b){return null==a?A:function(a){var c,d=a.match(b.exp),e={};return d&&(c=!1,w(b.segments,function(a,b){var f,g,h;c||(f=d[b+1],h=a.converter(),!r(h)&&p(h.parse)&&(h=h.parse),g=h(f),p(g.accept)?(g.accept||(c=!0),e[a.name]=g.value):(g||(c=!0),e[a.name]=f))}),!c)?e:void 0}}var k=this,m={},n={},o={},u=!0;this.convert=function(a,b){return n[a]=b,k},this.when=function(a,c){var d=h(a);return m[d.name]={self:x({reloadOnSearch:!0},c),redirect:b(c.redirectTo),match:i(a,d),params:d.params,path:a},{convert:k.convert,when:k.when,otherwise:k.otherwise,decorate:k.decorate,ignoreCase:k.ignoreCase,matchCase:k.matchCase,$route:{name:d.name,params:y(d.params),route:a,remove:function(){delete m[d.name]}}}},this.otherwise=function(a){return k.when(null,a),k},this.decorate=function(a,b){return o[a]=b,k},this.ignoreCase=function(){return u=!1,k},this.matchCase=function(){return u=!0,k};var v=new RegExp("/((:(\\*?)(\\w+))|(\\{((\\w+)(\\((.*?)\\))?:)?(\\*?)(\\w+)\\}))","g");this.convert("num",function(){return{parse:function(a){var b=!isNaN(a);return{accept:b,value:b?Number(a):0}},format:function(a){if(isNaN(a))throw new Error(D.invalidNumericValue);return a.toString()}}}),this.convert("regex",function(a){var b,c,d="";if(t(a)&&p(a.exp))b=a.exp,p(a.flags)&&(d=a.flags);else{if(!(s(a)&&a.length>0))throw Error(D.regexConverterNotValid);b=a}return c=new RegExp(b,d),{parse:function(a){var b=c.test(a);return{accept:b,value:b?c.exec(a):null}},format:function(a){angular.isArray(a)&&(a=a[0]);var b=a.toString(),d=c.test(b);if(!d)throw Error(D.valueCouldNotBeMatchedByRegex);return b}}}),this.convert("",function(){return function(){return!0}}),this.$get=["$rootScope","$location","$q","$injector","$routeParams","$browser",function(b,c,g,h,i,k){function l(a,b,c){var d=e(a,{self:e(a.self,{params:x({},c,b),searchParams:c,pathParams:b})});return d}function n(a){var b,d;return w(m,function(e){!d&&(b=e.match(a))&&(d=l(e,b,c.search()))}),d||m[null]&&l(m[null],{},{})}function q(){var a=n(c.path()),e=u.$$current,f=u.current,j=a?a.self:d;if(!r&&j&&f&&angular.equals(a.path,e.path)&&angular.equals(j.pathParams,f.pathParams)&&!j.reloadOnSearch)f.params=j.params,f.searchParams=j.searchParams,f.pathParams=j.pathParams,y(j.params,i),b.$broadcast(E.ROUTE_UPDATE,f);else if(a||f){r=!1;var k=b.$broadcast(E.ROUTE_CHANGE_START,j,f);if(!k.defaultPrevented){u.current=j,u.$$current=a,a&&a.redirect(c,j);var l=g.when(j);j&&w(o,function(a){l=l.then(function(){var b=h.invoke(a,j,{$next:j});return g.when(b)})}),l.then(function(){j===u.current&&(a&&angular.copy(j.params,i),b.$broadcast(E.ROUTE_CHANGE_SUCCESS,j,f))},function(a){j===u.current&&b.$broadcast(E.ROUTE_CHANGE_ERROR,j,f,a)})}}}var r=!1,s=g.when(null),u={$waitFor:function(a){return s=a},routes:m,html5Mode:function(){var b=a.html5Mode();return t(b)?b.enabled:b},hashPrefix:function(){return a.hashPrefix()},reload:function(){r=!0,b.$evalAsync(function(){s.then(q)})},change:function(a){var b=a.params||{},d=f(a.route,b),e=c.path(d).search(b);a.replace&&e.replace()},format:function(a,b,c){var d;return b=b||{},c=p(c)?c:!0,d=f(a,b)+j(b,"?"),u.html5Mode()&&c&&(d=(k.baseHref()+d).replace(/\/\//g,"/")),d}};return b.$on(E.LOCATION_CHANGE,function(){s.then(q)}),u}]}];angular.module("dotjem.routing").provider("$route",F).value("$routeParams",{}),angular.module("dotjem.routing").provider("$pipeline",m).config(["$pipelineProvider",function(a){a.append("step0",["$changes","$context","$args",function(a,b,c){b.toState=x({},a.to.self,{$params:c.params})}]),a.append("step1",["$changes","$context","$stateTransition","$state",function(a,b,c,d){b.emit=c.find(d.current,b.toState)}]),a.append("step2",["$changes","$context",function(a,b){var c={};b.transition=c,c.canceled=!1,c.cancel=function(){c.canceled=!0},c.goto=function(a,d){c.cancel(),b.gotofn({state:a,params:{$all:d},updateroute:!0})}}]),a.append("step3",["$changes","$context","$args","$route","$state","$q",function(a,b,c,d,e,f){var g=a.to.route;if(c.updateroute&&g){var h={},i=e.params;w(g.params,function(a,b){b in i&&(h[b]=i[b])});var j=x(h,c.params.$all);return d.change(x({},g,{params:j})),f.reject("Rejected state transition and changed route.")}}]),a.append("step4",["$changes","$context","$state","$q","$rootScope",function(a,b,c,d,e){return a.changed.length<1?(a.paramChanges&&(c.params=b.params,c.current.$params=b.params,e.$broadcast(E.STATE_UPDATE,c.current)),d.reject("Rejected state transition and raised "+E.STATE_UPDATE+".")):void 0}]),a.append("step5",["$changes","$context","$view","$inject","$state",function(a,b,c,d,e){b.prep={};var f=b.transaction=c.beginUpdate();f.clear();var g=a.unchanged.concat(a.activated);w(g,function(c){b.prep[c.name]={},w(c.state.views,function(g,h){var i;p(g.sticky)&&((i=d.create(g.sticky))?g.sticky=i({$to:b.toState,$from:e.current}):s(g.sticky)||(g.sticky=c.name)),b.prep[c.name][h]=c.changed||g.force||p(g.sticky)||a.reloadLeaf&&c.isLeaf?f.prepUpdate(h,g):f.prepCreate(h,g)})})}]),a.append("emitBefore",["$context","$q",function(a,b){return a.emit.before(a.transition,a.transaction).then(function(){return a.transition.canceled?b.reject("Rejected state transition as canceled by user in before handler."):void 0})}]),a.append("step7",["$changes","$context","$rootScope","$state","$q",function(a,b,c,d,e){return c.$broadcast(E.STATE_CHANGE_START,b.toState,d.current).defaultPrevented?e.reject("Rejected state transition as canceled by user in "+E.STATE_CHANGE_START+"."):void 0}]),a.append("updateViews",["$changes","$context","$view","$inject","$state","$q","$resolve",function(a,b,c,d,e,f,g){var h,i=a.unchanged.concat(a.activated),j=f.when(i),k={};return w(i,function(a){j=j.then(function(){return(h=h||a.changed)&&g.clear(a.state.resolve),g.all(a.state.resolve,k,{$to:b.toState,$from:e.current})}).then(function(c){w(b.prep[a.state.fullname],function(a){a(k=x({$to:b.toState,$from:e.current},k,c))}),b.scrollTo=a.state.scrollTo})}),j}]),a.append("emitBetween",["$context","$rootScope","$q","$state",function(a,b,c,d){return a.emit.between(a.transition,a.transaction).then(function(){return a.transition.canceled?(b.$broadcast("$stateChangeAborted",a.toState,d.current),c.reject("Rejected state transition as canceled by user in between handler.")):void 0})}]),a.append("step10",["$changes","$context","$state","$rootScope","$args",function(a,b,c,d,e){var f=c.current;c.params=e.params,c.current=b.toState,b.transaction.commit(),d.$broadcast(E.STATE_CHANGE_SUCCESS,b.toState,f)}]),a.append("step11",["$changes","$context","$scroll",function(a,b,c){return b.transition.canceled?void 0:(b.transition.cancel=function(){throw Error("Can't cancel transition in after handler")},b.emit.after(b.transition,b.transaction).then(function(){c(b.scrollTo)}))}]),a.error("error01",["$changes","$context","$rootScope","$state","$error",function(a,b,c,d,e){c.$broadcast(E.STATE_CHANGE_ERROR,b.toState,d.current,e),b.transaction&&!b.transaction.completed&&b.transaction.cancel()}])}]);var G=["$pipelineProvider",function(a){function b(a){var b={handler:{}};return p(a.to)&&(b.to=a.to),p(a.from)&&(b.from=a.from),p(a.handler)&&(b.handler=a.handler),p(a.before)&&q(b.handler.before)&&(b.handler.before=a.before),p(a.between)&&q(b.handler.between)&&(b.handler.between=a.between),p(a.after)&&q(b.handler.after)&&(b.handler.after=a.after),b}function c(a,b){var c=Q.validateTarget(a),d=Q.validateTarget(b);if(!c||!d){if(c)throw new Error("Invalid transition - to: '"+b+"'.");if(d)throw new Error("Invalid transition - from: '"+a+"'.");throw new Error("Invalid transition - from: '"+a+"', to: '"+b+"'.")}}function d(a){for(var b=e,c=a.split("."),d=c[0]===B?1:0;d "+b,g.targets[b].push(e)}return this},this.pipeline=a,this.$get=["$q","$inject",function(a,b){function c(c,d){function e(e,f,g){var h,i=[];return w(j,function(j){if(p(h=e(j))){var k=b.create(h)({$to:d,$from:c,$transition:f,$view:g});i.push(a.when(k))}}),a.all(i)}var g=i(f(c)),j=h(g,f(d));return{before:function(a,b){return e(function(a){return a.before},a,b)},between:function(a,b){return e(function(a){return a.between},a,b)},after:function(a,b){return e(function(a){return a.after},a,b)}}}function d(a){return a[0]===B&&a.splice(0,1),a}function g(a,b){for(var c,e,f=d(a.split(".")).reverse(),g=d(b.split(".")).reverse();;){if(c=f.pop(),e=g.pop(),"*"===e||"*"===c)return!0;if(c!==e)return!1;if(!p(c)||!p(e))return!0}}function h(a,b){var c=[];return w(a,function(a){w(a.targets,function(a,d){g(d,b)&&w(a,function(a){c.push(a)})})}),c}function i(a){var b=e,c=a.split("."),d=[],f=c[0]===B?1:0;do{if("*"in b.children&&d.push(b.children["*"]),!(c[f]in b.children))break;b=b.children[c[f]],d.push(b)}while(f++a;)a+=c.length;return a=(d+a)%c.length,c[a]},a.prototype.select=function(a,b,c){if("."===b){if(a!==c)throw Error(D.invalidBrowserPathExpression);return c}if(".."===b){if(q(c.parent))throw Error(D.expressionOutOfBounds);return c.parent}if(""===b){if(a!==c)throw Error(D.invalidBrowserPathExpression);return this.root}var d=this.indexRegex.exec(b);if(d){var e=Number(d[1]),f=[];if(w(c.children,function(a){f.push(a)}),Math.abs(e)>=f.length)throw Error(D.expressionOutOfBounds);return 0>e?f[f.length+e]:f[e]}if(b in c.children)return c.children[b];throw Error(D.couldNotFindStateForPath+": "+b)},a}(),O=function(){function a(){}return a.prototype.isSameState=function(a,b){return a===b?!0:q(a)||q(b)?!1:b.name===a.name},a.prototype.isEquals=function(a,b){return this.isSameState(a,b)&&z(b.params,a.params)},a.prototype.path=function(a,b,c,d,e){var f=this.toArray(a,c,!1),g=this.toArray(b,d,!0),h=Math.max(f.length,g.length),i=!z(c.$search,d.$search),j=[],k=[],l=[],m={};e=e||{};for(var n=0;h>n;n++){var o=f[n],q=g[n];if(!this.isEquals(o,q)||q.reloadSearch&&i||e.force===(p(q)&&q.name)){k=k.concat(f.slice(n,f.length)),k.reverse(),l=l.concat(g.slice(n,g.length));break}n===g.length-1&&(q.isLeaf=!0,m.leaf=q,g.length!==f.length&&(m.reloadLeaf=!0)),q.changed=!1,j.push(q)}return m.from=a,m.to=b,m.activated=l,m.deactivated=k,m.unchanged=j,m.changed=k.concat(l),m.paramChanges=!z(c,d),m},a.prototype.toArray=function(a,b,c){var d=[],e=a;do d.push({state:e,name:e.fullname,params:this.extractParams(b,e),active:c,changed:c,reloadSearch:q(e.reloadOnOptional)||e.reloadOnOptional});while(e=e.parent);return d.reverse()},a.prototype.extractParams=function(a,b){var c={};return b.route&&w(b.route.params,function(b,d){c[d]=a[d]}),c},a}(),P=function(){function a(a,b){this.routes=a,this.transitions=b}return a.prototype.createRoute=function(a,b,c,d){var e=(b||"")+"/"+a;return""!==e&&(e=("/"+e).replace(/\/{2,}/g,"/"),"/"===e[e.length-1]&&(e=e.substr(0,e.length-1))),this.routes.when(e,{state:c,reloadOnSearch:d})},a.prototype.createState=function(a,b,c){var d=this,e=a.split(".").pop();p(c)&&(a=c.fullname+"."+e);var f=new M(e,a,b,c);return f.reloadOnOptional=!p(b.reloadOnSearch)||b.reloadOnSearch,p(b.route)&&(f.route=this.createRoute(b.route,c.resolveRoute(),f.fullname,f.reloadOnOptional).$route),p(b.onEnter)&&this.transitions.onEnter(f.fullname,b.onEnter),p(b.onExit)&&this.transitions.onExit(f.fullname,b.onExit),p(b.children)&&w(b.children,function(a,b){f.add(d.createState(f.fullname+"."+b,a,f))}),f},a}(),Q=function(){function a(){}return a.validateName=function(b){if(!a.nameValidation.test(b)||b===B)throw new Error("Invalid name: '"+b+"'.")},a.validateTarget=function(b){return"*"===b||a.targetValidation.test(b)?!0:!1},a.nameValidation=/^\w+(\.\w+)*?$/,a.targetValidation=/^\$?\w+(\.\w+)*(\.[*])?$/,a}(),R=function(){function a(a){this.route=a}return a.prototype.buildUrl=function(a,b,c,d){var e=a;if(!b.route)throw new Error("Can't build url for a state that doesn't have a url defined.");var f={},g=e&&e.$params.$all||{};return w(b.route.params,function(a,b){b in g&&(f[b]=g[b])}),this.route.format(b.route.route,x(f,c||{}),d)},a}(),S=["$state","$compile","$controller","$view","$animate","$template",function(a,b,c,e,f,g){return{restrict:"ECA",terminal:!0,priority:1e3,transclude:"element",compile:function(a,h,i){return function(a,h,j){function k(){p(s)&&(s.remove(),s=d,h.contents().show())}function l(){null!==w&&w.then(function(a){h.contents().hide(),h.append(s=angular.element(a))})}function m(a){o&&(o.$destroy(),o=null),q&&(a?f.leave(q):q.remove(),q=null)}function n(d){var g,j=e.get(t);if(j&&j.template){if(j.version===v)return;v=j.version,g=j.controller,j.template.then(function(e){var k=a.$new();i(k,function(a){m(d),a.html(e),d?f.enter(a,null,h):h.after(a);var i,l=b(a.contents());o=k,q=a,g&&(i=x({},j.locals),i.$scope=o,g=c(g,i),a.data("$ngControllerController",g),a.children().data("$ngControllerController",g)),l(o),o.$emit("$viewContentLoaded"),o.$eval(u)})})}else v=-1,m(d)}var o,q,s,t=j.jemView||j.dxView||j.name,u=j.onload||"",v=-1,w=j.loader&&g(j.loader)||null;a.$on(E.VIEW_UPDATE,function(a,b){b===t&&n(!0)}),a.$on(E.VIEW_REFRESH,function(a,b,c){b===t&&(r(o.refresh)?o.refresh(c):o.$broadcast("$refresh",b,c))}),a.$on("$viewPrep",function(a,b,c){b===t&&"update"===c.type?l():"cancel"===c.type&&k()}),n(!1)}}}}];angular.module("dotjem.routing").directive("jemView",S),angular.module("dotjem.routing").directive("dxView",S);var T=["$scroll","$timeout",function(a,b){return{restrict:"AC",terminal:!1,link:function(c,d,e){function f(a){a===g&&b(function(){d[0].scrollIntoView()},h)}var g=e.jemAnchor||e.dxAnchor||e.id,h=p(e.delay)?Number(e.delay):1;c.$on("$scrollPositionChanged",function(a,b){f(b)}),f(a.$current)}}}];angular.module("dotjem.routing").directive("jemAnchor",T),angular.module("dotjem.routing").directive("dxAnchor",T),angular.module("dotjem.routing").directive("id",T);var U=["$state","$route",function(a,b){return{restrict:"AC",link:function(c,d,e){function f(b,c){var e=a.url(b,c);k||(e=""===e?"#"+l+"/"+e:"#"+l+e),d.attr(m[j],e)}function g(b,c){a.isActive(b,c)?d.addClass(e.activeClass):d.removeClass(e.activeClass)}function h(){c.$apply(function(){var b=c.$eval(e.sref),d=c.$eval(e.params);a.goto(b,d)})}function i(){var a=c.$eval(e.sref),b=c.$eval(e.params);n(a,b),f(a,b)}var j=d[0].tagName.toLowerCase(),k=b.html5Mode(),l=b.hashPrefix(),m={a:"href",form:"action"},n=p(e.activeClass)?g:A,o=c.$on(E.STATE_CHANGE_SUCCESS,i);i(),j in m?(p(e.params)&&c.$watch(e.params,i,!0),e.$observe("sref",i)):d.bind("click",h),c.$on("$destroy",function(){d.unbind("click",h),o()})}}}];angular.module("dotjem.routing").directive("sref",U),angular.module("dotjem.routing").filter("isActiveState",["$state",function(a){function b(b,c){return a.isActive(b,c)}return b.$stateful=!0,b}]),angular.module("dotjem.routing").filter("isCurrentState",["$state",function(a){function b(b,c){return a.is(b,c)}return b.$stateful=!0,b}]),c.State=M,c.StateBrowser=N,c.StateComparer=O,c.StateFactory=P,c.StateRules=Q,c.StateUrlBuilder=R,c.RootName=B}(window,document,dotjem||(dotjem={}));