@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.
package/dist/index.js CHANGED
@@ -606,8 +606,8 @@ var RoutesAlias = /*#__PURE__*/function () {
606
606
  var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
607
607
  return _this.conf.filter(function (arr) {
608
608
  return arr.includes(url);
609
- }).reduce(function (p, a) {
610
- p.push(a[1]);
609
+ }).reduceRight(function (p, a) {
610
+ p.unshift(a[1]);
611
611
  return p;
612
612
  }, [url]);
613
613
  });
@@ -651,12 +651,10 @@ var routesAlias = new RoutesAlias();
651
651
  function processNavigateUrl(option) {
652
652
  var _pathPieces$pathname;
653
653
 
654
- var pathPieces = J(option.url); // 处理自定义路由
654
+ var pathPieces = J(option.url); // 处理相对路径
655
655
 
656
- pathPieces.pathname = routesAlias.getAlias(addLeadingSlash(pathPieces.pathname)); // 处理相对路径
657
-
658
- if (pathPieces !== null && pathPieces !== void 0 && (_pathPieces$pathname = pathPieces.pathname) !== null && _pathPieces$pathname !== void 0 && _pathPieces$pathname.includes('./')) {
659
- var parts = exports.history.location.pathname.split('/');
656
+ if ((_pathPieces$pathname = pathPieces.pathname) !== null && _pathPieces$pathname !== void 0 && _pathPieces$pathname.includes('./')) {
657
+ var parts = routesAlias.getOrigin(exports.history.location.pathname).split('/');
660
658
  parts.pop();
661
659
  pathPieces.pathname.split('/').forEach(function (item) {
662
660
  if (item === '.') {
@@ -666,8 +664,10 @@ function processNavigateUrl(option) {
666
664
  item === '..' ? parts.pop() : parts.push(item);
667
665
  });
668
666
  pathPieces.pathname = parts.join('/');
669
- } // 处理 basename
667
+ } // 处理自定义路由
668
+
670
669
 
670
+ pathPieces.pathname = routesAlias.getAlias(addLeadingSlash(pathPieces.pathname)); // 处理 basename
671
671
 
672
672
  pathPieces.pathname = prependBasename(pathPieces.pathname); // hack fix history v5 bug: https://github.com/remix-run/history/issues/814
673
673
 
@@ -691,7 +691,7 @@ function _navigate() {
691
691
  fail = option.fail;
692
692
  var unListen = exports.history.listen(function () {
693
693
  var res = {
694
- errMsg: "".concat(method, ": ok")
694
+ errMsg: "".concat(method, ":ok")
695
695
  };
696
696
  success === null || success === void 0 ? void 0 : success(res);
697
697
  complete === null || complete === void 0 ? void 0 : complete(res);
@@ -720,7 +720,7 @@ function _navigate() {
720
720
  }
721
721
  } catch (error) {
722
722
  var res = {
723
- errMsg: "".concat(method, ": fail ").concat(error.message || error)
723
+ errMsg: "".concat(method, ":fail ").concat(error.message || error)
724
724
  };
725
725
  fail === null || fail === void 0 ? void 0 : fail(res);
726
726
  complete === null || complete === void 0 ? void 0 : complete(res);
@@ -1964,81 +1964,12 @@ var filterObj = function filterObj(obj, predicate) {
1964
1964
  };
1965
1965
  })(queryString);
1966
1966
 
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
- });
1979
-
1980
- if (isReachBottom && getOffset() > distance) {
1981
- isReachBottom = false;
1982
- }
1983
-
1984
- if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
1985
- isReachBottom = true;
1986
- page.onReachBottom();
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;
1996
- } else {
1997
- return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
1998
- }
1999
- }
2000
-
2001
- var pageResizeFn;
2002
- function bindPageResize(page) {
2003
- window.removeEventListener('resize', pageResizeFn);
2004
-
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);
2015
- }
2016
-
2017
- function bindPageEvents(page, pageEl) {
2018
- var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2019
-
2020
- if (!pageEl) {
2021
- pageEl = getPageContainer();
2022
- }
2023
-
2024
- bindPageScroll(page, pageEl, config);
2025
- bindPageResize(page);
2026
- }
2027
-
2028
- function getPageContainer() {
2029
- var _Current$page;
2030
-
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
- }
2035
-
2036
1967
  /**
2037
1968
  * 插入页面动画需要的样式
2038
1969
  */
2039
1970
  function loadAnimateStyle() {
2040
1971
  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: 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}");
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}");
2042
1973
  var style = document.createElement('style');
2043
1974
  style.innerHTML = css;
2044
1975
  document.getElementsByTagName('head')[0].appendChild(style);
@@ -2075,6 +2006,56 @@ function initTabbar(config) {
2075
2006
  taro.initTabBarApis(config);
2076
2007
  }
2077
2008
 
