@tarojs/router 3.4.0-beta.0 → 3.4.0-beta.1
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 +618 -307
- package/dist/index.js.map +1 -1
- package/dist/router.esm.js +616 -305
- package/dist/router.esm.js.map +1 -1
- package/package.json +3 -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
|
|
|
@@ -484,6 +489,19 @@ var Stacks = /*#__PURE__*/function () {
|
|
|
484
489
|
value: function getItem(index) {
|
|
485
490
|
return this.stacks[index];
|
|
486
491
|
}
|
|
492
|
+
}, {
|
|
493
|
+
key: "getLastIndex",
|
|
494
|
+
value: function getLastIndex(pathname) {
|
|
495
|
+
var stateWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
496
|
+
|
|
497
|
+
var list = _toConsumableArray(this.stacks).reverse();
|
|
498
|
+
|
|
499
|
+
return list.findIndex(function (page, i) {
|
|
500
|
+
var _page$path;
|
|
501
|
+
|
|
502
|
+
return i >= stateWith && ((_page$path = page.path) === null || _page$path === void 0 ? void 0 : _page$path.replace(/\?.*/g, '')) === pathname;
|
|
503
|
+
});
|
|
504
|
+
}
|
|
487
505
|
}, {
|
|
488
506
|
key: "getDelta",
|
|
489
507
|
value: function getDelta(pathname) {
|
|
@@ -492,17 +510,19 @@ var Stacks = /*#__PURE__*/function () {
|
|
|
492
510
|
} // NOTE: 此处为了修复浏览器后退多级页面,在大量重复路由状况下可能出现判断错误的情况 (增强判断能力只能考虑在 query 中新增参数来判断,暂时搁置)
|
|
493
511
|
|
|
494
512
|
|
|
495
|
-
|
|
496
|
-
var _r$path;
|
|
497
|
-
|
|
498
|
-
return ((_r$path = r.path) === null || _r$path === void 0 ? void 0 : _r$path.replace(/\?.*/g, '')) === pathname;
|
|
499
|
-
});
|
|
500
|
-
return this.length - 1 - prevIndex;
|
|
513
|
+
return this.getLastIndex(pathname) || 1;
|
|
501
514
|
}
|
|
502
515
|
}, {
|
|
503
516
|
key: "getPrevIndex",
|
|
504
517
|
value: function getPrevIndex(pathname) {
|
|
505
|
-
|
|
518
|
+
var stateWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
519
|
+
var lastIndex = this.getLastIndex(pathname, stateWith);
|
|
520
|
+
|
|
521
|
+
if (lastIndex < 0) {
|
|
522
|
+
return -1;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
return this.length - 1 - lastIndex;
|
|
506
526
|
}
|
|
507
527
|
}, {
|
|
508
528
|
key: "pop",
|
|
@@ -521,48 +541,98 @@ var Stacks = /*#__PURE__*/function () {
|
|
|
521
541
|
|
|
522
542
|
var stacks = new Stacks();
|
|
523
543
|
|
|
524
|
-
var routesAlias = {};
|
|
525
|
-
function setRoutesAlias(alias) {
|
|
526
|
-
routesAlias = alias;
|
|
527
|
-
}
|
|
528
544
|
function addLeadingSlash(path) {
|
|
529
545
|
if (path == null) {
|
|
530
546
|
return '';
|
|
531
547
|
}
|
|
532
548
|
|
|
533
549
|
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
|
-
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
var RoutesAlias = /*#__PURE__*/function () {
|
|
553
|
+
function RoutesAlias() {
|
|
554
|
+
var _this = this;
|
|
555
|
+
|
|
556
|
+
_classCallCheck(this, RoutesAlias);
|
|
557
|
+
|
|
558
|
+
_defineProperty(this, "conf", []);
|
|
559
|
+
|
|
560
|
+
_defineProperty(this, "getConfig", function () {
|
|
561
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
562
|
+
|
|
563
|
+
var customRoute = _this.conf.filter(function (arr) {
|
|
564
|
+
return arr.includes(url);
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
return customRoute[0];
|
|
568
|
+
});
|
|
569
|
+
|
|
570
|
+
_defineProperty(this, "getOrigin", function () {
|
|
571
|
+
var _this$getConfig;
|
|
572
|
+
|
|
573
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
574
|
+
return ((_this$getConfig = _this.getConfig(url)) === null || _this$getConfig === void 0 ? void 0 : _this$getConfig[0]) || url;
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
_defineProperty(this, "getAlias", function () {
|
|
578
|
+
var _this$getConfig2;
|
|
579
|
+
|
|
580
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
581
|
+
return ((_this$getConfig2 = _this.getConfig(url)) === null || _this$getConfig2 === void 0 ? void 0 : _this$getConfig2[1]) || url;
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
_defineProperty(this, "getAll", function () {
|
|
585
|
+
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
586
|
+
return _this.conf.filter(function (arr) {
|
|
587
|
+
return arr.includes(url);
|
|
588
|
+
}).reduce(function (p, a) {
|
|
589
|
+
p.push(a[1]);
|
|
590
|
+
return p;
|
|
591
|
+
}, [url]);
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
_createClass(RoutesAlias, [{
|
|
596
|
+
key: "set",
|
|
597
|
+
value: function set() {
|
|
598
|
+
var _this2 = this;
|
|
599
|
+
|
|
600
|
+
var customRoutes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
601
|
+
|
|
602
|
+
var _loop = function _loop(_key) {
|
|
603
|
+
var path = customRoutes[_key];
|
|
604
|
+
_key = addLeadingSlash(_key);
|
|
605
|
+
|
|
606
|
+
if (typeof path === 'string') {
|
|
607
|
+
_this2.conf.push([_key, addLeadingSlash(path)]);
|
|
608
|
+
} else if ((path === null || path === void 0 ? void 0 : path.length) > 0) {
|
|
609
|
+
var _this2$conf;
|
|
610
|
+
|
|
611
|
+
(_this2$conf = _this2.conf).push.apply(_this2$conf, _toConsumableArray(path.map(function (p) {
|
|
612
|
+
return [_key, addLeadingSlash(p)];
|
|
613
|
+
})));
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
key = _key;
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
for (var key in customRoutes) {
|
|
620
|
+
_loop(key);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
}]);
|
|
624
|
+
|
|
625
|
+
return RoutesAlias;
|
|
626
|
+
}();
|
|
627
|
+
|
|
628
|
+
var routesAlias = new RoutesAlias();
|
|
555
629
|
|
|
556
630
|
function processNavigateUrl(option) {
|
|
557
631
|
var _pathPieces$pathname;
|
|
558
632
|
|
|
559
633
|
var pathPieces = J(option.url); // 处理自定义路由
|
|
560
634
|
|
|
561
|
-
|
|
562
|
-
if (addLeadingSlash(key) === addLeadingSlash(pathPieces.pathname)) {
|
|
563
|
-
pathPieces.pathname = routesAlias[key];
|
|
564
|
-
}
|
|
565
|
-
}); // 处理相对路径
|
|
635
|
+
pathPieces.pathname = routesAlias.getAlias(addLeadingSlash(pathPieces.pathname)); // 处理相对路径
|
|
566
636
|
|
|
567
637
|
if (pathPieces !== null && pathPieces !== void 0 && (_pathPieces$pathname = pathPieces.pathname) !== null && _pathPieces$pathname !== void 0 && _pathPieces$pathname.includes('./')) {
|
|
568
638
|
var parts = history.location.pathname.split('/');
|
|
@@ -599,9 +669,12 @@ function _navigate() {
|
|
|
599
669
|
complete = option.complete,
|
|
600
670
|
fail = option.fail;
|
|
601
671
|
var unListen = history.listen(function () {
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
672
|
+
var res = {
|
|
673
|
+
errMsg: "".concat(method, ": ok")
|
|
674
|
+
};
|
|
675
|
+
success === null || success === void 0 ? void 0 : success(res);
|
|
676
|
+
complete === null || complete === void 0 ? void 0 : complete(res);
|
|
677
|
+
resolve(res);
|
|
605
678
|
unListen();
|
|
606
679
|
});
|
|
607
680
|
|
|
@@ -614,7 +687,10 @@ function _navigate() {
|
|
|
614
687
|
|
|
615
688
|
if (method === 'navigateTo') {
|
|
616
689
|
history.push(pathPieces, state);
|
|
617
|
-
} else if (method === 'redirectTo') {
|
|
690
|
+
} else if (method === 'redirectTo' || method === 'switchTab') {
|
|
691
|
+
history.replace(pathPieces, state);
|
|
692
|
+
} else if (method === 'reLaunch') {
|
|
693
|
+
stacks.delta = stacks.length;
|
|
618
694
|
history.replace(pathPieces, state);
|
|
619
695
|
}
|
|
620
696
|
} else if (method === 'navigateBack') {
|
|
@@ -622,9 +698,12 @@ function _navigate() {
|
|
|
622
698
|
history.go(-option.delta);
|
|
623
699
|
}
|
|
624
700
|
} catch (error) {
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
701
|
+
var res = {
|
|
702
|
+
errMsg: "".concat(method, ": fail ").concat(error.message || error)
|
|
703
|
+
};
|
|
704
|
+
fail === null || fail === void 0 ? void 0 : fail(res);
|
|
705
|
+
complete === null || complete === void 0 ? void 0 : complete(res);
|
|
706
|
+
reject(res);
|
|
628
707
|
}
|
|
629
708
|
}));
|
|
630
709
|
|
|
@@ -656,15 +735,18 @@ function navigateBack() {
|
|
|
656
735
|
return navigate(options, 'navigateBack');
|
|
657
736
|
}
|
|
658
737
|
function switchTab(option) {
|
|
659
|
-
|
|
660
|
-
return redirectTo(option);
|
|
738
|
+
return navigate(option, 'switchTab');
|
|
661
739
|
}
|
|
662
740
|
function reLaunch(option) {
|
|
663
|
-
|
|
664
|
-
return redirectTo(option);
|
|
741
|
+
return navigate(option, 'reLaunch');
|
|
665
742
|
}
|
|
666
743
|
function getCurrentPages() {
|
|
667
|
-
|
|
744
|
+
var pages = stacks.get();
|
|
745
|
+
return pages.map(function (e) {
|
|
746
|
+
return _objectSpread(_objectSpread({}, e), {}, {
|
|
747
|
+
route: e.path || ''
|
|
748
|
+
});
|
|
749
|
+
});
|
|
668
750
|
}
|
|
669
751
|
|
|
670
752
|
var pathToRegexp$2 = {exports: {}};
|
|
@@ -1297,117 +1379,6 @@ var UniversalRouter = function () {
|
|
|
1297
1379
|
|
|
1298
1380
|
UniversalRouter.pathToRegexp = pathToRegexp$1;
|
|
1299
1381
|
|
|
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
1382
|
var queryString = {};
|
|
1412
1383
|
|
|
1413
1384
|
var strictUriEncode = function strictUriEncode(str) {
|
|
@@ -1972,129 +1943,474 @@ var filterObj = function filterObj(obj, predicate) {
|
|
|
1972
1943
|
};
|
|
1973
1944
|
})(queryString);
|
|
1974
1945
|
|
|
1975
|
-
|
|
1976
|
-
|
|
1946
|
+
var pageScrollFn;
|
|
1947
|
+
var pageDOM = window;
|
|
1948
|
+
function bindPageScroll(page, config) {
|
|
1949
|
+
pageDOM.removeEventListener('scroll', pageScrollFn);
|
|
1950
|
+
pageDOM = getScrollContainer();
|
|
1951
|
+
var distance = config.onReachBottomDistance || 50;
|
|
1952
|
+
var isReachBottom = false;
|
|
1977
1953
|
|
|
1978
|
-
|
|
1979
|
-
|
|
1954
|
+
pageScrollFn = function pageScrollFn() {
|
|
1955
|
+
page.onPageScroll && page.onPageScroll({
|
|
1956
|
+
scrollTop: pageDOM instanceof Window ? window.scrollY : pageDOM.scrollTop
|
|
1957
|
+
});
|
|
1980
1958
|
|
|
1981
|
-
if (
|
|
1982
|
-
|
|
1959
|
+
if (isReachBottom && getOffset() > distance) {
|
|
1960
|
+
isReachBottom = false;
|
|
1983
1961
|
}
|
|
1984
|
-
} else {
|
|
1985
|
-
search = location.search;
|
|
1986
|
-
}
|
|
1987
1962
|
|
|
1988
|
-
|
|
1989
|
-
|
|
1963
|
+
if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
|
|
1964
|
+
isReachBottom = true;
|
|
1965
|
+
page.onReachBottom();
|
|
1966
|
+
}
|
|
1967
|
+
};
|
|
1990
1968
|
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
var
|
|
1969
|
+
pageDOM.addEventListener('scroll', pageScrollFn, false);
|
|
1970
|
+
}
|
|
1971
|
+
window.addEventListener('DOMSubtreeModified', function (e) {
|
|
1972
|
+
var target = e.target;
|
|
1973
|
+
var className = target === null || target === void 0 ? void 0 : target.className;
|
|
1995
1974
|
|
|
1996
|
-
if (
|
|
1997
|
-
|
|
1975
|
+
if (className && /taro_page/.test(className)) {
|
|
1976
|
+
pageDOM.removeEventListener('scroll', pageScrollFn);
|
|
1977
|
+
pageDOM = getScrollContainer();
|
|
1978
|
+
pageDOM.addEventListener('scroll', pageScrollFn, false);
|
|
1998
1979
|
}
|
|
1980
|
+
}, false);
|
|
1999
1981
|
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
/* eslint-disable dot-notation */
|
|
2004
|
-
function pageOnReady(page) {
|
|
2005
|
-
var onLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
2006
|
-
var pageEl = document.getElementById(page.path);
|
|
2007
|
-
|
|
2008
|
-
if (pageEl && !(pageEl !== null && pageEl !== void 0 && pageEl['__isReady'])) {
|
|
2009
|
-
var _el$componentOnReady;
|
|
1982
|
+
function getScrollContainer() {
|
|
1983
|
+
var _Current$page;
|
|
2010
1984
|
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
page.onReady();
|
|
2015
|
-
pageEl['__isReady'] = true;
|
|
2016
|
-
});
|
|
2017
|
-
});
|
|
2018
|
-
onLoad && (pageEl['__page'] = page);
|
|
2019
|
-
}
|
|
1985
|
+
var id = (_Current$page = Current.page) === null || _Current$page === void 0 ? void 0 : _Current$page.path;
|
|
1986
|
+
var el = id ? document.getElementById(id) : document.querySelector('.taro_page') || document.querySelector('.taro_router');
|
|
1987
|
+
return el || window;
|
|
2020
1988
|
}
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
var pageEl = document.getElementById(page.path);
|
|
2026
|
-
|
|
2027
|
-
if (pageEl) {
|
|
2028
|
-
pageEl.style.display = 'block';
|
|
1989
|
+
|
|
1990
|
+
function getOffset() {
|
|
1991
|
+
if (pageDOM instanceof Window) {
|
|
1992
|
+
return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
|
|
2029
1993
|
} else {
|
|
2030
|
-
|
|
2031
|
-
return pageOnReady(page, true);
|
|
2032
|
-
});
|
|
1994
|
+
return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
|
|
2033
1995
|
}
|
|
2034
|
-
|
|
2035
|
-
stacks.push(page);
|
|
2036
|
-
page.onShow();
|
|
2037
|
-
bindPageScroll(page, pageConfig);
|
|
2038
1996
|
}
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
1997
|
+
|
|
1998
|
+
/**
|
|
1999
|
+
* 插入页面动画需要的样式
|
|
2000
|
+
*/
|
|
2001
|
+
function loadAnimateStyle() {
|
|
2002
|
+
var ms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 300;
|
|
2003
|
+
var css = "\n.taro_router .taro_page {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n transform: translate3d(100%, 0, 0);\n transition: transform ".concat(ms, "ms;\n}\n\n.taro_router .taro_page.taro_tabbar_page {\n transform: none;\n}\n\n.taro_router .taro_page.taro_page_show {\n transform: translate3d(0, 0, 0);\n}");
|
|
2004
|
+
var style = document.createElement('style');
|
|
2005
|
+
style.innerHTML = css;
|
|
2006
|
+
document.getElementsByTagName('head')[0].appendChild(style);
|
|
2046
2007
|
}
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
if (
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2008
|
+
|
|
2009
|
+
// @ts-nocheck
|
|
2010
|
+
function initTabbar(config) {
|
|
2011
|
+
if (config.tabBar == null) {
|
|
2012
|
+
return;
|
|
2013
|
+
} // TODO: custom-tab-bar
|
|
2014
|
+
|
|
2015
|
+
|
|
2016
|
+
var tabbar = document.createElement('taro-tabbar');
|
|
2017
|
+
var homePage = config.entryPagePath || (config.pages ? config.pages[0] : '');
|
|
2018
|
+
tabbar.conf = config.tabBar;
|
|
2019
|
+
tabbar.conf.homePage = history.location.pathname === '/' ? homePage : history.location.pathname;
|
|
2020
|
+
var routerConfig = config.router;
|
|
2021
|
+
tabbar.conf.mode = routerConfig && routerConfig.mode ? routerConfig.mode : 'hash';
|
|
2022
|
+
|
|
2023
|
+
if (routerConfig.customRoutes) {
|
|
2024
|
+
tabbar.conf.custom = true;
|
|
2025
|
+
tabbar.conf.customRoutes = routerConfig.customRoutes;
|
|
2056
2026
|
} else {
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
});
|
|
2027
|
+
tabbar.conf.custom = false;
|
|
2028
|
+
tabbar.conf.customRoutes = {};
|
|
2060
2029
|
}
|
|
2061
2030
|
|
|
2062
|
-
|
|
2031
|
+
if (typeof routerConfig.basename !== 'undefined') {
|
|
2032
|
+
tabbar.conf.basename = routerConfig.basename;
|
|
2033
|
+
}
|
|
2034
|
+
|
|
2035
|
+
var container = document.getElementById('container');
|
|
2036
|
+
container === null || container === void 0 ? void 0 : container.appendChild(tabbar);
|
|
2037
|
+
initTabBarApis(config);
|
|
2063
2038
|
}
|
|
2064
|
-
function hidePage(page) {
|
|
2065
|
-
if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
|
|
2066
2039
|
|
|
2067
|
-
|
|
2040
|
+
function setDisplay(el) {
|
|
2041
|
+
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
2068
2042
|
|
|
2069
|
-
if (
|
|
2070
|
-
|
|
2071
|
-
page.onHide();
|
|
2072
|
-
} else {
|
|
2073
|
-
setTimeout(function () {
|
|
2074
|
-
return hidePage(page);
|
|
2075
|
-
}, 0);
|
|
2043
|
+
if (el) {
|
|
2044
|
+
el.style.display = type;
|
|
2076
2045
|
}
|
|
2077
2046
|
}
|
|
2078
2047
|
|
|
2079
|
-
function
|
|
2080
|
-
|
|
2048
|
+
var PageHandler = /*#__PURE__*/function () {
|
|
2049
|
+
function PageHandler(config) {
|
|
2050
|
+
_classCallCheck(this, PageHandler);
|
|
2081
2051
|
|
|
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);
|
|
2052
|
+
_defineProperty(this, "config", void 0);
|
|
2087
2053
|
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
routes.push({
|
|
2092
|
-
path: alias[path] || path,
|
|
2093
|
-
action: route.load
|
|
2054
|
+
_defineProperty(this, "defaultAnimation", {
|
|
2055
|
+
duration: 300,
|
|
2056
|
+
delay: 50
|
|
2094
2057
|
});
|
|
2058
|
+
|
|
2059
|
+
_defineProperty(this, "hideTimer", void 0);
|
|
2060
|
+
|
|
2061
|
+
_defineProperty(this, "unloadTimer", void 0);
|
|
2062
|
+
|
|
2063
|
+
_defineProperty(this, "lastHidePage", void 0);
|
|
2064
|
+
|
|
2065
|
+
_defineProperty(this, "lastUnloadPage", void 0);
|
|
2066
|
+
|
|
2067
|
+
this.config = config;
|
|
2068
|
+
this.mount();
|
|
2095
2069
|
}
|
|
2096
2070
|
|
|
2097
|
-
|
|
2071
|
+
_createClass(PageHandler, [{
|
|
2072
|
+
key: "appId",
|
|
2073
|
+
get: function get() {
|
|
2074
|
+
return 'app';
|
|
2075
|
+
}
|
|
2076
|
+
}, {
|
|
2077
|
+
key: "router",
|
|
2078
|
+
get: function get() {
|
|
2079
|
+
return this.config.router;
|
|
2080
|
+
}
|
|
2081
|
+
}, {
|
|
2082
|
+
key: "routerMode",
|
|
2083
|
+
get: function get() {
|
|
2084
|
+
return this.router.mode || 'hash';
|
|
2085
|
+
}
|
|
2086
|
+
}, {
|
|
2087
|
+
key: "customRoutes",
|
|
2088
|
+
get: function get() {
|
|
2089
|
+
return this.router.customRoutes || {};
|
|
2090
|
+
}
|
|
2091
|
+
}, {
|
|
2092
|
+
key: "routes",
|
|
2093
|
+
get: function get() {
|
|
2094
|
+
return this.config.routes;
|
|
2095
|
+
}
|
|
2096
|
+
}, {
|
|
2097
|
+
key: "tabBarList",
|
|
2098
|
+
get: function get() {
|
|
2099
|
+
var _this$config$tabBar;
|
|
2100
|
+
|
|
2101
|
+
return ((_this$config$tabBar = this.config.tabBar) === null || _this$config$tabBar === void 0 ? void 0 : _this$config$tabBar.list) || [];
|
|
2102
|
+
}
|
|
2103
|
+
}, {
|
|
2104
|
+
key: "PullDownRefresh",
|
|
2105
|
+
get: function get() {
|
|
2106
|
+
return this.config.PullDownRefresh;
|
|
2107
|
+
}
|
|
2108
|
+
}, {
|
|
2109
|
+
key: "animation",
|
|
2110
|
+
get: function get() {
|
|
2111
|
+
var _this$config$animatio, _this$config;
|
|
2112
|
+
|
|
2113
|
+
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;
|
|
2114
|
+
}
|
|
2115
|
+
}, {
|
|
2116
|
+
key: "animationDelay",
|
|
2117
|
+
get: function get() {
|
|
2118
|
+
var _this$defaultAnimatio;
|
|
2119
|
+
|
|
2120
|
+
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;
|
|
2121
|
+
}
|
|
2122
|
+
}, {
|
|
2123
|
+
key: "animationDuration",
|
|
2124
|
+
get: function get() {
|
|
2125
|
+
var _this$defaultAnimatio2;
|
|
2126
|
+
|
|
2127
|
+
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;
|
|
2128
|
+
}
|
|
2129
|
+
}, {
|
|
2130
|
+
key: "pathname",
|
|
2131
|
+
get: function get() {
|
|
2132
|
+
return this.router.pathname;
|
|
2133
|
+
},
|
|
2134
|
+
set: function set(p) {
|
|
2135
|
+
this.router.pathname = p;
|
|
2136
|
+
}
|
|
2137
|
+
}, {
|
|
2138
|
+
key: "basename",
|
|
2139
|
+
get: function get() {
|
|
2140
|
+
return this.router.basename || '';
|
|
2141
|
+
}
|
|
2142
|
+
}, {
|
|
2143
|
+
key: "pageConfig",
|
|
2144
|
+
get: function get() {
|
|
2145
|
+
var _this = this;
|
|
2146
|
+
|
|
2147
|
+
return this.routes.find(function (r) {
|
|
2148
|
+
var _routesAlias$getConfi;
|
|
2149
|
+
|
|
2150
|
+
var routePath = stripBasename(_this.pathname, _this.basename);
|
|
2151
|
+
var pagePath = addLeadingSlash(r.path);
|
|
2152
|
+
return pagePath === routePath || ((_routesAlias$getConfi = routesAlias.getConfig(pagePath)) === null || _routesAlias$getConfi === void 0 ? void 0 : _routesAlias$getConfi.includes(routePath));
|
|
2153
|
+
});
|
|
2154
|
+
}
|
|
2155
|
+
}, {
|
|
2156
|
+
key: "isTabBar",
|
|
2157
|
+
get: function get() {
|
|
2158
|
+
var _Object$entries$find;
|
|
2159
|
+
|
|
2160
|
+
var routePath = stripBasename(this.pathname, this.basename);
|
|
2161
|
+
var pagePath = ((_Object$entries$find = Object.entries(this.customRoutes).find(function (_ref) {
|
|
2162
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
2163
|
+
target = _ref2[1];
|
|
2164
|
+
|
|
2165
|
+
if (typeof target === 'string') {
|
|
2166
|
+
return target === routePath;
|
|
2167
|
+
} else if ((target === null || target === void 0 ? void 0 : target.length) > 0) {
|
|
2168
|
+
return target.includes(routePath);
|
|
2169
|
+
}
|
|
2170
|
+
|
|
2171
|
+
return false;
|
|
2172
|
+
})) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[0]) || routePath;
|
|
2173
|
+
return !!pagePath && this.tabBarList.some(function (t) {
|
|
2174
|
+
return t.pagePath === pagePath;
|
|
2175
|
+
});
|
|
2176
|
+
}
|
|
2177
|
+
}, {
|
|
2178
|
+
key: "isSamePage",
|
|
2179
|
+
value: function isSamePage(page) {
|
|
2180
|
+
var routePath = stripBasename(this.pathname, this.basename);
|
|
2181
|
+
var pagePath = stripBasename(page === null || page === void 0 ? void 0 : page.path, this.basename);
|
|
2182
|
+
return pagePath.startsWith(routePath + '?');
|
|
2183
|
+
}
|
|
2184
|
+
}, {
|
|
2185
|
+
key: "search",
|
|
2186
|
+
get: function get() {
|
|
2187
|
+
var search = '?';
|
|
2188
|
+
|
|
2189
|
+
if (this.routerMode) {
|
|
2190
|
+
var idx = location.hash.indexOf('?');
|
|
2191
|
+
|
|
2192
|
+
if (idx > -1) {
|
|
2193
|
+
search = location.hash.slice(idx);
|
|
2194
|
+
}
|
|
2195
|
+
} else {
|
|
2196
|
+
search = location.search;
|
|
2197
|
+
}
|
|
2198
|
+
|
|
2199
|
+
return search.substr(1);
|
|
2200
|
+
}
|
|
2201
|
+
}, {
|
|
2202
|
+
key: "getQuery",
|
|
2203
|
+
value: function getQuery() {
|
|
2204
|
+
var stamp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
2205
|
+
var search = this.search;
|
|
2206
|
+
var query = search ? queryString.parse(search) : {};
|
|
2207
|
+
|
|
2208
|
+
if (stamp) {
|
|
2209
|
+
query.stamp = stamp.toString();
|
|
2210
|
+
}
|
|
2211
|
+
|
|
2212
|
+
return query;
|
|
2213
|
+
}
|
|
2214
|
+
}, {
|
|
2215
|
+
key: "mount",
|
|
2216
|
+
value: function mount() {
|
|
2217
|
+
var _document$getElementB;
|
|
2218
|
+
|
|
2219
|
+
setHistoryMode(this.routerMode, this.router.basename);
|
|
2220
|
+
(_document$getElementB = document.getElementById('app')) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.remove();
|
|
2221
|
+
this.animation && loadAnimateStyle(this.animationDuration);
|
|
2222
|
+
var app = document.createElement('div');
|
|
2223
|
+
app.id = this.appId;
|
|
2224
|
+
app.classList.add('taro_router');
|
|
2225
|
+
|
|
2226
|
+
if (this.tabBarList.length > 1) {
|
|
2227
|
+
var container = document.createElement('div');
|
|
2228
|
+
container.classList.add('taro-tabbar__container');
|
|
2229
|
+
container.id = 'container';
|
|
2230
|
+
var panel = document.createElement('div');
|
|
2231
|
+
panel.classList.add('taro-tabbar__panel');
|
|
2232
|
+
panel.appendChild(app);
|
|
2233
|
+
container.appendChild(panel);
|
|
2234
|
+
document.body.appendChild(container);
|
|
2235
|
+
initTabbar(this.config);
|
|
2236
|
+
} else {
|
|
2237
|
+
document.body.appendChild(app);
|
|
2238
|
+
}
|
|
2239
|
+
}
|
|
2240
|
+
}, {
|
|
2241
|
+
key: "onReady",
|
|
2242
|
+
value: function onReady(page) {
|
|
2243
|
+
var onLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
2244
|
+
var pageEl = document.getElementById(page.path);
|
|
2245
|
+
|
|
2246
|
+
if (pageEl && !(pageEl !== null && pageEl !== void 0 && pageEl['__isReady'])) {
|
|
2247
|
+
var _el$componentOnReady, _el$componentOnReady$;
|
|
2248
|
+
|
|
2249
|
+
var el = pageEl.firstElementChild;
|
|
2250
|
+
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 () {
|
|
2251
|
+
requestAnimationFrame(function () {
|
|
2252
|
+
page.onReady();
|
|
2253
|
+
pageEl['__isReady'] = true;
|
|
2254
|
+
});
|
|
2255
|
+
});
|
|
2256
|
+
onLoad && (pageEl['__page'] = page);
|
|
2257
|
+
}
|
|
2258
|
+
}
|
|
2259
|
+
}, {
|
|
2260
|
+
key: "load",
|
|
2261
|
+
value: function load(page) {
|
|
2262
|
+
var _this2 = this;
|
|
2263
|
+
|
|
2264
|
+
var pageConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2265
|
+
var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
2266
|
+
if (!page) return;
|
|
2267
|
+
var pageEl = document.getElementById(page.path);
|
|
2268
|
+
|
|
2269
|
+
if (pageEl) {
|
|
2270
|
+
setDisplay(pageEl);
|
|
2271
|
+
this.isTabBar && pageEl.classList.add('taro_tabbar_page');
|
|
2272
|
+
this.addAnimation(pageEl, stacksIndex === 0);
|
|
2273
|
+
} else {
|
|
2274
|
+
var _page$onLoad;
|
|
2275
|
+
|
|
2276
|
+
(_page$onLoad = page.onLoad) === null || _page$onLoad === void 0 ? void 0 : _page$onLoad.call(page, this.getQuery(stacksIndex), function () {
|
|
2277
|
+
var _pageEl;
|
|
2278
|
+
|
|
2279
|
+
pageEl = document.getElementById(page.path);
|
|
2280
|
+
_this2.isTabBar && ((_pageEl = pageEl) === null || _pageEl === void 0 ? void 0 : _pageEl.classList.add('taro_tabbar_page'));
|
|
2281
|
+
|
|
2282
|
+
_this2.addAnimation(pageEl, stacksIndex === 0);
|
|
2283
|
+
|
|
2284
|
+
_this2.onReady(page, true);
|
|
2285
|
+
});
|
|
2286
|
+
}
|
|
2287
|
+
|
|
2288
|
+
stacks.push(page);
|
|
2289
|
+
page.onShow();
|
|
2290
|
+
bindPageScroll(page, pageConfig);
|
|
2291
|
+
}
|
|
2292
|
+
}, {
|
|
2293
|
+
key: "unload",
|
|
2294
|
+
value: function unload(page) {
|
|
2295
|
+
var _this3 = this;
|
|
2296
|
+
|
|
2297
|
+
var delta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
2298
|
+
var top = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
2299
|
+
if (!page) return;
|
|
2300
|
+
stacks.delta = --delta;
|
|
2301
|
+
stacks.pop();
|
|
2302
|
+
|
|
2303
|
+
if (this.animation && top) {
|
|
2304
|
+
if (this.unloadTimer) {
|
|
2305
|
+
var _this$lastUnloadPage, _this$lastUnloadPage$;
|
|
2306
|
+
|
|
2307
|
+
clearTimeout(this.unloadTimer);
|
|
2308
|
+
(_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);
|
|
2309
|
+
this.unloadTimer = null;
|
|
2310
|
+
}
|
|
2311
|
+
|
|
2312
|
+
this.lastUnloadPage = page;
|
|
2313
|
+
var pageEl = document.getElementById(page.path);
|
|
2314
|
+
pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_show');
|
|
2315
|
+
this.unloadTimer = setTimeout(function () {
|
|
2316
|
+
var _this3$lastUnloadPage, _this3$lastUnloadPage2;
|
|
2317
|
+
|
|
2318
|
+
_this3.unloadTimer = null;
|
|
2319
|
+
(_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);
|
|
2320
|
+
}, this.animationDuration);
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2323
|
+
if (delta >= 1) this.unload(stacks.last, delta);
|
|
2324
|
+
}
|
|
2325
|
+
}, {
|
|
2326
|
+
key: "show",
|
|
2327
|
+
value: function show(page) {
|
|
2328
|
+
var _this4 = this;
|
|
2329
|
+
|
|
2330
|
+
var pageConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
2331
|
+
var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
2332
|
+
if (!page) return;
|
|
2333
|
+
page.onShow();
|
|
2334
|
+
var pageEl = document.getElementById(page.path);
|
|
2335
|
+
|
|
2336
|
+
if (pageEl) {
|
|
2337
|
+
setDisplay(pageEl);
|
|
2338
|
+
this.addAnimation(pageEl, stacksIndex === 0);
|
|
2339
|
+
} else {
|
|
2340
|
+
var _page$onLoad2;
|
|
2341
|
+
|
|
2342
|
+
(_page$onLoad2 = page.onLoad) === null || _page$onLoad2 === void 0 ? void 0 : _page$onLoad2.call(page, this.getQuery(stacksIndex), function () {
|
|
2343
|
+
pageEl = document.getElementById(page.path);
|
|
2344
|
+
|
|
2345
|
+
_this4.addAnimation(pageEl, stacksIndex === 0);
|
|
2346
|
+
|
|
2347
|
+
_this4.onReady(page, false);
|
|
2348
|
+
});
|
|
2349
|
+
}
|
|
2350
|
+
|
|
2351
|
+
bindPageScroll(page, pageConfig);
|
|
2352
|
+
}
|
|
2353
|
+
}, {
|
|
2354
|
+
key: "hide",
|
|
2355
|
+
value: function hide(page) {
|
|
2356
|
+
var _this5 = this;
|
|
2357
|
+
|
|
2358
|
+
if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
|
|
2359
|
+
|
|
2360
|
+
var pageEl = document.getElementById(page.path);
|
|
2361
|
+
|
|
2362
|
+
if (pageEl) {
|
|
2363
|
+
if (this.hideTimer) {
|
|
2364
|
+
clearTimeout(this.hideTimer);
|
|
2365
|
+
this.hideTimer = null;
|
|
2366
|
+
setDisplay(this.lastHidePage, 'none');
|
|
2367
|
+
}
|
|
2368
|
+
|
|
2369
|
+
this.lastHidePage = pageEl;
|
|
2370
|
+
this.hideTimer = setTimeout(function () {
|
|
2371
|
+
_this5.hideTimer = null;
|
|
2372
|
+
setDisplay(_this5.lastHidePage, 'none');
|
|
2373
|
+
}, this.animationDelay);
|
|
2374
|
+
page.onHide();
|
|
2375
|
+
} else {
|
|
2376
|
+
setTimeout(function () {
|
|
2377
|
+
return _this5.hide(page);
|
|
2378
|
+
}, 0);
|
|
2379
|
+
}
|
|
2380
|
+
}
|
|
2381
|
+
}, {
|
|
2382
|
+
key: "addAnimation",
|
|
2383
|
+
value: function addAnimation(pageEl) {
|
|
2384
|
+
var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
2385
|
+
if (!pageEl) return;
|
|
2386
|
+
|
|
2387
|
+
if (this.animation && !first) {
|
|
2388
|
+
setTimeout(function () {
|
|
2389
|
+
pageEl.classList.add('taro_page_show');
|
|
2390
|
+
}, this.animationDelay);
|
|
2391
|
+
} else {
|
|
2392
|
+
pageEl.classList.add('taro_page_show');
|
|
2393
|
+
}
|
|
2394
|
+
}
|
|
2395
|
+
}]);
|
|
2396
|
+
|
|
2397
|
+
return PageHandler;
|
|
2398
|
+
}();
|
|
2399
|
+
|
|
2400
|
+
function createRouter(app, config, framework) {
|
|
2401
|
+
var _routes$0$path;
|
|
2402
|
+
|
|
2403
|
+
var handler = new PageHandler(config);
|
|
2404
|
+
var runtimeHooks = container.get(SERVICE_IDENTIFIER.Hooks);
|
|
2405
|
+
routesAlias.set(handler.router.customRoutes);
|
|
2406
|
+
var basename = handler.router.basename;
|
|
2407
|
+
var routes = handler.routes.map(function (route) {
|
|
2408
|
+
return {
|
|
2409
|
+
path: routesAlias.getAll(addLeadingSlash(route.path)),
|
|
2410
|
+
action: route.load
|
|
2411
|
+
};
|
|
2412
|
+
});
|
|
2413
|
+
var entryPagePath = config.entryPagePath || ((_routes$0$path = routes[0].path) === null || _routes$0$path === void 0 ? void 0 : _routes$0$path[0]);
|
|
2098
2414
|
var router = new UniversalRouter(routes, {
|
|
2099
2415
|
baseUrl: basename || ''
|
|
2100
2416
|
});
|
|
@@ -2102,17 +2418,17 @@ function createRouter(app, config, framework) {
|
|
|
2102
2418
|
|
|
2103
2419
|
var render = /*#__PURE__*/function () {
|
|
2104
2420
|
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;
|
|
2421
|
+
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
2422
|
|
|
2107
2423
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
2108
2424
|
while (1) {
|
|
2109
2425
|
switch (_context.prev = _context.next) {
|
|
2110
2426
|
case 0:
|
|
2111
2427
|
location = _ref.location, action = _ref.action;
|
|
2112
|
-
|
|
2428
|
+
handler.pathname = location.pathname;
|
|
2113
2429
|
_context.prev = 2;
|
|
2114
2430
|
_context.next = 5;
|
|
2115
|
-
return router.resolve(
|
|
2431
|
+
return router.resolve(handler.router.forcePath || handler.pathname);
|
|
2116
2432
|
|
|
2117
2433
|
case 5:
|
|
2118
2434
|
element = _context.sent;
|
|
@@ -2129,7 +2445,7 @@ function createRouter(app, config, framework) {
|
|
|
2129
2445
|
}
|
|
2130
2446
|
|
|
2131
2447
|
(_app$onPageNotFound = app.onPageNotFound) === null || _app$onPageNotFound === void 0 ? void 0 : _app$onPageNotFound.call(app, {
|
|
2132
|
-
path:
|
|
2448
|
+
path: handler.pathname
|
|
2133
2449
|
});
|
|
2134
2450
|
_context.next = 15;
|
|
2135
2451
|
break;
|
|
@@ -2146,14 +2462,11 @@ function createRouter(app, config, framework) {
|
|
|
2146
2462
|
return _context.abrupt("return");
|
|
2147
2463
|
|
|
2148
2464
|
case 17:
|
|
2149
|
-
pageConfig =
|
|
2150
|
-
var path = addLeadingSlash(r.path);
|
|
2151
|
-
return path === location.pathname || alias[path] === location.pathname;
|
|
2152
|
-
});
|
|
2465
|
+
pageConfig = handler.pageConfig;
|
|
2153
2466
|
enablePullDownRefresh = false;
|
|
2154
2467
|
eventCenter.trigger('__taroRouterChange', {
|
|
2155
2468
|
toLocation: {
|
|
2156
|
-
path:
|
|
2469
|
+
path: handler.pathname
|
|
2157
2470
|
}
|
|
2158
2471
|
});
|
|
2159
2472
|
|
|
@@ -2163,7 +2476,7 @@ function createRouter(app, config, framework) {
|
|
|
2163
2476
|
}
|
|
2164
2477
|
|
|
2165
2478
|
currentPage = Current.page;
|
|
2166
|
-
pathname =
|
|
2479
|
+
pathname = handler.pathname;
|
|
2167
2480
|
shouldLoad = false;
|
|
2168
2481
|
|
|
2169
2482
|
if (!(action === 'POP')) {
|
|
@@ -2174,62 +2487,60 @@ function createRouter(app, config, framework) {
|
|
|
2174
2487
|
// NOTE: 浏览器事件退后多次时,该事件只会被触发一次
|
|
2175
2488
|
prevIndex = stacks.getPrevIndex(pathname);
|
|
2176
2489
|
delta = stacks.getDelta(pathname);
|
|
2177
|
-
|
|
2490
|
+
handler.unload(currentPage, delta, prevIndex > -1);
|
|
2178
2491
|
|
|
2179
2492
|
if (prevIndex > -1) {
|
|
2180
|
-
|
|
2493
|
+
handler.show(stacks.getItem(prevIndex), pageConfig, prevIndex);
|
|
2181
2494
|
} else {
|
|
2182
2495
|
shouldLoad = true;
|
|
2183
2496
|
}
|
|
2184
2497
|
|
|
2185
|
-
_context.next =
|
|
2498
|
+
_context.next = 42;
|
|
2186
2499
|
break;
|
|
2187
2500
|
|
|
2188
2501
|
case 31:
|
|
2189
|
-
if (!
|
|
2190
|
-
_context.next =
|
|
2502
|
+
if (!handler.isTabBar) {
|
|
2503
|
+
_context.next = 40;
|
|
2191
2504
|
break;
|
|
2192
2505
|
}
|
|
2193
2506
|
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
_context.next = 46;
|
|
2197
|
-
break;
|
|
2198
|
-
|
|
2199
|
-
case 36:
|
|
2200
|
-
if (!(action === 'REPLACE')) {
|
|
2201
|
-
_context.next = 46;
|
|
2507
|
+
if (!handler.isSamePage(currentPage)) {
|
|
2508
|
+
_context.next = 34;
|
|
2202
2509
|
break;
|
|
2203
2510
|
}
|
|
2204
2511
|
|
|
2205
|
-
|
|
2206
|
-
_context.next = 44;
|
|
2207
|
-
break;
|
|
2208
|
-
}
|
|
2512
|
+
return _context.abrupt("return");
|
|
2209
2513
|
|
|
2210
|
-
|
|
2211
|
-
_prevIndex = stacks.getPrevIndex(pathname);
|
|
2514
|
+
case 34:
|
|
2515
|
+
_prevIndex = stacks.getPrevIndex(pathname, 0);
|
|
2516
|
+
handler.hide(currentPage);
|
|
2212
2517
|
|
|
2213
2518
|
if (!(_prevIndex > -1)) {
|
|
2214
|
-
_context.next =
|
|
2519
|
+
_context.next = 38;
|
|
2215
2520
|
break;
|
|
2216
2521
|
}
|
|
2217
2522
|
|
|
2218
|
-
return _context.abrupt("return",
|
|
2523
|
+
return _context.abrupt("return", handler.show(stacks.getItem(_prevIndex), pageConfig, _prevIndex));
|
|
2219
2524
|
|
|
2220
|
-
case
|
|
2221
|
-
_context.next =
|
|
2525
|
+
case 38:
|
|
2526
|
+
_context.next = 41;
|
|
2222
2527
|
break;
|
|
2223
2528
|
|
|
2224
|
-
case
|
|
2225
|
-
|
|
2529
|
+
case 40:
|
|
2530
|
+
if (action === 'REPLACE') {
|
|
2531
|
+
_delta = stacks.getDelta(pathname); // NOTE: 页面路由记录并不会清空,只是移除掉缓存的 stack 以及页面
|
|
2226
2532
|
|
|
2227
|
-
|
|
2533
|
+
handler.unload(currentPage, _delta);
|
|
2534
|
+
} else if (action === 'PUSH') {
|
|
2535
|
+
handler.hide(currentPage);
|
|
2536
|
+
}
|
|
2537
|
+
|
|
2538
|
+
case 41:
|
|
2228
2539
|
shouldLoad = true;
|
|
2229
2540
|
|
|
2230
|
-
case
|
|
2231
|
-
if (!shouldLoad) {
|
|
2232
|
-
_context.next =
|
|
2541
|
+
case 42:
|
|
2542
|
+
if (!(shouldLoad || stacks.length < 1)) {
|
|
2543
|
+
_context.next = 50;
|
|
2233
2544
|
break;
|
|
2234
2545
|
}
|
|
2235
2546
|
|
|
@@ -2238,10 +2549,10 @@ function createRouter(app, config, framework) {
|
|
|
2238
2549
|
stacksIndex = stacks.length;
|
|
2239
2550
|
delete loadConfig['path'];
|
|
2240
2551
|
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",
|
|
2552
|
+
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);
|
|
2553
|
+
return _context.abrupt("return", handler.load(page, pageConfig, stacksIndex));
|
|
2243
2554
|
|
|
2244
|
-
case
|
|
2555
|
+
case 50:
|
|
2245
2556
|
case "end":
|
|
2246
2557
|
return _context.stop();
|
|
2247
2558
|
}
|
|
@@ -2255,14 +2566,14 @@ function createRouter(app, config, framework) {
|
|
|
2255
2566
|
}();
|
|
2256
2567
|
|
|
2257
2568
|
if (history.location.pathname === '/') {
|
|
2258
|
-
history.replace(prependBasename(
|
|
2569
|
+
history.replace(prependBasename(entryPagePath + history.location.search));
|
|
2259
2570
|
}
|
|
2260
2571
|
|
|
2261
2572
|
render({
|
|
2262
2573
|
location: history.location,
|
|
2263
2574
|
action: r.Push
|
|
2264
2575
|
});
|
|
2265
|
-
app.onShow(
|
|
2576
|
+
app.onShow(handler.getQuery(stacks.length));
|
|
2266
2577
|
return history.listen(render);
|
|
2267
2578
|
}
|
|
2268
2579
|
|