vuejs-rails 2.2.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Readme.md +16 -4
- data/lib/vuejs-rails.rb +9 -0
- data/lib/vuejs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/{vue-resource.js → dist/vue-resource.js} +28 -12
- data/vendor/assets/javascripts/dist/vue-resource.min.js +7 -0
- data/vendor/assets/javascripts/{vue-router.js → dist/vue-router.js} +448 -264
- data/vendor/assets/javascripts/dist/vue-router.min.js +6 -0
- data/vendor/assets/javascripts/{vue.js → dist/vue.js} +1243 -794
- data/vendor/assets/javascripts/dist/vue.min.js +8 -0
- data/vendor/assets/javascripts/{vuex.js → dist/vuex.js} +6 -8
- data/vendor/assets/javascripts/dist/vuex.min.js +6 -0
- data/vendor/assets/javascripts/vue-resource.js.erb +1 -0
- data/vendor/assets/javascripts/vue-router.js.erb +1 -0
- data/vendor/assets/javascripts/vue.js.erb +1 -0
- data/vendor/assets/javascripts/vuex.js.erb +1 -0
- metadata +15 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 869cf26b6079bbf39d417889c604e1522950bc46
|
4
|
+
data.tar.gz: c31c58f1e95cfe35f632b11c7f696ec352063702
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e014ef47475c5c5b37a9d5bb071cd5484f6c05ca71386add02ffbbeae695806bafd908a371bd30a36dd34c536ab906e12ec5488edc9d3cdce39c2195f7b15134
|
7
|
+
data.tar.gz: d24371fcf29b98392b191b75927493dfb2386490fc4847bd2042f781eff7830cd274e324ff6b746b1c0a728d8bb4558c25e94c4645180bc46799caa481423f03
|
data/Readme.md
CHANGED
@@ -9,10 +9,10 @@ Rails 3.1+ asset-pipeline gem to provide Vue.js
|
|
9
9
|
|
10
10
|
### Package Versions
|
11
11
|
|
12
|
-
- vue v2.2
|
13
|
-
- vue-router v2.2
|
14
|
-
- vue-resource v1.
|
15
|
-
- vuex v2.
|
12
|
+
- vue v2.3.2
|
13
|
+
- vue-router v2.5.2
|
14
|
+
- vue-resource v1.3.1
|
15
|
+
- vuex v2.3.0
|
16
16
|
|
17
17
|
### Setup
|
18
18
|
|
@@ -41,6 +41,18 @@ In `app/views/layouts/application.html.erb`, move this line from the head of the
|
|
41
41
|
|
42
42
|
You may write your Vue.js code directly in your views using `<script>` tags, or in a separate Javascript file (recommended).
|
43
43
|
|
44
|
+
#### Full and minified assets versions
|
45
|
+
|
46
|
+
Starting from version '>= 2.3.2', by default, gem uses minified versions in production and full versions otherwise.
|
47
|
+
|
48
|
+
You can override this behavior by setting `Vue.development_mode` flag:
|
49
|
+
```ruby
|
50
|
+
Vue.development_mode = true
|
51
|
+
```
|
52
|
+
You can do it in e.g. `config/initializers/vue_config.rb`, your environment initializers.
|
53
|
+
|
54
|
+
Make sure to clean your assets cache (`rake tmp:cache:clear`) after changing state of the flag.
|
55
|
+
|
44
56
|
## Contributing
|
45
57
|
|
46
58
|
Contributions are welcome, please follow [GitHub Flow](https://guides.github.com/introduction/flow/index.html)
|
data/lib/vuejs-rails.rb
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
require "vuejs-rails/version"
|
2
2
|
|
3
3
|
module Vue
|
4
|
+
mattr_accessor :development_mode
|
5
|
+
|
6
|
+
class << self
|
7
|
+
development_mode = defined?(::Rails) && ::Rails.env.development?
|
8
|
+
def full_or_minified(asset_name)
|
9
|
+
development_mode ? "dist/#{asset_name}.js": "dist/#{asset_name}.min.js"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
4
13
|
module Rails
|
5
14
|
require "vuejs-rails/engine" if defined?(::Rails) and Gem::Requirement.new('>= 3.1').satisfied_by?(Gem::Version.new ::Rails.version)
|
6
15
|
end
|
data/lib/vuejs-rails/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* vue-resource v1.
|
2
|
+
* vue-resource v1.3.1
|
3
3
|
* https://github.com/pagekit/vue-resource
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -657,7 +657,15 @@ function Url(url, params) {
|
|
657
657
|
options$$1 = merge({}, Url.options, self.$options, options$$1);
|
658
658
|
|
659
659
|
Url.transforms.forEach(function (handler) {
|
660
|
-
|
660
|
+
|
661
|
+
if (isString(handler)) {
|
662
|
+
handler = Url.transform[handler];
|
663
|
+
}
|
664
|
+
|
665
|
+
if (isFunction(handler)) {
|
666
|
+
transform = factory(handler, transform, self.$vm);
|
667
|
+
}
|
668
|
+
|
661
669
|
});
|
662
670
|
|
663
671
|
return transform(options$$1);
|
@@ -677,7 +685,8 @@ Url.options = {
|
|
677
685
|
* Url transforms.
|
678
686
|
*/
|
679
687
|
|
680
|
-
Url.
|
688
|
+
Url.transform = {template: template, query: query, root: root};
|
689
|
+
Url.transforms = ['template', 'query', 'root'];
|
681
690
|
|
682
691
|
/**
|
683
692
|
* Encodes a Url parameter string.
|
@@ -1012,8 +1021,6 @@ var header = function (request, next) {
|
|
1012
1021
|
* XMLHttp client (Browser).
|
1013
1022
|
*/
|
1014
1023
|
|
1015
|
-
var SUPPORTS_BLOB = typeof Blob !== 'undefined' && typeof FileReader !== 'undefined';
|
1016
|
-
|
1017
1024
|
var xhrClient = function (request) {
|
1018
1025
|
return new PromiseObj(function (resolve) {
|
1019
1026
|
|
@@ -1049,7 +1056,11 @@ var xhrClient = function (request) {
|
|
1049
1056
|
xhr.timeout = request.timeout;
|
1050
1057
|
}
|
1051
1058
|
|
1052
|
-
if (request.
|
1059
|
+
if (request.responseType && 'responseType' in xhr) {
|
1060
|
+
xhr.responseType = request.responseType;
|
1061
|
+
}
|
1062
|
+
|
1063
|
+
if (request.withCredentials || request.credentials) {
|
1053
1064
|
xhr.withCredentials = true;
|
1054
1065
|
}
|
1055
1066
|
|
@@ -1057,10 +1068,6 @@ var xhrClient = function (request) {
|
|
1057
1068
|
request.headers.set('X-Requested-With', 'XMLHttpRequest');
|
1058
1069
|
}
|
1059
1070
|
|
1060
|
-
if ('responseType' in xhr && SUPPORTS_BLOB) {
|
1061
|
-
xhr.responseType = 'blob';
|
1062
|
-
}
|
1063
|
-
|
1064
1071
|
request.headers.forEach(function (value, name) {
|
1065
1072
|
xhr.setRequestHeader(name, value);
|
1066
1073
|
});
|
@@ -1357,7 +1364,15 @@ function Http(options$$1) {
|
|
1357
1364
|
defaults(options$$1 || {}, self.$options, Http.options);
|
1358
1365
|
|
1359
1366
|
Http.interceptors.forEach(function (handler) {
|
1360
|
-
|
1367
|
+
|
1368
|
+
if (isString(handler)) {
|
1369
|
+
handler = Http.interceptor[handler];
|
1370
|
+
}
|
1371
|
+
|
1372
|
+
if (isFunction(handler)) {
|
1373
|
+
client.use(handler);
|
1374
|
+
}
|
1375
|
+
|
1361
1376
|
});
|
1362
1377
|
|
1363
1378
|
return client(new Request(options$$1)).then(function (response) {
|
@@ -1385,7 +1400,8 @@ Http.headers = {
|
|
1385
1400
|
custom: {}
|
1386
1401
|
};
|
1387
1402
|
|
1388
|
-
Http.
|
1403
|
+
Http.interceptor = {before: before, method: method, body: body, jsonp: jsonp, header: header, cors: cors};
|
1404
|
+
Http.interceptors = ['before', 'method', 'body', 'jsonp', 'header', 'cors'];
|
1389
1405
|
|
1390
1406
|
['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {
|
1391
1407
|
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*!
|
2
|
+
* vue-resource v1.3.1
|
3
|
+
* https://github.com/pagekit/vue-resource
|
4
|
+
* Released under the MIT License.
|
5
|
+
*/
|
6
|
+
|
7
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueResource=e()}(this,function(){"use strict";function t(t){this.state=D,this.value=void 0,this.deferred=[];var e=this;try{t(function(t){e.resolve(t)},function(t){e.reject(t)})}catch(t){e.reject(t)}}function e(t,e){t instanceof Promise?this.promise=t:this.promise=new Promise(t.bind(e)),this.context=e}function n(t){"undefined"!=typeof console&&z&&console.warn("[VueResource warn]: "+t)}function o(t){"undefined"!=typeof console&&console.error(t)}function r(t,e){return X(t,e)}function i(t){return t?t.replace(/^\s*|\s*$/g,""):""}function u(t){return t?t.toLowerCase():""}function s(t){return t?t.toUpperCase():""}function a(t){return"string"==typeof t}function c(t){return"function"==typeof t}function f(t){return null!==t&&"object"==typeof t}function p(t){return f(t)&&Object.getPrototypeOf(t)==Object.prototype}function h(t){return"undefined"!=typeof Blob&&t instanceof Blob}function d(t){return"undefined"!=typeof FormData&&t instanceof FormData}function l(t,n,o){var r=e.resolve(t);return arguments.length<2?r:r.then(n,o)}function m(t,e,n){return n=n||{},c(n)&&(n=n.call(e)),v(t.bind({$vm:e,$options:n}),t,{$options:n})}function y(t,e){var n,o;if(Y(t))for(n=0;n<t.length;n++)e.call(t[n],t[n],n);else if(f(t))for(o in t)G.call(t,o)&&e.call(t[o],t[o],o);return t}function v(t){return _.call(arguments,1).forEach(function(e){w(t,e,!0)}),t}function b(t){return _.call(arguments,1).forEach(function(e){for(var n in e)void 0===t[n]&&(t[n]=e[n])}),t}function g(t){return _.call(arguments,1).forEach(function(e){w(t,e)}),t}function w(t,e,n){for(var o in e)n&&(p(e[o])||Y(e[o]))?(p(e[o])&&!p(t[o])&&(t[o]={}),Y(e[o])&&!Y(t[o])&&(t[o]=[]),w(t[o],e[o],n)):void 0!==e[o]&&(t[o]=e[o])}function T(t,e,n){var o=x(t),r=o.expand(e);return n&&n.push.apply(n,o.vars),r}function x(t){var e=["+","#",".","/",";","?","&"],n=[];return{vars:n,expand:function(o){return t.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(t,r,i){if(r){var u=null,s=[];if(-1!==e.indexOf(r.charAt(0))&&(u=r.charAt(0),r=r.substr(1)),r.split(/,/g).forEach(function(t){var e=/([^:\*]*)(?::(\d+)|(\*))?/.exec(t);s.push.apply(s,j(o,u,e[1],e[2]||e[3])),n.push(e[1])}),u&&"+"!==u){var a=",";return"?"===u?a="&":"#"!==u&&(a=u),(0!==s.length?u:"")+s.join(a)}return s.join(",")}return C(i)})}}}function j(t,e,n,o){var r=t[n],i=[];if(E(r)&&""!==r)if("string"==typeof r||"number"==typeof r||"boolean"==typeof r)r=r.toString(),o&&"*"!==o&&(r=r.substring(0,parseInt(o,10))),i.push(P(e,r,O(e)?n:null));else if("*"===o)Array.isArray(r)?r.filter(E).forEach(function(t){i.push(P(e,t,O(e)?n:null))}):Object.keys(r).forEach(function(t){E(r[t])&&i.push(P(e,r[t],t))});else{var u=[];Array.isArray(r)?r.filter(E).forEach(function(t){u.push(P(e,t))}):Object.keys(r).forEach(function(t){E(r[t])&&(u.push(encodeURIComponent(t)),u.push(P(e,r[t].toString())))}),O(e)?i.push(encodeURIComponent(n)+"="+u.join(",")):0!==u.length&&i.push(u.join(","))}else";"===e?i.push(encodeURIComponent(n)):""!==r||"&"!==e&&"?"!==e?""===r&&i.push(""):i.push(encodeURIComponent(n)+"=");return i}function E(t){return void 0!==t&&null!==t}function O(t){return";"===t||"&"===t||"?"===t}function P(t,e,n){return e="+"===t||"#"===t?C(e):encodeURIComponent(e),n?encodeURIComponent(n)+"="+e:e}function C(t){return t.split(/(%[0-9A-Fa-f]{2})/g).map(function(t){return/%[0-9A-Fa-f]/.test(t)||(t=encodeURI(t)),t}).join("")}function $(t,e){var n,o=this||{},r=t;return a(t)&&(r={url:t,params:e}),r=v({},$.options,o.$options,r),$.transforms.forEach(function(t){a(t)&&(t=$.transform[t]),c(t)&&(n=U(t,n,o.$vm))}),n(r)}function U(t,e,n){return function(o){return t.call(n,o,e)}}function A(t,e,n){var o,r=Y(e),i=p(e);y(e,function(e,u){o=f(e)||Y(e),n&&(u=n+"["+(i||o?u:"")+"]"),!n&&r?t.add(e.name,e.value):o?A(t,e,u):t.add(u,e)})}function R(t){var e=t.match(/^\[|^\{(?!\{)/),n={"[":/]$/,"{":/}$/};return e&&n[e[0]].test(t)}function S(t,e){e((t.client||(K?ht:dt))(t))}function k(t,e){return Object.keys(t).reduce(function(t,n){return u(e)===u(n)?n:t},null)}function I(t){if(/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return i(t)}function q(t){return new e(function(e){var n=new FileReader;n.readAsText(t),n.onload=function(){e(n.result)}})}function H(t){return 0===t.type.indexOf("text")||-1!==t.type.indexOf("json")}function L(t){var n=this||{},r=lt(n.$vm);return b(t||{},n.$options,L.options),L.interceptors.forEach(function(t){a(t)&&(t=L.interceptor[t]),c(t)&&r.use(t)}),r(new vt(t)).then(function(t){return t.ok?t:e.reject(t)},function(t){return t instanceof Error&&o(t),e.reject(t)})}function B(t,e,n,o){var r=this||{},i={};return n=Z({},B.actions,n),y(n,function(n,u){n=v({url:t,params:Z({},e)},o,n),i[u]=function(){return(r.$http||L)(M(n,arguments))}}),i}function M(t,e){var n,o=Z({},t),r={};switch(e.length){case 2:r=e[0],n=e[1];break;case 1:/^(POST|PUT|PATCH)$/i.test(o.method)?n=e[0]:r=e[0];break;case 0:break;default:throw"Expected up to 2 arguments [params, body], got "+e.length+" arguments"}return o.body=n,o.params=Z({},o.params,r),o}function N(t){N.installed||(Q(t),t.url=$,t.http=L,t.resource=B,t.Promise=e,Object.defineProperties(t.prototype,{$url:{get:function(){return m(t.url,this,this.$options.url)}},$http:{get:function(){return m(t.http,this,this.$options.http)}},$resource:{get:function(){return t.resource.bind(this)}},$promise:{get:function(){var e=this;return function(n){return new t.Promise(n,e)}}}}))}var D=2;t.reject=function(e){return new t(function(t,n){n(e)})},t.resolve=function(e){return new t(function(t,n){t(e)})},t.all=function(e){return new t(function(n,o){var r=0,i=[];0===e.length&&n(i);for(var u=0;u<e.length;u+=1)t.resolve(e[u]).then(function(t){return function(o){i[t]=o,(r+=1)===e.length&&n(i)}}(u),o)})},t.race=function(e){return new t(function(n,o){for(var r=0;r<e.length;r+=1)t.resolve(e[r]).then(n,o)})};var J=t.prototype;J.resolve=function(t){var e=this;if(e.state===D){if(t===e)throw new TypeError("Promise settled with itself.");var n=!1;try{var o=t&&t.then;if(null!==t&&"object"==typeof t&&"function"==typeof o)return void o.call(t,function(t){n||e.resolve(t),n=!0},function(t){n||e.reject(t),n=!0})}catch(t){return void(n||e.reject(t))}e.state=0,e.value=t,e.notify()}},J.reject=function(t){var e=this;if(e.state===D){if(t===e)throw new TypeError("Promise settled with itself.");e.state=1,e.value=t,e.notify()}},J.notify=function(){var t=this;r(function(){if(t.state!==D)for(;t.deferred.length;){var e=t.deferred.shift(),n=e[0],o=e[1],r=e[2],i=e[3];try{0===t.state?r("function"==typeof n?n.call(void 0,t.value):t.value):1===t.state&&("function"==typeof o?r(o.call(void 0,t.value)):i(t.value))}catch(t){i(t)}}})},J.then=function(e,n){var o=this;return new t(function(t,r){o.deferred.push([e,n,t,r]),o.notify()})},J.catch=function(t){return this.then(void 0,t)},"undefined"==typeof Promise&&(window.Promise=t),e.all=function(t,n){return new e(Promise.all(t),n)},e.resolve=function(t,n){return new e(Promise.resolve(t),n)},e.reject=function(t,n){return new e(Promise.reject(t),n)},e.race=function(t,n){return new e(Promise.race(t),n)};var W=e.prototype;W.bind=function(t){return this.context=t,this},W.then=function(t,n){return t&&t.bind&&this.context&&(t=t.bind(this.context)),n&&n.bind&&this.context&&(n=n.bind(this.context)),new e(this.promise.then(t,n),this.context)},W.catch=function(t){return t&&t.bind&&this.context&&(t=t.bind(this.context)),new e(this.promise.catch(t),this.context)},W.finally=function(t){return this.then(function(e){return t.call(this),e},function(e){return t.call(this),Promise.reject(e)})};var X,F={},G=F.hasOwnProperty,V=[],_=V.slice,z=!1,K="undefined"!=typeof window,Q=function(t){var e=t.config,n=t.nextTick;X=n,z=e.debug||!e.silent},Y=Array.isArray,Z=Object.assign||g,tt=function(t,e){var n=e(t);return a(t.root)&&!n.match(/^(https?:)?\//)&&(n=t.root+"/"+n),n},et=function(t,e){var n=Object.keys($.options.params),o={},r=e(t);return y(t.params,function(t,e){-1===n.indexOf(e)&&(o[e]=t)}),o=$.params(o),o&&(r+=(-1==r.indexOf("?")?"?":"&")+o),r},nt=function(t){var e=[],n=T(t.url,t.params,e);return e.forEach(function(e){delete t.params[e]}),n};$.options={url:"",root:null,params:{}},$.transform={template:nt,query:et,root:tt},$.transforms=["template","query","root"],$.params=function(t){var e=[],n=encodeURIComponent;return e.add=function(t,e){c(e)&&(e=e()),null===e&&(e=""),this.push(n(t)+"="+n(e))},A(e,t),e.join("&").replace(/%20/g,"+")},$.parse=function(t){var e=document.createElement("a");return document.documentMode&&(e.href=t,t=e.href),e.href=t,{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",port:e.port,host:e.host,hostname:e.hostname,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):""}};var ot=function(t){return new e(function(e){var n=new XDomainRequest,o=function(o){var r=o.type,i=0;"load"===r?i=200:"error"===r&&(i=500),e(t.respondWith(n.responseText,{status:i}))};t.abort=function(){return n.abort()},n.open(t.method,t.getUrl()),t.timeout&&(n.timeout=t.timeout),n.onload=o,n.onabort=o,n.onerror=o,n.ontimeout=o,n.onprogress=function(){},n.send(t.getBody())})},rt=K&&"withCredentials"in new XMLHttpRequest,it=function(t,e){if(K){var n=$.parse(location.href),o=$.parse(t.getUrl());o.protocol===n.protocol&&o.host===n.host||(t.crossOrigin=!0,t.emulateHTTP=!1,rt||(t.client=ot))}e()},ut=function(t,e){d(t.body)?t.headers.delete("Content-Type"):(f(t.body)||Y(t.body))&&(t.emulateJSON?(t.body=$.params(t.body),t.headers.set("Content-Type","application/x-www-form-urlencoded")):t.body=JSON.stringify(t.body)),e(function(t){return Object.defineProperty(t,"data",{get:function(){return this.body},set:function(t){this.body=t}}),t.bodyText?l(t.text(),function(e){if(0===(t.headers.get("Content-Type")||"").indexOf("application/json")||R(e))try{t.body=JSON.parse(e)}catch(e){t.body=null}else t.body=e;return t}):t})},st=function(t){return new e(function(e){var n,o,r=t.jsonp||"callback",i=t.jsonpCallback||"_jsonp"+Math.random().toString(36).substr(2),u=null;n=function(n){var r=n.type,s=0;"load"===r&&null!==u?s=200:"error"===r&&(s=500),s&&window[i]&&(delete window[i],document.body.removeChild(o)),e(t.respondWith(u,{status:s}))},window[i]=function(t){u=JSON.stringify(t)},t.abort=function(){n({type:"abort"})},t.params[r]=i,t.timeout&&setTimeout(t.abort,t.timeout),o=document.createElement("script"),o.src=t.getUrl(),o.type="text/javascript",o.async=!0,o.onload=n,o.onerror=n,document.body.appendChild(o)})},at=function(t,e){"JSONP"==t.method&&(t.client=st),e()},ct=function(t,e){c(t.before)&&t.before.call(this,t),e()},ft=function(t,e){t.emulateHTTP&&/^(PUT|PATCH|DELETE)$/i.test(t.method)&&(t.headers.set("X-HTTP-Method-Override",t.method),t.method="POST"),e()},pt=function(t,e){y(Z({},L.headers.common,t.crossOrigin?{}:L.headers.custom,L.headers[u(t.method)]),function(e,n){t.headers.has(n)||t.headers.set(n,e)}),e()},ht=function(t){return new e(function(e){var n=new XMLHttpRequest,o=function(o){var r=t.respondWith("response"in n?n.response:n.responseText,{status:1223===n.status?204:n.status,statusText:1223===n.status?"No Content":i(n.statusText)});y(i(n.getAllResponseHeaders()).split("\n"),function(t){r.headers.append(t.slice(0,t.indexOf(":")),t.slice(t.indexOf(":")+1))}),e(r)};t.abort=function(){return n.abort()},t.progress&&("GET"===t.method?n.addEventListener("progress",t.progress):/^(POST|PUT)$/i.test(t.method)&&n.upload.addEventListener("progress",t.progress)),n.open(t.method,t.getUrl(),!0),t.timeout&&(n.timeout=t.timeout),t.responseType&&"responseType"in n&&(n.responseType=t.responseType),(t.withCredentials||t.credentials)&&(n.withCredentials=!0),t.crossOrigin||t.headers.set("X-Requested-With","XMLHttpRequest"),t.headers.forEach(function(t,e){n.setRequestHeader(e,t)}),n.onload=o,n.onabort=o,n.onerror=o,n.ontimeout=o,n.send(t.getBody())})},dt=function(t){var n=require("got");return new e(function(e){var o,r=t.getUrl(),u=t.getBody(),s=t.method,a={};t.headers.forEach(function(t,e){a[e]=t}),n(r,{body:u,method:s,headers:a}).then(o=function(n){var o=t.respondWith(n.body,{status:n.statusCode,statusText:i(n.statusMessage)});y(n.headers,function(t,e){o.headers.set(e,t)}),e(o)},function(t){return o(t.response)})})},lt=function(t){function o(o){return new e(function(e){function s(){r=i.pop(),c(r)?r.call(t,o,a):(n("Invalid interceptor of type "+typeof r+", must be a function"),a())}function a(n){if(c(n))u.unshift(n);else if(f(n))return u.forEach(function(e){n=l(n,function(n){return e.call(t,n)||n})}),void l(n,e);s()}s()},t)}var r,i=[S],u=[];return f(t)||(t=null),o.use=function(t){i.push(t)},o},mt=function(t){var e=this;this.map={},y(t,function(t,n){return e.append(n,t)})};mt.prototype.has=function(t){return null!==k(this.map,t)},mt.prototype.get=function(t){var e=this.map[k(this.map,t)];return e?e.join():null},mt.prototype.getAll=function(t){return this.map[k(this.map,t)]||[]},mt.prototype.set=function(t,e){this.map[I(k(this.map,t)||t)]=[i(e)]},mt.prototype.append=function(t,e){var n=this.map[k(this.map,t)];n?n.push(i(e)):this.set(t,e)},mt.prototype.delete=function(t){delete this.map[k(this.map,t)]},mt.prototype.deleteAll=function(){this.map={}},mt.prototype.forEach=function(t,e){var n=this;y(this.map,function(o,r){y(o,function(o){return t.call(e,o,r,n)})})};var yt=function(t,e){var n=e.url,o=e.headers,r=e.status,i=e.statusText;this.url=n,this.ok=r>=200&&r<300,this.status=r||0,this.statusText=i||"",this.headers=new mt(o),this.body=t,a(t)?this.bodyText=t:h(t)&&(this.bodyBlob=t,H(t)&&(this.bodyText=q(t)))};yt.prototype.blob=function(){return l(this.bodyBlob)},yt.prototype.text=function(){return l(this.bodyText)},yt.prototype.json=function(){return l(this.text(),function(t){return JSON.parse(t)})};var vt=function(t){this.body=null,this.params={},Z(this,t,{method:s(t.method||"GET")}),this.headers instanceof mt||(this.headers=new mt(this.headers))};vt.prototype.getUrl=function(){return $(this)},vt.prototype.getBody=function(){return this.body},vt.prototype.respondWith=function(t,e){return new yt(t,Z(e||{},{url:this.getUrl()}))};var bt={Accept:"application/json, text/plain, */*"},gt={"Content-Type":"application/json;charset=utf-8"};return L.options={},L.headers={put:gt,post:gt,patch:gt,delete:gt,common:bt,custom:{}},L.interceptor={before:ct,method:ft,body:ut,jsonp:at,header:pt,cors:it},L.interceptors=["before","method","body","jsonp","header","cors"],["get","delete","head","jsonp"].forEach(function(t){L[t]=function(e,n){return this(Z(n||{},{url:e,method:t}))}}),["post","put","patch"].forEach(function(t){L[t]=function(e,n,o){return this(Z(o||{},{url:e,method:t,body:n}))}}),B.actions={get:{method:"GET"},save:{method:"POST"},query:{method:"GET"},update:{method:"PUT"},remove:{method:"DELETE"},delete:{method:"DELETE"}},"undefined"!=typeof window&&window.Vue&&window.Vue.use(N),N});
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* vue-router v2.2
|
2
|
+
* vue-router v2.5.2
|
3
3
|
* (c) 2017 Evan You
|
4
4
|
* @license MIT
|
5
5
|
*/
|
@@ -18,7 +18,7 @@ function assert (condition, message) {
|
|
18
18
|
}
|
19
19
|
|
20
20
|
function warn (condition, message) {
|
21
|
-
if (!condition) {
|
21
|
+
if ("development" !== 'production' && !condition) {
|
22
22
|
typeof console !== 'undefined' && console.warn(("[vue-router] " + message));
|
23
23
|
}
|
24
24
|
}
|
@@ -32,7 +32,7 @@ var View = {
|
|
32
32
|
default: 'default'
|
33
33
|
}
|
34
34
|
},
|
35
|
-
render: function render (
|
35
|
+
render: function render (_, ref) {
|
36
36
|
var props = ref.props;
|
37
37
|
var children = ref.children;
|
38
38
|
var parent = ref.parent;
|
@@ -40,6 +40,9 @@ var View = {
|
|
40
40
|
|
41
41
|
data.routerView = true;
|
42
42
|
|
43
|
+
// directly use parent context's createElement() function
|
44
|
+
// so that components rendered by router-view can resolve named slots
|
45
|
+
var h = parent.$createElement;
|
43
46
|
var name = props.name;
|
44
47
|
var route = parent.$route;
|
45
48
|
var cache = parent._routerViewCache || (parent._routerViewCache = {});
|
@@ -73,18 +76,19 @@ var View = {
|
|
73
76
|
|
74
77
|
var component = cache[name] = matched.components[name];
|
75
78
|
|
76
|
-
//
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
matched.instances[name] = vnode.child;
|
83
|
-
};
|
84
|
-
hooks.destroy = function (vnode) {
|
85
|
-
if (matched.instances[name] === vnode.child) {
|
86
|
-
matched.instances[name] = undefined;
|
79
|
+
// attach instance registration hook
|
80
|
+
// this will be called in the instance's injected lifecycle hooks
|
81
|
+
data.registerRouteInstance = function (vm, val) {
|
82
|
+
// val could be undefined for unregistration
|
83
|
+
if (matched.instances[name] !== vm) {
|
84
|
+
matched.instances[name] = val;
|
87
85
|
}
|
86
|
+
}
|
87
|
+
|
88
|
+
// also regiseter instance in prepatch hook
|
89
|
+
// in case the same component instance is reused across different routes
|
90
|
+
;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {
|
91
|
+
matched.instances[name] = vnode.componentInstance;
|
88
92
|
};
|
89
93
|
|
90
94
|
// resolve props
|
@@ -105,7 +109,13 @@ function resolveProps (route, config) {
|
|
105
109
|
case 'boolean':
|
106
110
|
return config ? route.params : undefined
|
107
111
|
default:
|
108
|
-
|
112
|
+
{
|
113
|
+
warn(
|
114
|
+
false,
|
115
|
+
"props in \"" + (route.path) + "\" is a " + (typeof config) + ", " +
|
116
|
+
"expecting an object, function or boolean."
|
117
|
+
);
|
118
|
+
}
|
109
119
|
}
|
110
120
|
}
|
111
121
|
|
@@ -115,7 +125,7 @@ var encodeReserveRE = /[!'()*]/g;
|
|
115
125
|
var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };
|
116
126
|
var commaRE = /%2C/g;
|
117
127
|
|
118
|
-
// fixed encodeURIComponent which is more
|
128
|
+
// fixed encodeURIComponent which is more conformant to RFC3986:
|
119
129
|
// - escapes [!'()*]
|
120
130
|
// - preserve commas
|
121
131
|
var encode = function (str) { return encodeURIComponent(str)
|
@@ -126,25 +136,24 @@ var decode = decodeURIComponent;
|
|
126
136
|
|
127
137
|
function resolveQuery (
|
128
138
|
query,
|
129
|
-
extraQuery
|
139
|
+
extraQuery,
|
140
|
+
_parseQuery
|
130
141
|
) {
|
131
142
|
if ( extraQuery === void 0 ) extraQuery = {};
|
132
143
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
}
|
141
|
-
for (var key in extraQuery) {
|
142
|
-
parsedQuery[key] = extraQuery[key];
|
143
|
-
}
|
144
|
-
return parsedQuery
|
145
|
-
} else {
|
146
|
-
return extraQuery
|
144
|
+
var parse = _parseQuery || parseQuery;
|
145
|
+
var parsedQuery;
|
146
|
+
try {
|
147
|
+
parsedQuery = parse(query || '');
|
148
|
+
} catch (e) {
|
149
|
+
"development" !== 'production' && warn(false, e.message);
|
150
|
+
parsedQuery = {};
|
147
151
|
}
|
152
|
+
for (var key in extraQuery) {
|
153
|
+
var val = extraQuery[key];
|
154
|
+
parsedQuery[key] = Array.isArray(val) ? val.slice() : val;
|
155
|
+
}
|
156
|
+
return parsedQuery
|
148
157
|
}
|
149
158
|
|
150
159
|
function parseQuery (query) {
|
@@ -209,13 +218,16 @@ function stringifyQuery (obj) {
|
|
209
218
|
|
210
219
|
/* */
|
211
220
|
|
221
|
+
|
212
222
|
var trailingSlashRE = /\/?$/;
|
213
223
|
|
214
224
|
function createRoute (
|
215
225
|
record,
|
216
226
|
location,
|
217
|
-
redirectedFrom
|
227
|
+
redirectedFrom,
|
228
|
+
router
|
218
229
|
) {
|
230
|
+
var stringifyQuery$$1 = router && router.options.stringifyQuery;
|
219
231
|
var route = {
|
220
232
|
name: location.name || (record && record.name),
|
221
233
|
meta: (record && record.meta) || {},
|
@@ -223,11 +235,11 @@ function createRoute (
|
|
223
235
|
hash: location.hash || '',
|
224
236
|
query: location.query || {},
|
225
237
|
params: location.params || {},
|
226
|
-
fullPath: getFullPath(location),
|
238
|
+
fullPath: getFullPath(location, stringifyQuery$$1),
|
227
239
|
matched: record ? formatMatch(record) : []
|
228
240
|
};
|
229
241
|
if (redirectedFrom) {
|
230
|
-
route.redirectedFrom = getFullPath(redirectedFrom);
|
242
|
+
route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery$$1);
|
231
243
|
}
|
232
244
|
return Object.freeze(route)
|
233
245
|
}
|
@@ -246,12 +258,16 @@ function formatMatch (record) {
|
|
246
258
|
return res
|
247
259
|
}
|
248
260
|
|
249
|
-
function getFullPath (
|
261
|
+
function getFullPath (
|
262
|
+
ref,
|
263
|
+
_stringifyQuery
|
264
|
+
) {
|
250
265
|
var path = ref.path;
|
251
266
|
var query = ref.query; if ( query === void 0 ) query = {};
|
252
267
|
var hash = ref.hash; if ( hash === void 0 ) hash = '';
|
253
268
|
|
254
|
-
|
269
|
+
var stringify = _stringifyQuery || stringifyQuery;
|
270
|
+
return (path || '/') + stringify(query) + hash
|
255
271
|
}
|
256
272
|
|
257
273
|
function isSameRoute (a, b) {
|
@@ -329,6 +345,7 @@ var Link = {
|
|
329
345
|
append: Boolean,
|
330
346
|
replace: Boolean,
|
331
347
|
activeClass: String,
|
348
|
+
exactActiveClass: String,
|
332
349
|
event: {
|
333
350
|
type: eventTypes,
|
334
351
|
default: 'click'
|
@@ -343,11 +360,30 @@ var Link = {
|
|
343
360
|
var location = ref.location;
|
344
361
|
var route = ref.route;
|
345
362
|
var href = ref.href;
|
363
|
+
|
346
364
|
var classes = {};
|
347
|
-
var
|
348
|
-
var
|
365
|
+
var globalActiveClass = router.options.linkActiveClass;
|
366
|
+
var globalExactActiveClass = router.options.linkExactActiveClass;
|
367
|
+
// Support global empty active class
|
368
|
+
var activeClassFallback = globalActiveClass == null
|
369
|
+
? 'router-link-active'
|
370
|
+
: globalActiveClass;
|
371
|
+
var exactActiveClassFallback = globalExactActiveClass == null
|
372
|
+
? 'router-link-exact-active'
|
373
|
+
: globalExactActiveClass;
|
374
|
+
var activeClass = this.activeClass == null
|
375
|
+
? activeClassFallback
|
376
|
+
: this.activeClass;
|
377
|
+
var exactActiveClass = this.exactActiveClass == null
|
378
|
+
? exactActiveClassFallback
|
379
|
+
: this.exactActiveClass;
|
380
|
+
var compareTarget = location.path
|
381
|
+
? createRoute(null, location, null, router)
|
382
|
+
: route;
|
383
|
+
|
384
|
+
classes[exactActiveClass] = isSameRoute(current, compareTarget);
|
349
385
|
classes[activeClass] = this.exact
|
350
|
-
?
|
386
|
+
? classes[exactActiveClass]
|
351
387
|
: isIncludedRoute(current, compareTarget);
|
352
388
|
|
353
389
|
var handler = function (e) {
|
@@ -403,8 +439,8 @@ function guardEvent (e) {
|
|
403
439
|
// don't redirect on right click
|
404
440
|
if (e.button !== undefined && e.button !== 0) { return }
|
405
441
|
// don't redirect if `target="_blank"`
|
406
|
-
if (e.
|
407
|
-
var target = e.
|
442
|
+
if (e.currentTarget && e.currentTarget.getAttribute) {
|
443
|
+
var target = e.currentTarget.getAttribute('target');
|
408
444
|
if (/\b_blank\b/i.test(target)) { return }
|
409
445
|
}
|
410
446
|
// this may be a Weex event which doesn't have this method
|
@@ -445,13 +481,26 @@ function install (Vue) {
|
|
445
481
|
get: function get () { return this.$root._route }
|
446
482
|
});
|
447
483
|
|
484
|
+
var isDef = function (v) { return v !== undefined; };
|
485
|
+
|
486
|
+
var registerInstance = function (vm, callVal) {
|
487
|
+
var i = vm.$options._parentVnode;
|
488
|
+
if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
|
489
|
+
i(vm, callVal);
|
490
|
+
}
|
491
|
+
};
|
492
|
+
|
448
493
|
Vue.mixin({
|
449
494
|
beforeCreate: function beforeCreate () {
|
450
|
-
if (this.$options.router) {
|
495
|
+
if (isDef(this.$options.router)) {
|
451
496
|
this._router = this.$options.router;
|
452
497
|
this._router.init(this);
|
453
498
|
Vue.util.defineReactive(this, '_route', this._router.history.current);
|
454
499
|
}
|
500
|
+
registerInstance(this, this);
|
501
|
+
},
|
502
|
+
destroyed: function destroyed () {
|
503
|
+
registerInstance(this);
|
455
504
|
}
|
456
505
|
});
|
457
506
|
|
@@ -474,11 +523,12 @@ function resolvePath (
|
|
474
523
|
base,
|
475
524
|
append
|
476
525
|
) {
|
477
|
-
|
526
|
+
var firstChar = relative.charAt(0);
|
527
|
+
if (firstChar === '/') {
|
478
528
|
return relative
|
479
529
|
}
|
480
530
|
|
481
|
-
if (
|
531
|
+
if (firstChar === '?' || firstChar === '#') {
|
482
532
|
return base + relative
|
483
533
|
}
|
484
534
|
|
@@ -495,11 +545,9 @@ function resolvePath (
|
|
495
545
|
var segments = relative.replace(/^\//, '').split('/');
|
496
546
|
for (var i = 0; i < segments.length; i++) {
|
497
547
|
var segment = segments[i];
|
498
|
-
if (segment === '
|
499
|
-
continue
|
500
|
-
} else if (segment === '..') {
|
548
|
+
if (segment === '..') {
|
501
549
|
stack.pop();
|
502
|
-
} else {
|
550
|
+
} else if (segment !== '.') {
|
503
551
|
stack.push(segment);
|
504
552
|
}
|
505
553
|
}
|
@@ -539,127 +587,6 @@ function cleanPath (path) {
|
|
539
587
|
return path.replace(/\/\//g, '/')
|
540
588
|
}
|
541
589
|
|
542
|
-
/* */
|
543
|
-
|
544
|
-
function createRouteMap (
|
545
|
-
routes,
|
546
|
-
oldPathMap,
|
547
|
-
oldNameMap
|
548
|
-
) {
|
549
|
-
var pathMap = oldPathMap || Object.create(null);
|
550
|
-
var nameMap = oldNameMap || Object.create(null);
|
551
|
-
|
552
|
-
routes.forEach(function (route) {
|
553
|
-
addRouteRecord(pathMap, nameMap, route);
|
554
|
-
});
|
555
|
-
|
556
|
-
return {
|
557
|
-
pathMap: pathMap,
|
558
|
-
nameMap: nameMap
|
559
|
-
}
|
560
|
-
}
|
561
|
-
|
562
|
-
function addRouteRecord (
|
563
|
-
pathMap,
|
564
|
-
nameMap,
|
565
|
-
route,
|
566
|
-
parent,
|
567
|
-
matchAs
|
568
|
-
) {
|
569
|
-
var path = route.path;
|
570
|
-
var name = route.name;
|
571
|
-
{
|
572
|
-
assert(path != null, "\"path\" is required in a route configuration.");
|
573
|
-
assert(
|
574
|
-
typeof route.component !== 'string',
|
575
|
-
"route config \"component\" for path: " + (String(path || name)) + " cannot be a " +
|
576
|
-
"string id. Use an actual component instead."
|
577
|
-
);
|
578
|
-
}
|
579
|
-
|
580
|
-
var record = {
|
581
|
-
path: normalizePath(path, parent),
|
582
|
-
components: route.components || { default: route.component },
|
583
|
-
instances: {},
|
584
|
-
name: name,
|
585
|
-
parent: parent,
|
586
|
-
matchAs: matchAs,
|
587
|
-
redirect: route.redirect,
|
588
|
-
beforeEnter: route.beforeEnter,
|
589
|
-
meta: route.meta || {},
|
590
|
-
props: route.props == null
|
591
|
-
? {}
|
592
|
-
: route.components
|
593
|
-
? route.props
|
594
|
-
: { default: route.props }
|
595
|
-
};
|
596
|
-
|
597
|
-
if (route.children) {
|
598
|
-
// Warn if route is named and has a default child route.
|
599
|
-
// If users navigate to this route by name, the default child will
|
600
|
-
// not be rendered (GH Issue #629)
|
601
|
-
{
|
602
|
-
if (route.name && route.children.some(function (child) { return /^\/?$/.test(child.path); })) {
|
603
|
-
warn(
|
604
|
-
false,
|
605
|
-
"Named Route '" + (route.name) + "' has a default child route. " +
|
606
|
-
"When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), " +
|
607
|
-
"the default child route will not be rendered. Remove the name from " +
|
608
|
-
"this route and use the name of the default child route for named " +
|
609
|
-
"links instead."
|
610
|
-
);
|
611
|
-
}
|
612
|
-
}
|
613
|
-
route.children.forEach(function (child) {
|
614
|
-
var childMatchAs = matchAs
|
615
|
-
? cleanPath((matchAs + "/" + (child.path)))
|
616
|
-
: undefined;
|
617
|
-
addRouteRecord(pathMap, nameMap, child, record, childMatchAs);
|
618
|
-
});
|
619
|
-
}
|
620
|
-
|
621
|
-
if (route.alias !== undefined) {
|
622
|
-
if (Array.isArray(route.alias)) {
|
623
|
-
route.alias.forEach(function (alias) {
|
624
|
-
var aliasRoute = {
|
625
|
-
path: alias,
|
626
|
-
children: route.children
|
627
|
-
};
|
628
|
-
addRouteRecord(pathMap, nameMap, aliasRoute, parent, record.path);
|
629
|
-
});
|
630
|
-
} else {
|
631
|
-
var aliasRoute = {
|
632
|
-
path: route.alias,
|
633
|
-
children: route.children
|
634
|
-
};
|
635
|
-
addRouteRecord(pathMap, nameMap, aliasRoute, parent, record.path);
|
636
|
-
}
|
637
|
-
}
|
638
|
-
|
639
|
-
if (!pathMap[record.path]) {
|
640
|
-
pathMap[record.path] = record;
|
641
|
-
}
|
642
|
-
|
643
|
-
if (name) {
|
644
|
-
if (!nameMap[name]) {
|
645
|
-
nameMap[name] = record;
|
646
|
-
} else if ("development" !== 'production' && !matchAs) {
|
647
|
-
warn(
|
648
|
-
false,
|
649
|
-
"Duplicate named routes definition: " +
|
650
|
-
"{ name: \"" + name + "\", path: \"" + (record.path) + "\" }"
|
651
|
-
);
|
652
|
-
}
|
653
|
-
}
|
654
|
-
}
|
655
|
-
|
656
|
-
function normalizePath (path, parent) {
|
657
|
-
path = path.replace(/\/$/, '');
|
658
|
-
if (path[0] === '/') { return path }
|
659
|
-
if (parent == null) { return path }
|
660
|
-
return cleanPath(((parent.path) + "/" + path))
|
661
|
-
}
|
662
|
-
|
663
590
|
var index$1 = Array.isArray || function (arr) {
|
664
591
|
return Object.prototype.toString.call(arr) == '[object Array]';
|
665
592
|
};
|
@@ -1098,24 +1025,6 @@ index.tokensToRegExp = tokensToRegExp_1;
|
|
1098
1025
|
|
1099
1026
|
/* */
|
1100
1027
|
|
1101
|
-
var regexpCache = Object.create(null);
|
1102
|
-
|
1103
|
-
function getRouteRegex (path) {
|
1104
|
-
var hit = regexpCache[path];
|
1105
|
-
var keys, regexp;
|
1106
|
-
|
1107
|
-
if (hit) {
|
1108
|
-
keys = hit.keys;
|
1109
|
-
regexp = hit.regexp;
|
1110
|
-
} else {
|
1111
|
-
keys = [];
|
1112
|
-
regexp = index(path, keys);
|
1113
|
-
regexpCache[path] = { keys: keys, regexp: regexp };
|
1114
|
-
}
|
1115
|
-
|
1116
|
-
return { keys: keys, regexp: regexp }
|
1117
|
-
}
|
1118
|
-
|
1119
1028
|
var regexpCompileCache = Object.create(null);
|
1120
1029
|
|
1121
1030
|
function fillParams (
|
@@ -1138,10 +1047,162 @@ function fillParams (
|
|
1138
1047
|
|
1139
1048
|
/* */
|
1140
1049
|
|
1050
|
+
function createRouteMap (
|
1051
|
+
routes,
|
1052
|
+
oldPathList,
|
1053
|
+
oldPathMap,
|
1054
|
+
oldNameMap
|
1055
|
+
) {
|
1056
|
+
// the path list is used to control path matching priority
|
1057
|
+
var pathList = oldPathList || [];
|
1058
|
+
var pathMap = oldPathMap || Object.create(null);
|
1059
|
+
var nameMap = oldNameMap || Object.create(null);
|
1060
|
+
|
1061
|
+
routes.forEach(function (route) {
|
1062
|
+
addRouteRecord(pathList, pathMap, nameMap, route);
|
1063
|
+
});
|
1064
|
+
|
1065
|
+
// ensure wildcard routes are always at the end
|
1066
|
+
for (var i = 0, l = pathList.length; i < l; i++) {
|
1067
|
+
if (pathList[i] === '*') {
|
1068
|
+
pathList.push(pathList.splice(i, 1)[0]);
|
1069
|
+
l--;
|
1070
|
+
i--;
|
1071
|
+
}
|
1072
|
+
}
|
1073
|
+
|
1074
|
+
return {
|
1075
|
+
pathList: pathList,
|
1076
|
+
pathMap: pathMap,
|
1077
|
+
nameMap: nameMap
|
1078
|
+
}
|
1079
|
+
}
|
1080
|
+
|
1081
|
+
function addRouteRecord (
|
1082
|
+
pathList,
|
1083
|
+
pathMap,
|
1084
|
+
nameMap,
|
1085
|
+
route,
|
1086
|
+
parent,
|
1087
|
+
matchAs
|
1088
|
+
) {
|
1089
|
+
var path = route.path;
|
1090
|
+
var name = route.name;
|
1091
|
+
{
|
1092
|
+
assert(path != null, "\"path\" is required in a route configuration.");
|
1093
|
+
assert(
|
1094
|
+
typeof route.component !== 'string',
|
1095
|
+
"route config \"component\" for path: " + (String(path || name)) + " cannot be a " +
|
1096
|
+
"string id. Use an actual component instead."
|
1097
|
+
);
|
1098
|
+
}
|
1099
|
+
|
1100
|
+
var normalizedPath = normalizePath(path, parent);
|
1101
|
+
var record = {
|
1102
|
+
path: normalizedPath,
|
1103
|
+
regex: compileRouteRegex(normalizedPath),
|
1104
|
+
components: route.components || { default: route.component },
|
1105
|
+
instances: {},
|
1106
|
+
name: name,
|
1107
|
+
parent: parent,
|
1108
|
+
matchAs: matchAs,
|
1109
|
+
redirect: route.redirect,
|
1110
|
+
beforeEnter: route.beforeEnter,
|
1111
|
+
meta: route.meta || {},
|
1112
|
+
props: route.props == null
|
1113
|
+
? {}
|
1114
|
+
: route.components
|
1115
|
+
? route.props
|
1116
|
+
: { default: route.props }
|
1117
|
+
};
|
1118
|
+
|
1119
|
+
if (route.children) {
|
1120
|
+
// Warn if route is named and has a default child route.
|
1121
|
+
// If users navigate to this route by name, the default child will
|
1122
|
+
// not be rendered (GH Issue #629)
|
1123
|
+
{
|
1124
|
+
if (route.name && route.children.some(function (child) { return /^\/?$/.test(child.path); })) {
|
1125
|
+
warn(
|
1126
|
+
false,
|
1127
|
+
"Named Route '" + (route.name) + "' has a default child route. " +
|
1128
|
+
"When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), " +
|
1129
|
+
"the default child route will not be rendered. Remove the name from " +
|
1130
|
+
"this route and use the name of the default child route for named " +
|
1131
|
+
"links instead."
|
1132
|
+
);
|
1133
|
+
}
|
1134
|
+
}
|
1135
|
+
route.children.forEach(function (child) {
|
1136
|
+
var childMatchAs = matchAs
|
1137
|
+
? cleanPath((matchAs + "/" + (child.path)))
|
1138
|
+
: undefined;
|
1139
|
+
addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);
|
1140
|
+
});
|
1141
|
+
}
|
1142
|
+
|
1143
|
+
if (route.alias !== undefined) {
|
1144
|
+
if (Array.isArray(route.alias)) {
|
1145
|
+
route.alias.forEach(function (alias) {
|
1146
|
+
var aliasRoute = {
|
1147
|
+
path: alias,
|
1148
|
+
children: route.children
|
1149
|
+
};
|
1150
|
+
addRouteRecord(pathList, pathMap, nameMap, aliasRoute, parent, record.path);
|
1151
|
+
});
|
1152
|
+
} else {
|
1153
|
+
var aliasRoute = {
|
1154
|
+
path: route.alias,
|
1155
|
+
children: route.children
|
1156
|
+
};
|
1157
|
+
addRouteRecord(pathList, pathMap, nameMap, aliasRoute, parent, record.path);
|
1158
|
+
}
|
1159
|
+
}
|
1160
|
+
|
1161
|
+
if (!pathMap[record.path]) {
|
1162
|
+
pathList.push(record.path);
|
1163
|
+
pathMap[record.path] = record;
|
1164
|
+
}
|
1165
|
+
|
1166
|
+
if (name) {
|
1167
|
+
if (!nameMap[name]) {
|
1168
|
+
nameMap[name] = record;
|
1169
|
+
} else if ("development" !== 'production' && !matchAs) {
|
1170
|
+
warn(
|
1171
|
+
false,
|
1172
|
+
"Duplicate named routes definition: " +
|
1173
|
+
"{ name: \"" + name + "\", path: \"" + (record.path) + "\" }"
|
1174
|
+
);
|
1175
|
+
}
|
1176
|
+
}
|
1177
|
+
}
|
1178
|
+
|
1179
|
+
function compileRouteRegex (path) {
|
1180
|
+
var regex = index(path);
|
1181
|
+
{
|
1182
|
+
var keys = {};
|
1183
|
+
regex.keys.forEach(function (key) {
|
1184
|
+
warn(!keys[key.name], ("Duplicate param keys in route with path: \"" + path + "\""));
|
1185
|
+
keys[key.name] = true;
|
1186
|
+
});
|
1187
|
+
}
|
1188
|
+
return regex
|
1189
|
+
}
|
1190
|
+
|
1191
|
+
function normalizePath (path, parent) {
|
1192
|
+
path = path.replace(/\/$/, '');
|
1193
|
+
if (path[0] === '/') { return path }
|
1194
|
+
if (parent == null) { return path }
|
1195
|
+
return cleanPath(((parent.path) + "/" + path))
|
1196
|
+
}
|
1197
|
+
|
1198
|
+
/* */
|
1199
|
+
|
1200
|
+
|
1141
1201
|
function normalizeLocation (
|
1142
1202
|
raw,
|
1143
1203
|
current,
|
1144
|
-
append
|
1204
|
+
append,
|
1205
|
+
router
|
1145
1206
|
) {
|
1146
1207
|
var next = typeof raw === 'string' ? { path: raw } : raw;
|
1147
1208
|
// named target
|
@@ -1170,8 +1231,14 @@ function normalizeLocation (
|
|
1170
1231
|
var basePath = (current && current.path) || '/';
|
1171
1232
|
var path = parsedPath.path
|
1172
1233
|
? resolvePath(parsedPath.path, basePath, append || next.append)
|
1173
|
-
:
|
1174
|
-
|
1234
|
+
: basePath;
|
1235
|
+
|
1236
|
+
var query = resolveQuery(
|
1237
|
+
parsedPath.query,
|
1238
|
+
next.query,
|
1239
|
+
router && router.options.parseQuery
|
1240
|
+
);
|
1241
|
+
|
1175
1242
|
var hash = next.hash || parsedPath.hash;
|
1176
1243
|
if (hash && hash.charAt(0) !== '#') {
|
1177
1244
|
hash = "#" + hash;
|
@@ -1194,13 +1261,18 @@ function assign (a, b) {
|
|
1194
1261
|
|
1195
1262
|
/* */
|
1196
1263
|
|
1197
|
-
|
1264
|
+
|
1265
|
+
function createMatcher (
|
1266
|
+
routes,
|
1267
|
+
router
|
1268
|
+
) {
|
1198
1269
|
var ref = createRouteMap(routes);
|
1270
|
+
var pathList = ref.pathList;
|
1199
1271
|
var pathMap = ref.pathMap;
|
1200
1272
|
var nameMap = ref.nameMap;
|
1201
1273
|
|
1202
1274
|
function addRoutes (routes) {
|
1203
|
-
createRouteMap(routes, pathMap, nameMap);
|
1275
|
+
createRouteMap(routes, pathList, pathMap, nameMap);
|
1204
1276
|
}
|
1205
1277
|
|
1206
1278
|
function match (
|
@@ -1208,7 +1280,7 @@ function createMatcher (routes) {
|
|
1208
1280
|
currentRoute,
|
1209
1281
|
redirectedFrom
|
1210
1282
|
) {
|
1211
|
-
var location = normalizeLocation(raw, currentRoute);
|
1283
|
+
var location = normalizeLocation(raw, currentRoute, false, router);
|
1212
1284
|
var name = location.name;
|
1213
1285
|
|
1214
1286
|
if (name) {
|
@@ -1216,7 +1288,7 @@ function createMatcher (routes) {
|
|
1216
1288
|
{
|
1217
1289
|
warn(record, ("Route with name '" + name + "' does not exist"));
|
1218
1290
|
}
|
1219
|
-
var paramNames =
|
1291
|
+
var paramNames = record.regex.keys
|
1220
1292
|
.filter(function (key) { return !key.optional; })
|
1221
1293
|
.map(function (key) { return key.name; });
|
1222
1294
|
|
@@ -1238,9 +1310,11 @@ function createMatcher (routes) {
|
|
1238
1310
|
}
|
1239
1311
|
} else if (location.path) {
|
1240
1312
|
location.params = {};
|
1241
|
-
for (var
|
1242
|
-
|
1243
|
-
|
1313
|
+
for (var i = 0; i < pathList.length; i++) {
|
1314
|
+
var path = pathList[i];
|
1315
|
+
var record$1 = pathMap[path];
|
1316
|
+
if (matchRoute(record$1.regex, location.path, location.params)) {
|
1317
|
+
return _createRoute(record$1, location, redirectedFrom)
|
1244
1318
|
}
|
1245
1319
|
}
|
1246
1320
|
}
|
@@ -1254,7 +1328,7 @@ function createMatcher (routes) {
|
|
1254
1328
|
) {
|
1255
1329
|
var originalRedirect = record.redirect;
|
1256
1330
|
var redirect = typeof originalRedirect === 'function'
|
1257
|
-
? originalRedirect(createRoute(record, location))
|
1331
|
+
? originalRedirect(createRoute(record, location, null, router))
|
1258
1332
|
: originalRedirect;
|
1259
1333
|
|
1260
1334
|
if (typeof redirect === 'string') {
|
@@ -1262,9 +1336,11 @@ function createMatcher (routes) {
|
|
1262
1336
|
}
|
1263
1337
|
|
1264
1338
|
if (!redirect || typeof redirect !== 'object') {
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1339
|
+
{
|
1340
|
+
warn(
|
1341
|
+
false, ("invalid redirect option: " + (JSON.stringify(redirect)))
|
1342
|
+
);
|
1343
|
+
}
|
1268
1344
|
return _createRoute(null, location)
|
1269
1345
|
}
|
1270
1346
|
|
@@ -1304,7 +1380,9 @@ function createMatcher (routes) {
|
|
1304
1380
|
hash: hash
|
1305
1381
|
}, undefined, location)
|
1306
1382
|
} else {
|
1307
|
-
|
1383
|
+
{
|
1384
|
+
warn(false, ("invalid redirect option: " + (JSON.stringify(redirect))));
|
1385
|
+
}
|
1308
1386
|
return _createRoute(null, location)
|
1309
1387
|
}
|
1310
1388
|
}
|
@@ -1339,7 +1417,7 @@ function createMatcher (routes) {
|
|
1339
1417
|
if (record && record.matchAs) {
|
1340
1418
|
return alias(record, location, record.matchAs)
|
1341
1419
|
}
|
1342
|
-
return createRoute(record, location, redirectedFrom)
|
1420
|
+
return createRoute(record, location, redirectedFrom, router)
|
1343
1421
|
}
|
1344
1422
|
|
1345
1423
|
return {
|
@@ -1349,14 +1427,11 @@ function createMatcher (routes) {
|
|
1349
1427
|
}
|
1350
1428
|
|
1351
1429
|
function matchRoute (
|
1430
|
+
regex,
|
1352
1431
|
path,
|
1353
|
-
params
|
1354
|
-
pathname
|
1432
|
+
params
|
1355
1433
|
) {
|
1356
|
-
var
|
1357
|
-
var regexp = ref.regexp;
|
1358
|
-
var keys = ref.keys;
|
1359
|
-
var m = pathname.match(regexp);
|
1434
|
+
var m = path.match(regex);
|
1360
1435
|
|
1361
1436
|
if (!m) {
|
1362
1437
|
return false
|
@@ -1365,9 +1440,11 @@ function matchRoute (
|
|
1365
1440
|
}
|
1366
1441
|
|
1367
1442
|
for (var i = 1, len = m.length; i < len; ++i) {
|
1368
|
-
var key = keys[i - 1];
|
1443
|
+
var key = regex.keys[i - 1];
|
1369
1444
|
var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];
|
1370
|
-
if (key) {
|
1445
|
+
if (key) {
|
1446
|
+
params[key.name] = val;
|
1447
|
+
}
|
1371
1448
|
}
|
1372
1449
|
|
1373
1450
|
return true
|
@@ -1453,7 +1530,8 @@ function getScrollPosition () {
|
|
1453
1530
|
}
|
1454
1531
|
|
1455
1532
|
function getElementPosition (el) {
|
1456
|
-
var
|
1533
|
+
var docEl = document.documentElement;
|
1534
|
+
var docRect = docEl.getBoundingClientRect();
|
1457
1535
|
var elRect = el.getBoundingClientRect();
|
1458
1536
|
return {
|
1459
1537
|
x: elRect.left - docRect.left,
|
@@ -1554,7 +1632,6 @@ function runQueue (queue, fn, cb) {
|
|
1554
1632
|
|
1555
1633
|
/* */
|
1556
1634
|
|
1557
|
-
|
1558
1635
|
var History = function History (router, base) {
|
1559
1636
|
this.router = router;
|
1560
1637
|
this.base = normalizeBase(base);
|
@@ -1563,20 +1640,29 @@ var History = function History (router, base) {
|
|
1563
1640
|
this.pending = null;
|
1564
1641
|
this.ready = false;
|
1565
1642
|
this.readyCbs = [];
|
1643
|
+
this.readyErrorCbs = [];
|
1644
|
+
this.errorCbs = [];
|
1566
1645
|
};
|
1567
1646
|
|
1568
1647
|
History.prototype.listen = function listen (cb) {
|
1569
1648
|
this.cb = cb;
|
1570
1649
|
};
|
1571
1650
|
|
1572
|
-
History.prototype.onReady = function onReady (cb) {
|
1651
|
+
History.prototype.onReady = function onReady (cb, errorCb) {
|
1573
1652
|
if (this.ready) {
|
1574
1653
|
cb();
|
1575
1654
|
} else {
|
1576
1655
|
this.readyCbs.push(cb);
|
1656
|
+
if (errorCb) {
|
1657
|
+
this.readyErrorCbs.push(errorCb);
|
1658
|
+
}
|
1577
1659
|
}
|
1578
1660
|
};
|
1579
1661
|
|
1662
|
+
History.prototype.onError = function onError (errorCb) {
|
1663
|
+
this.errorCbs.push(errorCb);
|
1664
|
+
};
|
1665
|
+
|
1580
1666
|
History.prototype.transitionTo = function transitionTo (location, onComplete, onAbort) {
|
1581
1667
|
var this$1 = this;
|
1582
1668
|
|
@@ -1589,18 +1675,34 @@ History.prototype.transitionTo = function transitionTo (location, onComplete, on
|
|
1589
1675
|
// fire ready cbs once
|
1590
1676
|
if (!this$1.ready) {
|
1591
1677
|
this$1.ready = true;
|
1592
|
-
this$1.readyCbs.forEach(function (cb) {
|
1593
|
-
cb(route);
|
1594
|
-
});
|
1678
|
+
this$1.readyCbs.forEach(function (cb) { cb(route); });
|
1595
1679
|
}
|
1596
|
-
},
|
1680
|
+
}, function (err) {
|
1681
|
+
if (onAbort) {
|
1682
|
+
onAbort(err);
|
1683
|
+
}
|
1684
|
+
if (err && !this$1.ready) {
|
1685
|
+
this$1.ready = true;
|
1686
|
+
this$1.readyErrorCbs.forEach(function (cb) { cb(err); });
|
1687
|
+
}
|
1688
|
+
});
|
1597
1689
|
};
|
1598
1690
|
|
1599
1691
|
History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {
|
1600
1692
|
var this$1 = this;
|
1601
1693
|
|
1602
1694
|
var current = this.current;
|
1603
|
-
var abort = function () {
|
1695
|
+
var abort = function (err) {
|
1696
|
+
if (isError(err)) {
|
1697
|
+
if (this$1.errorCbs.length) {
|
1698
|
+
this$1.errorCbs.forEach(function (cb) { cb(err); });
|
1699
|
+
} else {
|
1700
|
+
warn(false, 'uncaught error during route navigation:');
|
1701
|
+
console.error(err);
|
1702
|
+
}
|
1703
|
+
}
|
1704
|
+
onAbort && onAbort(err);
|
1705
|
+
};
|
1604
1706
|
if (
|
1605
1707
|
isSameRoute(route, current) &&
|
1606
1708
|
// in the case the route map has been dynamically appended to
|
@@ -1633,29 +1735,44 @@ History.prototype.confirmTransition = function confirmTransition (route, onCompl
|
|
1633
1735
|
if (this$1.pending !== route) {
|
1634
1736
|
return abort()
|
1635
1737
|
}
|
1636
|
-
|
1637
|
-
|
1638
|
-
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1738
|
+
try {
|
1739
|
+
hook(route, current, function (to) {
|
1740
|
+
if (to === false || isError(to)) {
|
1741
|
+
// next(false) -> abort navigation, ensure current URL
|
1742
|
+
this$1.ensureURL(true);
|
1743
|
+
abort(to);
|
1744
|
+
} else if (
|
1745
|
+
typeof to === 'string' ||
|
1746
|
+
(typeof to === 'object' && (
|
1747
|
+
typeof to.path === 'string' ||
|
1748
|
+
typeof to.name === 'string'
|
1749
|
+
))
|
1750
|
+
) {
|
1751
|
+
// next('/') or next({ path: '/' }) -> redirect
|
1752
|
+
abort();
|
1753
|
+
if (typeof to === 'object' && to.replace) {
|
1754
|
+
this$1.replace(to);
|
1755
|
+
} else {
|
1756
|
+
this$1.push(to);
|
1757
|
+
}
|
1758
|
+
} else {
|
1759
|
+
// confirm transition and pass on the value
|
1760
|
+
next(to);
|
1761
|
+
}
|
1762
|
+
});
|
1763
|
+
} catch (e) {
|
1764
|
+
abort(e);
|
1765
|
+
}
|
1650
1766
|
};
|
1651
1767
|
|
1652
1768
|
runQueue(queue, iterator, function () {
|
1653
1769
|
var postEnterCbs = [];
|
1654
1770
|
var isValid = function () { return this$1.current === route; };
|
1655
|
-
var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);
|
1656
1771
|
// wait until async components are resolved before
|
1657
1772
|
// extracting in-component enter guards
|
1658
|
-
|
1773
|
+
var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);
|
1774
|
+
var queue = enterGuards.concat(this$1.router.resolveHooks);
|
1775
|
+
runQueue(queue, iterator, function () {
|
1659
1776
|
if (this$1.pending !== route) {
|
1660
1777
|
return abort()
|
1661
1778
|
}
|
@@ -1663,7 +1780,7 @@ History.prototype.confirmTransition = function confirmTransition (route, onCompl
|
|
1663
1780
|
onComplete(route);
|
1664
1781
|
if (this$1.router.app) {
|
1665
1782
|
this$1.router.app.$nextTick(function () {
|
1666
|
-
postEnterCbs.forEach(function (cb) {
|
1783
|
+
postEnterCbs.forEach(function (cb) { cb(); });
|
1667
1784
|
});
|
1668
1785
|
}
|
1669
1786
|
});
|
@@ -1684,7 +1801,7 @@ function normalizeBase (base) {
|
|
1684
1801
|
if (inBrowser) {
|
1685
1802
|
// respect <base> tag
|
1686
1803
|
var baseEl = document.querySelector('base');
|
1687
|
-
base = baseEl
|
1804
|
+
base = (baseEl && baseEl.getAttribute('href')) || '/';
|
1688
1805
|
} else {
|
1689
1806
|
base = '/';
|
1690
1807
|
}
|
@@ -1752,8 +1869,10 @@ function extractUpdateHooks (updated) {
|
|
1752
1869
|
}
|
1753
1870
|
|
1754
1871
|
function bindGuard (guard, instance) {
|
1755
|
-
|
1756
|
-
return
|
1872
|
+
if (instance) {
|
1873
|
+
return function boundRouteGuard () {
|
1874
|
+
return guard.apply(instance, arguments)
|
1875
|
+
}
|
1757
1876
|
}
|
1758
1877
|
}
|
1759
1878
|
|
@@ -1807,31 +1926,66 @@ function poll (
|
|
1807
1926
|
}
|
1808
1927
|
|
1809
1928
|
function resolveAsyncComponents (matched) {
|
1810
|
-
return
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1929
|
+
return function (to, from, next) {
|
1930
|
+
var hasAsync = false;
|
1931
|
+
var pending = 0;
|
1932
|
+
var error = null;
|
1933
|
+
|
1934
|
+
flatMapComponents(matched, function (def, _, match, key) {
|
1935
|
+
// if it's a function and doesn't have cid attached,
|
1936
|
+
// assume it's an async component resolve function.
|
1937
|
+
// we are not using Vue's default async resolving mechanism because
|
1938
|
+
// we want to halt the navigation until the incoming component has been
|
1939
|
+
// resolved.
|
1940
|
+
if (typeof def === 'function' && def.cid === undefined) {
|
1941
|
+
hasAsync = true;
|
1942
|
+
pending++;
|
1943
|
+
|
1818
1944
|
var resolve = once(function (resolvedDef) {
|
1945
|
+
// save resolved on async factory in case it's used elsewhere
|
1946
|
+
def.resolved = typeof resolvedDef === 'function'
|
1947
|
+
? resolvedDef
|
1948
|
+
: _Vue.extend(resolvedDef);
|
1819
1949
|
match.components[key] = resolvedDef;
|
1820
|
-
|
1950
|
+
pending--;
|
1951
|
+
if (pending <= 0) {
|
1952
|
+
next();
|
1953
|
+
}
|
1821
1954
|
});
|
1822
1955
|
|
1823
1956
|
var reject = once(function (reason) {
|
1824
|
-
|
1825
|
-
|
1957
|
+
var msg = "Failed to resolve async component " + key + ": " + reason;
|
1958
|
+
"development" !== 'production' && warn(false, msg);
|
1959
|
+
if (!error) {
|
1960
|
+
error = isError(reason)
|
1961
|
+
? reason
|
1962
|
+
: new Error(msg);
|
1963
|
+
next(error);
|
1964
|
+
}
|
1826
1965
|
});
|
1827
1966
|
|
1828
|
-
var res
|
1829
|
-
|
1830
|
-
res
|
1967
|
+
var res;
|
1968
|
+
try {
|
1969
|
+
res = def(resolve, reject);
|
1970
|
+
} catch (e) {
|
1971
|
+
reject(e);
|
1972
|
+
}
|
1973
|
+
if (res) {
|
1974
|
+
if (typeof res.then === 'function') {
|
1975
|
+
res.then(resolve, reject);
|
1976
|
+
} else {
|
1977
|
+
// new syntax in Vue 2.3
|
1978
|
+
var comp = res.component;
|
1979
|
+
if (comp && typeof comp.then === 'function') {
|
1980
|
+
comp.then(resolve, reject);
|
1981
|
+
}
|
1982
|
+
}
|
1831
1983
|
}
|
1832
1984
|
}
|
1833
|
-
}
|
1834
|
-
|
1985
|
+
});
|
1986
|
+
|
1987
|
+
if (!hasAsync) { next(); }
|
1988
|
+
}
|
1835
1989
|
}
|
1836
1990
|
|
1837
1991
|
function flatMapComponents (
|
@@ -1864,6 +2018,10 @@ function once (fn) {
|
|
1864
2018
|
}
|
1865
2019
|
}
|
1866
2020
|
|
2021
|
+
function isError (err) {
|
2022
|
+
return Object.prototype.toString.call(err).indexOf('Error') > -1
|
2023
|
+
}
|
2024
|
+
|
1867
2025
|
/* */
|
1868
2026
|
|
1869
2027
|
|
@@ -1899,9 +2057,11 @@ var HTML5History = (function (History$$1) {
|
|
1899
2057
|
HTML5History.prototype.push = function push (location, onComplete, onAbort) {
|
1900
2058
|
var this$1 = this;
|
1901
2059
|
|
2060
|
+
var ref = this;
|
2061
|
+
var fromRoute = ref.current;
|
1902
2062
|
this.transitionTo(location, function (route) {
|
1903
2063
|
pushState(cleanPath(this$1.base + route.fullPath));
|
1904
|
-
handleScroll(this$1.router, route,
|
2064
|
+
handleScroll(this$1.router, route, fromRoute, false);
|
1905
2065
|
onComplete && onComplete(route);
|
1906
2066
|
}, onAbort);
|
1907
2067
|
};
|
@@ -1909,9 +2069,11 @@ var HTML5History = (function (History$$1) {
|
|
1909
2069
|
HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {
|
1910
2070
|
var this$1 = this;
|
1911
2071
|
|
2072
|
+
var ref = this;
|
2073
|
+
var fromRoute = ref.current;
|
1912
2074
|
this.transitionTo(location, function (route) {
|
1913
2075
|
replaceState(cleanPath(this$1.base + route.fullPath));
|
1914
|
-
handleScroll(this$1.router, route,
|
2076
|
+
handleScroll(this$1.router, route, fromRoute, false);
|
1915
2077
|
onComplete && onComplete(route);
|
1916
2078
|
}, onAbort);
|
1917
2079
|
};
|
@@ -2108,8 +2270,9 @@ var VueRouter = function VueRouter (options) {
|
|
2108
2270
|
this.apps = [];
|
2109
2271
|
this.options = options;
|
2110
2272
|
this.beforeHooks = [];
|
2273
|
+
this.resolveHooks = [];
|
2111
2274
|
this.afterHooks = [];
|
2112
|
-
this.matcher = createMatcher(options.routes || []);
|
2275
|
+
this.matcher = createMatcher(options.routes || [], this);
|
2113
2276
|
|
2114
2277
|
var mode = options.mode || 'hash';
|
2115
2278
|
this.fallback = mode === 'history' && !supportsPushState;
|
@@ -2193,15 +2356,23 @@ VueRouter.prototype.init = function init (app /* Vue component instance */) {
|
|
2193
2356
|
};
|
2194
2357
|
|
2195
2358
|
VueRouter.prototype.beforeEach = function beforeEach (fn) {
|
2196
|
-
this.beforeHooks
|
2359
|
+
return registerHook(this.beforeHooks, fn)
|
2360
|
+
};
|
2361
|
+
|
2362
|
+
VueRouter.prototype.beforeResolve = function beforeResolve (fn) {
|
2363
|
+
return registerHook(this.resolveHooks, fn)
|
2197
2364
|
};
|
2198
2365
|
|
2199
2366
|
VueRouter.prototype.afterEach = function afterEach (fn) {
|
2200
|
-
this.afterHooks
|
2367
|
+
return registerHook(this.afterHooks, fn)
|
2368
|
+
};
|
2369
|
+
|
2370
|
+
VueRouter.prototype.onReady = function onReady (cb, errorCb) {
|
2371
|
+
this.history.onReady(cb, errorCb);
|
2201
2372
|
};
|
2202
2373
|
|
2203
|
-
VueRouter.prototype.
|
2204
|
-
this.history.
|
2374
|
+
VueRouter.prototype.onError = function onError (errorCb) {
|
2375
|
+
this.history.onError(errorCb);
|
2205
2376
|
};
|
2206
2377
|
|
2207
2378
|
VueRouter.prototype.push = function push (location, onComplete, onAbort) {
|
@@ -2243,7 +2414,12 @@ VueRouter.prototype.resolve = function resolve (
|
|
2243
2414
|
current,
|
2244
2415
|
append
|
2245
2416
|
) {
|
2246
|
-
var location = normalizeLocation(
|
2417
|
+
var location = normalizeLocation(
|
2418
|
+
to,
|
2419
|
+
current || this.history.current,
|
2420
|
+
append,
|
2421
|
+
this
|
2422
|
+
);
|
2247
2423
|
var route = this.match(location, current);
|
2248
2424
|
var fullPath = route.redirectedFrom || route.fullPath;
|
2249
2425
|
var base = this.history.base;
|
@@ -2267,13 +2443,21 @@ VueRouter.prototype.addRoutes = function addRoutes (routes) {
|
|
2267
2443
|
|
2268
2444
|
Object.defineProperties( VueRouter.prototype, prototypeAccessors );
|
2269
2445
|
|
2446
|
+
function registerHook (list, fn) {
|
2447
|
+
list.push(fn);
|
2448
|
+
return function () {
|
2449
|
+
var i = list.indexOf(fn);
|
2450
|
+
if (i > -1) { list.splice(i, 1); }
|
2451
|
+
}
|
2452
|
+
}
|
2453
|
+
|
2270
2454
|
function createHref (base, fullPath, mode) {
|
2271
2455
|
var path = mode === 'hash' ? '#' + fullPath : fullPath;
|
2272
2456
|
return base ? cleanPath(base + '/' + path) : path
|
2273
2457
|
}
|
2274
2458
|
|
2275
2459
|
VueRouter.install = install;
|
2276
|
-
VueRouter.version = '2.2
|
2460
|
+
VueRouter.version = '2.5.2';
|
2277
2461
|
|
2278
2462
|
if (inBrowser && window.Vue) {
|
2279
2463
|
window.Vue.use(VueRouter);
|