@tarojs/router 3.4.0-beta.0 → 3.4.0
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.
- package/dist/index.js +669 -307
- package/dist/index.js.map +1 -1
- package/dist/router.esm.js +667 -305
- package/dist/router.esm.js.map +1 -1
- package/package.json +4 -3
- package/types/index.d.ts +1 -1
package/dist/router.esm.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import _objectSpread from '@babel/runtime/helpers/objectSpread2';
|
|
2
3
|
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
3
4
|
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
5
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
4
6
|
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
5
7
|
import _createClass from '@babel/runtime/helpers/createClass';
|
|
6
8
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
7
|
-
import
|
|
8
|
-
import _objectSpread from '@babel/runtime/helpers/objectSpread2';
|
|
9
|
-
import { requestAnimationFrame, container, SERVICE_IDENTIFIER, eventCenter, createPageConfig, stringify, Current } from '@tarojs/runtime';
|
|
9
|
+
import { Current, requestAnimationFrame, container, SERVICE_IDENTIFIER, createPageConfig, stringify, eventCenter } from '@tarojs/runtime';
|
|
10
10
|
import _typeof from '@babel/runtime/helpers/typeof';
|
|
11
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
11
12
|
import _createForOfIteratorHelper from '@babel/runtime/helpers/createForOfIteratorHelper';
|
|
12
|
-
import
|
|
13
|
+
import { initTabBarApis } from '@tarojs/taro';
|
|
13
14
|
|
|
14
15
|
var r,
|
|
15
16
|
B = r || (r = {});
|
|
@@ -439,10 +440,14 @@ function prependBasename() {
|
|
|
439
440
|
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
440
441
|
return basename.replace(/\/$/, '') + '/' + url.replace(/^\//, '');
|
|
441
442
|
}
|
|
442
|
-
var hasBasename = function hasBasename(
|
|
443
|
+
var hasBasename = function hasBasename() {
|
|
444
|
+
var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
445
|
+
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
443
446
|
return new RegExp('^' + prefix + '(\\/|\\?|#|$)', 'i').test(path);
|
|
444
447
|
};
|
|
445
|
-
var stripBasename = function stripBasename(
|
|
448
|
+
var stripBasename = function stripBasename() {
|
|
449
|
+
var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
450
|
+
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
446
451
|
return hasBasename(path, prefix) ? path.substr(prefix.length) : path;
|
|
447
452
|
};
|
|
448
453
|
|
|
@@ -460,8 +465,10 @@ var Stacks = /*#__PURE__*/function () {
|
|
|
460
465
|
set: function set(delta) {
|
|
461
466
|
if (delta > 0) {
|
|
462
467
|
this.backDelta = delta;
|
|
463
|
-
} else {
|
|
468
|
+
} else if (this.backDelta > 0) {
|
|
464
469
|
--this.backDelta;
|
|
470
|
+
} else {
|
|
471
|
+
this.backDelta = 0;
|
|
465
472
|
}
|
|
466
473
|
}
|
|
467
474
|
}, {
|
|
@@ -484,25 +491,41 @@ var Stacks = /*#__PURE__*/function () {
|
|
|
484
491
|
value: function getItem(index) {
|
|
485
492
|
return this.stacks[index];
|
|
486
493
|
}
|
|
494
|
+
}, {
|
|
495
|
+
key: "getLastIndex",
|
|
496
|
+
value: function getLastIndex(pathname) {
|
|
497
|
+
var stateWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
498
|
+
|
|
499
|
+
var list = _toConsumableArray(this.stacks).reverse();
|
|
500
|
+
|
|
501
|
+
return list.findIndex(function (page, i) {
|
|
502
|
+
var _page$path;
|
|
503
|
+
|
|
504
|
+
return i >= stateWith && ((_page$path = page.path) === null || _page$path === void 0 ? void 0 : _page$path.replace(/\?.*/g, '')) === pathname;
|
|
505
|
+
});
|
|
506
|
+
}
|
|
487
507
|
}, {
|
|
488
508
|
key: "getDelta",
|
|
489
509
|
value: function getDelta(pathname) {
|
|
490
510
|
if (this.backDelta >= 1) {
|
|
491
511
|
return this.backDelta;
|
|
492
|
-
}
|
|
493
|
-
|
|
512
|
+
}
|
|
494
513
|
|
|
495
|
-
var
|
|
496
|
-
var _r$path;
|
|
514
|
+
var index = this.getLastIndex(pathname); // NOTE: 此处为了修复浏览器后退多级页面,在大量重复路由状况下可能出现判断错误的情况 (增强判断能力只能考虑在 query 中新增参数来判断,暂时搁置)
|
|
497
515
|
|
|
498
|
-
|
|
499
|
-
});
|
|
500
|
-
return this.length - 1 - prevIndex;
|
|
516
|
+
return index > 0 ? index : 1;
|
|
501
517
|
}
|
|
502
518
|
}, {
|
|
503
519
|
key: "getPrevIndex",
|
|
504
520
|
value: function getPrevIndex(pathname) {
|
|
505
|
-
|
|
521
|
+
var stateWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
522
|
+
var lastIndex = this.getLastIndex(pathname, stateWith);
|
|
523
|
+
|
|
524
|
+
if (lastIndex < 0) {
|
|
525
|
+
return -1;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
return this.length - 1 - lastIndex;
|
|
506
529
|
}
|
|
507
530
|
}, {
|
|
508
531
|
key: "pop",
|
|
@@ -521,48 +544,98 @@ var Stacks = /*#__PURE__*/function () {
|
|
|
521
544
|
|
|
522
545
|
var stacks = new Stacks();
|
|
523
546
|
|
|
524
|
-
var routesAlias = {};
|
|
525
|
-
function setRoutesAlias(alias) {
|
|
526
|
-
routesAlias = alias;
|
|
527
|
-
}
|
|
528
547
|
function addLeadingSlash(path) {
|
|
529
548
|
if (path == null) {
|
|
530
549
|
return '';
|
|
531
550
|
}
|
|
532
551
|
|
|
533
552
|
return path.charAt(0) === '/' ? path : '/' + path;
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
var RoutesAlias = /*#__PURE__*/function () {
|
|
556
|
+
function RoutesAlias() {
|
|
557
|
+
var _this = this;
|
|
558
|
+
|
|
559
|
+
_classCallCheck(this, RoutesAlias);
|
|
560
|
+
|
|
561
|
+
_defineProperty(this, "conf", []);
|
|
562
|
+
|
|
563
|
+
_defineProperty(this, "getConfig", function () {
|
|
564
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
565
|
+
|
|
566
|
+
var customRoute = _this.conf.filter(function (arr) {
|
|
567
|
+
return arr.includes(url);
|
|
568
|
+
});
|
|
569
|
+
|
|
570
|
+
return customRoute[0];
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
_defineProperty(this, "getOrigin", function () {
|
|
574
|
+
var _this$getConfig;
|
|
575
|
+
|
|
576
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
577
|
+
return ((_this$getConfig = _this.getConfig(url)) === null || _this$getConfig === void 0 ? void 0 : _this$getConfig[0]) || url;
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
_defineProperty(this, "getAlias", function () {
|
|
581
|
+
var _this$getConfig2;
|
|
582
|
+
|
|
583
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
584
|
+
return ((_this$getConfig2 = _this.getConfig(url)) === null || _this$getConfig2 === void 0 ? void 0 : _this$getConfig2[1]) || url;
|
|
585
|
+
});
|
|
586
|
+
|
|
587
|
+
_defineProperty(this, "getAll", function () {
|
|
588
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
589
|
+
return _this.conf.filter(function (arr) {
|
|
590
|
+
return arr.includes(url);
|
|
591
|
+
}).reduce(function (p, a) {
|
|
592
|
+
p.push(a[1]);
|
|
593
|
+
return p;
|
|
594
|
+
}, [url]);
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
_createClass(RoutesAlias, [{
|
|
599
|
+
key: "set",
|
|
600
|
+
value: function set() {
|
|
601
|
+
var _this2 = this;
|
|
602
|
+
|
|
603
|
+
var customRoutes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
604
|
+
|
|
605
|
+
var _loop = function _loop(_key) {
|
|
606
|
+
var path = customRoutes[_key];
|
|
607
|
+
_key = addLeadingSlash(_key);
|
|
608
|
+
|
|
609
|
+
if (typeof path === 'string') {
|
|
610
|
+
_this2.conf.push([_key, addLeadingSlash(path)]);
|
|
611
|
+
} else if ((path === null || path === void 0 ? void 0 : path.length) > 0) {
|
|
612
|
+
var _this2$conf;
|
|
613
|
+
|
|
614
|
+
(_this2$conf = _this2.conf).push.apply(_this2$conf, _toConsumableArray(path.map(function (p) {
|
|
615
|
+
return [_key, addLeadingSlash(p)];
|
|
616
|
+
})));
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
key = _key;
|
|
620
|
+
};
|
|
621
|
+
|
|
622
|
+
for (var key in customRoutes) {
|
|
623
|
+
_loop(key);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}]);
|
|
627
|
+
|
|
628
|
+
return RoutesAlias;
|
|
629
|
+
}();
|
|
630
|
+
|
|
631
|
+
var routesAlias = new RoutesAlias();
|
|
555
632
|
|
|
556
633
|
function processNavigateUrl(option) {
|
|
557
634
|
var _pathPieces$pathname;
|
|
558
635
|
|
|
559
636
|
var pathPieces = J(option.url); // 处理自定义路由
|
|
560
637
|
|
|
561
|
-
|
|
562
|
-
if (addLeadingSlash(key) === addLeadingSlash(pathPieces.pathname)) {
|
|
563
|
-
pathPieces.pathname = routesAlias[key];
|
|
564
|
-
}
|
|
565
|
-
}); // 处理相对路径
|
|
638
|
+
pathPieces.pathname = routesAlias.getAlias(addLeadingSlash(pathPieces.pathname)); // 处理相对路径
|
|
566
639
|
|
|
567
640
|
if (pathPieces !== null && pathPieces !== void 0 && (_pathPieces$pathname = pathPieces.pathname) !== null && _pathPieces$pathname !== void 0 && _pathPieces$pathname.includes('./')) {
|
|
568
641
|
var parts = history.location.pathname.split('/');
|
|
@@ -599,9 +672,12 @@ function _navigate() {
|
|
|
599
672
|
complete = option.complete,
|
|
600
673
|
fail = option.fail;
|
|
601
674
|
var unListen = history.listen(function () {
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
675
|
+
var res = {
|
|
676
|
+
errMsg: "".concat(method, ":ok")
|
|
677
|
+
};
|
|
678
|
+
success === null || success === void 0 ? void 0 : success(res);
|
|
679
|
+
complete === null || complete === void 0 ? void 0 : complete(res);
|
|
680
|
+
resolve(res);
|
|
605
681
|
unListen();
|
|
606
682
|
});
|
|
607
683
|
|
|
@@ -614,7 +690,10 @@ function _navigate() {
|
|
|
614
690
|
|
|
615
691
|
if (method === 'navigateTo') {
|
|
616
692
|
history.push(pathPieces, state);
|
|
617
|
-
} else if (method === 'redirectTo') {
|
|
693
|
+
} else if (method === 'redirectTo' || method === 'switchTab') {
|
|
694
|
+
history.replace(pathPieces, state);
|
|
695
|
+
} else if (method === 'reLaunch') {
|
|
696
|
+
stacks.delta = stacks.length;
|
|
618
697
|
history.replace(pathPieces, state);
|
|
619
698
|
}
|
|
620
699
|
} else if (method === 'navigateBack') {
|
|
@@ -622,9 +701,12 @@ function _navigate() {
|
|
|
622
701
|
history.go(-option.delta);
|
|
623
702
|
}
|
|
624
703
|
} catch (error) {
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
704
|
+
var res = {
|
|
705
|
+
errMsg: "".concat(method, ":fail ").concat(error.message || error)
|
|
706
|
+
};
|
|
707
|
+
fail === null || fail === void 0 ? void 0 : fail(res);
|
|
708
|
+
complete === null || complete === void 0 ? void 0 : complete(res);
|
|
709
|
+
reject(res);
|
|
628
710
|
}
|
|
629
711
|
}));
|
|
630
712
|
|
|
@@ -656,15 +738,18 @@ function navigateBack() {
|
|
|
656
738
|
return navigate(options, 'navigateBack');
|
|
657
739
|
}
|
|
658
740
|
function switchTab(option) {
|
|
659
|
-
|
|
660
|
-
return redirectTo(option);
|
|
741
|
+
return navigate(option, 'switchTab');
|
|
661
742
|
}
|
|
662
743
|
function reLaunch(option) {
|
|
663
|
-
|
|
664
|
-
return redirectTo(option);
|
|
744
|
+
return navigate(option, 'reLaunch');
|
|
665
745
|
}
|
|
666
746
|
function getCurrentPages() {
|
|
667
|
-
|
|
747
|
+
var pages = stacks.get();
|
|
748
|
+
return pages.map(function (e) {
|
|
749
|
+
return _objectSpread(_objectSpread({}, e), {}, {
|
|
750
|
+
route: e.path || ''
|
|
751
|
+
});
|
|
752
|
+
});
|
|
668
753
|
}
|
|
669
754
|
|
|
670
755
|
var pathToRegexp$2 = {exports: {}};
|
|
@@ -1297,117 +1382,6 @@ var UniversalRouter = function () {
|
|
|
1297
1382
|
|
|
1298
1383
|
UniversalRouter.pathToRegexp = pathToRegexp$1;
|
|
1299
1384
|
|
|
1300
|
-
var Taro = require('@tarojs/taro-h5');
|
|
1301
|
-
|
|
1302
|
-
function initTabbar(config) {
|
|
1303
|
-
if (config.tabBar == null) {
|
|
1304
|
-
return;
|
|
1305
|
-
} // TODO: 找到 tabbar 的类型
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
var tabbar = document.createElement('taro-tabbar');
|
|
1309
|
-
var homePage = config.pages ? config.pages[0] : '';
|
|
1310
|
-
tabbar.conf = config.tabBar;
|
|
1311
|
-
tabbar.conf.homePage = history.location.pathname === '/' ? homePage : history.location.pathname;
|
|
1312
|
-
var routerConfig = config.router;
|
|
1313
|
-
tabbar.conf.mode = routerConfig && routerConfig.mode ? routerConfig.mode : 'hash';
|
|
1314
|
-
|
|
1315
|
-
if (routerConfig.customRoutes) {
|
|
1316
|
-
tabbar.conf.custom = true;
|
|
1317
|
-
tabbar.conf.customRoutes = routerConfig.customRoutes;
|
|
1318
|
-
} else {
|
|
1319
|
-
tabbar.conf.custom = false;
|
|
1320
|
-
tabbar.conf.customRoutes = {};
|
|
1321
|
-
}
|
|
1322
|
-
|
|
1323
|
-
if (typeof routerConfig.basename !== 'undefined') {
|
|
1324
|
-
tabbar.conf.basename = routerConfig.basename;
|
|
1325
|
-
}
|
|
1326
|
-
|
|
1327
|
-
var container = document.getElementById('container'); // eslint-disable-next-line no-unused-expressions
|
|
1328
|
-
|
|
1329
|
-
container === null || container === void 0 ? void 0 : container.appendChild(tabbar);
|
|
1330
|
-
Taro.initTabBarApis(config);
|
|
1331
|
-
}
|
|
1332
|
-
|
|
1333
|
-
var routerConfig = Object.create(null);
|
|
1334
|
-
function init(config) {
|
|
1335
|
-
var _document$getElementB;
|
|
1336
|
-
|
|
1337
|
-
config.router.mode = config.router.mode || 'hash';
|
|
1338
|
-
setHistoryMode(config.router.mode, config.router.basename);
|
|
1339
|
-
Object.assign(routerConfig, config);
|
|
1340
|
-
(_document$getElementB = document.getElementById('app')) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.remove();
|
|
1341
|
-
var container = document.createElement('div');
|
|
1342
|
-
container.classList.add('taro-tabbar__container');
|
|
1343
|
-
container.id = 'container';
|
|
1344
|
-
var panel = document.createElement('div');
|
|
1345
|
-
panel.classList.add('taro-tabbar__panel');
|
|
1346
|
-
var app = document.createElement('div');
|
|
1347
|
-
app.id = 'app';
|
|
1348
|
-
app.classList.add('taro_router');
|
|
1349
|
-
panel.appendChild(app);
|
|
1350
|
-
container.appendChild(panel);
|
|
1351
|
-
document.body.appendChild(container);
|
|
1352
|
-
initTabbar(config);
|
|
1353
|
-
}
|
|
1354
|
-
|
|
1355
|
-
var pageScrollFn;
|
|
1356
|
-
var pageDOM = window;
|
|
1357
|
-
function bindPageScroll(page, config) {
|
|
1358
|
-
pageDOM.removeEventListener('scroll', pageScrollFn);
|
|
1359
|
-
pageDOM = getScrollContainer();
|
|
1360
|
-
var distance = config.onReachBottomDistance || 50;
|
|
1361
|
-
var isReachBottom = false;
|
|
1362
|
-
|
|
1363
|
-
pageScrollFn = function pageScrollFn() {
|
|
1364
|
-
page.onPageScroll && page.onPageScroll({
|
|
1365
|
-
scrollTop: pageDOM instanceof Window ? window.scrollY : pageDOM.scrollTop
|
|
1366
|
-
});
|
|
1367
|
-
|
|
1368
|
-
if (isReachBottom && getOffset() > distance) {
|
|
1369
|
-
isReachBottom = false;
|
|
1370
|
-
}
|
|
1371
|
-
|
|
1372
|
-
if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
|
|
1373
|
-
isReachBottom = true;
|
|
1374
|
-
page.onReachBottom();
|
|
1375
|
-
}
|
|
1376
|
-
};
|
|
1377
|
-
|
|
1378
|
-
pageDOM.addEventListener('scroll', pageScrollFn, false);
|
|
1379
|
-
}
|
|
1380
|
-
window.addEventListener('DOMSubtreeModified', function (e) {
|
|
1381
|
-
var _e$target;
|
|
1382
|
-
|
|
1383
|
-
// @ts-ignore
|
|
1384
|
-
var className = (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.className;
|
|
1385
|
-
|
|
1386
|
-
if (className && /taro-tabbar__/.test(className)) {
|
|
1387
|
-
pageDOM.removeEventListener('scroll', pageScrollFn);
|
|
1388
|
-
pageDOM = getScrollContainer();
|
|
1389
|
-
pageDOM.addEventListener('scroll', pageScrollFn, false);
|
|
1390
|
-
}
|
|
1391
|
-
}, false);
|
|
1392
|
-
|
|
1393
|
-
function getScrollContainer() {
|
|
1394
|
-
if (document.querySelector('.taro-tabbar__tabbar') === null) {
|
|
1395
|
-
// 没设置tabbar
|
|
1396
|
-
return window;
|
|
1397
|
-
} else {
|
|
1398
|
-
// 有设置tabbar
|
|
1399
|
-
return document.querySelector('.taro-tabbar__panel') || window;
|
|
1400
|
-
}
|
|
1401
|
-
}
|
|
1402
|
-
|
|
1403
|
-
function getOffset() {
|
|
1404
|
-
if (pageDOM instanceof Window) {
|
|
1405
|
-
return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
|
|
1406
|
-
} else {
|
|
1407
|
-
return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
|
|
1408
|
-
}
|
|
1409
|
-
}
|
|
1410
|
-
|
|
1411
1385
|
var queryString = {};
|
|
1412
1386
|
|
|
1413
1387
|
var strictUriEncode = function strictUriEncode(str) {
|
|
@@ -1972,147 +1946,540 @@ var filterObj = function filterObj(obj, predicate) {
|
|
|
1972
1946
|
};
|
|
1973
1947
|
})(queryString);
|
|
1974
1948
|
|
|
1975
|
-
|
|
1976
|
-
|
|
1949
|
+
var pageScrollFn;
|
|
1950
|
+
var pageDOM = window;
|
|
1951
|
+
function bindPageScroll(page, pageEl, config) {
|
|
1952
|
+
pageEl.removeEventListener('scroll', pageScrollFn);
|
|
1953
|
+
pageDOM = pageEl;
|
|
1954
|
+
var distance = config.onReachBottomDistance || 50;
|
|
1955
|
+
var isReachBottom = false;
|
|
1977
1956
|
|
|
1978
|
-
|
|
1979
|
-
|
|
1957
|
+
pageScrollFn = function pageScrollFn() {
|
|
1958
|
+
page.onPageScroll && page.onPageScroll({
|
|
1959
|
+
scrollTop: pageDOM instanceof Window ? window.scrollY : pageDOM.scrollTop
|
|
1960
|
+
});
|
|
1980
1961
|
|
|
1981
|
-
if (
|
|
1982
|
-
|
|
1962
|
+
if (isReachBottom && getOffset() > distance) {
|
|
1963
|
+
isReachBottom = false;
|
|
1983
1964
|
}
|
|
1965
|
+
|
|
1966
|
+
if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
|
|
1967
|
+
isReachBottom = true;
|
|
1968
|
+
page.onReachBottom();
|
|
1969
|
+
}
|
|
1970
|
+
};
|
|
1971
|
+
|
|
1972
|
+
pageDOM.addEventListener('scroll', pageScrollFn, false);
|
|
1973
|
+
}
|
|
1974
|
+
|
|
1975
|
+
function getOffset() {
|
|
1976
|
+
if (pageDOM instanceof Window) {
|
|
1977
|
+
return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
|
|
1984
1978
|
} else {
|
|
1985
|
-
|
|
1979
|
+
return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
|
|
1986
1980
|
}
|
|
1981
|
+
}
|
|
1982
|
+
|
|
1983
|
+
var pageResizeFn;
|
|
1984
|
+
function bindPageResize(page) {
|
|
1985
|
+
window.removeEventListener('resize', pageResizeFn);
|
|
1987
1986
|
|
|
1988
|
-
|
|
1987
|
+
pageResizeFn = function pageResizeFn() {
|
|
1988
|
+
page.onResize && page.onResize({
|
|
1989
|
+
size: {
|
|
1990
|
+
windowHeight: window.innerHeight,
|
|
1991
|
+
windowWidth: window.innerWidth
|
|
1992
|
+
}
|
|
1993
|
+
});
|
|
1994
|
+
};
|
|
1995
|
+
|
|
1996
|
+
window.addEventListener('resize', pageResizeFn, false);
|
|
1989
1997
|
}
|
|
1990
1998
|
|
|
1991
|
-
|
|
1992
|
-
var
|
|
1993
|
-
var search = getSearch();
|
|
1994
|
-
var query = search ? queryString.parse(search) : {};
|
|
1999
|
+
function bindPageEvents(page, pageEl) {
|
|
2000
|
+
var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
1995
2001
|
|
|
1996
|
-
if (
|
|
1997
|
-
|
|
2002
|
+
if (!pageEl) {
|
|
2003
|
+
pageEl = getPageContainer();
|
|
1998
2004
|
}
|
|
1999
2005
|
|
|
2000
|
-
|
|
2001
|
-
|
|
2006
|
+
bindPageScroll(page, pageEl, config);
|
|
2007
|
+
bindPageResize(page);
|
|
2008
|
+
}
|
|
2002
2009
|
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
var onLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
2006
|
-
var pageEl = document.getElementById(page.path);
|
|
2010
|
+
function getPageContainer() {
|
|
2011
|
+
var _Current$page;
|
|
2007
2012
|
|
|
2008
|
-
|
|
2009
|
-
|
|
2013
|
+
var id = (_Current$page = Current.page) === null || _Current$page === void 0 ? void 0 : _Current$page.path;
|
|
2014
|
+
var el = id ? document.getElementById(id) : document.querySelector('.taro_page') || document.querySelector('.taro_router');
|
|
2015
|
+
return el || window;
|
|
2016
|
+
}
|
|
2010
2017
|
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2018
|
+
/**
|
|
2019
|
+
* 插入页面动画需要的样式
|
|
2020
|
+
*/
|
|
2021
|
+
function loadAnimateStyle() {
|
|
2022
|
+
var ms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 300;
|
|
2023
|
+
var css = "\n.taro_router .taro_page {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: #fff;\n transform: translate(100%, 0);\n transition: transform ".concat(ms, "ms;\n}\n\n.taro_router .taro_page.taro_tabbar_page,\n.taro_router .taro_page.taro_page_show.taro_page_stationed {\n transform: none;\n}\n\n.taro_router .taro_page.taro_page_show {\n transform: translate(0, 0);\n}");
|
|
2024
|
+
var style = document.createElement('style');
|
|
2025
|
+
style.innerHTML = css;
|
|
2026
|
+
document.getElementsByTagName('head')[0].appendChild(style);
|
|
2020
2027
|
}
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
if (
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2028
|
+
|
|
2029
|
+
// @ts-nocheck
|
|
2030
|
+
function initTabbar(config) {
|
|
2031
|
+
if (config.tabBar == null) {
|
|
2032
|
+
return;
|
|
2033
|
+
} // TODO: custom-tab-bar
|
|
2034
|
+
|
|
2035
|
+
|
|
2036
|
+
var tabbar = document.createElement('taro-tabbar');
|
|
2037
|
+
var homePage = config.entryPagePath || (config.pages ? config.pages[0] : '');
|
|
2038
|
+
tabbar.conf = config.tabBar;
|
|
2039
|
+
tabbar.conf.homePage = history.location.pathname === '/' ? homePage : history.location.pathname;
|
|
2040
|
+
var routerConfig = config.router;
|
|
2041
|
+
tabbar.conf.mode = routerConfig && routerConfig.mode ? routerConfig.mode : 'hash';
|
|
2042
|
+
|
|
2043
|
+
if (routerConfig.customRoutes) {
|
|
2044
|
+
tabbar.conf.custom = true;
|
|
2045
|
+
tabbar.conf.customRoutes = routerConfig.customRoutes;
|
|
2029
2046
|
} else {
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
});
|
|
2047
|
+
tabbar.conf.custom = false;
|
|
2048
|
+
tabbar.conf.customRoutes = {};
|
|
2033
2049
|
}
|
|
2034
2050
|
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
bindPageScroll(page, pageConfig);
|
|
2038
|
-
}
|
|
2039
|
-
function unloadPage(page) {
|
|
2040
|
-
var delta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
2041
|
-
if (!page) return;
|
|
2042
|
-
stacks.delta = --delta;
|
|
2043
|
-
stacks.pop();
|
|
2044
|
-
page.onUnload();
|
|
2045
|
-
if (delta >= 1) unloadPage(stacks.last, delta);
|
|
2046
|
-
}
|
|
2047
|
-
function showPage(page) {
|
|
2048
|
-
var pageConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2049
|
-
var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
2050
|
-
if (!page) return;
|
|
2051
|
-
page.onShow();
|
|
2052
|
-
var pageEl = document.getElementById(page.path);
|
|
2053
|
-
|
|
2054
|
-
if (pageEl) {
|
|
2055
|
-
pageEl.style.display = 'block';
|
|
2056
|
-
} else {
|
|
2057
|
-
page.onLoad(qs(stacksIndex), function () {
|
|
2058
|
-
return pageOnReady(page, false);
|
|
2059
|
-
});
|
|
2051
|
+
if (typeof routerConfig.basename !== 'undefined') {
|
|
2052
|
+
tabbar.conf.basename = routerConfig.basename;
|
|
2060
2053
|
}
|
|
2061
2054
|
|
|
2062
|
-
|
|
2055
|
+
var container = document.getElementById('container');
|
|
2056
|
+
container === null || container === void 0 ? void 0 : container.appendChild(tabbar);
|
|
2057
|
+
initTabBarApis(config);
|
|
2063
2058
|
}
|
|
2064
|
-
function hidePage(page) {
|
|
2065
|
-
if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
|
|
2066
2059
|
|
|
2067
|
-
|
|
2060
|
+
function setDisplay(el) {
|
|
2061
|
+
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
2068
2062
|
|
|
2069
|
-
if (
|
|
2070
|
-
|
|
2071
|
-
page.onHide();
|
|
2072
|
-
} else {
|
|
2073
|
-
setTimeout(function () {
|
|
2074
|
-
return hidePage(page);
|
|
2075
|
-
}, 0);
|
|
2063
|
+
if (el) {
|
|
2064
|
+
el.style.display = type;
|
|
2076
2065
|
}
|
|
2077
2066
|
}
|
|
2078
2067
|
|
|
2079
|
-
function
|
|
2080
|
-
|
|
2068
|
+
var PageHandler = /*#__PURE__*/function () {
|
|
2069
|
+
function PageHandler(config) {
|
|
2070
|
+
_classCallCheck(this, PageHandler);
|
|
2081
2071
|
|
|
2082
|
-
|
|
2083
|
-
var routes = [];
|
|
2084
|
-
var alias = (_config$router$custom = config.router.customRoutes) !== null && _config$router$custom !== void 0 ? _config$router$custom : {};
|
|
2085
|
-
var runtimeHooks = container.get(SERVICE_IDENTIFIER.Hooks);
|
|
2086
|
-
setRoutesAlias(alias);
|
|
2072
|
+
_defineProperty(this, "config", void 0);
|
|
2087
2073
|
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
routes.push({
|
|
2092
|
-
path: alias[path] || path,
|
|
2093
|
-
action: route.load
|
|
2074
|
+
_defineProperty(this, "defaultAnimation", {
|
|
2075
|
+
duration: 300,
|
|
2076
|
+
delay: 50
|
|
2094
2077
|
});
|
|
2078
|
+
|
|
2079
|
+
_defineProperty(this, "unloadTimer", void 0);
|
|
2080
|
+
|
|
2081
|
+
_defineProperty(this, "hideTimer", void 0);
|
|
2082
|
+
|
|
2083
|
+
_defineProperty(this, "lastHidePage", void 0);
|
|
2084
|
+
|
|
2085
|
+
_defineProperty(this, "lastUnloadPage", void 0);
|
|
2086
|
+
|
|
2087
|
+
this.config = config;
|
|
2088
|
+
this.mount();
|
|
2095
2089
|
}
|
|
2096
2090
|
|
|
2097
|
-
|
|
2091
|
+
_createClass(PageHandler, [{
|
|
2092
|
+
key: "appId",
|
|
2093
|
+
get: function get() {
|
|
2094
|
+
return 'app';
|
|
2095
|
+
}
|
|
2096
|
+
}, {
|
|
2097
|
+
key: "router",
|
|
2098
|
+
get: function get() {
|
|
2099
|
+
return this.config.router;
|
|
2100
|
+
}
|
|
2101
|
+
}, {
|
|
2102
|
+
key: "routerMode",
|
|
2103
|
+
get: function get() {
|
|
2104
|
+
return this.router.mode || 'hash';
|
|
2105
|
+
}
|
|
2106
|
+
}, {
|
|
2107
|
+
key: "customRoutes",
|
|
2108
|
+
get: function get() {
|
|
2109
|
+
return this.router.customRoutes || {};
|
|
2110
|
+
}
|
|
2111
|
+
}, {
|
|
2112
|
+
key: "routes",
|
|
2113
|
+
get: function get() {
|
|
2114
|
+
return this.config.routes;
|
|
2115
|
+
}
|
|
2116
|
+
}, {
|
|
2117
|
+
key: "tabBarList",
|
|
2118
|
+
get: function get() {
|
|
2119
|
+
var _this$config$tabBar;
|
|
2120
|
+
|
|
2121
|
+
return ((_this$config$tabBar = this.config.tabBar) === null || _this$config$tabBar === void 0 ? void 0 : _this$config$tabBar.list) || [];
|
|
2122
|
+
}
|
|
2123
|
+
}, {
|
|
2124
|
+
key: "PullDownRefresh",
|
|
2125
|
+
get: function get() {
|
|
2126
|
+
return this.config.PullDownRefresh;
|
|
2127
|
+
}
|
|
2128
|
+
}, {
|
|
2129
|
+
key: "animation",
|
|
2130
|
+
get: function get() {
|
|
2131
|
+
var _this$config$animatio, _this$config;
|
|
2132
|
+
|
|
2133
|
+
return (_this$config$animatio = (_this$config = this.config) === null || _this$config === void 0 ? void 0 : _this$config.animation) !== null && _this$config$animatio !== void 0 ? _this$config$animatio : this.defaultAnimation;
|
|
2134
|
+
}
|
|
2135
|
+
}, {
|
|
2136
|
+
key: "animationDelay",
|
|
2137
|
+
get: function get() {
|
|
2138
|
+
var _this$defaultAnimatio;
|
|
2139
|
+
|
|
2140
|
+
return (_typeof(this.animation) === 'object' ? this.animation.delay : this.animation ? (_this$defaultAnimatio = this.defaultAnimation) === null || _this$defaultAnimatio === void 0 ? void 0 : _this$defaultAnimatio.delay : 0) || 0;
|
|
2141
|
+
}
|
|
2142
|
+
}, {
|
|
2143
|
+
key: "animationDuration",
|
|
2144
|
+
get: function get() {
|
|
2145
|
+
var _this$defaultAnimatio2;
|
|
2146
|
+
|
|
2147
|
+
return (_typeof(this.animation) === 'object' ? this.animation.duration : this.animation ? (_this$defaultAnimatio2 = this.defaultAnimation) === null || _this$defaultAnimatio2 === void 0 ? void 0 : _this$defaultAnimatio2.duration : 0) || 0;
|
|
2148
|
+
}
|
|
2149
|
+
}, {
|
|
2150
|
+
key: "pathname",
|
|
2151
|
+
get: function get() {
|
|
2152
|
+
return this.router.pathname;
|
|
2153
|
+
},
|
|
2154
|
+
set: function set(p) {
|
|
2155
|
+
this.router.pathname = p;
|
|
2156
|
+
}
|
|
2157
|
+
}, {
|
|
2158
|
+
key: "basename",
|
|
2159
|
+
get: function get() {
|
|
2160
|
+
return this.router.basename || '';
|
|
2161
|
+
}
|
|
2162
|
+
}, {
|
|
2163
|
+
key: "pageConfig",
|
|
2164
|
+
get: function get() {
|
|
2165
|
+
var _this = this;
|
|
2166
|
+
|
|
2167
|
+
return this.routes.find(function (r) {
|
|
2168
|
+
var _routesAlias$getConfi;
|
|
2169
|
+
|
|
2170
|
+
var routePath = stripBasename(_this.pathname, _this.basename);
|
|
2171
|
+
var pagePath = addLeadingSlash(r.path);
|
|
2172
|
+
return pagePath === routePath || ((_routesAlias$getConfi = routesAlias.getConfig(pagePath)) === null || _routesAlias$getConfi === void 0 ? void 0 : _routesAlias$getConfi.includes(routePath));
|
|
2173
|
+
});
|
|
2174
|
+
}
|
|
2175
|
+
}, {
|
|
2176
|
+
key: "isTabBar",
|
|
2177
|
+
get: function get() {
|
|
2178
|
+
var _Object$entries$find;
|
|
2179
|
+
|
|
2180
|
+
var routePath = stripBasename(this.pathname, this.basename);
|
|
2181
|
+
var pagePath = ((_Object$entries$find = Object.entries(this.customRoutes).find(function (_ref) {
|
|
2182
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
2183
|
+
target = _ref2[1];
|
|
2184
|
+
|
|
2185
|
+
if (typeof target === 'string') {
|
|
2186
|
+
return target === routePath;
|
|
2187
|
+
} else if ((target === null || target === void 0 ? void 0 : target.length) > 0) {
|
|
2188
|
+
return target.includes(routePath);
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
return false;
|
|
2192
|
+
})) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[0]) || routePath;
|
|
2193
|
+
return !!pagePath && this.tabBarList.some(function (t) {
|
|
2194
|
+
return t.pagePath === pagePath;
|
|
2195
|
+
});
|
|
2196
|
+
}
|
|
2197
|
+
}, {
|
|
2198
|
+
key: "isSamePage",
|
|
2199
|
+
value: function isSamePage(page) {
|
|
2200
|
+
var routePath = stripBasename(this.pathname, this.basename);
|
|
2201
|
+
var pagePath = stripBasename(page === null || page === void 0 ? void 0 : page.path, this.basename);
|
|
2202
|
+
return pagePath.startsWith(routePath + '?');
|
|
2203
|
+
}
|
|
2204
|
+
}, {
|
|
2205
|
+
key: "search",
|
|
2206
|
+
get: function get() {
|
|
2207
|
+
var search = '?';
|
|
2208
|
+
|
|
2209
|
+
if (this.routerMode === 'hash') {
|
|
2210
|
+
var idx = location.hash.indexOf('?');
|
|
2211
|
+
|
|
2212
|
+
if (idx > -1) {
|
|
2213
|
+
search = location.hash.slice(idx);
|
|
2214
|
+
}
|
|
2215
|
+
} else {
|
|
2216
|
+
search = location.search;
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
return search.substr(1);
|
|
2220
|
+
}
|
|
2221
|
+
}, {
|
|
2222
|
+
key: "getQuery",
|
|
2223
|
+
value: function getQuery() {
|
|
2224
|
+
var stamp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
2225
|
+
var search = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
2226
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
2227
|
+
search = search ? "".concat(search, "&").concat(this.search) : this.search;
|
|
2228
|
+
var query = search ? queryString.parse(search) : {};
|
|
2229
|
+
query.stamp = stamp.toString();
|
|
2230
|
+
return _objectSpread(_objectSpread({}, query), options);
|
|
2231
|
+
}
|
|
2232
|
+
}, {
|
|
2233
|
+
key: "mount",
|
|
2234
|
+
value: function mount() {
|
|
2235
|
+
var _document$getElementB;
|
|
2236
|
+
|
|
2237
|
+
setHistoryMode(this.routerMode, this.router.basename);
|
|
2238
|
+
(_document$getElementB = document.getElementById('app')) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.remove();
|
|
2239
|
+
this.animation && loadAnimateStyle(this.animationDuration);
|
|
2240
|
+
var app = document.createElement('div');
|
|
2241
|
+
app.id = this.appId;
|
|
2242
|
+
app.classList.add('taro_router');
|
|
2243
|
+
|
|
2244
|
+
if (this.tabBarList.length > 1) {
|
|
2245
|
+
var container = document.createElement('div');
|
|
2246
|
+
container.classList.add('taro-tabbar__container');
|
|
2247
|
+
container.id = 'container';
|
|
2248
|
+
var panel = document.createElement('div');
|
|
2249
|
+
panel.classList.add('taro-tabbar__panel');
|
|
2250
|
+
panel.appendChild(app);
|
|
2251
|
+
container.appendChild(panel);
|
|
2252
|
+
document.body.appendChild(container);
|
|
2253
|
+
initTabbar(this.config);
|
|
2254
|
+
} else {
|
|
2255
|
+
document.body.appendChild(app);
|
|
2256
|
+
}
|
|
2257
|
+
}
|
|
2258
|
+
}, {
|
|
2259
|
+
key: "onReady",
|
|
2260
|
+
value: function onReady(page) {
|
|
2261
|
+
var onLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
2262
|
+
var pageEl = document.getElementById(page.path);
|
|
2263
|
+
|
|
2264
|
+
if (pageEl && !(pageEl !== null && pageEl !== void 0 && pageEl['__isReady'])) {
|
|
2265
|
+
var _el$componentOnReady, _el$componentOnReady$;
|
|
2266
|
+
|
|
2267
|
+
var el = pageEl.firstElementChild;
|
|
2268
|
+
el === null || el === void 0 ? void 0 : (_el$componentOnReady = el['componentOnReady']) === null || _el$componentOnReady === void 0 ? void 0 : (_el$componentOnReady$ = _el$componentOnReady.call(el)) === null || _el$componentOnReady$ === void 0 ? void 0 : _el$componentOnReady$.then(function () {
|
|
2269
|
+
requestAnimationFrame(function () {
|
|
2270
|
+
var _page$onReady;
|
|
2271
|
+
|
|
2272
|
+
(_page$onReady = page.onReady) === null || _page$onReady === void 0 ? void 0 : _page$onReady.call(page);
|
|
2273
|
+
pageEl['__isReady'] = true;
|
|
2274
|
+
});
|
|
2275
|
+
});
|
|
2276
|
+
onLoad && (pageEl['__page'] = page);
|
|
2277
|
+
}
|
|
2278
|
+
}
|
|
2279
|
+
}, {
|
|
2280
|
+
key: "load",
|
|
2281
|
+
value: function load(page) {
|
|
2282
|
+
var _this2 = this;
|
|
2283
|
+
|
|
2284
|
+
var pageConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2285
|
+
var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
2286
|
+
if (!page) return; // NOTE: 页面栈推入太晚可能导致 getCurrentPages 无法获取到当前页面实例
|
|
2287
|
+
|
|
2288
|
+
stacks.push(page);
|
|
2289
|
+
var param = this.getQuery(stacks.length, '', page.options);
|
|
2290
|
+
var pageEl = document.getElementById(page.path);
|
|
2291
|
+
|
|
2292
|
+
if (pageEl) {
|
|
2293
|
+
var _page$onShow;
|
|
2294
|
+
|
|
2295
|
+
setDisplay(pageEl);
|
|
2296
|
+
this.isTabBar && pageEl.classList.add('taro_tabbar_page');
|
|
2297
|
+
this.addAnimation(pageEl, stacksIndex === 0);
|
|
2298
|
+
(_page$onShow = page.onShow) === null || _page$onShow === void 0 ? void 0 : _page$onShow.call(page);
|
|
2299
|
+
bindPageEvents(page, pageEl, pageConfig);
|
|
2300
|
+
} else {
|
|
2301
|
+
var _page$onLoad;
|
|
2302
|
+
|
|
2303
|
+
(_page$onLoad = page.onLoad) === null || _page$onLoad === void 0 ? void 0 : _page$onLoad.call(page, param, function () {
|
|
2304
|
+
var _pageEl, _page$onShow2;
|
|
2305
|
+
|
|
2306
|
+
pageEl = document.getElementById(page.path);
|
|
2307
|
+
_this2.isTabBar && ((_pageEl = pageEl) === null || _pageEl === void 0 ? void 0 : _pageEl.classList.add('taro_tabbar_page'));
|
|
2308
|
+
|
|
2309
|
+
_this2.addAnimation(pageEl, stacksIndex === 0);
|
|
2310
|
+
|
|
2311
|
+
_this2.onReady(page, true);
|
|
2312
|
+
|
|
2313
|
+
(_page$onShow2 = page.onShow) === null || _page$onShow2 === void 0 ? void 0 : _page$onShow2.call(page);
|
|
2314
|
+
bindPageEvents(page, pageEl, pageConfig);
|
|
2315
|
+
});
|
|
2316
|
+
}
|
|
2317
|
+
}
|
|
2318
|
+
}, {
|
|
2319
|
+
key: "unload",
|
|
2320
|
+
value: function unload(page) {
|
|
2321
|
+
var _this3 = this;
|
|
2322
|
+
|
|
2323
|
+
var delta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
2324
|
+
var top = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
2325
|
+
if (!page) return;
|
|
2326
|
+
stacks.delta = --delta;
|
|
2327
|
+
stacks.pop();
|
|
2328
|
+
|
|
2329
|
+
if (this.animation && top) {
|
|
2330
|
+
if (this.unloadTimer) {
|
|
2331
|
+
var _this$lastUnloadPage, _this$lastUnloadPage$;
|
|
2332
|
+
|
|
2333
|
+
clearTimeout(this.unloadTimer);
|
|
2334
|
+
(_this$lastUnloadPage = this.lastUnloadPage) === null || _this$lastUnloadPage === void 0 ? void 0 : (_this$lastUnloadPage$ = _this$lastUnloadPage.onUnload) === null || _this$lastUnloadPage$ === void 0 ? void 0 : _this$lastUnloadPage$.call(_this$lastUnloadPage);
|
|
2335
|
+
this.unloadTimer = null;
|
|
2336
|
+
}
|
|
2337
|
+
|
|
2338
|
+
this.lastUnloadPage = page;
|
|
2339
|
+
var pageEl = document.getElementById(page.path);
|
|
2340
|
+
pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_stationed');
|
|
2341
|
+
pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_show');
|
|
2342
|
+
this.unloadTimer = setTimeout(function () {
|
|
2343
|
+
var _this3$lastUnloadPage, _this3$lastUnloadPage2;
|
|
2344
|
+
|
|
2345
|
+
_this3.unloadTimer = null;
|
|
2346
|
+
(_this3$lastUnloadPage = _this3.lastUnloadPage) === null || _this3$lastUnloadPage === void 0 ? void 0 : (_this3$lastUnloadPage2 = _this3$lastUnloadPage.onUnload) === null || _this3$lastUnloadPage2 === void 0 ? void 0 : _this3$lastUnloadPage2.call(_this3$lastUnloadPage);
|
|
2347
|
+
}, this.animationDuration);
|
|
2348
|
+
} else {
|
|
2349
|
+
var _page$onUnload;
|
|
2350
|
+
|
|
2351
|
+
var _pageEl2 = document.getElementById(page.path);
|
|
2352
|
+
|
|
2353
|
+
_pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_stationed');
|
|
2354
|
+
_pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_show');
|
|
2355
|
+
page === null || page === void 0 ? void 0 : (_page$onUnload = page.onUnload) === null || _page$onUnload === void 0 ? void 0 : _page$onUnload.call(page);
|
|
2356
|
+
}
|
|
2357
|
+
|
|
2358
|
+
if (delta >= 1) this.unload(stacks.last, delta);
|
|
2359
|
+
}
|
|
2360
|
+
}, {
|
|
2361
|
+
key: "show",
|
|
2362
|
+
value: function show(page) {
|
|
2363
|
+
var _this4 = this;
|
|
2364
|
+
|
|
2365
|
+
var pageConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2366
|
+
var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
2367
|
+
if (!page) return;
|
|
2368
|
+
var param = this.getQuery(stacks.length, '', page.options);
|
|
2369
|
+
var pageEl = document.getElementById(page.path);
|
|
2370
|
+
|
|
2371
|
+
if (pageEl) {
|
|
2372
|
+
var _page$onShow3;
|
|
2373
|
+
|
|
2374
|
+
setDisplay(pageEl);
|
|
2375
|
+
this.addAnimation(pageEl, stacksIndex === 0);
|
|
2376
|
+
(_page$onShow3 = page.onShow) === null || _page$onShow3 === void 0 ? void 0 : _page$onShow3.call(page);
|
|
2377
|
+
bindPageEvents(page, pageEl, pageConfig);
|
|
2378
|
+
} else {
|
|
2379
|
+
var _page$onLoad2;
|
|
2380
|
+
|
|
2381
|
+
(_page$onLoad2 = page.onLoad) === null || _page$onLoad2 === void 0 ? void 0 : _page$onLoad2.call(page, param, function () {
|
|
2382
|
+
var _page$onShow4;
|
|
2383
|
+
|
|
2384
|
+
pageEl = document.getElementById(page.path);
|
|
2385
|
+
|
|
2386
|
+
_this4.addAnimation(pageEl, stacksIndex === 0);
|
|
2387
|
+
|
|
2388
|
+
_this4.onReady(page, false);
|
|
2389
|
+
|
|
2390
|
+
(_page$onShow4 = page.onShow) === null || _page$onShow4 === void 0 ? void 0 : _page$onShow4.call(page);
|
|
2391
|
+
bindPageEvents(page, pageEl, pageConfig);
|
|
2392
|
+
});
|
|
2393
|
+
}
|
|
2394
|
+
}
|
|
2395
|
+
}, {
|
|
2396
|
+
key: "hide",
|
|
2397
|
+
value: function hide(page) {
|
|
2398
|
+
var _this5 = this;
|
|
2399
|
+
|
|
2400
|
+
if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
|
|
2401
|
+
|
|
2402
|
+
var pageEl = document.getElementById(page.path);
|
|
2403
|
+
|
|
2404
|
+
if (pageEl) {
|
|
2405
|
+
var _page$onHide;
|
|
2406
|
+
|
|
2407
|
+
if (this.hideTimer) {
|
|
2408
|
+
clearTimeout(this.hideTimer);
|
|
2409
|
+
this.hideTimer = null;
|
|
2410
|
+
setDisplay(this.lastHidePage, 'none');
|
|
2411
|
+
}
|
|
2412
|
+
|
|
2413
|
+
this.lastHidePage = pageEl;
|
|
2414
|
+
this.hideTimer = setTimeout(function () {
|
|
2415
|
+
_this5.hideTimer = null;
|
|
2416
|
+
setDisplay(_this5.lastHidePage, 'none');
|
|
2417
|
+
}, this.animationDuration + this.animationDelay);
|
|
2418
|
+
(_page$onHide = page.onHide) === null || _page$onHide === void 0 ? void 0 : _page$onHide.call(page);
|
|
2419
|
+
} else {
|
|
2420
|
+
setTimeout(function () {
|
|
2421
|
+
return _this5.hide(page);
|
|
2422
|
+
}, 0);
|
|
2423
|
+
}
|
|
2424
|
+
}
|
|
2425
|
+
}, {
|
|
2426
|
+
key: "addAnimation",
|
|
2427
|
+
value: function addAnimation(pageEl) {
|
|
2428
|
+
var _this6 = this;
|
|
2429
|
+
|
|
2430
|
+
var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
2431
|
+
if (!pageEl) return;
|
|
2432
|
+
|
|
2433
|
+
if (this.animation && !first) {
|
|
2434
|
+
setTimeout(function () {
|
|
2435
|
+
pageEl.classList.add('taro_page_show');
|
|
2436
|
+
setTimeout(function () {
|
|
2437
|
+
pageEl.classList.add('taro_page_stationed');
|
|
2438
|
+
}, _this6.animationDuration);
|
|
2439
|
+
}, this.animationDelay);
|
|
2440
|
+
} else {
|
|
2441
|
+
pageEl.classList.add('taro_page_show');
|
|
2442
|
+
pageEl.classList.add('taro_page_stationed');
|
|
2443
|
+
}
|
|
2444
|
+
}
|
|
2445
|
+
}]);
|
|
2446
|
+
|
|
2447
|
+
return PageHandler;
|
|
2448
|
+
}();
|
|
2449
|
+
|
|
2450
|
+
function createRouter(app, config, framework) {
|
|
2451
|
+
var _routes$0$path, _app$onLaunch, _app$onShow;
|
|
2452
|
+
|
|
2453
|
+
var handler = new PageHandler(config);
|
|
2454
|
+
var runtimeHooks = container.get(SERVICE_IDENTIFIER.Hooks);
|
|
2455
|
+
routesAlias.set(handler.router.customRoutes);
|
|
2456
|
+
var basename = handler.router.basename;
|
|
2457
|
+
var routes = handler.routes.map(function (route) {
|
|
2458
|
+
return {
|
|
2459
|
+
path: routesAlias.getAll(addLeadingSlash(route.path)),
|
|
2460
|
+
action: route.load
|
|
2461
|
+
};
|
|
2462
|
+
});
|
|
2463
|
+
var entryPagePath = config.entryPagePath || ((_routes$0$path = routes[0].path) === null || _routes$0$path === void 0 ? void 0 : _routes$0$path[0]);
|
|
2098
2464
|
var router = new UniversalRouter(routes, {
|
|
2099
2465
|
baseUrl: basename || ''
|
|
2100
2466
|
});
|
|
2101
|
-
|
|
2467
|
+
var launchParam = handler.getQuery(stacks.length);
|
|
2468
|
+
(_app$onLaunch = app.onLaunch) === null || _app$onLaunch === void 0 ? void 0 : _app$onLaunch.call(app, launchParam);
|
|
2102
2469
|
|
|
2103
2470
|
var render = /*#__PURE__*/function () {
|
|
2104
2471
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
2105
|
-
var location, action, element, _app$onPageNotFound, pageConfig, enablePullDownRefresh, _pageConfig$navigatio, currentPage, pathname, shouldLoad, prevIndex, delta, _prevIndex, _element$default, _runtimeHooks$createP, el, loadConfig, stacksIndex, page;
|
|
2472
|
+
var location, action, element, _app$onPageNotFound, pageConfig, enablePullDownRefresh, _pageConfig$navigatio, currentPage, pathname, shouldLoad, prevIndex, delta, _prevIndex, _delta, _element$default, _runtimeHooks$createP, el, loadConfig, stacksIndex, page;
|
|
2106
2473
|
|
|
2107
2474
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
2108
2475
|
while (1) {
|
|
2109
2476
|
switch (_context.prev = _context.next) {
|
|
2110
2477
|
case 0:
|
|
2111
2478
|
location = _ref.location, action = _ref.action;
|
|
2112
|
-
|
|
2479
|
+
handler.pathname = location.pathname;
|
|
2113
2480
|
_context.prev = 2;
|
|
2114
2481
|
_context.next = 5;
|
|
2115
|
-
return router.resolve(
|
|
2482
|
+
return router.resolve(handler.router.forcePath || handler.pathname);
|
|
2116
2483
|
|
|
2117
2484
|
case 5:
|
|
2118
2485
|
element = _context.sent;
|
|
@@ -2129,7 +2496,7 @@ function createRouter(app, config, framework) {
|
|
|
2129
2496
|
}
|
|
2130
2497
|
|
|
2131
2498
|
(_app$onPageNotFound = app.onPageNotFound) === null || _app$onPageNotFound === void 0 ? void 0 : _app$onPageNotFound.call(app, {
|
|
2132
|
-
path:
|
|
2499
|
+
path: handler.pathname
|
|
2133
2500
|
});
|
|
2134
2501
|
_context.next = 15;
|
|
2135
2502
|
break;
|
|
@@ -2146,14 +2513,11 @@ function createRouter(app, config, framework) {
|
|
|
2146
2513
|
return _context.abrupt("return");
|
|
2147
2514
|
|
|
2148
2515
|
case 17:
|
|
2149
|
-
pageConfig =
|
|
2150
|
-
var path = addLeadingSlash(r.path);
|
|
2151
|
-
return path === location.pathname || alias[path] === location.pathname;
|
|
2152
|
-
});
|
|
2516
|
+
pageConfig = handler.pageConfig;
|
|
2153
2517
|
enablePullDownRefresh = false;
|
|
2154
2518
|
eventCenter.trigger('__taroRouterChange', {
|
|
2155
2519
|
toLocation: {
|
|
2156
|
-
path:
|
|
2520
|
+
path: handler.pathname
|
|
2157
2521
|
}
|
|
2158
2522
|
});
|
|
2159
2523
|
|
|
@@ -2163,7 +2527,7 @@ function createRouter(app, config, framework) {
|
|
|
2163
2527
|
}
|
|
2164
2528
|
|
|
2165
2529
|
currentPage = Current.page;
|
|
2166
|
-
pathname =
|
|
2530
|
+
pathname = handler.pathname;
|
|
2167
2531
|
shouldLoad = false;
|
|
2168
2532
|
|
|
2169
2533
|
if (!(action === 'POP')) {
|
|
@@ -2174,62 +2538,60 @@ function createRouter(app, config, framework) {
|
|
|
2174
2538
|
// NOTE: 浏览器事件退后多次时,该事件只会被触发一次
|
|
2175
2539
|
prevIndex = stacks.getPrevIndex(pathname);
|
|
2176
2540
|
delta = stacks.getDelta(pathname);
|
|
2177
|
-
|
|
2541
|
+
handler.unload(currentPage, delta, prevIndex > -1);
|
|
2178
2542
|
|
|
2179
2543
|
if (prevIndex > -1) {
|
|
2180
|
-
|
|
2544
|
+
handler.show(stacks.getItem(prevIndex), pageConfig, prevIndex);
|
|
2181
2545
|
} else {
|
|
2182
2546
|
shouldLoad = true;
|
|
2183
2547
|
}
|
|
2184
2548
|
|
|
2185
|
-
_context.next =
|
|
2549
|
+
_context.next = 42;
|
|
2186
2550
|
break;
|
|
2187
2551
|
|
|
2188
2552
|
case 31:
|
|
2189
|
-
if (!
|
|
2190
|
-
_context.next =
|
|
2553
|
+
if (!handler.isTabBar) {
|
|
2554
|
+
_context.next = 40;
|
|
2191
2555
|
break;
|
|
2192
2556
|
}
|
|
2193
2557
|
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
_context.next = 46;
|
|
2197
|
-
break;
|
|
2198
|
-
|
|
2199
|
-
case 36:
|
|
2200
|
-
if (!(action === 'REPLACE')) {
|
|
2201
|
-
_context.next = 46;
|
|
2558
|
+
if (!handler.isSamePage(currentPage)) {
|
|
2559
|
+
_context.next = 34;
|
|
2202
2560
|
break;
|
|
2203
2561
|
}
|
|
2204
2562
|
|
|
2205
|
-
|
|
2206
|
-
_context.next = 44;
|
|
2207
|
-
break;
|
|
2208
|
-
}
|
|
2563
|
+
return _context.abrupt("return");
|
|
2209
2564
|
|
|
2210
|
-
|
|
2211
|
-
_prevIndex = stacks.getPrevIndex(pathname);
|
|
2565
|
+
case 34:
|
|
2566
|
+
_prevIndex = stacks.getPrevIndex(pathname, 0);
|
|
2567
|
+
handler.hide(currentPage);
|
|
2212
2568
|
|
|
2213
2569
|
if (!(_prevIndex > -1)) {
|
|
2214
|
-
_context.next =
|
|
2570
|
+
_context.next = 38;
|
|
2215
2571
|
break;
|
|
2216
2572
|
}
|
|
2217
2573
|
|
|
2218
|
-
return _context.abrupt("return",
|
|
2574
|
+
return _context.abrupt("return", handler.show(stacks.getItem(_prevIndex), pageConfig, _prevIndex));
|
|
2219
2575
|
|
|
2220
|
-
case
|
|
2221
|
-
_context.next =
|
|
2576
|
+
case 38:
|
|
2577
|
+
_context.next = 41;
|
|
2222
2578
|
break;
|
|
2223
2579
|
|
|
2224
|
-
case
|
|
2225
|
-
|
|
2580
|
+
case 40:
|
|
2581
|
+
if (action === 'REPLACE') {
|
|
2582
|
+
_delta = stacks.getDelta(pathname); // NOTE: 页面路由记录并不会清空,只是移除掉缓存的 stack 以及页面
|
|
2226
2583
|
|
|
2227
|
-
|
|
2584
|
+
handler.unload(currentPage, _delta);
|
|
2585
|
+
} else if (action === 'PUSH') {
|
|
2586
|
+
handler.hide(currentPage);
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2589
|
+
case 41:
|
|
2228
2590
|
shouldLoad = true;
|
|
2229
2591
|
|
|
2230
|
-
case
|
|
2231
|
-
if (!shouldLoad) {
|
|
2232
|
-
_context.next =
|
|
2592
|
+
case 42:
|
|
2593
|
+
if (!(shouldLoad || stacks.length < 1)) {
|
|
2594
|
+
_context.next = 50;
|
|
2233
2595
|
break;
|
|
2234
2596
|
}
|
|
2235
2597
|
|
|
@@ -2238,10 +2600,10 @@ function createRouter(app, config, framework) {
|
|
|
2238
2600
|
stacksIndex = stacks.length;
|
|
2239
2601
|
delete loadConfig['path'];
|
|
2240
2602
|
delete loadConfig['load'];
|
|
2241
|
-
page = createPageConfig(enablePullDownRefresh ? (_runtimeHooks$createP = runtimeHooks.createPullDownComponent) === null || _runtimeHooks$createP === void 0 ? void 0 : _runtimeHooks$createP.call(runtimeHooks, el, location.pathname, framework,
|
|
2242
|
-
return _context.abrupt("return",
|
|
2603
|
+
page = createPageConfig(enablePullDownRefresh ? (_runtimeHooks$createP = runtimeHooks.createPullDownComponent) === null || _runtimeHooks$createP === void 0 ? void 0 : _runtimeHooks$createP.call(runtimeHooks, el, location.pathname, framework, handler.PullDownRefresh) : el, pathname + stringify(handler.getQuery(stacksIndex)), {}, loadConfig);
|
|
2604
|
+
return _context.abrupt("return", handler.load(page, pageConfig, stacksIndex));
|
|
2243
2605
|
|
|
2244
|
-
case
|
|
2606
|
+
case 50:
|
|
2245
2607
|
case "end":
|
|
2246
2608
|
return _context.stop();
|
|
2247
2609
|
}
|
|
@@ -2255,14 +2617,14 @@ function createRouter(app, config, framework) {
|
|
|
2255
2617
|
}();
|
|
2256
2618
|
|
|
2257
2619
|
if (history.location.pathname === '/') {
|
|
2258
|
-
history.replace(prependBasename(
|
|
2620
|
+
history.replace(prependBasename(entryPagePath + history.location.search));
|
|
2259
2621
|
}
|
|
2260
2622
|
|
|
2261
2623
|
render({
|
|
2262
2624
|
location: history.location,
|
|
2263
2625
|
action: r.Push
|
|
2264
2626
|
});
|
|
2265
|
-
app.onShow(
|
|
2627
|
+
(_app$onShow = app.onShow) === null || _app$onShow === void 0 ? void 0 : _app$onShow.call(app, launchParam);
|
|
2266
2628
|
return history.listen(render);
|
|
2267
2629
|
}
|
|
2268
2630
|
|