@tarojs/router 3.4.0 → 3.4.3

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.
@@ -6,7 +6,7 @@ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
6
6
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
7
7
  import _createClass from '@babel/runtime/helpers/createClass';
8
8
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
9
- import { Current, requestAnimationFrame, container, SERVICE_IDENTIFIER, createPageConfig, stringify, eventCenter } from '@tarojs/runtime';
9
+ import { requestAnimationFrame, Current, container, SERVICE_IDENTIFIER, createPageConfig, stringify, eventCenter } from '@tarojs/runtime';
10
10
  import _typeof from '@babel/runtime/helpers/typeof';
11
11
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
12
12
  import _createForOfIteratorHelper from '@babel/runtime/helpers/createForOfIteratorHelper';
@@ -588,8 +588,8 @@ var RoutesAlias = /*#__PURE__*/function () {
588
588
  var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
589
589
  return _this.conf.filter(function (arr) {
590
590
  return arr.includes(url);
591
- }).reduce(function (p, a) {
592
- p.push(a[1]);
591
+ }).reduceRight(function (p, a) {
592
+ p.unshift(a[1]);
593
593
  return p;
594
594
  }, [url]);
595
595
  });
@@ -633,12 +633,10 @@ var routesAlias = new RoutesAlias();
633
633
  function processNavigateUrl(option) {
634
634
  var _pathPieces$pathname;
635
635
 
636
- var pathPieces = J(option.url); // 处理自定义路由
636
+ var pathPieces = J(option.url); // 处理相对路径
637
637
 
638
- pathPieces.pathname = routesAlias.getAlias(addLeadingSlash(pathPieces.pathname)); // 处理相对路径
639
-
640
- if (pathPieces !== null && pathPieces !== void 0 && (_pathPieces$pathname = pathPieces.pathname) !== null && _pathPieces$pathname !== void 0 && _pathPieces$pathname.includes('./')) {
641
- var parts = history.location.pathname.split('/');
638
+ if ((_pathPieces$pathname = pathPieces.pathname) !== null && _pathPieces$pathname !== void 0 && _pathPieces$pathname.includes('./')) {
639
+ var parts = routesAlias.getOrigin(history.location.pathname).split('/');
642
640
  parts.pop();
643
641
  pathPieces.pathname.split('/').forEach(function (item) {
644
642
  if (item === '.') {
@@ -648,8 +646,10 @@ function processNavigateUrl(option) {
648
646
  item === '..' ? parts.pop() : parts.push(item);
649
647
  });
650
648
  pathPieces.pathname = parts.join('/');
651
- } // 处理 basename
649
+ } // 处理自定义路由
650
+
652
651
 
652
+ pathPieces.pathname = routesAlias.getAlias(addLeadingSlash(pathPieces.pathname)); // 处理 basename
653
653
 
654
654
  pathPieces.pathname = prependBasename(pathPieces.pathname); // hack fix history v5 bug: https://github.com/remix-run/history/issues/814
655
655
 
@@ -1946,81 +1946,12 @@ var filterObj = function filterObj(obj, predicate) {
1946
1946
  };
1947
1947
  })(queryString);
1948
1948
 
1949
- var pageScrollFn;
1950
- var pageDOM = window;
1951
- function bindPageScroll(page, pageEl, config) {
1952
- pageEl.removeEventListener('scroll', pageScrollFn);
1953
- pageDOM = pageEl;
1954
- var distance = config.onReachBottomDistance || 50;
1955
- var isReachBottom = false;
1956
-
1957
- pageScrollFn = function pageScrollFn() {
1958
- page.onPageScroll && page.onPageScroll({
1959
- scrollTop: pageDOM instanceof Window ? window.scrollY : pageDOM.scrollTop
1960
- });
1961
-
1962
- if (isReachBottom && getOffset() > distance) {
1963
- isReachBottom = false;
1964
- }
1965
-
1966
- if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
1967
- isReachBottom = true;
1968
- page.onReachBottom();
1969
- }
1970
- };
1971
-
1972
- pageDOM.addEventListener('scroll', pageScrollFn, false);
1973
- }
1974
-
1975
- function getOffset() {
1976
- if (pageDOM instanceof Window) {
1977
- return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
1978
- } else {
1979
- return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
1980
- }
1981
- }
1982
-
1983
- var pageResizeFn;
1984
- function bindPageResize(page) {
1985
- window.removeEventListener('resize', pageResizeFn);
1986
-
1987
- pageResizeFn = function pageResizeFn() {
1988
- page.onResize && page.onResize({
1989
- size: {
1990
- windowHeight: window.innerHeight,
1991
- windowWidth: window.innerWidth
1992
- }
1993
- });
1994
- };
1995
-
1996
- window.addEventListener('resize', pageResizeFn, false);
1997
- }
1998
-
1999
- function bindPageEvents(page, pageEl) {
2000
- var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2001
-
2002
- if (!pageEl) {
2003
- pageEl = getPageContainer();
2004
- }
2005
-
2006
- bindPageScroll(page, pageEl, config);
2007
- bindPageResize(page);
2008
- }
2009
-
2010
- function getPageContainer() {
2011
- var _Current$page;
2012
-
2013
- var id = (_Current$page = Current.page) === null || _Current$page === void 0 ? void 0 : _Current$page.path;
2014
- var el = id ? document.getElementById(id) : document.querySelector('.taro_page') || document.querySelector('.taro_router');
2015
- return el || window;
2016
- }
2017
-
2018
1949
  /**
2019
1950
  * 插入页面动画需要的样式
2020
1951
  */
