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