vuejs-rails 2.0.5 → 2.0.8
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 +210 -106
- data/vendor/assets/javascripts/vue.js +345 -187
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b14ac4b1d7d9e883b4206f5c7559d9be7ab40005
|
4
|
+
data.tar.gz: 80d3709c219eafee3a329dbace290b31091bd656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11de3fcb8ffba8780d5168d486770d1f69d84efdef0753c59ad032fb7023299f82e1aeb53df33cacb8729951342aaf379d6249a09afc8b4bcb13d18e204e0c4c
|
7
|
+
data.tar.gz: 537fa5971ef546f6c40f2b3b44a9f99389b9fa142720bfd029f702bb0045a2ce74173419aef1302117dd1ade16b316b804788156cb9e0712388869e0299d982c
|
data/Readme.md
CHANGED
data/lib/vuejs-rails/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* vue-router v2.0.
|
2
|
+
* vue-router v2.0.3
|
3
3
|
* (c) 2016 Evan You
|
4
4
|
* @license MIT
|
5
5
|
*/
|
@@ -57,6 +57,9 @@ var View = {
|
|
57
57
|
hooks.init = function (vnode) {
|
58
58
|
matched.instances[name] = vnode.child
|
59
59
|
}
|
60
|
+
hooks.prepatch = function (oldVnode, vnode) {
|
61
|
+
matched.instances[name] = vnode.child
|
62
|
+
}
|
60
63
|
hooks.destroy = function (vnode) {
|
61
64
|
if (matched.instances[name] === vnode.child) {
|
62
65
|
matched.instances[name] = undefined
|
@@ -183,7 +186,7 @@ function resolveQuery (
|
|
183
186
|
}
|
184
187
|
|
185
188
|
function parseQuery (query) {
|
186
|
-
var res =
|
189
|
+
var res = {}
|
187
190
|
|
188
191
|
query = query.trim().replace(/^(\?|#|&)/, '')
|
189
192
|
|
@@ -325,7 +328,7 @@ function isObjectEqual (a, b) {
|
|
325
328
|
|
326
329
|
function isIncludedRoute (current, target) {
|
327
330
|
return (
|
328
|
-
current.path.indexOf(target.path) === 0 &&
|
331
|
+
current.path.indexOf(target.path.replace(/\/$/, '')) === 0 &&
|
329
332
|
(!target.hash || current.hash === target.hash) &&
|
330
333
|
queryIncludes(current.query, target.query)
|
331
334
|
)
|
@@ -398,10 +401,10 @@ var Link = {
|
|
398
401
|
var router = this.$router
|
399
402
|
var current = this.$route
|
400
403
|
var to = normalizeLocation(this.to, current, this.append)
|
401
|
-
var resolved = router.match(to)
|
404
|
+
var resolved = router.match(to, current)
|
402
405
|
var fullPath = resolved.redirectedFrom || resolved.fullPath
|
403
406
|
var base = router.history.base
|
404
|
-
var href =
|
407
|
+
var href = createHref(base, fullPath, router.mode)
|
405
408
|
var classes = {}
|
406
409
|
var activeClass = this.activeClass || router.options.linkActiveClass || 'router-link-active'
|
407
410
|
var compareTarget = to.path ? createRoute(null, to) : resolved
|
@@ -420,6 +423,11 @@ var Link = {
|
|
420
423
|
// don't redirect on right click
|
421
424
|
/* istanbul ignore if */
|
422
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
|
+
|
423
431
|
e.preventDefault()
|
424
432
|
if (this$1.replace) {
|
425
433
|
router.replace(to)
|
@@ -440,9 +448,12 @@ var Link = {
|
|
440
448
|
// find the first <a> child and apply listener and href
|
441
449
|
var a = findAnchor(this.$slots.default)
|
442
450
|
if (a) {
|
443
|
-
|
451
|
+
// in case the <a> is a static node
|
452
|
+
a.isStatic = false
|
453
|
+
var extend = _Vue.util.extend
|
454
|
+
var aData = a.data = extend({}, a.data)
|
444
455
|
aData.on = on
|
445
|
-
var aAttrs =
|
456
|
+
var aAttrs = a.data.attrs = extend({}, a.data.attrs)
|
446
457
|
aAttrs.href = href
|
447
458
|
} else {
|
448
459
|
// doesn't have <a> child, apply listener to self
|
@@ -469,10 +480,19 @@ function findAnchor (children) {
|
|
469
480
|
}
|
470
481
|
}
|
471
482
|
|
483
|
+
function createHref (base, fullPath, mode) {
|
484
|
+
var path = mode === 'hash' ? '/#' + fullPath : fullPath
|
485
|
+
return base ? cleanPath(base + path) : path
|
486
|
+
}
|
487
|
+
|
488
|
+
var _Vue
|
489
|
+
|
472
490
|
function install (Vue) {
|
473
491
|
if (install.installed) { return }
|
474
492
|
install.installed = true
|
475
493
|
|
494
|
+
_Vue = Vue
|
495
|
+
|
476
496
|
Object.defineProperty(Vue.prototype, '$router', {
|
477
497
|
get: function get () { return this.$root._router }
|
478
498
|
})
|
@@ -493,6 +513,10 @@ function install (Vue) {
|
|
493
513
|
|
494
514
|
Vue.component('router-view', View)
|
495
515
|
Vue.component('router-link', Link)
|
516
|
+
|
517
|
+
var strats = Vue.config.optionMergeStrategies
|
518
|
+
// use the same hook merging strategy for route hooks
|
519
|
+
strats.beforeRouteEnter = strats.beforeRouteLeave = strats.created
|
496
520
|
}
|
497
521
|
|
498
522
|
var __moduleExports = Array.isArray || function (arr) {
|
@@ -531,14 +555,16 @@ var PATH_REGEXP = new RegExp([
|
|
531
555
|
/**
|
532
556
|
* Parse a string for the raw tokens.
|
533
557
|
*
|
534
|
-
* @param {string}
|
558
|
+
* @param {string} str
|
559
|
+
* @param {Object=} options
|
535
560
|
* @return {!Array}
|
536
561
|
*/
|
537
|
-
function parse (str) {
|
562
|
+
function parse (str, options) {
|
538
563
|
var tokens = []
|
539
564
|
var key = 0
|
540
565
|
var index = 0
|
541
566
|
var path = ''
|
567
|
+
var defaultDelimiter = options && options.delimiter || '/'
|
542
568
|
var res
|
543
569
|
|
544
570
|
while ((res = PATH_REGEXP.exec(str)) != null) {
|
@@ -571,8 +597,8 @@ function parse (str) {
|
|
571
597
|
var partial = prefix != null && next != null && next !== prefix
|
572
598
|
var repeat = modifier === '+' || modifier === '*'
|
573
599
|
var optional = modifier === '?' || modifier === '*'
|
574
|
-
var delimiter = res[2] ||
|
575
|
-
var pattern = capture || group
|
600
|
+
var delimiter = res[2] || defaultDelimiter
|
601
|
+
var pattern = capture || group
|
576
602
|
|
577
603
|
tokens.push({
|
578
604
|
name: name || key++,
|
@@ -582,7 +608,7 @@ function parse (str) {
|
|
582
608
|
repeat: repeat,
|
583
609
|
partial: partial,
|
584
610
|
asterisk: !!asterisk,
|
585
|
-
pattern: escapeGroup(pattern)
|
611
|
+
pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
|
586
612
|
})
|
587
613
|
}
|
588
614
|
|
@@ -603,10 +629,11 @@ function parse (str) {
|
|
603
629
|
* Compile a string to a template function for the path.
|
604
630
|
*
|
605
631
|
* @param {string} str
|
632
|
+
* @param {Object=} options
|
606
633
|
* @return {!function(Object=, Object=)}
|
607
634
|
*/
|
608
|
-
function compile (str) {
|
609
|
-
return tokensToFunction(parse(str))
|
635
|
+
function compile (str, options) {
|
636
|
+
return tokensToFunction(parse(str, options))
|
610
637
|
}
|
611
638
|
|
612
639
|
/**
|
@@ -817,34 +844,28 @@ function arrayToRegexp (path, keys, options) {
|
|
817
844
|
* @return {!RegExp}
|
818
845
|
*/
|
819
846
|
function stringToRegexp (path, keys, options) {
|
820
|
-
|
821
|
-
var re = tokensToRegExp(tokens, options)
|
822
|
-
|
823
|
-
// Attach keys back to the regexp.
|
824
|
-
for (var i = 0; i < tokens.length; i++) {
|
825
|
-
if (typeof tokens[i] !== 'string') {
|
826
|
-
keys.push(tokens[i])
|
827
|
-
}
|
828
|
-
}
|
829
|
-
|
830
|
-
return attachKeys(re, keys)
|
847
|
+
return tokensToRegExp(parse(path, options), keys, options)
|
831
848
|
}
|
832
849
|
|
833
850
|
/**
|
834
851
|
* Expose a function for taking tokens and returning a RegExp.
|
835
852
|
*
|
836
|
-
* @param {!Array}
|
837
|
-
* @param {Object=}
|
853
|
+
* @param {!Array} tokens
|
854
|
+
* @param {(Array|Object)=} keys
|
855
|
+
* @param {Object=} options
|
838
856
|
* @return {!RegExp}
|
839
857
|
*/
|
840
|
-
function tokensToRegExp (tokens, options) {
|
858
|
+
function tokensToRegExp (tokens, keys, options) {
|
859
|
+
if (!isarray(keys)) {
|
860
|
+
options = /** @type {!Object} */ (keys || options)
|
861
|
+
keys = []
|
862
|
+
}
|
863
|
+
|
841
864
|
options = options || {}
|
842
865
|
|
843
866
|
var strict = options.strict
|
844
867
|
var end = options.end !== false
|
845
868
|
var route = ''
|
846
|
-
var lastToken = tokens[tokens.length - 1]
|
847
|
-
var endsWithSlash = typeof lastToken === 'string' && /\/$/.test(lastToken)
|
848
869
|
|
849
870
|
// Iterate over the tokens and create our regexp string.
|
850
871
|
for (var i = 0; i < tokens.length; i++) {
|
@@ -856,6 +877,8 @@ function tokensToRegExp (tokens, options) {
|
|
856
877
|
var prefix = escapeString(token.prefix)
|
857
878
|
var capture = '(?:' + token.pattern + ')'
|
858
879
|
|
880
|
+
keys.push(token)
|
881
|
+
|
859
882
|
if (token.repeat) {
|
860
883
|
capture += '(?:' + prefix + capture + ')*'
|
861
884
|
}
|
@@ -874,12 +897,15 @@ function tokensToRegExp (tokens, options) {
|
|
874
897
|
}
|
875
898
|
}
|
876
899
|
|
900
|
+
var delimiter = escapeString(options.delimiter || '/')
|
901
|
+
var endsWithDelimiter = route.slice(-delimiter.length) === delimiter
|
902
|
+
|
877
903
|
// In non-strict mode we allow a slash at the end of match. If the path to
|
878
904
|
// match already ends with a slash, we remove it for consistency. The slash
|
879
905
|
// is valid at the end of a path match, not in the middle. This is important
|
880
906
|
// in non-ending mode, where "/test/" shouldn't match "/test//route".
|
881
907
|
if (!strict) {
|
882
|
-
route = (
|
908
|
+
route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'
|
883
909
|
}
|
884
910
|
|
885
911
|
if (end) {
|
@@ -887,10 +913,10 @@ function tokensToRegExp (tokens, options) {
|
|
887
913
|
} else {
|
888
914
|
// In non-ending mode, we need the capturing groups to match as much as
|
889
915
|
// possible by using a positive lookahead to the end or next path segment.
|
890
|
-
route += strict &&
|
916
|
+
route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'
|
891
917
|
}
|
892
918
|
|
893
|
-
return new RegExp('^' + route, flags(options))
|
919
|
+
return attachKeys(new RegExp('^' + route, flags(options)), keys)
|
894
920
|
}
|
895
921
|
|
896
922
|
/**
|
@@ -906,15 +932,13 @@ function tokensToRegExp (tokens, options) {
|
|
906
932
|
* @return {!RegExp}
|
907
933
|
*/
|
908
934
|
function pathToRegexp (path, keys, options) {
|
909
|
-
keys = keys || []
|
910
|
-
|
911
935
|
if (!isarray(keys)) {
|
912
|
-
options = /** @type {!Object} */ (keys)
|
936
|
+
options = /** @type {!Object} */ (keys || options)
|
913
937
|
keys = []
|
914
|
-
} else if (!options) {
|
915
|
-
options = {}
|
916
938
|
}
|
917
939
|
|
940
|
+
options = options || {}
|
941
|
+
|
918
942
|
if (path instanceof RegExp) {
|
919
943
|
return regexpToRegexp(path, /** @type {!Array} */ (keys))
|
920
944
|
}
|
@@ -980,7 +1004,7 @@ function addRouteRecord (
|
|
980
1004
|
})
|
981
1005
|
}
|
982
1006
|
|
983
|
-
if (route.alias) {
|
1007
|
+
if (route.alias !== undefined) {
|
984
1008
|
if (Array.isArray(route.alias)) {
|
985
1009
|
route.alias.forEach(function (alias) {
|
986
1010
|
addRouteRecord(pathMap, nameMap, { path: alias }, parent, record.path)
|
@@ -991,7 +1015,13 @@ function addRouteRecord (
|
|
991
1015
|
}
|
992
1016
|
|
993
1017
|
pathMap[record.path] = record
|
994
|
-
if (name) {
|
1018
|
+
if (name) {
|
1019
|
+
if (!nameMap[name]) {
|
1020
|
+
nameMap[name] = record
|
1021
|
+
} else {
|
1022
|
+
warn(false, ("Duplicate named routes definition: { name: \"" + name + "\", path: \"" + (record.path) + "\" }"))
|
1023
|
+
}
|
1024
|
+
}
|
995
1025
|
}
|
996
1026
|
|
997
1027
|
function normalizePath (path, parent) {
|
@@ -1005,6 +1035,8 @@ function normalizePath (path, parent) {
|
|
1005
1035
|
|
1006
1036
|
var regexpCache = Object.create(null)
|
1007
1037
|
|
1038
|
+
var regexpParamsCache = Object.create(null)
|
1039
|
+
|
1008
1040
|
var regexpCompileCache = Object.create(null)
|
1009
1041
|
|
1010
1042
|
function createMatcher (routes) {
|
@@ -1022,6 +1054,20 @@ function createMatcher (routes) {
|
|
1022
1054
|
|
1023
1055
|
if (name) {
|
1024
1056
|
var record = nameMap[name]
|
1057
|
+
var paramNames = getParams(record.path)
|
1058
|
+
|
1059
|
+
if (typeof location.params !== 'object') {
|
1060
|
+
location.params = {}
|
1061
|
+
}
|
1062
|
+
|
1063
|
+
if (currentRoute && typeof currentRoute.params === 'object') {
|
1064
|
+
for (var key in currentRoute.params) {
|
1065
|
+
if (!(key in location.params) && paramNames.indexOf(key) > -1) {
|
1066
|
+
location.params[key] = currentRoute.params[key]
|
1067
|
+
}
|
1068
|
+
}
|
1069
|
+
}
|
1070
|
+
|
1025
1071
|
if (record) {
|
1026
1072
|
location.path = fillParams(record.path, location.params, ("named route \"" + name + "\""))
|
1027
1073
|
return _createRoute(record, location, redirectedFrom)
|
@@ -1131,13 +1177,10 @@ function createMatcher (routes) {
|
|
1131
1177
|
return match
|
1132
1178
|
}
|
1133
1179
|
|
1134
|
-
function
|
1135
|
-
path,
|
1136
|
-
params,
|
1137
|
-
pathname
|
1138
|
-
) {
|
1139
|
-
var keys, regexp
|
1180
|
+
function getRouteRegex (path) {
|
1140
1181
|
var hit = regexpCache[path]
|
1182
|
+
var keys, regexp
|
1183
|
+
|
1141
1184
|
if (hit) {
|
1142
1185
|
keys = hit.keys
|
1143
1186
|
regexp = hit.regexp
|
@@ -1146,6 +1189,18 @@ function matchRoute (
|
|
1146
1189
|
regexp = index(path, keys)
|
1147
1190
|
regexpCache[path] = { keys: keys, regexp: regexp }
|
1148
1191
|
}
|
1192
|
+
|
1193
|
+
return { keys: keys, regexp: regexp }
|
1194
|
+
}
|
1195
|
+
|
1196
|
+
function matchRoute (
|
1197
|
+
path,
|
1198
|
+
params,
|
1199
|
+
pathname
|
1200
|
+
) {
|
1201
|
+
var ref = getRouteRegex(path);
|
1202
|
+
var regexp = ref.regexp;
|
1203
|
+
var keys = ref.keys;
|
1149
1204
|
var m = pathname.match(regexp)
|
1150
1205
|
|
1151
1206
|
if (!m) {
|
@@ -1179,6 +1234,11 @@ function fillParams (
|
|
1179
1234
|
}
|
1180
1235
|
}
|
1181
1236
|
|
1237
|
+
function getParams (path) {
|
1238
|
+
return regexpParamsCache[path] ||
|
1239
|
+
(regexpParamsCache[path] = getRouteRegex(path).keys.map(function (key) { return key.name; }))
|
1240
|
+
}
|
1241
|
+
|
1182
1242
|
function resolveRecordPath (path, record) {
|
1183
1243
|
return resolvePath(path, record.parent ? record.parent.path : '/', true)
|
1184
1244
|
}
|
@@ -1277,7 +1337,7 @@ History.prototype.confirmTransition = function confirmTransition (route, cb) {
|
|
1277
1337
|
hook(route, current, function (to) {
|
1278
1338
|
if (to === false) {
|
1279
1339
|
// next(false) -> abort navigation, ensure current URL
|
1280
|
-
this$1.ensureURL()
|
1340
|
+
this$1.ensureURL(true)
|
1281
1341
|
} else if (typeof to === 'string' || typeof to === 'object') {
|
1282
1342
|
// next('/') or next({ path: '/' }) -> redirect
|
1283
1343
|
this$1.push(to)
|
@@ -1351,15 +1411,35 @@ function resolveQueue (
|
|
1351
1411
|
}
|
1352
1412
|
}
|
1353
1413
|
|
1414
|
+
function extractGuard (
|
1415
|
+
def,
|
1416
|
+
key
|
1417
|
+
) {
|
1418
|
+
if (typeof def !== 'function') {
|
1419
|
+
// extend now so that global mixins are applied.
|
1420
|
+
def = _Vue.extend(def)
|
1421
|
+
}
|
1422
|
+
return def.options[key]
|
1423
|
+
}
|
1424
|
+
|
1354
1425
|
function extractLeaveGuards (matched) {
|
1355
|
-
return flatMapComponents(matched, function (def, instance) {
|
1356
|
-
var guard = def
|
1426
|
+
return flatten(flatMapComponents(matched, function (def, instance) {
|
1427
|
+
var guard = extractGuard(def, 'beforeRouteLeave')
|
1357
1428
|
if (guard) {
|
1358
|
-
return
|
1359
|
-
|
1360
|
-
|
1429
|
+
return Array.isArray(guard)
|
1430
|
+
? guard.map(function (guard) { return wrapLeaveGuard(guard, instance); })
|
1431
|
+
: wrapLeaveGuard(guard, instance)
|
1361
1432
|
}
|
1362
|
-
}).reverse()
|
1433
|
+
}).reverse())
|
1434
|
+
}
|
1435
|
+
|
1436
|
+
function wrapLeaveGuard (
|
1437
|
+
guard,
|
1438
|
+
instance
|
1439
|
+
) {
|
1440
|
+
return function routeLeaveGuard () {
|
1441
|
+
return guard.apply(instance, arguments)
|
1442
|
+
}
|
1363
1443
|
}
|
1364
1444
|
|
1365
1445
|
function extractEnterGuards (
|
@@ -1367,29 +1447,46 @@ function extractEnterGuards (
|
|
1367
1447
|
cbs,
|
1368
1448
|
isValid
|
1369
1449
|
) {
|
1370
|
-
return flatMapComponents(matched, function (def, _, match, key) {
|
1371
|
-
var guard = def
|
1450
|
+
return flatten(flatMapComponents(matched, function (def, _, match, key) {
|
1451
|
+
var guard = extractGuard(def, 'beforeRouteEnter')
|
1372
1452
|
if (guard) {
|
1373
|
-
return
|
1374
|
-
return guard
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1453
|
+
return Array.isArray(guard)
|
1454
|
+
? guard.map(function (guard) { return wrapEnterGuard(guard, cbs, match, key, isValid); })
|
1455
|
+
: wrapEnterGuard(guard, cbs, match, key, isValid)
|
1456
|
+
}
|
1457
|
+
}))
|
1458
|
+
}
|
1459
|
+
|
1460
|
+
function wrapEnterGuard (
|
1461
|
+
guard,
|
1462
|
+
cbs,
|
1463
|
+
match,
|
1464
|
+
key,
|
1465
|
+
isValid
|
1466
|
+
) {
|
1467
|
+
return function routeEnterGuard (to, from, next) {
|
1468
|
+
return guard(to, from, function (cb) {
|
1469
|
+
next(cb)
|
1470
|
+
if (typeof cb === 'function') {
|
1471
|
+
cbs.push(function () {
|
1472
|
+
// #750
|
1473
|
+
// if a router-view is wrapped with an out-in transition,
|
1474
|
+
// the instance may not have been registered at this time.
|
1475
|
+
// we will need to poll for registration until current route
|
1476
|
+
// is no longer valid.
|
1477
|
+
poll(cb, match.instances, key, isValid)
|
1386
1478
|
})
|
1387
1479
|
}
|
1388
|
-
}
|
1389
|
-
}
|
1480
|
+
})
|
1481
|
+
}
|
1390
1482
|
}
|
1391
1483
|
|
1392
|
-
function poll (
|
1484
|
+
function poll (
|
1485
|
+
cb, // somehow flow cannot infer this is a function
|
1486
|
+
instances,
|
1487
|
+
key,
|
1488
|
+
isValid
|
1489
|
+
) {
|
1393
1490
|
if (instances[key]) {
|
1394
1491
|
cb(instances[key])
|
1395
1492
|
} else if (isValid()) {
|
@@ -1431,7 +1528,7 @@ function flatMapComponents (
|
|
1431
1528
|
matched,
|
1432
1529
|
fn
|
1433
1530
|
) {
|
1434
|
-
return
|
1531
|
+
return flatten(matched.map(function (m) {
|
1435
1532
|
return Object.keys(m.components).map(function (key) { return fn(
|
1436
1533
|
m.components[key],
|
1437
1534
|
m.instances[key],
|
@@ -1440,19 +1537,25 @@ function flatMapComponents (
|
|
1440
1537
|
}))
|
1441
1538
|
}
|
1442
1539
|
|
1540
|
+
function flatten (arr) {
|
1541
|
+
return Array.prototype.concat.apply([], arr)
|
1542
|
+
}
|
1543
|
+
|
1443
1544
|
/* */
|
1444
1545
|
|
1546
|
+
var positionStore = Object.create(null)
|
1547
|
+
|
1445
1548
|
function saveScrollPosition (key) {
|
1446
1549
|
if (!key) { return }
|
1447
|
-
|
1550
|
+
positionStore[key] = {
|
1448
1551
|
x: window.pageXOffset,
|
1449
1552
|
y: window.pageYOffset
|
1450
|
-
}
|
1553
|
+
}
|
1451
1554
|
}
|
1452
1555
|
|
1453
1556
|
function getScrollPosition (key) {
|
1454
1557
|
if (!key) { return }
|
1455
|
-
return
|
1558
|
+
return positionStore[key]
|
1456
1559
|
}
|
1457
1560
|
|
1458
1561
|
function getElementPosition (el) {
|
@@ -1491,8 +1594,6 @@ var HTML5History = (function (History) {
|
|
1491
1594
|
|
1492
1595
|
History.call(this, router, base)
|
1493
1596
|
|
1494
|
-
this.transitionTo(getLocation(this.base))
|
1495
|
-
|
1496
1597
|
var expectScroll = router.options.scrollBehavior
|
1497
1598
|
window.addEventListener('popstate', function (e) {
|
1498
1599
|
_key = e.state && e.state.key
|
@@ -1539,9 +1640,10 @@ var HTML5History = (function (History) {
|
|
1539
1640
|
})
|
1540
1641
|
};
|
1541
1642
|
|
1542
|
-
HTML5History.prototype.ensureURL = function ensureURL () {
|
1643
|
+
HTML5History.prototype.ensureURL = function ensureURL (push) {
|
1543
1644
|
if (getLocation(this.base) !== this.current.fullPath) {
|
1544
|
-
|
1645
|
+
var current = cleanPath(this.base + this.current.fullPath)
|
1646
|
+
push ? pushState(current) : replaceState(current)
|
1545
1647
|
}
|
1546
1648
|
};
|
1547
1649
|
|
@@ -1619,8 +1721,6 @@ function replaceState (url) {
|
|
1619
1721
|
|
1620
1722
|
var HashHistory = (function (History) {
|
1621
1723
|
function HashHistory (router, base, fallback) {
|
1622
|
-
var this$1 = this;
|
1623
|
-
|
1624
1724
|
History.call(this, router, base)
|
1625
1725
|
|
1626
1726
|
// check history fallback deeplinking
|
@@ -1629,11 +1729,6 @@ var HashHistory = (function (History) {
|
|
1629
1729
|
}
|
1630
1730
|
|
1631
1731
|
ensureSlash()
|
1632
|
-
this.transitionTo(getHash(), function () {
|
1633
|
-
window.addEventListener('hashchange', function () {
|
1634
|
-
this$1.onHashChange()
|
1635
|
-
})
|
1636
|
-
})
|
1637
1732
|
}
|
1638
1733
|
|
1639
1734
|
if ( History ) HashHistory.__proto__ = History;
|
@@ -1675,9 +1770,10 @@ var HashHistory = (function (History) {
|
|
1675
1770
|
window.history.go(n)
|
1676
1771
|
};
|
1677
1772
|
|
1678
|
-
HashHistory.prototype.ensureURL = function ensureURL () {
|
1679
|
-
|
1680
|
-
|
1773
|
+
HashHistory.prototype.ensureURL = function ensureURL (push) {
|
1774
|
+
var current = this.current.fullPath
|
1775
|
+
if (getHash() !== current) {
|
1776
|
+
push ? pushHash(current) : replaceHash(current)
|
1681
1777
|
}
|
1682
1778
|
};
|
1683
1779
|
|
@@ -1784,6 +1880,20 @@ var VueRouter = function VueRouter (options) {
|
|
1784
1880
|
mode = 'abstract'
|
1785
1881
|
}
|
1786
1882
|
this.mode = mode
|
1883
|
+
|
1884
|
+
switch (mode) {
|
1885
|
+
case 'history':
|
1886
|
+
this.history = new HTML5History(this, options.base)
|
1887
|
+
break
|
1888
|
+
case 'hash':
|
1889
|
+
this.history = new HashHistory(this, options.base, this.fallback)
|
1890
|
+
break
|
1891
|
+
case 'abstract':
|
1892
|
+
this.history = new AbstractHistory(this)
|
1893
|
+
break
|
1894
|
+
default:
|
1895
|
+
assert(false, ("invalid mode: " + mode))
|
1896
|
+
}
|
1787
1897
|
};
|
1788
1898
|
|
1789
1899
|
var prototypeAccessors = { currentRoute: {} };
|
@@ -1803,25 +1913,19 @@ VueRouter.prototype.init = function init (app /* Vue component instance */) {
|
|
1803
1913
|
|
1804
1914
|
this.app = app
|
1805
1915
|
|
1806
|
-
var
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
break
|
1817
|
-
case 'abstract':
|
1818
|
-
this.history = new AbstractHistory(this)
|
1819
|
-
break
|
1820
|
-
default:
|
1821
|
-
assert(false, ("invalid mode: " + mode))
|
1916
|
+
var history = this.history
|
1917
|
+
|
1918
|
+
if (history instanceof HTML5History) {
|
1919
|
+
history.transitionTo(getLocation(history.base))
|
1920
|
+
} else if (history instanceof HashHistory) {
|
1921
|
+
history.transitionTo(getHash(), function () {
|
1922
|
+
window.addEventListener('hashchange', function () {
|
1923
|
+
history.onHashChange()
|
1924
|
+
})
|
1925
|
+
})
|
1822
1926
|
}
|
1823
1927
|
|
1824
|
-
|
1928
|
+
history.listen(function (route) {
|
1825
1929
|
this$1.app._route = route
|
1826
1930
|
})
|
1827
1931
|
};
|