vuejs-rails 2.0.8 → 2.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +2 -2
- data/lib/vuejs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/vue-router.js +347 -262
- data/vendor/assets/javascripts/vue.js +2984 -2585
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16478f016f5826347b878c367ff26308f302f743
|
4
|
+
data.tar.gz: 4da439179cae0bb30c41b0c2524c6e36ab82fe54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f12ffd66a5d7f826495d25a6f04ea8c9611af8cd6189a2cc9bae9b0a04a124eee2e1fee20199464f074d69202e925db16b319ef49e66382396cd2c3cba9e743d
|
7
|
+
data.tar.gz: 2bef31553724fba5407941397c6976f98fe0ff00873ab1d70fe600d85d19cdf7832adf36cfb6b8e577b13f1a478faaf7bb0f0c2b5aadfeb1259002d54609ef24
|
data/Readme.md
CHANGED
data/lib/vuejs-rails/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
/**
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
* vue-router v2.1.1
|
3
|
+
* (c) 2016 Evan You
|
4
|
+
* @license MIT
|
5
|
+
*/
|
6
6
|
(function (global, factory) {
|
7
7
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
8
8
|
typeof define === 'function' && define.amd ? define(factory) :
|
@@ -73,78 +73,6 @@ var View = {
|
|
73
73
|
|
74
74
|
/* */
|
75
75
|
|
76
|
-
function resolvePath (
|
77
|
-
relative,
|
78
|
-
base,
|
79
|
-
append
|
80
|
-
) {
|
81
|
-
if (relative.charAt(0) === '/') {
|
82
|
-
return relative
|
83
|
-
}
|
84
|
-
|
85
|
-
if (relative.charAt(0) === '?' || relative.charAt(0) === '#') {
|
86
|
-
return base + relative
|
87
|
-
}
|
88
|
-
|
89
|
-
var stack = base.split('/')
|
90
|
-
|
91
|
-
// remove trailing segment if:
|
92
|
-
// - not appending
|
93
|
-
// - appending to trailing slash (last segment is empty)
|
94
|
-
if (!append || !stack[stack.length - 1]) {
|
95
|
-
stack.pop()
|
96
|
-
}
|
97
|
-
|
98
|
-
// resolve relative path
|
99
|
-
var segments = relative.replace(/^\//, '').split('/')
|
100
|
-
for (var i = 0; i < segments.length; i++) {
|
101
|
-
var segment = segments[i]
|
102
|
-
if (segment === '.') {
|
103
|
-
continue
|
104
|
-
} else if (segment === '..') {
|
105
|
-
stack.pop()
|
106
|
-
} else {
|
107
|
-
stack.push(segment)
|
108
|
-
}
|
109
|
-
}
|
110
|
-
|
111
|
-
// ensure leading slash
|
112
|
-
if (stack[0] !== '') {
|
113
|
-
stack.unshift('')
|
114
|
-
}
|
115
|
-
|
116
|
-
return stack.join('/')
|
117
|
-
}
|
118
|
-
|
119
|
-
function parsePath (path) {
|
120
|
-
var hash = ''
|
121
|
-
var query = ''
|
122
|
-
|
123
|
-
var hashIndex = path.indexOf('#')
|
124
|
-
if (hashIndex >= 0) {
|
125
|
-
hash = path.slice(hashIndex)
|
126
|
-
path = path.slice(0, hashIndex)
|
127
|
-
}
|
128
|
-
|
129
|
-
var queryIndex = path.indexOf('?')
|
130
|
-
if (queryIndex >= 0) {
|
131
|
-
query = path.slice(queryIndex + 1)
|
132
|
-
path = path.slice(0, queryIndex)
|
133
|
-
}
|
134
|
-
|
135
|
-
return {
|
136
|
-
path: path,
|
137
|
-
query: query,
|
138
|
-
hash: hash
|
139
|
-
}
|
140
|
-
}
|
141
|
-
|
142
|
-
function cleanPath (path) {
|
143
|
-
return path.replace(/\/\//g, '/')
|
144
|
-
}
|
145
|
-
|
146
|
-
/* */
|
147
|
-
|
148
76
|
function assert (condition, message) {
|
149
77
|
if (!condition) {
|
150
78
|
throw new Error(("[vue-router] " + message))
|
@@ -173,7 +101,7 @@ function resolveQuery (
|
|
173
101
|
try {
|
174
102
|
parsedQuery = parseQuery(query)
|
175
103
|
} catch (e) {
|
176
|
-
warn(false, e.message)
|
104
|
+
"development" !== 'production' && warn(false, e.message)
|
177
105
|
parsedQuery = {}
|
178
106
|
}
|
179
107
|
for (var key in extraQuery) {
|
@@ -214,7 +142,7 @@ function parseQuery (query) {
|
|
214
142
|
}
|
215
143
|
|
216
144
|
function stringifyQuery (obj) {
|
217
|
-
var res = obj ? Object.keys(obj).
|
145
|
+
var res = obj ? Object.keys(obj).map(function (key) {
|
218
146
|
var val = obj[key]
|
219
147
|
|
220
148
|
if (val === undefined) {
|
@@ -345,37 +273,6 @@ function queryIncludes (current, target) {
|
|
345
273
|
|
346
274
|
/* */
|
347
275
|
|
348
|
-
function normalizeLocation (
|
349
|
-
raw,
|
350
|
-
current,
|
351
|
-
append
|
352
|
-
) {
|
353
|
-
var next = typeof raw === 'string' ? { path: raw } : raw
|
354
|
-
if (next.name || next._normalized) {
|
355
|
-
return next
|
356
|
-
}
|
357
|
-
|
358
|
-
var parsedPath = parsePath(next.path || '')
|
359
|
-
var basePath = (current && current.path) || '/'
|
360
|
-
var path = parsedPath.path
|
361
|
-
? resolvePath(parsedPath.path, basePath, append)
|
362
|
-
: (current && current.path) || '/'
|
363
|
-
var query = resolveQuery(parsedPath.query, next.query)
|
364
|
-
var hash = next.hash || parsedPath.hash
|
365
|
-
if (hash && hash.charAt(0) !== '#') {
|
366
|
-
hash = "#" + hash
|
367
|
-
}
|
368
|
-
|
369
|
-
return {
|
370
|
-
_normalized: true,
|
371
|
-
path: path,
|
372
|
-
query: query,
|
373
|
-
hash: hash
|
374
|
-
}
|
375
|
-
}
|
376
|
-
|
377
|
-
/* */
|
378
|
-
|
379
276
|
// work around weird flow bug
|
380
277
|
var toTypes = [String, Object]
|
381
278
|
|
@@ -393,50 +290,45 @@ var Link = {
|
|
393
290
|
exact: Boolean,
|
394
291
|
append: Boolean,
|
395
292
|
replace: Boolean,
|
396
|
-
activeClass: String
|
293
|
+
activeClass: String,
|
294
|
+
event: {
|
295
|
+
type: [String, Array],
|
296
|
+
default: 'click'
|
297
|
+
}
|
397
298
|
},
|
398
299
|
render: function render (h) {
|
399
300
|
var this$1 = this;
|
400
301
|
|
401
302
|
var router = this.$router
|
402
303
|
var current = this.$route
|
403
|
-
var
|
404
|
-
var
|
405
|
-
var
|
406
|
-
var
|
407
|
-
var href = createHref(base, fullPath, router.mode)
|
304
|
+
var ref = router.resolve(this.to, current, this.append);
|
305
|
+
var normalizedTo = ref.normalizedTo;
|
306
|
+
var resolved = ref.resolved;
|
307
|
+
var href = ref.href;
|
408
308
|
var classes = {}
|
409
309
|
var activeClass = this.activeClass || router.options.linkActiveClass || 'router-link-active'
|
410
|
-
var compareTarget =
|
310
|
+
var compareTarget = normalizedTo.path ? createRoute(null, normalizedTo) : resolved
|
411
311
|
classes[activeClass] = this.exact
|
412
312
|
? isSameRoute(current, compareTarget)
|
413
313
|
: isIncludedRoute(current, compareTarget)
|
414
314
|
|
415
|
-
var
|
416
|
-
|
417
|
-
// don't redirect with control keys
|
418
|
-
/* istanbul ignore if */
|
419
|
-
if (e.metaKey || e.ctrlKey || e.shiftKey) { return }
|
420
|
-
// don't redirect when preventDefault called
|
421
|
-
/* istanbul ignore if */
|
422
|
-
if (e.defaultPrevented) { return }
|
423
|
-
// don't redirect on right click
|
424
|
-
/* istanbul ignore if */
|
425
|
-
if (e.button !== 0) { return }
|
426
|
-
// don't redirect if `target="_blank"`
|
427
|
-
/* istanbul ignore if */
|
428
|
-
var target = e.target.getAttribute('target')
|
429
|
-
if (/\b_blank\b/i.test(target)) { return }
|
430
|
-
|
431
|
-
e.preventDefault()
|
315
|
+
var handler = function (e) {
|
316
|
+
if (guardEvent(e)) {
|
432
317
|
if (this$1.replace) {
|
433
|
-
router.replace(
|
318
|
+
router.replace(normalizedTo)
|
434
319
|
} else {
|
435
|
-
router.push(
|
320
|
+
router.push(normalizedTo)
|
436
321
|
}
|
437
322
|
}
|
438
323
|
}
|
439
324
|
|
325
|
+
var on = { click: guardEvent }
|
326
|
+
if (Array.isArray(this.event)) {
|
327
|
+
this.event.forEach(function (e) { on[e] = handler })
|
328
|
+
} else {
|
329
|
+
on[this.event] = handler
|
330
|
+
}
|
331
|
+
|
440
332
|
var data = {
|
441
333
|
class: classes
|
442
334
|
}
|
@@ -465,6 +357,25 @@ var Link = {
|
|
465
357
|
}
|
466
358
|
}
|
467
359
|
|
360
|
+
function guardEvent (e) {
|
361
|
+
// don't redirect with control keys
|
362
|
+
/* istanbul ignore if */
|
363
|
+
if (e.metaKey || e.ctrlKey || e.shiftKey) { return }
|
364
|
+
// don't redirect when preventDefault called
|
365
|
+
/* istanbul ignore if */
|
366
|
+
if (e.defaultPrevented) { return }
|
367
|
+
// don't redirect on right click
|
368
|
+
/* istanbul ignore if */
|
369
|
+
if (e.button !== 0) { return }
|
370
|
+
// don't redirect if `target="_blank"`
|
371
|
+
/* istanbul ignore if */
|
372
|
+
var target = e.target.getAttribute('target')
|
373
|
+
if (/\b_blank\b/i.test(target)) { return }
|
374
|
+
|
375
|
+
e.preventDefault()
|
376
|
+
return true
|
377
|
+
}
|
378
|
+
|
468
379
|
function findAnchor (children) {
|
469
380
|
if (children) {
|
470
381
|
var child
|
@@ -480,11 +391,6 @@ function findAnchor (children) {
|
|
480
391
|
}
|
481
392
|
}
|
482
393
|
|
483
|
-
function createHref (base, fullPath, mode) {
|
484
|
-
var path = mode === 'hash' ? '/#' + fullPath : fullPath
|
485
|
-
return base ? cleanPath(base + path) : path
|
486
|
-
}
|
487
|
-
|
488
394
|
var _Vue
|
489
395
|
|
490
396
|
function install (Vue) {
|
@@ -519,6 +425,168 @@ function install (Vue) {
|
|
519
425
|
strats.beforeRouteEnter = strats.beforeRouteLeave = strats.created
|
520
426
|
}
|
521
427
|
|
428
|
+
/* */
|
429
|
+
|
430
|
+
function resolvePath (
|
431
|
+
relative,
|
432
|
+
base,
|
433
|
+
append
|
434
|
+
) {
|
435
|
+
if (relative.charAt(0) === '/') {
|
436
|
+
return relative
|
437
|
+
}
|
438
|
+
|
439
|
+
if (relative.charAt(0) === '?' || relative.charAt(0) === '#') {
|
440
|
+
return base + relative
|
441
|
+
}
|
442
|
+
|
443
|
+
var stack = base.split('/')
|
444
|
+
|
445
|
+
// remove trailing segment if:
|
446
|
+
// - not appending
|
447
|
+
// - appending to trailing slash (last segment is empty)
|
448
|
+
if (!append || !stack[stack.length - 1]) {
|
449
|
+
stack.pop()
|
450
|
+
}
|
451
|
+
|
452
|
+
// resolve relative path
|
453
|
+
var segments = relative.replace(/^\//, '').split('/')
|
454
|
+
for (var i = 0; i < segments.length; i++) {
|
455
|
+
var segment = segments[i]
|
456
|
+
if (segment === '.') {
|
457
|
+
continue
|
458
|
+
} else if (segment === '..') {
|
459
|
+
stack.pop()
|
460
|
+
} else {
|
461
|
+
stack.push(segment)
|
462
|
+
}
|
463
|
+
}
|
464
|
+
|
465
|
+
// ensure leading slash
|
466
|
+
if (stack[0] !== '') {
|
467
|
+
stack.unshift('')
|
468
|
+
}
|
469
|
+
|
470
|
+
return stack.join('/')
|
471
|
+
}
|
472
|
+
|
473
|
+
function parsePath (path) {
|
474
|
+
var hash = ''
|
475
|
+
var query = ''
|
476
|
+
|
477
|
+
var hashIndex = path.indexOf('#')
|
478
|
+
if (hashIndex >= 0) {
|
479
|
+
hash = path.slice(hashIndex)
|
480
|
+
path = path.slice(0, hashIndex)
|
481
|
+
}
|
482
|
+
|
483
|
+
var queryIndex = path.indexOf('?')
|
484
|
+
if (queryIndex >= 0) {
|
485
|
+
query = path.slice(queryIndex + 1)
|
486
|
+
path = path.slice(0, queryIndex)
|
487
|
+
}
|
488
|
+
|
489
|
+
return {
|
490
|
+
path: path,
|
491
|
+
query: query,
|
492
|
+
hash: hash
|
493
|
+
}
|
494
|
+
}
|
495
|
+
|
496
|
+
function cleanPath (path) {
|
497
|
+
return path.replace(/\/\//g, '/')
|
498
|
+
}
|
499
|
+
|
500
|
+
/* */
|
501
|
+
|
502
|
+
function createRouteMap (routes) {
|
503
|
+
var pathMap = Object.create(null)
|
504
|
+
var nameMap = Object.create(null)
|
505
|
+
|
506
|
+
routes.forEach(function (route) {
|
507
|
+
addRouteRecord(pathMap, nameMap, route)
|
508
|
+
})
|
509
|
+
|
510
|
+
return {
|
511
|
+
pathMap: pathMap,
|
512
|
+
nameMap: nameMap
|
513
|
+
}
|
514
|
+
}
|
515
|
+
|
516
|
+
function addRouteRecord (
|
517
|
+
pathMap,
|
518
|
+
nameMap,
|
519
|
+
route,
|
520
|
+
parent,
|
521
|
+
matchAs
|
522
|
+
) {
|
523
|
+
var path = route.path;
|
524
|
+
var name = route.name;
|
525
|
+
if ("development" !== 'production') {
|
526
|
+
assert(path != null, "\"path\" is required in a route configuration.")
|
527
|
+
assert(
|
528
|
+
typeof route.component !== 'string',
|
529
|
+
"route config \"component\" for path: " + (String(path || name)) + " cannot be a " +
|
530
|
+
"string id. Use an actual component instead."
|
531
|
+
)
|
532
|
+
}
|
533
|
+
|
534
|
+
var record = {
|
535
|
+
path: normalizePath(path, parent),
|
536
|
+
components: route.components || { default: route.component },
|
537
|
+
instances: {},
|
538
|
+
name: name,
|
539
|
+
parent: parent,
|
540
|
+
matchAs: matchAs,
|
541
|
+
redirect: route.redirect,
|
542
|
+
beforeEnter: route.beforeEnter,
|
543
|
+
meta: route.meta || {}
|
544
|
+
}
|
545
|
+
|
546
|
+
if (route.children) {
|
547
|
+
// Warn if route is named and has a default child route.
|
548
|
+
// If users navigate to this route by name, the default child will
|
549
|
+
// not be rendered (GH Issue #629)
|
550
|
+
if ("development" !== 'production') {
|
551
|
+
if (route.name && route.children.some(function (child) { return /^\/?$/.test(child.path); })) {
|
552
|
+
warn(false, ("Named Route '" + (route.name) + "' has a default child route.\n When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), the default child route will not be rendered.\n Remove the name from this route and use the name of the default child route for named links instead.")
|
553
|
+
)
|
554
|
+
}
|
555
|
+
}
|
556
|
+
route.children.forEach(function (child) {
|
557
|
+
addRouteRecord(pathMap, nameMap, child, record)
|
558
|
+
})
|
559
|
+
}
|
560
|
+
|
561
|
+
if (route.alias !== undefined) {
|
562
|
+
if (Array.isArray(route.alias)) {
|
563
|
+
route.alias.forEach(function (alias) {
|
564
|
+
addRouteRecord(pathMap, nameMap, { path: alias }, parent, record.path)
|
565
|
+
})
|
566
|
+
} else {
|
567
|
+
addRouteRecord(pathMap, nameMap, { path: route.alias }, parent, record.path)
|
568
|
+
}
|
569
|
+
}
|
570
|
+
|
571
|
+
if (!pathMap[record.path]) {
|
572
|
+
pathMap[record.path] = record
|
573
|
+
}
|
574
|
+
if (name) {
|
575
|
+
if (!nameMap[name]) {
|
576
|
+
nameMap[name] = record
|
577
|
+
} else if ("development" !== 'production') {
|
578
|
+
warn(false, ("Duplicate named routes definition: { name: \"" + name + "\", path: \"" + (record.path) + "\" }"))
|
579
|
+
}
|
580
|
+
}
|
581
|
+
}
|
582
|
+
|
583
|
+
function normalizePath (path, parent) {
|
584
|
+
path = path.replace(/\/$/, '')
|
585
|
+
if (path[0] === '/') { return path }
|
586
|
+
if (parent == null) { return path }
|
587
|
+
return cleanPath(((parent.path) + "/" + path))
|
588
|
+
}
|
589
|
+
|
522
590
|
var __moduleExports = Array.isArray || function (arr) {
|
523
591
|
return Object.prototype.toString.call(arr) == '[object Array]';
|
524
592
|
};
|
@@ -957,88 +1025,102 @@ index.tokensToRegExp = tokensToRegExp_1;
|
|
957
1025
|
|
958
1026
|
/* */
|
959
1027
|
|
960
|
-
|
961
|
-
var pathMap = Object.create(null)
|
962
|
-
var nameMap = Object.create(null)
|
1028
|
+
var regexpCache = Object.create(null)
|
963
1029
|
|
964
|
-
|
965
|
-
|
966
|
-
|
1030
|
+
function getRouteRegex (path) {
|
1031
|
+
var hit = regexpCache[path]
|
1032
|
+
var keys, regexp
|
967
1033
|
|
968
|
-
|
969
|
-
|
970
|
-
|
1034
|
+
if (hit) {
|
1035
|
+
keys = hit.keys
|
1036
|
+
regexp = hit.regexp
|
1037
|
+
} else {
|
1038
|
+
keys = []
|
1039
|
+
regexp = index(path, keys)
|
1040
|
+
regexpCache[path] = { keys: keys, regexp: regexp }
|
971
1041
|
}
|
1042
|
+
|
1043
|
+
return { keys: keys, regexp: regexp }
|
972
1044
|
}
|
973
1045
|
|
974
|
-
|
975
|
-
pathMap,
|
976
|
-
nameMap,
|
977
|
-
route,
|
978
|
-
parent,
|
979
|
-
matchAs
|
980
|
-
) {
|
981
|
-
var path = route.path;
|
982
|
-
var name = route.name;
|
983
|
-
assert(path != null, "\"path\" is required in a route configuration.")
|
1046
|
+
var regexpCompileCache = Object.create(null)
|
984
1047
|
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
1048
|
+
function fillParams (
|
1049
|
+
path,
|
1050
|
+
params,
|
1051
|
+
routeMsg
|
1052
|
+
) {
|
1053
|
+
try {
|
1054
|
+
var filler =
|
1055
|
+
regexpCompileCache[path] ||
|
1056
|
+
(regexpCompileCache[path] = index.compile(path))
|
1057
|
+
return filler(params || {}, { pretty: true })
|
1058
|
+
} catch (e) {
|
1059
|
+
if ("development" !== 'production') {
|
1060
|
+
warn(false, ("missing param for " + routeMsg + ": " + (e.message)))
|
1061
|
+
}
|
1062
|
+
return ''
|
995
1063
|
}
|
1064
|
+
}
|
996
1065
|
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1066
|
+
/* */
|
1067
|
+
|
1068
|
+
function normalizeLocation (
|
1069
|
+
raw,
|
1070
|
+
current,
|
1071
|
+
append
|
1072
|
+
) {
|
1073
|
+
var next = typeof raw === 'string' ? { path: raw } : raw
|
1074
|
+
// named target
|
1075
|
+
if (next.name || next._normalized) {
|
1076
|
+
return next
|
1005
1077
|
}
|
1006
1078
|
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1079
|
+
// relative params
|
1080
|
+
if (!next.path && next.params && current) {
|
1081
|
+
next = assign({}, next)
|
1082
|
+
next._normalized = true
|
1083
|
+
var params = assign(assign({}, current.params), next.params)
|
1084
|
+
if (current.name) {
|
1085
|
+
next.name = current.name
|
1086
|
+
next.params = params
|
1087
|
+
} else if (current.matched) {
|
1088
|
+
var rawPath = current.matched[current.matched.length - 1].path
|
1089
|
+
next.path = fillParams(rawPath, params, ("path " + (current.path)))
|
1090
|
+
} else if ("development" !== 'production') {
|
1091
|
+
warn(false, "relative params navigation requires a current route.")
|
1014
1092
|
}
|
1093
|
+
return next
|
1015
1094
|
}
|
1016
1095
|
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1096
|
+
var parsedPath = parsePath(next.path || '')
|
1097
|
+
var basePath = (current && current.path) || '/'
|
1098
|
+
var path = parsedPath.path
|
1099
|
+
? resolvePath(parsedPath.path, basePath, append || next.append)
|
1100
|
+
: (current && current.path) || '/'
|
1101
|
+
var query = resolveQuery(parsedPath.query, next.query)
|
1102
|
+
var hash = next.hash || parsedPath.hash
|
1103
|
+
if (hash && hash.charAt(0) !== '#') {
|
1104
|
+
hash = "#" + hash
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
return {
|
1108
|
+
_normalized: true,
|
1109
|
+
path: path,
|
1110
|
+
query: query,
|
1111
|
+
hash: hash
|
1024
1112
|
}
|
1025
1113
|
}
|
1026
1114
|
|
1027
|
-
function
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
return
|
1115
|
+
function assign (a, b) {
|
1116
|
+
for (var key in b) {
|
1117
|
+
a[key] = b[key]
|
1118
|
+
}
|
1119
|
+
return a
|
1032
1120
|
}
|
1033
1121
|
|
1034
1122
|
/* */
|
1035
1123
|
|
1036
|
-
var regexpCache = Object.create(null)
|
1037
|
-
|
1038
|
-
var regexpParamsCache = Object.create(null)
|
1039
|
-
|
1040
|
-
var regexpCompileCache = Object.create(null)
|
1041
|
-
|
1042
1124
|
function createMatcher (routes) {
|
1043
1125
|
var ref = createRouteMap(routes);
|
1044
1126
|
var pathMap = ref.pathMap;
|
@@ -1054,7 +1136,9 @@ function createMatcher (routes) {
|
|
1054
1136
|
|
1055
1137
|
if (name) {
|
1056
1138
|
var record = nameMap[name]
|
1057
|
-
var paramNames =
|
1139
|
+
var paramNames = getRouteRegex(record.path).keys
|
1140
|
+
.filter(function (key) { return !key.optional; })
|
1141
|
+
.map(function (key) { return key.name; })
|
1058
1142
|
|
1059
1143
|
if (typeof location.params !== 'object') {
|
1060
1144
|
location.params = {}
|
@@ -1098,7 +1182,9 @@ function createMatcher (routes) {
|
|
1098
1182
|
}
|
1099
1183
|
|
1100
1184
|
if (!redirect || typeof redirect !== 'object') {
|
1101
|
-
|
1185
|
+
"development" !== 'production' && warn(
|
1186
|
+
false, ("invalid redirect option: " + (JSON.stringify(redirect)))
|
1187
|
+
)
|
1102
1188
|
return _createRoute(null, location)
|
1103
1189
|
}
|
1104
1190
|
|
@@ -1115,7 +1201,9 @@ function createMatcher (routes) {
|
|
1115
1201
|
if (name) {
|
1116
1202
|
// resolved named direct
|
1117
1203
|
var targetRecord = nameMap[name]
|
1118
|
-
|
1204
|
+
if ("development" !== 'production') {
|
1205
|
+
assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found."))
|
1206
|
+
}
|
1119
1207
|
return match({
|
1120
1208
|
_normalized: true,
|
1121
1209
|
name: name,
|
@@ -1177,22 +1265,6 @@ function createMatcher (routes) {
|
|
1177
1265
|
return match
|
1178
1266
|
}
|
1179
1267
|
|
1180
|
-
function getRouteRegex (path) {
|
1181
|
-
var hit = regexpCache[path]
|
1182
|
-
var keys, regexp
|
1183
|
-
|
1184
|
-
if (hit) {
|
1185
|
-
keys = hit.keys
|
1186
|
-
regexp = hit.regexp
|
1187
|
-
} else {
|
1188
|
-
keys = []
|
1189
|
-
regexp = index(path, keys)
|
1190
|
-
regexpCache[path] = { keys: keys, regexp: regexp }
|
1191
|
-
}
|
1192
|
-
|
1193
|
-
return { keys: keys, regexp: regexp }
|
1194
|
-
}
|
1195
|
-
|
1196
1268
|
function matchRoute (
|
1197
1269
|
path,
|
1198
1270
|
params,
|
@@ -1218,27 +1290,6 @@ function matchRoute (
|
|
1218
1290
|
return true
|
1219
1291
|
}
|
1220
1292
|
|
1221
|
-
function fillParams (
|
1222
|
-
path,
|
1223
|
-
params,
|
1224
|
-
routeMsg
|
1225
|
-
) {
|
1226
|
-
try {
|
1227
|
-
var filler =
|
1228
|
-
regexpCompileCache[path] ||
|
1229
|
-
(regexpCompileCache[path] = index.compile(path))
|
1230
|
-
return filler(params || {}, { pretty: true })
|
1231
|
-
} catch (e) {
|
1232
|
-
assert(false, ("missing param for " + routeMsg + ": " + (e.message)))
|
1233
|
-
return ''
|
1234
|
-
}
|
1235
|
-
}
|
1236
|
-
|
1237
|
-
function getParams (path) {
|
1238
|
-
return regexpParamsCache[path] ||
|
1239
|
-
(regexpParamsCache[path] = getRouteRegex(path).keys.map(function (key) { return key.name; }))
|
1240
|
-
}
|
1241
|
-
|
1242
1293
|
function resolveRecordPath (path, record) {
|
1243
1294
|
return resolvePath(path, record.parent ? record.parent.path : '/', true)
|
1244
1295
|
}
|
@@ -1296,24 +1347,25 @@ History.prototype.listen = function listen (cb) {
|
|
1296
1347
|
this.cb = cb
|
1297
1348
|
};
|
1298
1349
|
|
1299
|
-
History.prototype.transitionTo = function transitionTo (location,
|
1350
|
+
History.prototype.transitionTo = function transitionTo (location, onComplete, onAbort) {
|
1300
1351
|
var this$1 = this;
|
1301
1352
|
|
1302
1353
|
var route = this.router.match(location, this.current)
|
1303
1354
|
this.confirmTransition(route, function () {
|
1304
1355
|
this$1.updateRoute(route)
|
1305
|
-
|
1356
|
+
onComplete && onComplete(route)
|
1306
1357
|
this$1.ensureURL()
|
1307
|
-
})
|
1358
|
+
}, onAbort)
|
1308
1359
|
};
|
1309
1360
|
|
1310
|
-
History.prototype.confirmTransition = function confirmTransition (route,
|
1361
|
+
History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {
|
1311
1362
|
var this$1 = this;
|
1312
1363
|
|
1313
1364
|
var current = this.current
|
1365
|
+
var abort = function () { onAbort && onAbort() }
|
1314
1366
|
if (isSameRoute(route, current)) {
|
1315
1367
|
this.ensureURL()
|
1316
|
-
return
|
1368
|
+
return abort()
|
1317
1369
|
}
|
1318
1370
|
|
1319
1371
|
var ref = resolveQueue(this.current.matched, route.matched);
|
@@ -1333,14 +1385,18 @@ History.prototype.confirmTransition = function confirmTransition (route, cb) {
|
|
1333
1385
|
|
1334
1386
|
this.pending = route
|
1335
1387
|
var iterator = function (hook, next) {
|
1336
|
-
if (this$1.pending !== route) {
|
1388
|
+
if (this$1.pending !== route) {
|
1389
|
+
return abort()
|
1390
|
+
}
|
1337
1391
|
hook(route, current, function (to) {
|
1338
1392
|
if (to === false) {
|
1339
1393
|
// next(false) -> abort navigation, ensure current URL
|
1340
1394
|
this$1.ensureURL(true)
|
1395
|
+
abort()
|
1341
1396
|
} else if (typeof to === 'string' || typeof to === 'object') {
|
1342
1397
|
// next('/') or next({ path: '/' }) -> redirect
|
1343
|
-
this$1.push(to)
|
1398
|
+
(typeof to === 'object' && to.replace) ? this$1.replace(to) : this$1.push(to)
|
1399
|
+
abort()
|
1344
1400
|
} else {
|
1345
1401
|
// confirm transition and pass on the value
|
1346
1402
|
next(to)
|
@@ -1356,9 +1412,12 @@ History.prototype.confirmTransition = function confirmTransition (route, cb) {
|
|
1356
1412
|
// wait until async components are resolved before
|
1357
1413
|
// extracting in-component enter guards
|
1358
1414
|
runQueue(enterGuards, iterator, function () {
|
1359
|
-
if (this$1.pending
|
1360
|
-
|
1361
|
-
|
1415
|
+
if (this$1.pending !== route) {
|
1416
|
+
return abort()
|
1417
|
+
}
|
1418
|
+
this$1.pending = null
|
1419
|
+
onComplete(route)
|
1420
|
+
if (this$1.router.app) {
|
1362
1421
|
this$1.router.app.$nextTick(function () {
|
1363
1422
|
postEnterCbs.forEach(function (cb) { return cb(); })
|
1364
1423
|
})
|
@@ -1657,7 +1716,9 @@ var HTML5History = (function (History) {
|
|
1657
1716
|
if (!behavior) {
|
1658
1717
|
return
|
1659
1718
|
}
|
1660
|
-
|
1719
|
+
if ("development" !== 'production') {
|
1720
|
+
assert(typeof behavior === 'function', "scrollBehavior must be a function")
|
1721
|
+
}
|
1661
1722
|
|
1662
1723
|
// wait until re-render finishes before scrolling
|
1663
1724
|
router.app.$nextTick(function () {
|
@@ -1722,12 +1783,10 @@ function replaceState (url) {
|
|
1722
1783
|
var HashHistory = (function (History) {
|
1723
1784
|
function HashHistory (router, base, fallback) {
|
1724
1785
|
History.call(this, router, base)
|
1725
|
-
|
1726
1786
|
// check history fallback deeplinking
|
1727
1787
|
if (fallback && this.checkFallback()) {
|
1728
1788
|
return
|
1729
1789
|
}
|
1730
|
-
|
1731
1790
|
ensureSlash()
|
1732
1791
|
}
|
1733
1792
|
|
@@ -1892,7 +1951,7 @@ var VueRouter = function VueRouter (options) {
|
|
1892
1951
|
this.history = new AbstractHistory(this)
|
1893
1952
|
break
|
1894
1953
|
default:
|
1895
|
-
assert(false, ("invalid mode: " + mode))
|
1954
|
+
"development" !== 'production' && assert(false, ("invalid mode: " + mode))
|
1896
1955
|
}
|
1897
1956
|
};
|
1898
1957
|
|
@@ -1905,7 +1964,7 @@ prototypeAccessors.currentRoute.get = function () {
|
|
1905
1964
|
VueRouter.prototype.init = function init (app /* Vue component instance */) {
|
1906
1965
|
var this$1 = this;
|
1907
1966
|
|
1908
|
-
assert(
|
1967
|
+
"development" !== 'production' && assert(
|
1909
1968
|
install.installed,
|
1910
1969
|
"not installed. Make sure to call `Vue.use(VueRouter)` " +
|
1911
1970
|
"before creating root instance."
|
@@ -1918,11 +1977,12 @@ VueRouter.prototype.init = function init (app /* Vue component instance */) {
|
|
1918
1977
|
if (history instanceof HTML5History) {
|
1919
1978
|
history.transitionTo(getLocation(history.base))
|
1920
1979
|
} else if (history instanceof HashHistory) {
|
1921
|
-
|
1980
|
+
var setupHashListener = function () {
|
1922
1981
|
window.addEventListener('hashchange', function () {
|
1923
1982
|
history.onHashChange()
|
1924
1983
|
})
|
1925
|
-
}
|
1984
|
+
}
|
1985
|
+
history.transitionTo(getHash(), setupHashListener, setupHashListener)
|
1926
1986
|
}
|
1927
1987
|
|
1928
1988
|
history.listen(function (route) {
|
@@ -1958,19 +2018,44 @@ VueRouter.prototype.forward = function forward () {
|
|
1958
2018
|
this.go(1)
|
1959
2019
|
};
|
1960
2020
|
|
1961
|
-
VueRouter.prototype.getMatchedComponents = function getMatchedComponents () {
|
1962
|
-
|
2021
|
+
VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {
|
2022
|
+
var route = to
|
2023
|
+
? this.resolve(to).resolved
|
2024
|
+
: this.currentRoute
|
2025
|
+
if (!route) {
|
1963
2026
|
return []
|
1964
2027
|
}
|
1965
|
-
return [].concat.apply([],
|
2028
|
+
return [].concat.apply([], route.matched.map(function (m) {
|
1966
2029
|
return Object.keys(m.components).map(function (key) {
|
1967
2030
|
return m.components[key]
|
1968
2031
|
})
|
1969
2032
|
}))
|
1970
2033
|
};
|
1971
2034
|
|
2035
|
+
VueRouter.prototype.resolve = function resolve (
|
2036
|
+
to,
|
2037
|
+
current,
|
2038
|
+
append
|
2039
|
+
) {
|
2040
|
+
var normalizedTo = normalizeLocation(to, current || this.history.current, append)
|
2041
|
+
var resolved = this.match(normalizedTo, current)
|
2042
|
+
var fullPath = resolved.redirectedFrom || resolved.fullPath
|
2043
|
+
var base = this.history.base
|
2044
|
+
var href = createHref(base, fullPath, this.mode)
|
2045
|
+
return {
|
2046
|
+
normalizedTo: normalizedTo,
|
2047
|
+
resolved: resolved,
|
2048
|
+
href: href
|
2049
|
+
}
|
2050
|
+
};
|
2051
|
+
|
1972
2052
|
Object.defineProperties( VueRouter.prototype, prototypeAccessors );
|
1973
2053
|
|
2054
|
+
function createHref (base, fullPath, mode) {
|
2055
|
+
var path = mode === 'hash' ? '#' + fullPath : fullPath
|
2056
|
+
return base ? cleanPath(base + '/' + path) : path
|
2057
|
+
}
|
2058
|
+
|
1974
2059
|
VueRouter.install = install
|
1975
2060
|
|
1976
2061
|
if (inBrowser && window.Vue) {
|