@tarojs/router 3.4.0-beta.3 → 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.
@@ -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
 
@@ -673,7 +673,7 @@ function _navigate() {
673
673
  fail = option.fail;
674
674
  var unListen = history.listen(function () {
675
675
  var res = {
676
- errMsg: "".concat(method, ": ok")
676
+ errMsg: "".concat(method, ":ok")
677
677
  };
678
678
  success === null || success === void 0 ? void 0 : success(res);
679
679
  complete === null || complete === void 0 ? void 0 : complete(res);
@@ -702,7 +702,7 @@ function _navigate() {
702
702
  }
703
703
  } catch (error) {
704
704
  var res = {
705
- errMsg: "".concat(method, ": fail ").concat(error.message || error)
705
+ errMsg: "".concat(method, ":fail ").concat(error.message || error)
706
706
  };
707
707
  fail === null || fail === void 0 ? void 0 : fail(res);
708
708
  complete === null || complete === void 0 ? void 0 : complete(res);
@@ -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: translate3d(100%, 0, 0);\n transition: transform ".concat(ms, "ms;\n}\n\n.taro_router .taro_page.taro_tabbar_page {\n transform: none;\n}\n\n.taro_router .taro_page.taro_page_show {\n transform: translate3d(0, 0, 0);\n}");
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,8 @@ 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);
2322
+ pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_stationed');
2340
2323
  pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_show');
2341
2324
  this.unloadTimer = setTimeout(function () {
2342
2325
  var _this3$lastUnloadPage, _this3$lastUnloadPage2;
@@ -2347,8 +2330,9 @@ var PageHandler = /*#__PURE__*/function () {
2347
2330
  } else {
2348
2331
  var _page$onUnload;
2349
2332
 
2350
- var _pageEl2 = document.getElementById(page.path);
2333
+ var _pageEl2 = this.getPageContainer(page);
2351
2334
 
2335
+ _pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_stationed');
2352
2336
  _pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_show');
2353
2337
  page === null || page === void 0 ? void 0 : (_page$onUnload = page.onUnload) === null || _page$onUnload === void 0 ? void 0 : _page$onUnload.call(page);
2354
2338
  }
@@ -2364,7 +2348,7 @@ var PageHandler = /*#__PURE__*/function () {
2364
2348
  var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
2365
2349
  if (!page) return;
2366
2350
  var param = this.getQuery(stacks.length, '', page.options);
2367
- var pageEl = document.getElementById(page.path);
2351
+ var pageEl = this.getPageContainer(page);
2368
2352
 
2369
2353
  if (pageEl) {
2370
2354
  var _page$onShow3;
@@ -2372,21 +2356,22 @@ var PageHandler = /*#__PURE__*/function () {
2372
2356
  setDisplay(pageEl);
2373
2357
  this.addAnimation(pageEl, stacksIndex === 0);
2374
2358
  (_page$onShow3 = page.onShow) === null || _page$onShow3 === void 0 ? void 0 : _page$onShow3.call(page);
2375
- bindPageEvents(page, pageEl, pageConfig);
2359
+ this.bindPageEvents(page, pageEl, pageConfig);
2376
2360
  } else {
2377
2361
  var _page$onLoad2;
2378
2362
 
2379
2363
  (_page$onLoad2 = page.onLoad) === null || _page$onLoad2 === void 0 ? void 0 : _page$onLoad2.call(page, param, function () {
2380
2364
  var _page$onShow4;
2381
2365
 
2382
- pageEl = document.getElementById(page.path);
2366
+ pageEl = _this4.getPageContainer(page);
2383
2367
 
2384
2368
  _this4.addAnimation(pageEl, stacksIndex === 0);
2385
2369
 
2386
2370
  _this4.onReady(page, false);
2387
2371
 
2388
2372
  (_page$onShow4 = page.onShow) === null || _page$onShow4 === void 0 ? void 0 : _page$onShow4.call(page);
2389
- bindPageEvents(page, pageEl, pageConfig);
2373
+
2374
+ _this4.bindPageEvents(page, pageEl, pageConfig);
2390
2375
  });
2391
2376
  }
2392
2377
  }
@@ -2397,7 +2382,7 @@ var PageHandler = /*#__PURE__*/function () {
2397
2382
 
2398
2383
  if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
2399
2384
 
2400
- var pageEl = document.getElementById(page.path);
2385
+ var pageEl = this.getPageContainer(page);
2401
2386
 
2402
2387
  if (pageEl) {
2403
2388
  var _page$onHide;
@@ -2423,17 +2408,53 @@ var PageHandler = /*#__PURE__*/function () {
2423
2408
  }, {
2424
2409
  key: "addAnimation",
2425
2410
  value: function addAnimation(pageEl) {
2411
+ var _this6 = this;
2412
+
2426
2413
  var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2427
2414
  if (!pageEl) return;
2428
2415
 
2429
2416
  if (this.animation && !first) {
2430
2417
  setTimeout(function () {
2431
2418
  pageEl.classList.add('taro_page_show');
2419
+ setTimeout(function () {
2420
+ pageEl.classList.add('taro_page_stationed');
2421
+ }, _this6.animationDuration);
2432
2422
  }, this.animationDelay);
2433
2423
  } else {
2434
2424
  pageEl.classList.add('taro_page_show');
2425
+ pageEl.classList.add('taro_page_stationed');
2435
2426
  }
2436
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
+ }
2437
2458
  }]);
2438
2459
 
2439
2460
  return PageHandler;
@@ -2461,6 +2482,8 @@ function createRouter(app, config, framework) {
2461
2482
 
2462
2483
  var render = /*#__PURE__*/function () {
2463
2484
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
2485
+ var _config$window;
2486
+
2464
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;
2465
2488
 
2466
2489
  return _regeneratorRuntime.wrap(function _callee$(_context) {
@@ -2506,7 +2529,7 @@ function createRouter(app, config, framework) {
2506
2529
 
2507
2530
  case 17:
2508
2531
  pageConfig = handler.pageConfig;
2509
- 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;
2510
2533
  eventCenter.trigger('__taroRouterChange', {
2511
2534
  toLocation: {
2512
2535
  path: handler.pathname
@@ -2515,7 +2538,10 @@ function createRouter(app, config, framework) {
2515
2538
 
2516
2539
  if (pageConfig) {
2517
2540
  document.title = (_pageConfig$navigatio = pageConfig.navigationBarTitleText) !== null && _pageConfig$navigatio !== void 0 ? _pageConfig$navigatio : document.title;
2518
- enablePullDownRefresh = pageConfig.enablePullDownRefresh;
2541
+
2542
+ if (typeof pageConfig.enablePullDownRefresh === 'boolean') {
2543
+ enablePullDownRefresh = pageConfig.enablePullDownRefresh;
2544
+ }
2519
2545
  }
2520
2546
 
2521
2547
  currentPage = Current.page;