2009
+ var pageResizeFn;
2010
+ function bindPageResize(page) {
2011
+ window.removeEventListener('resize', pageResizeFn);
2012
+
2013
+ pageResizeFn = function pageResizeFn() {
2014
+ page.onResize && page.onResize({
2015
+ size: {
2016
+ windowHeight: window.innerHeight,
2017
+ windowWidth: window.innerWidth
2018
+ }
2019
+ });
2020
+ };
2021
+
2022
+ window.addEventListener('resize', pageResizeFn, false);
2023
+ }
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
2036
+ });
2037
+
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);
2049
+ }
2050
+
2051
+ function getOffset() {
2052
+ if (pageDOM instanceof Window) {
2053
+ return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
2054
+ } else {
2055
+ return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
2056
+ }
2057
+ }
2058
+
2078
2059
  function setDisplay(el) {
2079
2060
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
2080
2061
 
@@ -2277,7 +2258,7 @@ var PageHandler = /*#__PURE__*/function () {
2277
2258
  key: "onReady",
2278
2259
  value: function onReady(page) {
2279
2260
  var onLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
2280
- var pageEl = document.getElementById(page.path);
2261
+ var pageEl = this.getPageContainer(page);
2281
2262
 
2282
2263
  if (pageEl && !(pageEl !== null && pageEl !== void 0 && pageEl['__isReady'])) {
2283
2264
  var _el$componentOnReady, _el$componentOnReady$;
@@ -2305,7 +2286,7 @@ var PageHandler = /*#__PURE__*/function () {
2305
2286
 
2306
2287
  stacks.push(page);
2307
2288
  var param = this.getQuery(stacks.length, '', page.options);
2308
- var pageEl = document.getElementById(page.path);
2289
+ var pageEl = this.getPageContainer(page);
2309
2290
 
2310
2291
  if (pageEl) {
2311
2292
  var _page$onShow;
@@ -2314,14 +2295,14 @@ var PageHandler = /*#__PURE__*/function () {
2314
2295
  this.isTabBar && pageEl.classList.add('taro_tabbar_page');
2315
2296
  this.addAnimation(pageEl, stacksIndex === 0);
2316
2297
  (_page$onShow = page.onShow) === null || _page$onShow === void 0 ? void 0 : _page$onShow.call(page);
2317
- bindPageEvents(page, pageEl, pageConfig);
2298
+ this.bindPageEvents(page, pageEl, pageConfig);
2318
2299
  } else {
2319
2300
  var _page$onLoad;
2320
2301
 
2321
2302
  (_page$onLoad = page.onLoad) === null || _page$onLoad === void 0 ? void 0 : _page$onLoad.call(page, param, function () {
2322
2303
  var _pageEl, _page$onShow2;
2323
2304
 
2324
- pageEl = document.getElementById(page.path);
2305
+ pageEl = _this2.getPageContainer(page);
2325
2306
  _this2.isTabBar && ((_pageEl = pageEl) === null || _pageEl === void 0 ? void 0 : _pageEl.classList.add('taro_tabbar_page'));
2326
2307
 
2327
2308
  _this2.addAnimation(pageEl, stacksIndex === 0);
@@ -2329,7 +2310,8 @@ var PageHandler = /*#__PURE__*/function () {
2329
2310
  _this2.onReady(page, true);
2330
2311
 
2331
2312
  (_page$onShow2 = page.onShow) === null || _page$onShow2 === void 0 ? void 0 : _page$onShow2.call(page);
2332
- bindPageEvents(page, pageEl, pageConfig);
2313
+
2314
+ _this2.bindPageEvents(page, pageEl, pageConfig);
2333
2315
  });
2334
2316
  }
2335
2317
  }
@@ -2354,7 +2336,8 @@ var PageHandler = /*#__PURE__*/function () {
2354
2336
  }
2355
2337
 
2356
2338
  this.lastUnloadPage = page;
2357
- var pageEl = document.getElementById(page.path);
2339
+ var pageEl = this.getPageContainer(page);
2340
+ pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_stationed');
2358
2341
  pageEl === null || pageEl === void 0 ? void 0 : pageEl.classList.remove('taro_page_show');
2359
2342
  this.unloadTimer = setTimeout(function () {
2360
2343
  var _this3$lastUnloadPage, _this3$lastUnloadPage2;
@@ -2365,8 +2348,9 @@ var PageHandler = /*#__PURE__*/function () {
2365
2348
  } else {
2366
2349
  var _page$onUnload;
2367
2350
 
2368
- var _pageEl2 = document.getElementById(page.path);
2351
+ var _pageEl2 = this.getPageContainer(page);
2369
2352
 
2353
+ _pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_stationed');
2370
2354
  _pageEl2 === null || _pageEl2 === void 0 ? void 0 : _pageEl2.classList.remove('taro_page_show');
2371
2355
  page === null || page === void 0 ? void 0 : (_page$onUnload = page.onUnload) === null || _page$onUnload === void 0 ? void 0 : _page$onUnload.call(page);
2372
2356
  }
@@ -2382,7 +2366,7 @@ var PageHandler = /*#__PURE__*/function () {
2382
2366
  var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
2383
2367
  if (!page) return;
2384
2368
  var param = this.getQuery(stacks.length, '', page.options);
2385
- var pageEl = document.getElementById(page.path);
2369
+ var pageEl = this.getPageContainer(page);
2386
2370
 
2387
2371
  if (pageEl) {
2388
2372
  var _page$onShow3;
@@ -2390,21 +2374,22 @@ var PageHandler = /*#__PURE__*/function () {
2390
2374
  setDisplay(pageEl);
2391
2375
  this.addAnimation(pageEl, stacksIndex === 0);
2392
2376
  (_page$onShow3 = page.onShow) === null || _page$onShow3 === void 0 ? void 0 : _page$onShow3.call(page);
2393
- bindPageEvents(page, pageEl, pageConfig);
2377
+ this.bindPageEvents(page, pageEl, pageConfig);
2394
2378
  } else {
2395
2379
  var _page$onLoad2;
2396
2380
 
2397
2381
  (_page$onLoad2 = page.onLoad) === null || _page$onLoad2 === void 0 ? void 0 : _page$onLoad2.call(page, param, function () {
2398
2382
  var _page$onShow4;
2399
2383
 
2400
- pageEl = document.getElementById(page.path);
2384
+ pageEl = _this4.getPageContainer(page);
2401
2385
 
2402
2386
  _this4.addAnimation(pageEl, stacksIndex === 0);
2403
2387
 
2404
2388
  _this4.onReady(page, false);
2405
2389
 
2406
2390
  (_page$onShow4 = page.onShow) === null || _page$onShow4 === void 0 ? void 0 : _page$onShow4.call(page);
2407
- bindPageEvents(page, pageEl, pageConfig);
2391
+
2392
+ _this4.bindPageEvents(page, pageEl, pageConfig);
2408
2393
  });
2409
2394
  }
2410
2395
  }
@@ -2415,7 +2400,7 @@ var PageHandler = /*#__PURE__*/function () {
2415
2400
 
2416
2401
  if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
2417
2402
 
2418
- var pageEl = document.getElementById(page.path);
2403
+ var pageEl = this.getPageContainer(page);
2419
2404
 
2420
2405
  if (pageEl) {
2421
2406
  var _page$onHide;
@@ -2441,17 +2426,53 @@ var PageHandler = /*#__PURE__*/function () {
2441
2426
  }, {
2442
2427
  key: "addAnimation",
2443
2428
  value: function addAnimation(pageEl) {
2429
+ var _this6 = this;
2430
+
2444
2431
  var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2445
2432
  if (!pageEl) return;
2446
2433
 
2447
2434
  if (this.animation && !first) {
2448
2435
  setTimeout(function () {
2449
2436
  pageEl.classList.add('taro_page_show');
2437
+ setTimeout(function () {
2438
+ pageEl.classList.add('taro_page_stationed');
2439
+ }, _this6.animationDuration);
2450
2440
  }, this.animationDelay);
2451
2441
  } else {
2452
2442
  pageEl.classList.add('taro_page_show');
2443
+ pageEl.classList.add('taro_page_stationed');
2453
2444
  }
2454
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
+ }
2455
2476
  }]);
2456
2477
 
2457
2478
  return PageHandler;
@@ -2479,6 +2500,8 @@ function createRouter(app, config, framework) {
2479
2500
 
2480
2501
  var render = /*#__PURE__*/function () {
2481
2502
  var _ref2 = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee(_ref) {
2503
+ var _config$window;
2504
+
2482
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;
2483
2506
 
2484
2507
  return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
@@ -2524,7 +2547,7 @@ function createRouter(app, config, framework) {
2524
2547
 
2525
2548
  case 17:
2526
2549
  pageConfig = handler.pageConfig;
2527
- enablePullDownRefresh = false;
2550
+ enablePullDownRefresh = (config === null || config === void 0 ? void 0 : (_config$window = config.window) === null || _config$window === void 0 ? void 0 : _config$window.enablePullDownRefresh) || false;
2528
2551
  runtime.eventCenter.trigger('__taroRouterChange', {
2529
2552
  toLocation: {
2530
2553
  path: handler.pathname
@@ -2533,7 +2556,10 @@ function createRouter(app, config, framework) {
2533
2556
 
2534
2557
  if (pageConfig) {
2535
2558
  document.title = (_pageConfig$navigatio = pageConfig.navigationBarTitleText) !== null && _pageConfig$navigatio !== void 0 ? _pageConfig$navigatio : document.title;
2536
- enablePullDownRefresh = pageConfig.enablePullDownRefresh;
2559
+
2560
+ if (typeof pageConfig.enablePullDownRefresh === 'boolean') {
2561
+ enablePullDownRefresh = pageConfig.enablePullDownRefresh;
2562
+ }
2537
2563
  }
2538
2564
 
2539
2565
  currentPage = runtime.Current.page;