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