vue-router
Advanced tools
Comparing version 0.7.7 to 0.7.8
/*! | ||
* vue-router v0.7.7 | ||
* (c) 2015 Evan You | ||
* vue-router v0.7.8 | ||
* (c) 2016 Evan You | ||
* Released under the MIT License. | ||
*/ | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueRouter=e()}(this,function(){"use strict";function t(t,e,n){this.path=t,this.matcher=e,this.delegate=n}function e(t){this.routes={},this.children={},this.target=t}function n(e,r,o){return function(i,a){var s=e+i;return a?void a(n(s,r,o)):new t(e+i,r,o)}}function r(t,e,n){for(var r=0,o=0,i=t.length;i>o;o++)r+=t[o].path.length;e=e.substr(r);var a={path:e,handler:n};t.push(a)}function o(t,e,n,i){var a=e.routes;for(var s in a)if(a.hasOwnProperty(s)){var h=t.slice();r(h,s,a[s]),e.children[s]?o(h,e.children[s],n,i):n.call(i,h)}}function i(t,r){var i=new e;t(n("",i,this.delegate)),o([],i,function(t){r?r(this,t):this.add(t)},this)}function a(t){return"[object Array]"===Object.prototype.toString.call(t)}function s(t){this.string=t}function h(t){this.name=t}function c(t){this.name=t}function u(){}function l(t,e,n){"/"===t.charAt(0)&&(t=t.substr(1));var r=t.split("/"),o=[];n.val="";for(var i=0,a=r.length;a>i;i++){var l,p=r[i];(l=p.match(/^:([^\/]+)$/))?(o.push(new h(l[1])),e.push(l[1]),n.val+="3"):(l=p.match(/^\*([^\/]+)$/))?(o.push(new c(l[1])),n.val+="2",e.push(l[1])):""===p?(o.push(new u),n.val+="1"):(o.push(new s(p)),n.val+="4")}return n.val=+n.val,o}function p(t){this.charSpec=t,this.nextStates=[]}function f(t){return t.sort(function(t,e){return e.specificity.val-t.specificity.val})}function d(t,e){for(var n=[],r=0,o=t.length;o>r;r++){var i=t[r];n=n.concat(i.match(e))}return n}function v(t){this.queryParams=t||{}}function g(t,e,n){for(var r=t.handlers,o=t.regex,i=e.match(o),a=1,s=new v(n),h=0,c=r.length;c>h;h++){for(var u=r[h],l=u.names,p={},f=0,d=l.length;d>f;f++)p[l[f]]=i[a++];s.push({handler:u.handler,params:p,isDynamic:!!l.length})}return s}function y(t,e){return e.eachChar(function(e){t=t.put(e)}),t}function m(t){return t=t.replace(/\+/gm,"%20"),decodeURIComponent(t)}function _(t){window.console&&(console.warn("[vue-router] "+t),(!N.Vue||N.Vue.config.debug)&&console.warn(new Error("warning stack trace:").stack))}function w(t,e,n){var r=t.match(/(\?.*)$/);if(r&&(r=r[1],t=t.slice(0,-r.length)),"?"===e.charAt(0))return t+e;var o=t.split("/");n&&o[o.length-1]||o.pop();for(var i=e.replace(/^\//,"").split("/"),a=0;a<i.length;a++){var s=i[a];"."!==s&&(".."===s?o.pop():o.push(s))}return""!==o[0]&&o.unshift(""),o.join("/")}function b(t){return t&&"function"==typeof t.then}function C(t,e){var n=t&&(t.$options||t.options);return n&&n.route&&n.route[e]}function R(t,e){U?U.$options.components._=t.component:U={resolve:N.Vue.prototype._resolveComponent,$options:{components:{_:t.component}}},U.resolve("_",function(n){t.component=n,e(n)})}function x(t,e,n){return void 0===e&&(e={}),t=t.replace(/:([^\/]+)/g,function(n,r){var o=e[r];return o||_('param "'+r+'" not found when generating path for "'+t+'" with params '+JSON.stringify(e)),o||""}),n&&(t+=I(n)),t}function $(t,e,n){var r=t.childVM;if(!r||!e)return!1;if(t.Component!==e.component)return!1;var o=C(r,"canReuse");return"boolean"==typeof o?o:o?o.call(r,{to:n.to,from:n.from}):!0}function A(t,e,n){var r=t.childVM,o=C(r,"canDeactivate");o?e.callHook(o,r,n,{expectBoolean:!0}):n()}function E(t,e,n){R(t,function(t){if(!e.aborted){var r=C(t,"canActivate");r?e.callHook(r,null,n,{expectBoolean:!0}):n()}})}function k(t,e,n){var r=t.childVM,o=C(r,"deactivate");o?e.callHooks(o,r,n):n()}function S(t,e,n,r,o){var i=e.activateQueue[n];if(!i)return t._bound&&t.setComponent(null),void(r&&r());var a=t.Component=i.component,s=C(a,"activate"),h=C(a,"data"),c=C(a,"waitForData");t.depth=n,t.activated=!1;var u=void 0,l=!(!h||c);if(o=o&&t.childVM&&t.childVM.constructor===a)u=t.childVM,u.$loadingRouteData=l;else{if(t.unbuild(!0),t.keepAlive){var p=e.router._views,f=p.indexOf(t);f>0&&(e.router._views=p.slice(f),t.childVM&&(t.childVM._routerViews=p.slice(0,f)))}if(u=t.build({_meta:{$loadingRouteData:l}}),t.keepAlive){u.$loadingRouteData=l;var d=u._routerViews;d&&(e.router._views=d.concat(e.router._views),t.childView=d[d.length-1],u._routerViews=null)}}var v=function(){u.$destroy()},g=function(){if(o)return void(r&&r());var n=e.router;n._rendered||n._transitionOnLoad?t.transition(u):(t.setCurrent?t.setCurrent(u):t.childVM=u,u.$before(t.anchor,null,!1)),r&&r()},y=function(){t.activated=!0,t.childView&&S(t.childView,e,n+1,null,o||t.keepAlive),h&&c?V(u,e,h,g,v):(h&&V(u,e,h),g())};s?e.callHooks(s,u,y,{cleanup:v}):y()}function P(t,e){var n=t.childVM,r=C(n,"data");r&&V(n,e,r)}function V(t,e,n,r,o){t.$loadingRouteData=!0,e.callHooks(n,t,function(e,n){Array.isArray(e)&&e._needMerge&&(e=e.reduce(function(t,e){return O(e)&&Object.keys(e).forEach(function(n){t[n]=e[n]}),t},Object.create(null)));var o=[];O(e)&&Object.keys(e).forEach(function(n){var r=e[n];b(r)?o.push(r.then(function(e){t.$set(n,e)})):t.$set(n,r)}),o.length?o[0].constructor.all(o).then(function(e){t.$loadingRouteData=!1,r&&r()},n):(t.$loadingRouteData=!1,r&&r())},{cleanup:o,expectData:!0})}function O(t){return"[object Object]"===Object.prototype.toString.call(t)}function T(t){return"[object Object]"===Object.prototype.toString.call(t)}function j(t){var e=t.util,n=t.prototype._init;t.prototype._init=function(t){var r=t._parent||t.parent||this,o=r.$route;o&&(o.router._children.push(this),this.$route||(this._defineMeta?this._defineMeta("$route",o):e.defineReactive(this,"$route",o))),n.call(this,t)};var r=t.prototype._destroy;t.prototype._destroy=function(){if(!this._isBeingDestroyed){var t=this.$root.$route;t&&t.router._children.$remove(this),r.apply(this,arguments)}};var o=t.config.optionMergeStrategies,i=/^(data|activate|deactivate)$/;o&&(o.route=function(t,n){if(!n)return t;if(!t)return n;var r={};e.extend(r,t);for(var o in n){var a=r[o],s=n[o];a&&i.test(o)?r[o]=(e.isArray(a)?a:[a]).concat(s):r[o]=s}return r})}function H(t){var e=t.util,n=t.directive("_component")||t.internalDirectives.component,r=e.extend({},n);e.extend(r,{_isRouterView:!0,bind:function(){var t=this.vm.$route;if(!t)return void _("<router-view> can only be used inside a router-enabled app.");this._isDynamicLiteral=!0,n.bind.call(this);var e=this.router=t.router;e._views.unshift(this);var r=e._views[1];r&&(r.childView=this);var o=t.router._currentTransition;if(!r&&o.done||r&&r.activated){var i=r?r.depth+1:0;S(this,o,i)}},unbind:function(){this.router._views.$remove(this),n.unbind.call(this)}}),t.elementDirective("router-view",r)}function q(t){function e(t){return t.protocol===location.protocol&&t.hostname===location.hostname&&t.port===location.port}var n=t.util;t.directive("link",{bind:function(){var t=this,r=this.vm;if(!r.$route)return void _("v-link can only be used inside a router-enabled app.");if("A"!==this.el.tagName||"_blank"!==this.el.getAttribute("target")){var o=r.$route.router;this.handler=function(n){if(!(n.metaKey||n.ctrlKey||n.shiftKey||n.defaultPrevented||0!==n.button)){var r=t.target,i=function(t){n.preventDefault(),null!=t&&o.go(t)};if("A"===t.el.tagName||n.target===t.el)i(r);else{for(var a=n.target;a&&"A"!==a.tagName&&a!==t.el;)a=a.parentNode;if(!a)return;"A"===a.tagName&&a.href?e(a)&&i({path:a.pathname,replace:r&&r.replace,append:r&&r.append}):i(r)}}},this.el.addEventListener("click",this.handler),this.unwatch=r.$watch("$route.path",n.bind(this.updateClasses,this))}},update:function(t){var e=this.vm.$route.router,r=void 0;this.target=t,n.isObject(t)&&(r=t.append,this.exact=t.exact,this.prevActiveClass=this.activeClass,this.activeClass=t.activeClass),t=this.path=e._stringifyPath(t),this.activeRE=t&&!this.exact?new RegExp("^"+t.replace(/\/$/,"").replace(tt,"\\$&")+"(\\/|$)"):null,this.updateClasses(this.vm.$route.path);var o="/"===t.charAt(0),i=t&&("hash"===e.mode||o)?e.history.formatPath(t,r):t;"A"===this.el.tagName&&(i?this.el.href=i:this.el.removeAttribute("href"))},updateClasses:function(t){var e=this.el,r=this.vm.$route.router,o=this.activeClass||r._linkActiveClass;this.prevActiveClass!==o&&n.removeClass(e,this.prevActiveClass);var i=this.path.replace(et,"");t=t.replace(et,""),this.exact?i===t||"/"!==i.charAt(i.length-1)&&i===t.replace(Z,"")?n.addClass(e,o):n.removeClass(e,o):this.activeRE&&this.activeRE.test(t)?n.addClass(e,o):n.removeClass(e,o)},unbind:function(){this.el.removeEventListener("click",this.handler),this.unwatch&&this.unwatch()}})}function Q(t,e){var n=e.component;rt.util.isPlainObject(n)&&(n=e.component=rt.extend(n)),"function"!=typeof n&&(e.component=null,_('invalid component for route "'+t+'".'))}var D={};D.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.prototype={to:function(t,e){var n=this.delegate;if(n&&n.willAddRoute&&(t=n.willAddRoute(this.matcher.target,t)),this.matcher.add(this.path,t),e){if(0===e.length)throw new Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,t,e,this.delegate)}return this}},e.prototype={add:function(t,e){this.routes[t]=e},addChild:function(t,r,o,i){var a=new e(r);this.children[t]=a;var s=n(t,a,i);i&&i.contextEntered&&i.contextEntered(r,s),o(s)}};var M=["/",".","*","+","?","|","(",")","[","]","{","}","\\"],z=new RegExp("(\\"+M.join("|\\")+")","g");s.prototype={eachChar:function(t){for(var e,n=this.string,r=0,o=n.length;o>r;r++)e=n.charAt(r),t({validChars:e})},regex:function(){return this.string.replace(z,"\\$1")},generate:function(){return this.string}},h.prototype={eachChar:function(t){t({invalidChars:"/",repeat:!0})},regex:function(){return"([^/]+)"},generate:function(t){return t[this.name]}},c.prototype={eachChar:function(t){t({invalidChars:"",repeat:!0})},regex:function(){return"(.+)"},generate:function(t){return t[this.name]}},u.prototype={eachChar:function(){},regex:function(){return""},generate:function(){return""}},p.prototype={get:function(t){for(var e=this.nextStates,n=0,r=e.length;r>n;n++){var o=e[n],i=o.charSpec.validChars===t.validChars;if(i=i&&o.charSpec.invalidChars===t.invalidChars)return o}},put:function(t){var e;return(e=this.get(t))?e:(e=new p(t),this.nextStates.push(e),t.repeat&&e.nextStates.push(e),e)},match:function(t){for(var e,n,r,o=this.nextStates,i=[],a=0,s=o.length;s>a;a++)e=o[a],n=e.charSpec,"undefined"!=typeof(r=n.validChars)?-1!==r.indexOf(t)&&i.push(e):"undefined"!=typeof(r=n.invalidChars)&&-1===r.indexOf(t)&&i.push(e);return i}};var F=Object.create||function(t){function e(){}return e.prototype=t,new e};v.prototype=F({splice:Array.prototype.splice,slice:Array.prototype.slice,push:Array.prototype.push,length:0,queryParams:null});var L=function(){this.rootState=new p,this.names={}};L.prototype={add:function(t,e){for(var n,r=this.rootState,o="^",i={},a=[],s=[],h=!0,c=0,p=t.length;p>c;c++){var f=t[c],d=[],v=l(f.path,d,i);s=s.concat(v);for(var g=0,m=v.length;m>g;g++){var _=v[g];_ instanceof u||(h=!1,r=r.put({validChars:"/"}),o+="/",r=y(r,_),o+=_.regex())}var w={handler:f.handler,names:d};a.push(w)}h&&(r=r.put({validChars:"/"}),o+="/"),r.handlers=a,r.regex=new RegExp(o+"$"),r.specificity=i,(n=e&&e.as)&&(this.names[n]={segments:s,handlers:a})},handlersFor:function(t){var e=this.names[t],n=[];if(!e)throw new Error("There is no route named "+t);for(var r=0,o=e.handlers.length;o>r;r++)n.push(e.handlers[r]);return n},hasRoute:function(t){return!!this.names[t]},generate:function(t,e){var n=this.names[t],r="";if(!n)throw new Error("There is no route named "+t);for(var o=n.segments,i=0,a=o.length;a>i;i++){var s=o[i];s instanceof u||(r+="/",r+=s.generate(e))}return"/"!==r.charAt(0)&&(r="/"+r),e&&e.queryParams&&(r+=this.generateQueryString(e.queryParams)),r},generateQueryString:function(t){var e=[],n=[];for(var r in t)t.hasOwnProperty(r)&&n.push(r);n.sort();for(var o=0,i=n.length;i>o;o++){r=n[o];var s=t[r];if(null!=s){var h=encodeURIComponent(r);if(a(s))for(var c=0,u=s.length;u>c;c++){var l=r+"[]="+encodeURIComponent(s[c]);e.push(l)}else h+="="+encodeURIComponent(s),e.push(h)}}return 0===e.length?"":"?"+e.join("&")},parseQueryString:function(t){for(var e=t.split("&"),n={},r=0;r<e.length;r++){var o,i=e[r].split("="),a=m(i[0]),s=a.length,h=!1;1===i.length?o="true":(s>2&&"[]"===a.slice(s-2)&&(h=!0,a=a.slice(0,s-2),n[a]||(n[a]=[])),o=i[1]?m(i[1]):""),h?n[a].push(o):n[a]=o}return n},recognize:function(t){var e,n,r,o,i=[this.rootState],a={},s=!1;if(o=t.indexOf("?"),-1!==o){var h=t.substr(o+1,t.length);t=t.substr(0,o),a=this.parseQueryString(h)}for(t=decodeURI(t),"/"!==t.charAt(0)&&(t="/"+t),e=t.length,e>1&&"/"===t.charAt(e-1)&&(t=t.substr(0,e-1),s=!0),n=0,r=t.length;r>n&&(i=d(i,t.charAt(n)),i.length);n++);var c=[];for(n=0,r=i.length;r>n;n++)i[n].handlers&&c.push(i[n]);i=f(c);var u=c[0];return u&&u.handlers?(s&&"(.+)$"===u.regex.source.slice(-5)&&(t+="/"),g(u,t,a)):void 0}},L.prototype.map=i,L.VERSION="0.1.9";var I=L.prototype.generateQueryString,N={},U=void 0,B=/#.*$/,G=function(){function t(e){var n=e.root,r=e.onChange;D.classCallCheck(this,t),n?("/"!==n.charAt(0)&&(n="/"+n),this.root=n.replace(/\/$/,""),this.rootRE=new RegExp("^\\"+this.root)):this.root=null,this.onChange=r;var o=document.querySelector("base");this.base=o&&o.getAttribute("href")}return t.prototype.start=function(){var t=this;this.listener=function(e){var n=decodeURI(location.pathname+location.search);t.root&&(n=n.replace(t.rootRE,"")),t.onChange(n,e&&e.state,location.hash)},window.addEventListener("popstate",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("popstate",this.listener)},t.prototype.go=function(t,e,n){var r=this.formatPath(t,n);e?history.replaceState({},"",r):(history.replaceState({pos:{x:window.pageXOffset,y:window.pageYOffset}},""),history.pushState({},"",r));var o=t.match(B),i=o&&o[0];t=r.replace(B,"").replace(this.rootRE,""),this.onChange(t,null,i)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?this.root?this.root+"/"+t.replace(/^\//,""):t:w(this.base||location.pathname,t,e)},t}(),K=function(){function t(e){var n=e.hashbang,r=e.onChange;D.classCallCheck(this,t),this.hashbang=n,this.onChange=r}return t.prototype.start=function(){var t=this;this.listener=function(){var e=location.hash,n=e.replace(/^#!?/,"");"/"!==n.charAt(0)&&(n="/"+n);var r=t.formatPath(n);if(r!==e)return void location.replace(r);var o=location.search&&e.indexOf("?")>-1?"&"+location.search.slice(1):location.search;t.onChange(decodeURI(e.replace(/^#!?/,"")+o))},window.addEventListener("hashchange",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("hashchange",this.listener)},t.prototype.go=function(t,e,n){t=this.formatPath(t,n),e?location.replace(t):location.hash=t},t.prototype.formatPath=function(t,e){var n="/"===t.charAt(0),r="#"+(this.hashbang?"!":"");return n?r+t:r+w(location.hash.replace(/^#!?/,""),t,e)},t}(),X=function(){function t(e){var n=e.onChange;D.classCallCheck(this,t),this.onChange=n,this.currentPath="/"}return t.prototype.start=function(){this.onChange("/")},t.prototype.stop=function(){},t.prototype.go=function(t,e,n){t=this.currentPath=this.formatPath(t,n),this.onChange(t)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?t:w(this.currentPath,t,e)},t}(),Y=function(){function t(e,n,r){D.classCallCheck(this,t),this.router=e,this.to=n,this.from=r,this.next=null,this.aborted=!1,this.done=!1,this.deactivateQueue=e._views;var o=n.matched?Array.prototype.slice.call(n.matched):[];this.activateQueue=o.map(function(t){return t.handler})}return t.prototype.abort=function(){if(!this.aborted){this.aborted=!0;var t=!this.from.path&&"/"===this.to.path;t||this.router.replace(this.from.path||"/")}},t.prototype.redirect=function(t){this.aborted||(this.aborted=!0,"string"==typeof t?t=x(t,this.to.params,this.to.query):(t.params=t.params||this.to.params,t.query=t.query||this.to.query),this.router.replace(t))},t.prototype.start=function(t){var e=this,n=this.deactivateQueue,r=this.activateQueue,o=n.slice().reverse(),i=void 0,a=void 0;for(a=0;a<o.length&&$(o[a],r[a],e);a++);a>0&&(i=o.slice(0,a),n=o.slice(a).reverse(),r=r.slice(a)),e.runQueue(n,A,function(){e.runQueue(r,E,function(){e.runQueue(n,k,function(){if(e.router._onTransitionValidated(e),i&&i.forEach(function(t){P(t,e)}),n.length){var r=n[n.length-1],o=i?i.length:0;S(r,e,o,t)}else t()})})})},t.prototype.runQueue=function(t,e,n){function r(i){i>=t.length?n():e(t[i],o,function(){r(i+1)})}var o=this;r(0)},t.prototype.callHook=function(t,e,n){var r=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],o=r.expectBoolean,i=void 0===o?!1:o,a=r.expectData,s=void 0===a?!1:a,h=r.cleanup,c=this,u=!1,l=function(){h&&h(),c.abort()},p=function(t){if(h?f():l(),t&&!c.router._suppress)throw _("Uncaught error during transition: "),t instanceof Error?t:new Error(t)},f=function(t){return u?void _("transition.next() should be called only once."):(u=!0,c.aborted?void(h&&h()):void(n&&n(t,p)))},d={to:c.to,from:c.from,abort:l,next:f,redirect:function(){c.redirect.apply(c,arguments)}},v=void 0;try{v=t.call(e,d)}catch(g){return p(g)}var y=b(v);i?"boolean"==typeof v?v?f():l():y?v.then(function(t){t?f():l()},p):t.length||f(v):y?v.then(f,p):(s&&T(v)||!t.length)&&f(v)},t.prototype.callHooks=function(t,e,n,r){var o=this;Array.isArray(t)?!function(){var i=[];i._needMerge=!0;var a=void 0;o.runQueue(t,function(t,n,a){o.aborted||o.callHook(t,e,function(t,e){t&&i.push(t),e=e,a()},r)},function(){n(i,a)})}():this.callHook(t,e,n,r)},t}(),J=/^(component|subRoutes)$/,W=function it(t,e){var n=this;D.classCallCheck(this,it);var r=e._recognizer.recognize(t);r&&([].forEach.call(r,function(t){for(var e in t.handler)J.test(e)||(n[e]=t.handler[e])}),this.query=r.queryParams,this.params=[].reduce.call(r,function(t,e){if(e.params)for(var n in e.params)t[n]=e.params[n];return t},{})),this.path=t,this.router=e,this.matched=r||e._notFoundHandler,Object.freeze(this)},Z=/\/$/,tt=/[-.*+?^${}()|[\]\/\\]/g,et=/\?.*$/,nt={"abstract":X,hash:K,html5:G},rt=void 0,ot=function(){function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],n=e.hashbang,r=void 0===n?!0:n,o=e["abstract"],i=void 0===o?!1:o,a=e.history,s=void 0===a?!1:a,h=e.saveScrollPosition,c=void 0===h?!1:h,u=e.transitionOnLoad,l=void 0===u?!1:u,p=e.suppressTransitionError,f=void 0===p?!1:p,d=e.root,v=void 0===d?null:d,g=e.linkActiveClass,y=void 0===g?"v-link-active":g;if(D.classCallCheck(this,t),!t.installed)throw new Error("Please install the Router with Vue.use() before creating an instance.");this.app=null,this._views=[],this._children=[],this._recognizer=new L,this._guardRecognizer=new L,this._started=!1,this._startCb=null,this._currentRoute={},this._currentTransition=null,this._previousTransition=null,this._notFoundHandler=null,this._notFoundRedirect=null,this._beforeEachHooks=[],this._afterEachHooks=[],this._hasPushState="undefined"!=typeof window&&window.history&&window.history.pushState,this._rendered=!1,this._transitionOnLoad=l,this._abstract=i,this._hashbang=r,this._history=this._hasPushState&&s,this._saveScrollPosition=c,this._linkActiveClass=y,this._suppress=f;var m=rt.util.inBrowser;this.mode=!m||this._abstract?"abstract":this._history?"html5":"hash";var _=nt[this.mode],w=this;this.history=new _({root:v,hashbang:this._hashbang,onChange:function(t,e,n){w._match(t,e,n)}})}return t.prototype.map=function(t){for(var e in t)this.on(e,t[e])},t.prototype.on=function(t,e){"*"===t?this._notFound(e):this._addRoute(t,e,[])},t.prototype.redirect=function(t){for(var e in t)this._addRedirect(e,t[e])},t.prototype.alias=function(t){for(var e in t)this._addAlias(e,t[e])},t.prototype.beforeEach=function(t){this._beforeEachHooks.push(t)},t.prototype.afterEach=function(t){this._afterEachHooks.push(t)},t.prototype.go=function(t){var e=!1,n=!1;rt.util.isObject(t)&&(e=t.replace,n=t.append),t=this._stringifyPath(t),t&&this.history.go(t,e,n)},t.prototype.replace=function(t){"string"==typeof t&&(t={path:t}),t.replace=!0,this.go(t)},t.prototype.start=function(t,e,n){if(this._started)return void _("already started.");if(this._started=!0,this._startCb=n,!this.app){if(!t||!e)throw new Error("Must start vue-router with a component and a root container.");this._appContainer=e;var r=this._appConstructor="function"==typeof t?t:rt.extend(t);r.options.name=r.options.name||"RouterApp"}this.history.start()},t.prototype.stop=function(){this.history.stop(),this._started=!1},t.prototype._addRoute=function(t,e,n){if(Q(t,e),e.path=t,e.fullPath=(n.reduce(function(t,e){return t+e.path},"")+t).replace("//","/"),n.push({path:t,handler:e}),this._recognizer.add(n,{as:e.name}),e.subRoutes)for(var r in e.subRoutes)this._addRoute(r,e.subRoutes[r],n.slice())},t.prototype._notFound=function(t){Q("*",t),this._notFoundHandler=[{handler:t}]},t.prototype._addRedirect=function(t,e){"*"===t?this._notFoundRedirect=e:this._addGuard(t,e,this.replace)},t.prototype._addAlias=function(t,e){this._addGuard(t,e,this._match)},t.prototype._addGuard=function(t,e,n){var r=this;this._guardRecognizer.add([{path:t,handler:function(t,o){var i=x(e,t.params,o);n.call(r,i)}}])},t.prototype._checkGuard=function(t){var e=this._guardRecognizer.recognize(t);return e?(e[0].handler(e[0],e.queryParams),!0):this._notFoundRedirect&&(e=this._recognizer.recognize(t),!e)?(this.replace(this._notFoundRedirect),!0):void 0},t.prototype._match=function(t,e,n){var r=this;if(!this._checkGuard(t)){var o=this._currentRoute,i=this._currentTransition;if(i){if(i.to.path===t)return;if(o.path===t)return i.aborted=!0,void(this._currentTransition=this._prevTransition);i.aborted=!0}var a=new W(t,this),s=new Y(this,a,o);this._prevTransition=i,this._currentTransition=s,this.app||(this.app=new this._appConstructor({el:this._appContainer,_meta:{$route:a}}));var h=this._beforeEachHooks,c=function(){s.start(function(){r._postTransition(a,e,n)})};h.length?s.runQueue(h,function(t,e,n){s===r._currentTransition&&s.callHook(t,null,n,{expectBoolean:!0})},c):c(),!this._rendered&&this._startCb&&this._startCb.call(null),this._rendered=!0}},t.prototype._onTransitionValidated=function(t){var e=this._currentRoute=t.to;this.app.$route!==e&&(this.app.$route=e,this._children.forEach(function(t){t.$route=e})),this._afterEachHooks.length&&this._afterEachHooks.forEach(function(e){return e.call(null,{to:t.to,from:t.from})}),this._currentTransition.done=!0},t.prototype._postTransition=function(t,e,n){var r=e&&e.pos;r&&this._saveScrollPosition?rt.nextTick(function(){window.scrollTo(r.x,r.y)}):n&&rt.nextTick(function(){var t=document.getElementById(n.slice(1));t&&window.scrollTo(window.scrollX,t.offsetTop)})},t.prototype._stringifyPath=function(t){if(t&&"object"==typeof t){if(t.name){var e=t.params||{};return t.query&&(e.queryParams=t.query),this._recognizer.generate(t.name,e)}if(t.path){var n=t.path;if(t.query){var r=this._recognizer.generateQueryString(t.query);n+=n.indexOf("?")>-1?"&"+r.slice(1):r}return n}return""}return t?t+"":""},t}();return ot.installed=!1,ot.install=function(t){return ot.installed?void _("already installed."):(rt=t,j(rt),H(rt),q(rt),N.Vue=rt,void(ot.installed=!0))},"undefined"!=typeof window&&window.Vue&&window.Vue.use(ot),ot}); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueRouter=e()}(this,function(){"use strict";function t(t,e,n){this.path=t,this.matcher=e,this.delegate=n}function e(t){this.routes={},this.children={},this.target=t}function n(e,r,i){return function(o,a){var s=e+o;return a?void a(n(s,r,i)):new t(e+o,r,i)}}function r(t,e,n){for(var r=0,i=0,o=t.length;o>i;i++)r+=t[i].path.length;e=e.substr(r);var a={path:e,handler:n};t.push(a)}function i(t,e,n,o){var a=e.routes;for(var s in a)if(a.hasOwnProperty(s)){var h=t.slice();r(h,s,a[s]),e.children[s]?i(h,e.children[s],n,o):n.call(o,h)}}function o(t,r){var o=new e;t(n("",o,this.delegate)),i([],o,function(t){r?r(this,t):this.add(t)},this)}function a(t){return"[object Array]"===Object.prototype.toString.call(t)}function s(t){this.string=t}function h(t){this.name=t}function c(t){this.name=t}function u(){}function l(t,e,n){"/"===t.charAt(0)&&(t=t.substr(1));var r=t.split("/"),i=[];n.val="";for(var o=0,a=r.length;a>o;o++){var l,p=r[o];(l=p.match(/^:([^\/]+)$/))?(i.push(new h(l[1])),e.push(l[1]),n.val+="3"):(l=p.match(/^\*([^\/]+)$/))?(i.push(new c(l[1])),n.val+="2",e.push(l[1])):""===p?(i.push(new u),n.val+="1"):(i.push(new s(p)),n.val+="4")}return n.val=+n.val,i}function p(t){this.charSpec=t,this.nextStates=[]}function f(t){return t.sort(function(t,e){return e.specificity.val-t.specificity.val})}function d(t,e){for(var n=[],r=0,i=t.length;i>r;r++){var o=t[r];n=n.concat(o.match(e))}return n}function v(t){this.queryParams=t||{}}function g(t,e,n){for(var r=t.handlers,i=t.regex,o=e.match(i),a=1,s=new v(n),h=0,c=r.length;c>h;h++){for(var u=r[h],l=u.names,p={},f=0,d=l.length;d>f;f++)p[l[f]]=o[a++];s.push({handler:u.handler,params:p,isDynamic:!!l.length})}return s}function y(t,e){return e.eachChar(function(e){t=t.put(e)}),t}function m(t){return t=t.replace(/\+/gm,"%20"),decodeURIComponent(t)}function _(t){window.console&&(console.warn("[vue-router] "+t),(!N.Vue||N.Vue.config.debug)&&console.warn(new Error("warning stack trace:").stack))}function w(t,e,n){var r=t.match(/(\?.*)$/);if(r&&(r=r[1],t=t.slice(0,-r.length)),"?"===e.charAt(0))return t+e;var i=t.split("/");n&&i[i.length-1]||i.pop();for(var o=e.replace(/^\//,"").split("/"),a=0;a<o.length;a++){var s=o[a];"."!==s&&(".."===s?i.pop():i.push(s))}return""!==i[0]&&i.unshift(""),i.join("/")}function b(t){return t&&"function"==typeof t.then}function C(t,e){var n=t&&(t.$options||t.options);return n&&n.route&&n.route[e]}function R(t,e){B?B.$options.components._=t.component:B={resolve:N.Vue.prototype._resolveComponent,$options:{components:{_:t.component}}},B.resolve("_",function(n){t.component=n,e(n)})}function k(t,e,n){return void 0===e&&(e={}),t=t.replace(/:([^\/]+)/g,function(n,r){var i=e[r];return i||_('param "'+r+'" not found when generating path for "'+t+'" with params '+JSON.stringify(e)),i||""}),n&&(t+=I(n)),t}function A(t,e,n){var r=t.childVM;if(!r||!e)return!1;if(t.Component!==e.component)return!1;var i=C(r,"canReuse");return"boolean"==typeof i?i:i?i.call(r,{to:n.to,from:n.from}):!0}function $(t,e,n){var r=t.childVM,i=C(r,"canDeactivate");i?e.callHook(i,r,n,{expectBoolean:!0}):n()}function x(t,e,n){R(t,function(t){if(!e.aborted){var r=C(t,"canActivate");r?e.callHook(r,null,n,{expectBoolean:!0}):n()}})}function E(t,e,n){var r=t.childVM,i=C(r,"deactivate");i?e.callHooks(i,r,n):n()}function V(t,e,n,r,i){var o=e.activateQueue[n];if(!o)return t._bound&&t.setComponent(null),void(r&&r());var a=t.Component=o.component,s=C(a,"activate"),h=C(a,"data"),c=C(a,"waitForData");t.depth=n,t.activated=!1;var u=void 0,l=!(!h||c);if(i=i&&t.childVM&&t.childVM.constructor===a)u=t.childVM,u.$loadingRouteData=l;else if(t.unbuild(!0),t.keepAlive&&t.childVM&&t.childView&&(t.childVM._keepAliveRouterView=t.childView),u=t.build({_meta:{$loadingRouteData:l},created:function(){this._routerView=t}}),t.keepAlive){u.$loadingRouteData=l;var p=u._keepAliveRouterView;p&&(t.childView=p,u._keepAliveRouterView=null)}var f=function(){u.$destroy()},d=function(){if(i)return void(r&&r());var n=e.router;n._rendered||n._transitionOnLoad?t.transition(u):(t.setCurrent?t.setCurrent(u):t.childVM=u,u.$before(t.anchor,null,!1)),r&&r()},v=function(){t.activated=!0,t.childView&&V(t.childView,e,n+1,null,i||t.keepAlive),h&&c?P(u,e,h,d,f):(h&&P(u,e,h),d())};s?e.callHooks(s,u,v,{cleanup:f}):v()}function S(t,e){var n=t.childVM,r=C(n,"data");r&&P(n,e,r)}function P(t,e,n,r,i){t.$loadingRouteData=!0,e.callHooks(n,t,function(e,n){Array.isArray(e)&&e._needMerge&&(e=e.reduce(function(t,e){return O(e)&&Object.keys(e).forEach(function(n){t[n]=e[n]}),t},Object.create(null)));var i=[];O(e)&&Object.keys(e).forEach(function(n){var r=e[n];b(r)?i.push(r.then(function(e){t.$set(n,e)})):t.$set(n,r)}),i.length?i[0].constructor.all(i).then(function(e){t.$loadingRouteData=!1,t.$emit("route-data-loaded",t),r&&r()},n):(t.$loadingRouteData=!1,t.$emit("route-data-loaded",t),r&&r())},{cleanup:i,expectData:!0})}function O(t){return"[object Object]"===Object.prototype.toString.call(t)}function T(t){return"[object Object]"===Object.prototype.toString.call(t)}function H(t){return t?Array.prototype.slice.call(t):[]}function j(t){var e=t.util,n=e.extend,r=e.isArray,i=e.defineReactive,o=t.prototype._init;t.prototype._init=function(t){t=t||{};var e=t._parent||t.parent||this,n=e.$router,r=e.$route;n&&(this.$router=n,n._children.push(this),this._defineMeta?this._defineMeta("$route",r):i(this,"$route",r)),o.call(this,t)};var a=t.prototype._destroy;t.prototype._destroy=function(){this._isBeingDestroyed||(this.$router&&this.$router._children.$remove(this),a.apply(this,arguments))};var s=t.config.optionMergeStrategies,h=/^(data|activate|deactivate)$/;s&&(s.route=function(t,e){if(!e)return t;if(!t)return e;var i={};n(i,t);for(var o in e){var a=i[o],s=e[o];a&&h.test(o)?i[o]=(r(a)?a:[a]).concat(s):i[o]=s}return i})}function M(t){var e=t.util,n=t.directive("_component")||t.internalDirectives.component,r=e.extend({},n);e.extend(r,{_isRouterView:!0,bind:function(){var t=this.vm.$route;if(!t)return void _("<router-view> can only be used inside a router-enabled app.");this._isDynamicLiteral=!0,n.bind.call(this);for(var e=void 0,r=this.vm;r;){if(r._routerView){e=r._routerView;break}r=r.$parent}if(e)this.parentView=e,e.childView=this;else{var i=t.router;i._rootView=this}var o=t.router._currentTransition;if(!e&&o.done||e&&e.activated){var a=e?e.depth+1:0;V(this,o,a)}},unbind:function(){this.parentView&&(this.parentView.childView=null),n.unbind.call(this)}}),t.elementDirective("router-view",r)}function q(t){function e(t){return t.protocol===location.protocol&&t.hostname===location.hostname&&t.port===location.port}var n=t.util,r=n.bind,i=n.isObject,o=n.addClass,a=n.removeClass;t.directive("link-active",{priority:1001,bind:function(){this.el.__v_link_active=!0}}),t.directive("link",{priority:1e3,bind:function(){var t=this.vm;if(!t.$route)return void _("v-link can only be used inside a router-enabled app.");if(this.router=t.$route.router,this.unwatch=t.$watch("$route",r(this.onRouteUpdate,this)),"A"!==this.el.tagName||"_blank"!==this.el.getAttribute("target")){this.el.addEventListener("click",r(this.onClick,this)),this.activeEl=this.el;for(var e=this.el.parentNode;e;){if(e.__v_link_active){this.activeEl=e;break}e=e.parentNode}}},update:function(t){this.target=t,i(t)&&(this.append=t.append,this.exact=t.exact,this.prevActiveClass=this.activeClass,this.activeClass=t.activeClass),this.onRouteUpdate(this.vm.$route)},onClick:function(t){if(!(t.metaKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||0!==t.button)){var n=this.target;if(n)t.preventDefault(),this.router.go(n);else{for(var r=t.target;"A"!==r.tagName&&r!==this.el;)r=r.parentNode;"A"===r.tagName&&e(r)&&(t.preventDefault(),this.router.go({path:r.pathname,replace:n&&n.replace,append:n&&n.append}))}}},onRouteUpdate:function(t){var e=this.router._stringifyPath(this.target);this.path!==e&&(this.path=e,this.updateActiveMatch(),this.updateHref()),this.updateClasses(t.path)},updateActiveMatch:function(){this.activeRE=this.path&&!this.exact?new RegExp("^"+this.path.replace(/\/$/,"").replace(nt,"").replace(et,"\\$&")+"(\\/|$)"):null},updateHref:function(){if("A"===this.el.tagName){if(this.target&&this.target.name)return void(this.el.href="#"+this.target.name);var t=this.path,e=this.router,n="/"===t.charAt(0),r=t&&("hash"===e.mode||n)?e.history.formatPath(t,this.append):t;r?this.el.href=r:this.el.removeAttribute("href")}},updateClasses:function(t){var e=this.activeEl,n=this.activeClass||this.router._linkActiveClass;this.prevActiveClass!==n&&a(e,this.prevActiveClass);var r=this.path.replace(nt,"");t=t.replace(nt,""),this.exact?r===t||"/"!==r.charAt(r.length-1)&&r===t.replace(tt,"")?o(e,n):a(e,n):this.activeRE&&this.activeRE.test(t)?o(e,n):a(e,n)},unbind:function(){this.el.removeEventListener("click",this.handler),this.unwatch&&this.unwatch()}})}function D(t,e){var n=e.component;it.util.isPlainObject(n)&&(n=e.component=it.extend(n)),"function"!=typeof n&&(e.component=null,_('invalid component for route "'+t+'".'))}var z={};z.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.prototype={to:function(t,e){var n=this.delegate;if(n&&n.willAddRoute&&(t=n.willAddRoute(this.matcher.target,t)),this.matcher.add(this.path,t),e){if(0===e.length)throw new Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,t,e,this.delegate)}return this}},e.prototype={add:function(t,e){this.routes[t]=e},addChild:function(t,r,i,o){var a=new e(r);this.children[t]=a;var s=n(t,a,o);o&&o.contextEntered&&o.contextEntered(r,s),i(s)}};var Q=["/",".","*","+","?","|","(",")","[","]","{","}","\\"],F=new RegExp("(\\"+Q.join("|\\")+")","g");s.prototype={eachChar:function(t){for(var e,n=this.string,r=0,i=n.length;i>r;r++)e=n.charAt(r),t({validChars:e})},regex:function(){return this.string.replace(F,"\\$1")},generate:function(){return this.string}},h.prototype={eachChar:function(t){t({invalidChars:"/",repeat:!0})},regex:function(){return"([^/]+)"},generate:function(t){return t[this.name]}},c.prototype={eachChar:function(t){t({invalidChars:"",repeat:!0})},regex:function(){return"(.+)"},generate:function(t){return t[this.name]}},u.prototype={eachChar:function(){},regex:function(){return""},generate:function(){return""}},p.prototype={get:function(t){for(var e=this.nextStates,n=0,r=e.length;r>n;n++){var i=e[n],o=i.charSpec.validChars===t.validChars;if(o=o&&i.charSpec.invalidChars===t.invalidChars)return i}},put:function(t){var e;return(e=this.get(t))?e:(e=new p(t),this.nextStates.push(e),t.repeat&&e.nextStates.push(e),e)},match:function(t){for(var e,n,r,i=this.nextStates,o=[],a=0,s=i.length;s>a;a++)e=i[a],n=e.charSpec,"undefined"!=typeof(r=n.validChars)?-1!==r.indexOf(t)&&o.push(e):"undefined"!=typeof(r=n.invalidChars)&&-1===r.indexOf(t)&&o.push(e);return o}};var U=Object.create||function(t){function e(){}return e.prototype=t,new e};v.prototype=U({splice:Array.prototype.splice,slice:Array.prototype.slice,push:Array.prototype.push,length:0,queryParams:null});var L=function(){this.rootState=new p,this.names={}};L.prototype={add:function(t,e){for(var n,r=this.rootState,i="^",o={},a=[],s=[],h=!0,c=0,p=t.length;p>c;c++){var f=t[c],d=[],v=l(f.path,d,o);s=s.concat(v);for(var g=0,m=v.length;m>g;g++){var _=v[g];_ instanceof u||(h=!1,r=r.put({validChars:"/"}),i+="/",r=y(r,_),i+=_.regex())}var w={handler:f.handler,names:d};a.push(w)}h&&(r=r.put({validChars:"/"}),i+="/"),r.handlers=a,r.regex=new RegExp(i+"$"),r.specificity=o,(n=e&&e.as)&&(this.names[n]={segments:s,handlers:a})},handlersFor:function(t){var e=this.names[t],n=[];if(!e)throw new Error("There is no route named "+t);for(var r=0,i=e.handlers.length;i>r;r++)n.push(e.handlers[r]);return n},hasRoute:function(t){return!!this.names[t]},generate:function(t,e){var n=this.names[t],r="";if(!n)throw new Error("There is no route named "+t);for(var i=n.segments,o=0,a=i.length;a>o;o++){var s=i[o];s instanceof u||(r+="/",r+=s.generate(e))}return"/"!==r.charAt(0)&&(r="/"+r),e&&e.queryParams&&(r+=this.generateQueryString(e.queryParams)),r},generateQueryString:function(t){var e=[],n=[];for(var r in t)t.hasOwnProperty(r)&&n.push(r);n.sort();for(var i=0,o=n.length;o>i;i++){r=n[i];var s=t[r];if(null!=s){var h=encodeURIComponent(r);if(a(s))for(var c=0,u=s.length;u>c;c++){var l=r+"[]="+encodeURIComponent(s[c]);e.push(l)}else h+="="+encodeURIComponent(s),e.push(h)}}return 0===e.length?"":"?"+e.join("&")},parseQueryString:function(t){for(var e=t.split("&"),n={},r=0;r<e.length;r++){var i,o=e[r].split("="),a=m(o[0]),s=a.length,h=!1;1===o.length?i="true":(s>2&&"[]"===a.slice(s-2)&&(h=!0,a=a.slice(0,s-2),n[a]||(n[a]=[])),i=o[1]?m(o[1]):""),h?n[a].push(i):n[a]=i}return n},recognize:function(t){var e,n,r,i,o=[this.rootState],a={},s=!1;if(i=t.indexOf("?"),-1!==i){var h=t.substr(i+1,t.length);t=t.substr(0,i),a=this.parseQueryString(h)}for(t=decodeURI(t),"/"!==t.charAt(0)&&(t="/"+t),e=t.length,e>1&&"/"===t.charAt(e-1)&&(t=t.substr(0,e-1),s=!0),n=0,r=t.length;r>n&&(o=d(o,t.charAt(n)),o.length);n++);var c=[];for(n=0,r=o.length;r>n;n++)o[n].handlers&&c.push(o[n]);o=f(c);var u=c[0];return u&&u.handlers?(s&&"(.+)$"===u.regex.source.slice(-5)&&(t+="/"),g(u,t,a)):void 0}},L.prototype.map=o,L.VERSION="0.1.9";var I=L.prototype.generateQueryString,N={},B=void 0,G=/#.*$/,K=function(){function t(e){var n=e.root,r=e.onChange;z.classCallCheck(this,t),n?("/"!==n.charAt(0)&&(n="/"+n),this.root=n.replace(/\/$/,""),this.rootRE=new RegExp("^\\"+this.root)):this.root=null,this.onChange=r;var i=document.querySelector("base");this.base=i&&i.getAttribute("href")}return t.prototype.start=function(){var t=this;this.listener=function(e){var n=decodeURI(location.pathname+location.search);t.root&&(n=n.replace(t.rootRE,"")),t.onChange(n,e&&e.state,location.hash)},window.addEventListener("popstate",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("popstate",this.listener)},t.prototype.go=function(t,e,n){var r=this.formatPath(t,n);e?history.replaceState({},"",r):(history.replaceState({pos:{x:window.pageXOffset,y:window.pageYOffset}},""),history.pushState({},"",r));var i=t.match(G),o=i&&i[0];t=r.replace(G,"").replace(this.rootRE,""),this.onChange(t,null,o)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?this.root?this.root+"/"+t.replace(/^\//,""):t:w(this.base||location.pathname,t,e)},t}(),X=function(){function t(e){var n=e.hashbang,r=e.onChange;z.classCallCheck(this,t),this.hashbang=n,this.onChange=r}return t.prototype.start=function(){var t=this;this.listener=function(){var e=location.hash,n=e.replace(/^#!?/,"");"/"!==n.charAt(0)&&(n="/"+n);var r=t.formatPath(n);if(r!==e)return void location.replace(r);var i=location.search&&e.indexOf("?")>-1?"&"+location.search.slice(1):location.search;t.onChange(decodeURI(e.replace(/^#!?/,"")+i))},window.addEventListener("hashchange",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("hashchange",this.listener)},t.prototype.go=function(t,e,n){t=this.formatPath(t,n),e?location.replace(t):location.hash=t},t.prototype.formatPath=function(t,e){var n="/"===t.charAt(0),r="#"+(this.hashbang?"!":"");return n?r+t:r+w(location.hash.replace(/^#!?/,""),t,e)},t}(),Y=function(){function t(e){var n=e.onChange;z.classCallCheck(this,t),this.onChange=n,this.currentPath="/"}return t.prototype.start=function(){this.onChange("/")},t.prototype.stop=function(){},t.prototype.go=function(t,e,n){t=this.currentPath=this.formatPath(t,n),this.onChange(t)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?t:w(this.currentPath,t,e)},t}(),J=function(){function t(e,n,r){z.classCallCheck(this,t),this.router=e,this.to=n,this.from=r,this.next=null,this.aborted=!1,this.done=!1}return t.prototype.abort=function(){if(!this.aborted){this.aborted=!0;var t=!this.from.path&&"/"===this.to.path;t||this.router.replace(this.from.path||"/")}},t.prototype.redirect=function(t){this.aborted||(this.aborted=!0,"string"==typeof t?t=k(t,this.to.params,this.to.query):(t.params=t.params||this.to.params,t.query=t.query||this.to.query),this.router.replace(t))},t.prototype.start=function(t){for(var e=this,n=[],r=this.router._rootView;r;)n.unshift(r),r=r.childView;var i=n.slice().reverse(),o=this.activateQueue=H(this.to.matched).map(function(t){return t.handler}),a=void 0,s=void 0;for(a=0;a<i.length&&A(i[a],o[a],e);a++);a>0&&(s=i.slice(0,a),n=i.slice(a).reverse(),o=o.slice(a)),e.runQueue(n,$,function(){e.runQueue(o,x,function(){e.runQueue(n,E,function(){if(e.router._onTransitionValidated(e),s&&s.forEach(function(t){return S(t,e)}),n.length){var r=n[n.length-1],i=s?s.length:0;V(r,e,i,t)}else t()})})})},t.prototype.runQueue=function(t,e,n){function r(o){o>=t.length?n():e(t[o],i,function(){r(o+1)})}var i=this;r(0)},t.prototype.callHook=function(t,e,n){var r=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],i=r.expectBoolean,o=void 0===i?!1:i,a=r.expectData,s=void 0===a?!1:a,h=r.cleanup,c=this,u=!1,l=function(){h&&h(),c.abort()},p=function(t){if(h?f():l(),t&&!c.router._suppress)throw _("Uncaught error during transition: "),t instanceof Error?t:new Error(t)},f=function(t){return u?void _("transition.next() should be called only once."):(u=!0,c.aborted?void(h&&h()):void(n&&n(t,p)))},d={to:c.to,from:c.from,abort:l,next:f,redirect:function(){c.redirect.apply(c,arguments)}},v=void 0;try{v=t.call(e,d)}catch(g){return p(g)}var y=b(v);o?"boolean"==typeof v?v?f():l():y?v.then(function(t){t?f():l()},p):t.length||f(v):y?v.then(f,p):(s&&T(v)||!t.length)&&f(v)},t.prototype.callHooks=function(t,e,n,r){var i=this;Array.isArray(t)?!function(){var o=[];o._needMerge=!0;var a=void 0;i.runQueue(t,function(t,n,a){i.aborted||i.callHook(t,e,function(t,e){t&&o.push(t),e=e,a()},r)},function(){n(o,a)})}():this.callHook(t,e,n,r)},t}(),W=/^(component|subRoutes)$/,Z=function at(t,e){var n=this;z.classCallCheck(this,at);var r=e._recognizer.recognize(t);r&&([].forEach.call(r,function(t){for(var e in t.handler)W.test(e)||(n[e]=t.handler[e])}),this.query=r.queryParams,this.params=[].reduce.call(r,function(t,e){if(e.params)for(var n in e.params)t[n]=e.params[n];return t},{})),this.path=t,this.router=e,this.matched=r||e._notFoundHandler,Object.freeze(this)},tt=/\/$/,et=/[-.*+?^${}()|[\]\/\\]/g,nt=/\?.*$/,rt={"abstract":Y,hash:X,html5:K},it=void 0,ot=function(){function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],n=e.hashbang,r=void 0===n?!0:n,i=e["abstract"],o=void 0===i?!1:i,a=e.history,s=void 0===a?!1:a,h=e.saveScrollPosition,c=void 0===h?!1:h,u=e.transitionOnLoad,l=void 0===u?!1:u,p=e.suppressTransitionError,f=void 0===p?!1:p,d=e.root,v=void 0===d?null:d,g=e.linkActiveClass,y=void 0===g?"v-link-active":g;if(z.classCallCheck(this,t),!t.installed)throw new Error("Please install the Router with Vue.use() before creating an instance.");this.app=null,this._children=[],this._recognizer=new L,this._guardRecognizer=new L,this._started=!1,this._startCb=null,this._currentRoute={},this._currentTransition=null,this._previousTransition=null,this._notFoundHandler=null,this._notFoundRedirect=null,this._beforeEachHooks=[],this._afterEachHooks=[],this._hasPushState="undefined"!=typeof window&&window.history&&window.history.pushState,this._rendered=!1,this._transitionOnLoad=l,this._abstract=o,this._hashbang=r,this._history=this._hasPushState&&s,this._saveScrollPosition=c,this._linkActiveClass=y,this._suppress=f;var m=it.util.inBrowser;this.mode=!m||this._abstract?"abstract":this._history?"html5":"hash";var _=rt[this.mode],w=this;this.history=new _({root:v,hashbang:this._hashbang,onChange:function(t,e,n){w._match(t,e,n)}})}return t.prototype.map=function(t){for(var e in t)this.on(e,t[e]);return this},t.prototype.on=function(t,e){return"*"===t?this._notFound(e):this._addRoute(t,e,[]),this},t.prototype.redirect=function(t){for(var e in t)this._addRedirect(e,t[e]);return this},t.prototype.alias=function(t){for(var e in t)this._addAlias(e,t[e]);return this},t.prototype.beforeEach=function(t){return this._beforeEachHooks.push(t),this},t.prototype.afterEach=function(t){return this._afterEachHooks.push(t),this},t.prototype.go=function(t){var e=!1,n=!1;it.util.isObject(t)&&(e=t.replace,n=t.append),t=this._stringifyPath(t),t&&this.history.go(t,e,n)},t.prototype.replace=function(t){"string"==typeof t&&(t={path:t}),t.replace=!0,this.go(t)},t.prototype.start=function(t,e,n){if(this._started)return void _("already started.");if(this._started=!0,this._startCb=n,!this.app){if(!t||!e)throw new Error("Must start vue-router with a component and a root container.");if(t instanceof it)throw new Error("Must start vue-router with a component, not a Vue instance.");this._appContainer=e;var r=this._appConstructor="function"==typeof t?t:it.extend(t);r.options.name=r.options.name||"RouterApp"}this.history.start()},t.prototype.stop=function(){this.history.stop(),this._started=!1},t.prototype._addRoute=function(t,e,n){if(D(t,e),e.path=t,e.fullPath=(n.reduce(function(t,e){return t+e.path},"")+t).replace("//","/"),n.push({path:t,handler:e}),this._recognizer.add(n,{as:e.name}),e.subRoutes)for(var r in e.subRoutes)this._addRoute(r,e.subRoutes[r],n.slice())},t.prototype._notFound=function(t){D("*",t),this._notFoundHandler=[{handler:t}]},t.prototype._addRedirect=function(t,e){"*"===t?this._notFoundRedirect=e:this._addGuard(t,e,this.replace)},t.prototype._addAlias=function(t,e){this._addGuard(t,e,this._match)},t.prototype._addGuard=function(t,e,n){var r=this;this._guardRecognizer.add([{path:t,handler:function(t,i){var o=k(e,t.params,i);n.call(r,o)}}])},t.prototype._checkGuard=function(t){var e=this._guardRecognizer.recognize(t);return e?(e[0].handler(e[0],e.queryParams),!0):this._notFoundRedirect&&(e=this._recognizer.recognize(t),!e)?(this.replace(this._notFoundRedirect),!0):void 0},t.prototype._match=function(t,e,n){var r=this;if(!this._checkGuard(t)){var i=this._currentRoute,o=this._currentTransition;if(o){if(o.to.path===t)return;if(i.path===t)return o.aborted=!0,void(this._currentTransition=this._prevTransition);o.aborted=!0}var a=new Z(t,this),s=new J(this,a,i);this._prevTransition=o,this._currentTransition=s,this.app||!function(){var t=r;r.app=new r._appConstructor({el:r._appContainer,created:function(){this.$router=t},_meta:{$route:a}})}();var h=this._beforeEachHooks,c=function(){s.start(function(){r._postTransition(a,e,n)})};h.length?s.runQueue(h,function(t,e,n){s===r._currentTransition&&s.callHook(t,null,n,{expectBoolean:!0})},c):c(),!this._rendered&&this._startCb&&this._startCb.call(null),this._rendered=!0}},t.prototype._onTransitionValidated=function(t){var e=this._currentRoute=t.to;this.app.$route!==e&&(this.app.$route=e,this._children.forEach(function(t){t.$route=e})),this._afterEachHooks.length&&this._afterEachHooks.forEach(function(e){return e.call(null,{to:t.to,from:t.from})}),this._currentTransition.done=!0},t.prototype._postTransition=function(t,e,n){var r=e&&e.pos;r&&this._saveScrollPosition?it.nextTick(function(){window.scrollTo(r.x,r.y)}):n&&it.nextTick(function(){var t=document.getElementById(n.slice(1));t&&window.scrollTo(window.scrollX,t.offsetTop)})},t.prototype._stringifyPath=function(t){if(t&&"object"==typeof t){if(t.name){var e=it.util.extend,n=this._currentTransition.to.params,r=t.params||{},i=n?e(e({},n),r):r;return t.query&&(i.queryParams=t.query),this._recognizer.generate(t.name,i)}if(t.path){var o=t.path;if(t.query){var a=this._recognizer.generateQueryString(t.query);o+=o.indexOf("?")>-1?"&"+a.slice(1):a}return o}return""}return t?t+"":""},t}();return ot.installed=!1,ot.install=function(t){return ot.installed?void _("already installed."):(it=t,j(it),M(it),q(it),N.Vue=it,void(ot.installed=!0))},"undefined"!=typeof window&&window.Vue&&window.Vue.use(ot),ot}); |
{ | ||
"name": "vue-router", | ||
"version": "0.7.7", | ||
"version": "0.7.8", | ||
"description": "A router for Vue.js", | ||
"main": "dist/vue-router.common.js", | ||
"main": "dist/vue-router.js", | ||
"jsnext:main": "src/index.js", | ||
@@ -7,0 +7,0 @@ "files": [ |
@@ -42,1 +42,7 @@ # vue-router [![Build Status](https://img.shields.io/circleci/project/vuejs/vue-router/master.svg)](https://circleci.com/gh/vuejs/vue-router) [![npm package](https://img.shields.io/npm/v/vue-router.svg)](https://www.npmjs.com/package/vue-router) | ||
``` | ||
## Issues | ||
Please make sure to read the [Issue Reporting Checklist](https://github.com/vuejs/vue/blob/dev/CONTRIBUTING.md#issue-reporting-guidelines) before opening an issue. Issues not conforming to the guidelines may be closed immediately. | ||
@@ -10,16 +10,29 @@ import { warn } from '../util' | ||
let _ = Vue.util | ||
const { | ||
bind, | ||
isObject, | ||
addClass, | ||
removeClass | ||
} = Vue.util | ||
Vue.directive('link-active', { | ||
priority: 1001, | ||
bind () { | ||
this.el.__v_link_active = true | ||
} | ||
}) | ||
Vue.directive('link', { | ||
priority: 1000, | ||
bind () { | ||
let vm = this.vm | ||
const vm = this.vm | ||
/* istanbul ignore if */ | ||
if (!vm.$route) { | ||
warn( | ||
'v-link can only be used inside a ' + | ||
'router-enabled app.' | ||
) | ||
warn('v-link can only be used inside a router-enabled app.') | ||
return | ||
} | ||
this.router = vm.$route.router | ||
// update things when the route changes | ||
this.unwatch = vm.$watch('$route', bind(this.onRouteUpdate, this)) | ||
// no need to handle click if link expects to be opened | ||
@@ -33,79 +46,103 @@ // in a new window/tab. | ||
// handle click | ||
let router = vm.$route.router | ||
this.handler = (e) => { | ||
// don't redirect with control keys | ||
if (e.metaKey || e.ctrlKey || e.shiftKey) return | ||
// don't redirect when preventDefault called | ||
if (e.defaultPrevented) return | ||
// don't redirect on right click | ||
if (e.button !== 0) return | ||
this.el.addEventListener('click', bind(this.onClick, this)) | ||
// check if active classes should be applied to a different element | ||
this.activeEl = this.el | ||
var parent = this.el.parentNode | ||
while (parent) { | ||
if (parent.__v_link_active) { | ||
this.activeEl = parent | ||
break | ||
} | ||
parent = parent.parentNode | ||
} | ||
}, | ||
const target = this.target | ||
const go = (target) => { | ||
update (target) { | ||
this.target = target | ||
if (isObject(target)) { | ||
this.append = target.append | ||
this.exact = target.exact | ||
this.prevActiveClass = this.activeClass | ||
this.activeClass = target.activeClass | ||
} | ||
this.onRouteUpdate(this.vm.$route) | ||
}, | ||
onClick (e) { | ||
// don't redirect with control keys | ||
/* istanbul ignore if */ | ||
if (e.metaKey || e.ctrlKey || e.shiftKey) return | ||
// don't redirect when preventDefault called | ||
/* istanbul ignore if */ | ||
if (e.defaultPrevented) return | ||
// don't redirect on right click | ||
/* istanbul ignore if */ | ||
if (e.button !== 0) return | ||
const target = this.target | ||
if (target) { | ||
// v-link with expression, just go | ||
e.preventDefault() | ||
this.router.go(target) | ||
} else { | ||
// no expression, delegate for an <a> inside | ||
var el = e.target | ||
while (el.tagName !== 'A' && el !== this.el) { | ||
el = el.parentNode | ||
} | ||
if (el.tagName === 'A' && sameOrigin(el)) { | ||
e.preventDefault() | ||
if (target != null) { | ||
router.go(target) | ||
} | ||
this.router.go({ | ||
path: el.pathname, | ||
replace: target && target.replace, | ||
append: target && target.append | ||
}) | ||
} | ||
} | ||
}, | ||
if (this.el.tagName === 'A' || e.target === this.el) { | ||
// v-link on <a v-link="'path'"> | ||
go(target) | ||
} else { | ||
// v-link delegate on <div v-link> | ||
var el = e.target | ||
while (el && el.tagName !== 'A' && el !== this.el) { | ||
el = el.parentNode | ||
} | ||
if (!el) return | ||
if (el.tagName !== 'A' || !el.href) { | ||
// allow not anchor | ||
go(target) | ||
} else if (sameOrigin(el)) { | ||
go({ | ||
path: el.pathname, | ||
replace: target && target.replace, | ||
append: target && target.append | ||
}) | ||
} | ||
} | ||
onRouteUpdate (route) { | ||
// router._stringifyPath is dependent on current route | ||
// and needs to be called again whenver route changes. | ||
var newPath = this.router._stringifyPath(this.target) | ||
if (this.path !== newPath) { | ||
this.path = newPath | ||
this.updateActiveMatch() | ||
this.updateHref() | ||
} | ||
this.el.addEventListener('click', this.handler) | ||
// manage active link class | ||
this.unwatch = vm.$watch( | ||
'$route.path', | ||
_.bind(this.updateClasses, this) | ||
) | ||
this.updateClasses(route.path) | ||
}, | ||
update (path) { | ||
let router = this.vm.$route.router | ||
let append | ||
this.target = path | ||
if (_.isObject(path)) { | ||
append = path.append | ||
this.exact = path.exact | ||
this.prevActiveClass = this.activeClass | ||
this.activeClass = path.activeClass | ||
} | ||
path = this.path = router._stringifyPath(path) | ||
this.activeRE = path && !this.exact | ||
updateActiveMatch () { | ||
this.activeRE = this.path && !this.exact | ||
? new RegExp( | ||
'^' + | ||
path.replace(/\/$/, '').replace(regexEscapeRE, '\\$&') + | ||
this.path | ||
.replace(/\/$/, '') | ||
.replace(queryStringRE, '') | ||
.replace(regexEscapeRE, '\\$&') + | ||
'(\\/|$)' | ||
) | ||
: null | ||
this.updateClasses(this.vm.$route.path) | ||
let isAbsolute = path.charAt(0) === '/' | ||
}, | ||
updateHref () { | ||
if (this.el.tagName !== 'A') { | ||
return | ||
} | ||
if (this.target && this.target.name) { | ||
this.el.href = '#' + this.target.name | ||
return | ||
} | ||
const path = this.path | ||
const router = this.router | ||
const isAbsolute = path.charAt(0) === '/' | ||
// do not format non-hash relative paths | ||
let href = path && (router.mode === 'hash' || isAbsolute) | ||
? router.history.formatPath(path, append) | ||
const href = path && (router.mode === 'hash' || isAbsolute) | ||
? router.history.formatPath(path, this.append) | ||
: path | ||
if (this.el.tagName === 'A') { | ||
if (href) { | ||
this.el.href = href | ||
} else { | ||
this.el.removeAttribute('href') | ||
} | ||
if (href) { | ||
this.el.href = href | ||
} else { | ||
this.el.removeAttribute('href') | ||
} | ||
@@ -115,32 +152,27 @@ }, | ||
updateClasses (path) { | ||
let el = this.el | ||
let router = this.vm.$route.router | ||
let activeClass = this.activeClass || router._linkActiveClass | ||
const el = this.activeEl | ||
const activeClass = this.activeClass || this.router._linkActiveClass | ||
// clear old class | ||
if (this.prevActiveClass !== activeClass) { | ||
_.removeClass(el, this.prevActiveClass) | ||
removeClass(el, this.prevActiveClass) | ||
} | ||
// remove query string before matching | ||
let dest = this.path.replace(queryStringRE, '') | ||
const dest = this.path.replace(queryStringRE, '') | ||
path = path.replace(queryStringRE, '') | ||
// add new class | ||
if (this.exact) { | ||
if ( | ||
dest === path || | ||
( | ||
// also allow additional trailing slash | ||
dest.charAt(dest.length - 1) !== '/' && | ||
dest === path.replace(trailingSlashRE, '') | ||
) | ||
) { | ||
_.addClass(el, activeClass) | ||
if (dest === path || ( | ||
// also allow additional trailing slash | ||
dest.charAt(dest.length - 1) !== '/' && | ||
dest === path.replace(trailingSlashRE, '') | ||
)) { | ||
addClass(el, activeClass) | ||
} else { | ||
_.removeClass(el, activeClass) | ||
removeClass(el, activeClass) | ||
} | ||
} else { | ||
if (this.activeRE && | ||
this.activeRE.test(path)) { | ||
_.addClass(el, activeClass) | ||
if (this.activeRE && this.activeRE.test(path)) { | ||
addClass(el, activeClass) | ||
} else { | ||
_.removeClass(el, activeClass) | ||
removeClass(el, activeClass) | ||
} | ||
@@ -147,0 +179,0 @@ } |
@@ -36,10 +36,12 @@ import { warn } from '../util' | ||
// all we need to do here is registering this view | ||
// in the router. actual component switching will be | ||
// managed by the pipeline. | ||
let router = this.router = route.router | ||
router._views.unshift(this) | ||
// note the views are in reverse order. | ||
let parentView = router._views[1] | ||
// locate the parent view | ||
let parentView | ||
let parent = this.vm | ||
while (parent) { | ||
if (parent._routerView) { | ||
parentView = parent._routerView | ||
break | ||
} | ||
parent = parent.$parent | ||
} | ||
if (parentView) { | ||
@@ -50,3 +52,8 @@ // register self as a child of the parent view, | ||
// parent's has resolved. | ||
this.parentView = parentView | ||
parentView.childView = this | ||
} else { | ||
// this is the root view! | ||
let router = route.router | ||
router._rootView = this | ||
} | ||
@@ -69,3 +76,5 @@ | ||
unbind () { | ||
this.router._views.$remove(this) | ||
if (this.parentView) { | ||
this.parentView.childView = null | ||
} | ||
componentDef.unbind.call(this) | ||
@@ -72,0 +81,0 @@ } |
@@ -50,3 +50,2 @@ import RouteRecognizer from '../lib/route-recognizer' | ||
this.app = null | ||
this._views = [] | ||
this._children = [] | ||
@@ -120,2 +119,3 @@ | ||
} | ||
return this | ||
} | ||
@@ -141,2 +141,3 @@ | ||
} | ||
return this | ||
} | ||
@@ -154,2 +155,3 @@ | ||
} | ||
return this | ||
} | ||
@@ -167,2 +169,3 @@ | ||
} | ||
return this | ||
} | ||
@@ -178,2 +181,3 @@ | ||
this._beforeEachHooks.push(fn) | ||
return this | ||
} | ||
@@ -189,2 +193,3 @@ | ||
this._afterEachHooks.push(fn) | ||
return this | ||
} | ||
@@ -254,2 +259,9 @@ | ||
} | ||
/* istanbul ignore if */ | ||
if (App instanceof Vue) { | ||
throw new Error( | ||
'Must start vue-router with a component, not a ' + | ||
'Vue instance.' | ||
) | ||
} | ||
this._appContainer = container | ||
@@ -289,3 +301,3 @@ const Ctor = this._appConstructor = typeof App === 'function' | ||
handler.path = path | ||
handler.fullPath = (segments.reduce(function (path, segment) { | ||
handler.fullPath = (segments.reduce((path, segment) => { | ||
return path + segment.path | ||
@@ -441,4 +453,8 @@ }, '') + path).replace('//', '/') | ||
// initial render | ||
const router = this | ||
this.app = new this._appConstructor({ | ||
el: this._appContainer, | ||
created () { | ||
this.$router = router | ||
}, | ||
_meta: { | ||
@@ -547,3 +563,8 @@ $route: route | ||
if (path.name) { | ||
const params = path.params || {} | ||
const extend = Vue.util.extend | ||
const currentParams = this._currentTransition.to.params | ||
const targetParams = path.params || {} | ||
const params = currentParams | ||
? extend(extend({}, currentParams), targetParams) | ||
: targetParams | ||
if (path.query) { | ||
@@ -550,0 +571,0 @@ params.queryParams = path.query |
export default function (Vue) { | ||
const _ = Vue.util | ||
const { | ||
extend, | ||
isArray, | ||
defineReactive | ||
} = Vue.util | ||
@@ -8,15 +12,17 @@ // override Vue's init and destroy process to keep track of router instances | ||
Vue.prototype._init = function (options) { | ||
options = options || {} | ||
const root = options._parent || options.parent || this | ||
const router = root.$router | ||
const route = root.$route | ||
if (route) { | ||
route.router._children.push(this) | ||
if (!this.$route) { | ||
/* istanbul ignore if */ | ||
if (this._defineMeta) { | ||
// 0.12 | ||
this._defineMeta('$route', route) | ||
} else { | ||
// 1.0 | ||
_.defineReactive(this, '$route', route) | ||
} | ||
if (router) { | ||
// expose router | ||
this.$router = router | ||
router._children.push(this) | ||
/* istanbul ignore if */ | ||
if (this._defineMeta) { | ||
// 0.12 | ||
this._defineMeta('$route', route) | ||
} else { | ||
// 1.0 | ||
defineReactive(this, '$route', route) | ||
} | ||
@@ -30,5 +36,4 @@ } | ||
if (!this._isBeingDestroyed) { | ||
const route = this.$root.$route | ||
if (route) { | ||
route.router._children.$remove(this) | ||
if (this.$router) { | ||
this.$router._children.$remove(this) | ||
} | ||
@@ -48,3 +53,3 @@ destroy.apply(this, arguments) | ||
const ret = {} | ||
_.extend(ret, parentVal) | ||
extend(ret, parentVal) | ||
for (let key in childVal) { | ||
@@ -56,3 +61,3 @@ let a = ret[key] | ||
if (a && hooksToMergeRE.test(key)) { | ||
ret[key] = (_.isArray(a) ? a : [a]).concat(b) | ||
ret[key] = (isArray(a) ? a : [a]).concat(b) | ||
} else { | ||
@@ -59,0 +64,0 @@ ret[key] = b |
@@ -140,16 +140,7 @@ import { getRouteConfig, resolveAsyncComponent, isPromise } from './util' | ||
view.unbuild(true) | ||
// handle keep-alive. | ||
// if the view has keep-alive, the child vm is not actually | ||
// destroyed - its nested views will still be in router's | ||
// view list. We need to removed these child views and | ||
// cache them on the child vm. | ||
if (view.keepAlive) { | ||
let views = transition.router._views | ||
let i = views.indexOf(view) | ||
if (i > 0) { | ||
transition.router._views = views.slice(i) | ||
if (view.childVM) { | ||
view.childVM._routerViews = views.slice(0, i) | ||
} | ||
} | ||
// cache the child view on the kept-alive child vm. | ||
if (view.keepAlive && view.childVM && view.childView) { | ||
view.childVM._keepAliveRouterView = view.childView | ||
} | ||
@@ -163,4 +154,8 @@ | ||
$loadingRouteData: loading | ||
}, | ||
created () { | ||
this._routerView = view | ||
} | ||
}) | ||
// handle keep-alive. | ||
@@ -172,7 +167,6 @@ // when a kept-alive child vm is restored, we need to | ||
component.$loadingRouteData = loading | ||
let cachedViews = component._routerViews | ||
if (cachedViews) { | ||
transition.router._views = cachedViews.concat(transition.router._views) | ||
view.childView = cachedViews[cachedViews.length - 1] | ||
component._routerViews = null | ||
let cachedChildView = component._keepAliveRouterView | ||
if (cachedChildView) { | ||
view.childView = cachedChildView | ||
component._keepAliveRouterView = null | ||
} | ||
@@ -270,3 +264,3 @@ } | ||
if (Array.isArray(data) && data._needMerge) { | ||
data = data.reduce(function (res, obj) { | ||
data = data.reduce((res, obj) => { | ||
if (isPlainObject(obj)) { | ||
@@ -296,2 +290,3 @@ Object.keys(obj).forEach(key => { | ||
component.$loadingRouteData = false | ||
component.$emit('route-data-loaded', component) | ||
cb && cb() | ||
@@ -301,2 +296,3 @@ } else { | ||
component.$loadingRouteData = false | ||
component.$emit('route-data-loaded', component) | ||
cb && cb() | ||
@@ -303,0 +299,0 @@ }, onError) |
@@ -26,20 +26,2 @@ import { warn, mapParams, isPromise } from './util' | ||
this.done = false | ||
// start by determine the queues | ||
// the deactivate queue is an array of router-view | ||
// directive instances that need to be deactivated, | ||
// deepest first. | ||
this.deactivateQueue = router._views | ||
// check the default handler of the deepest match | ||
let matched = to.matched | ||
? Array.prototype.slice.call(to.matched) | ||
: [] | ||
// the activate queue is an array of route handlers | ||
// that need to be activated | ||
this.activateQueue = matched.map(function (match) { | ||
return match.handler | ||
}) | ||
} | ||
@@ -115,11 +97,20 @@ | ||
let transition = this | ||
let daq = this.deactivateQueue | ||
let aq = this.activateQueue | ||
let rdaq = daq.slice().reverse() | ||
let reuseQueue | ||
// determine the queue of views to deactivate | ||
let deactivateQueue = [] | ||
let view = this.router._rootView | ||
while (view) { | ||
deactivateQueue.unshift(view) | ||
view = view.childView | ||
} | ||
let reverseDeactivateQueue = deactivateQueue.slice().reverse() | ||
// determine the queue of route handlers to activate | ||
let activateQueue = this.activateQueue = | ||
toArray(this.to.matched).map(match => match.handler) | ||
// 1. Reusability phase | ||
let i | ||
for (i = 0; i < rdaq.length; i++) { | ||
if (!canReuse(rdaq[i], aq[i], transition)) { | ||
let i, reuseQueue | ||
for (i = 0; i < reverseDeactivateQueue.length; i++) { | ||
if (!canReuse(reverseDeactivateQueue[i], activateQueue[i], transition)) { | ||
break | ||
@@ -129,11 +120,11 @@ } | ||
if (i > 0) { | ||
reuseQueue = rdaq.slice(0, i) | ||
daq = rdaq.slice(i).reverse() | ||
aq = aq.slice(i) | ||
reuseQueue = reverseDeactivateQueue.slice(0, i) | ||
deactivateQueue = reverseDeactivateQueue.slice(i).reverse() | ||
activateQueue = activateQueue.slice(i) | ||
} | ||
// 2. Validation phase | ||
transition.runQueue(daq, canDeactivate, () => { | ||
transition.runQueue(aq, canActivate, () => { | ||
transition.runQueue(daq, deactivate, () => { | ||
transition.runQueue(deactivateQueue, canDeactivate, () => { | ||
transition.runQueue(activateQueue, canActivate, () => { | ||
transition.runQueue(deactivateQueue, deactivate, () => { | ||
// 3. Activation phase | ||
@@ -145,10 +136,8 @@ | ||
// trigger reuse for all reused views | ||
reuseQueue && reuseQueue.forEach(function (view) { | ||
reuse(view, transition) | ||
}) | ||
reuseQueue && reuseQueue.forEach(view => reuse(view, transition)) | ||
// the root of the chain that needs to be replaced | ||
// is the top-most non-reusable view. | ||
if (daq.length) { | ||
let view = daq[daq.length - 1] | ||
if (deactivateQueue.length) { | ||
let view = deactivateQueue[deactivateQueue.length - 1] | ||
let depth = reuseQueue ? reuseQueue.length : 0 | ||
@@ -318,1 +307,7 @@ activate(view, transition, depth, cb) | ||
} | ||
function toArray (val) { | ||
return val | ||
? Array.prototype.slice.call(val) | ||
: [] | ||
} |
@@ -18,3 +18,2 @@ import RouteRecognizer from '../lib/route-recognizer' | ||
console.warn('[vue-router] ' + msg) | ||
/* istanbul ignore if */ | ||
if (!exports.Vue || exports.Vue.config.debug) { | ||
@@ -141,2 +140,3 @@ console.warn(new Error('warning stack trace:').stack) | ||
let val = params[key] | ||
/* istanbul ignore if */ | ||
if (!val) { | ||
@@ -143,0 +143,0 @@ warn( |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
48
175429
18
4526