2021
1952
  function loadAnimateStyle() {
2022
1953
  var ms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 300;
2023
- var css = "\n.taro_router .taro_page {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: #fff;\n transform: translate(100%, 0);\n transition: transform ".concat(ms, "ms;\n}\n\n.taro_router .taro_page.taro_tabbar_page,\n.taro_router .taro_page.taro_page_show.taro_page_stationed {\n transform: none;\n}\n\n.taro_router .taro_page.taro_page_show {\n transform: translate(0, 0);\n}");
1954
+ 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}");
2024
1955
  var style = document.createElement('style');
2025
1956
  style.innerHTML = css;
2026
1957
  document.getElementsByTagName('head')[0].appendChild(style);
@@ -2057,6 +1988,56 @@ function initTabbar(config) {
2057
1988
  initTabBarApis(config);
2058
1989
  }
2059
1990
 
1991
+ var pageResizeFn;
1992
+ function bindPageResize(page) {
1993
+ window.removeEventListener('resize', pageResizeFn);
1994
+
1995
+ pageResizeFn = function pageResizeFn() {
1996
+ page.onResize && page.onResize({
1997
+ size: {
1998
+ windowHeight: window.innerHeight,
1999
+ windowWidth: window.innerWidth
2000
+ }
2001
+ });
2002
+ };
2003
+
2004
+ window.addEventListener('resize', pageResizeFn, false);
2005
+ }
2006
+
2007
+ var pageScrollFn;
2008
+ var pageDOM = window;
2009
+ function bindPageScroll(page, pageEl) {
2010
+ var distance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 50;
2011
+ pageEl.removeEventListener('scroll', pageScrollFn);
2012
+ pageDOM = pageEl;
2013
+ var isReachBottom = false;
2014
+
2015
+ pageScrollFn = function pageScrollFn() {
2016
+ page.onPageScroll && page.onPageScroll({
2017
+ scrollTop: pageDOM instanceof Window ? window.scrollY : pageDOM.scrollTop
2018
+ });
2019
+
2020
+ if (isReachBottom && getOffset() > distance) {
2021
+ isReachBottom = false;
2022
+ }
2023
+
2024
+ if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
2025
+ isReachBottom = true;
2026
+ page.onReachBottom();
2027
+ }
2028
+ };
2029
+
2030
+ pageDOM.addEventListener('scroll', pageScrollFn, false);
2031
+ }
2032
+
2033
+ function getOffset() {
2034
+ if (pageDOM instanceof Window) {
2035
+ return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
2036
+ } else {
2037
+ return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
2038
+ }
2039
+ }
2040
+
2060
2041
  function setDisplay(el) {
2061
2042
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
2062
2043
 
@@ -2259,7 +2240,7 @@ var PageHandler = /*#__PURE__*/function () {
2259
2240
  key: "onReady",
2260
2241
  value: function onReady(page) {
2261
2242
  var onLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
2262
- var pageEl = document.getElementById(page.path);
2243
+ var pageEl = this.getPageContainer(page);
2263
2244
 
2264
2245
  if (pageEl && !(pageEl !== null && pageEl !== void 0 && pageEl['__isReady'])) {
2265
2246
  var _el$componentOnReady, _el$componentOnReady$;
@@ -2287,7 +2268,7 @@ var PageHandler = /*#__PURE__*/function () {
2287
2268
 
2288
2269
  stacks.push(page);
2289
2270
  var param = this.getQuery(stacks.length, '', page.options);
2290
- var pageEl = document.getElementById(page.path);
2271
+ var pageEl = this.getPageContainer(page);
2291
2272
 
2292
2273
  if (pageEl) {
2293
2274
  var _page$onShow;
@@ -2296,14 +2277,14 @@ var PageHandler = /*#__PURE__*/function () {
2296
2277
  this.isTabBar && pageEl.classList.add('taro_tabbar_page');
2297
2278
  this.addAnimation(pageEl, stacksIndex === 0);
2298
2279
  (_page$onShow = page.onShow) === null || _page$onShow === void 0 ? void 0 : _page$onShow.call(page);
2299
- bindPageEvents(page, pageEl, pageConfig);
2280
+ this.bindPageEvents(page, pageEl, pageConfig);
2300
2281
  } else {
2301
2282
  var _page$onLoad;
2302
2283
 
2303
2284
  (_page$onLoad = page.onLoad) === null || _page$onLoad === void 0 ? void 0 : _page$onLoad.call(page, param, function () {
2304
2285
  var _pageEl, _page$onShow2;
2305
2286
 
2306
- pageEl = document.getElementById(page.path);
2287
+ pageEl = _this2.getPageContainer(page);
2307
2288
  _this2.isTabBar && ((_pageEl = pageEl) === null || _pageEl === void 0 ? void 0 : _pageEl.classList.add('taro_tabbar_page'));
2308
2289
 
2309
2290
  _this2.addAnimation(pageEl, stacksIndex === 0);
@@ -2311,7 +2292,8 @@ var PageHandler = /*#__PURE__*/function () {
2311
2292
  _this2.onReady(page, true);
2312
2293
 
2313
2294
  (_page$onShow2 = page.onShow) === null || _page$onShow2 === void 0 ? void 0 : _page$onShow2.call(page);
2314
- bindPageEvents(page, pageEl, pageConfig);
2295
+
2296
+ _this2.bindPageEvents(page, pageEl, pageConfig);
2315
2297
  });
2316
2298
  }
2317
2299
  }
@@ -2336,7 +2318,7 @@ var PageHandler = /*#__PURE__*/function () {
2336
2318
  }
2337
2319
 
2338
2320
  this.lastUnloadPage = page;
2339
- var pageEl = document.getElementById(page.path);
2321
+ var pageEl = this.getPageContainer(page);
2340
2322
  pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_stationed');
2341
2323
  pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_show');
2342
2324
  this.unloadTimer = setTimeout(function () {
@@ -2348,7 +2330,7 @@ var PageHandler = /*#__PURE__*/function () {
2348
2330
  } else {
2349
2331
  var _page$onUnload;
2350
2332
 
2351
- var _pageEl2 = document.getElementById(page.path);
2333
+ var _pageEl2 = this.getPageContainer(page);
2352
2334
 
2353
2335
  _pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_stationed');
2354
2336
  _pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_show');
@@ -2366,7 +2348,7 @@ var PageHandler = /*#__PURE__*/function () {
2366
2348
  var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
2367
2349
  if (!page) return;
2368
2350
  var param = this.getQuery(stacks.length, '', page.options);
2369
- var pageEl = document.getElementById(page.path);
2351
+ var pageEl = this.getPageContainer(page);
2370
2352
 
2371
2353
  if (pageEl) {
2372
2354
  var _page$onShow3;
@@ -2374,21 +2356,22 @@ var PageHandler = /*#__PURE__*/function () {
2374
2356
  setDisplay(pageEl);
2375
2357
  this.addAnimation(pageEl, stacksIndex === 0);
2376
2358
  (_page$onShow3 = page.onShow) === null || _page$onShow3 === void 0 ? void 0 : _page$onShow3.call(page);
2377
- bindPageEvents(page, pageEl, pageConfig);
2359
+ this.bindPageEvents(page, pageEl, pageConfig);
2378
2360
  } else {
2379
2361
  var _page$onLoad2;
2380
2362
 
2381
2363
  (_page$onLoad2 = page.onLoad) === null || _page$onLoad2 === void 0 ? void 0 : _page$onLoad2.call(page, param, function () {
2382
2364
  var _page$onShow4;
2383
2365
 
2384
- pageEl = document.getElementById(page.path);
2366
+ pageEl = _this4.getPageContainer(page);
2385
2367
 
2386
2368
  _this4.addAnimation(pageEl, stacksIndex === 0);
2387
2369
 
2388
2370
  _this4.onReady(page, false);
2389
2371
 
2390
2372
  (_page$onShow4 = page.onShow) === null || _page$onShow4 === void 0 ? void 0 : _page$onShow4.call(page);
2391
- bindPageEvents(page, pageEl, pageConfig);
2373
+
2374
+ _this4.bindPageEvents(page, pageEl, pageConfig);
2392
2375
  });
2393
2376
  }
2394
2377
  }
@@ -2399,7 +2382,7 @@ var PageHandler = /*#__PURE__*/function () {
2399
2382
 
2400
2383
  if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
2401
2384
 
2402
- var pageEl = document.getElementById(page.path);
2385
+ var pageEl = this.getPageContainer(page);
2403
2386
 
2404
2387
  if (pageEl) {
2405
2388
  var _page$onHide;
@@ -2442,6 +2425,36 @@ var PageHandler = /*#__PURE__*/function () {
2442
2425
  pageEl.classList.add('taro_page_stationed');
2443
2426
  }
2444
2427
  }
2428
+ }, {
2429
+ key: "getPageContainer",
2430
+ value: function getPageContainer(page) {
2431
+ var _Current$page;
2432
+
2433
+ var path = page ? page === null || page === void 0 ? void 0 : page.path : (_Current$page = Current.page) === null || _Current$page === void 0 ? void 0 : _Current$page.path;
2434
+ var id = path === null || path === void 0 ? void 0 : path.replace(/([^a-z0-9\u00a0-\uffff_-])/ig, '\\$1');
2435
+
2436
+ if (page) {
2437
+ return document.querySelector(".taro_page#".concat(id));
2438
+ }
2439
+
2440
+ var el = id ? document.querySelector(".taro_page#".concat(id)) : document.querySelector('.taro_page') || document.querySelector('.taro_router');
2441
+ return el || window;
2442
+ }
2443
+ }, {
2444
+ key: "bindPageEvents",
2445
+ value: function bindPageEvents(page, pageEl) {
2446
+ var _this$config$window;
2447
+
2448
+ var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2449
+
2450
+ if (!pageEl) {
2451
+ pageEl = this.getPageContainer();
2452
+ }
2453
+
2454
+ var distance = config.onReachBottomDistance || ((_this$config$window = this.config.window) === null || _this$config$window === void 0 ? void 0 : _this$config$window.onReachBottomDistance) || 50;
2455
+ bindPageScroll(page, pageEl, distance);
2456
+ bindPageResize(page);
2457
+ }
2445
2458
  }]);
2446
2459
 
2447
2460
  return PageHandler;
@@ -2469,6 +2482,8 @@ function createRouter(app, config, framework) {
2469
2482
 
2470
2483
  var render = /*#__PURE__*/function () {
2471
2484
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
2485
+ var _config$window;
2486
+
2472
2487
  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;
2473
2488
 
2474
2489
  return _regeneratorRuntime.wrap(function _callee$(_context) {
@@ -2514,7 +2529,7 @@ function createRouter(app, config, framework) {
2514
2529
 
2515
2530
  case 17:
2516
2531
  pageConfig = handler.pageConfig;
2517
- enablePullDownRefresh = false;
2532
+ enablePullDownRefresh = (config === null || config === void 0 ? void 0 : (_config$window = config.window) === null || _config$window === void 0 ? void 0 : _config$window.enablePullDownRefresh) || false;
2518
2533
  eventCenter.trigger('__taroRouterChange', {
2519
2534
  toLocation: {
2520
2535
  path: handler.pathname
@@ -2523,7 +2538,10 @@ function createRouter(app, config, framework) {
2523
2538
 
2524
2539
  if (pageConfig) {
2525
2540
  document.title = (_pageConfig$navigatio = pageConfig.navigationBarTitleText) !== null && _pageConfig$navigatio !== void 0 ? _pageConfig$navigatio : document.title;
2526
- enablePullDownRefresh = pageConfig.enablePullDownRefresh;
2541
+
2542
+ if (typeof pageConfig.enablePullDownRefresh === 'boolean') {
2543
+ enablePullDownRefresh = pageConfig.enablePullDownRefresh;
2544
+ }
2527
2545
  }
2528
2546
 
2529
2547
  currentPage = Current.page;