@tarojs/taro-h5 3.3.14 → 3.3.15

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.cjs.js CHANGED
@@ -1263,7 +1263,87 @@ function prependBasename() {
1263
1263
  return basename.replace(/\/$/, '') + '/' + url.replace(/^\//, '');
1264
1264
  }
1265
1265
 
1266
- var stacks = [];
1266
+ var hasBasename = function hasBasename(path, prefix) {
1267
+ return new RegExp('^' + prefix + '(\\/|\\?|#|$)', 'i').test(path);
1268
+ };
1269
+
1270
+ var stripBasename = function stripBasename(path, prefix) {
1271
+ return hasBasename(path, prefix) ? path.substr(prefix.length) : path;
1272
+ };
1273
+
1274
+ var Stacks = /*#__PURE__*/function () {
1275
+ function Stacks() {
1276
+ _classCallCheck$1(this, Stacks);
1277
+
1278
+ this.stacks = [];
1279
+ this.backDelta = 0;
1280
+ }
1281
+
1282
+ _createClass$1(Stacks, [{
1283
+ key: "delta",
1284
+ set: function set(delta) {
1285
+ if (delta > 0) {
1286
+ this.backDelta = delta;
1287
+ } else {
1288
+ --this.backDelta;
1289
+ }
1290
+ }
1291
+ }, {
1292
+ key: "length",
1293
+ get: function get() {
1294
+ return this.stacks.length;
1295
+ }
1296
+ }, {
1297
+ key: "last",
1298
+ get: function get() {
1299
+ return this.stacks[this.length - 1];
1300
+ }
1301
+ }, {
1302
+ key: "get",
1303
+ value: function get() {
1304
+ return this.stacks;
1305
+ }
1306
+ }, {
1307
+ key: "getItem",
1308
+ value: function getItem(index) {
1309
+ return this.stacks[index];
1310
+ }
1311
+ }, {
1312
+ key: "getDelta",
1313
+ value: function getDelta(pathname) {
1314
+ if (this.backDelta >= 1) {
1315
+ return this.backDelta;
1316
+ } // NOTE: 此处为了修复浏览器后退多级页面,在大量重复路由状况下可能出现判断错误的情况 (增强判断能力只能考虑在 query 中新增参数来判断,暂时搁置)
1317
+
1318
+
1319
+ var prevIndex = this.stacks.findIndex(function (r) {
1320
+ var _a;
1321
+
1322
+ return ((_a = r.path) === null || _a === void 0 ? void 0 : _a.replace(/\?.*/g, '')) === pathname;
1323
+ });
1324
+ return this.length - 1 - prevIndex;
1325
+ }
1326
+ }, {
1327
+ key: "getPrevIndex",
1328
+ value: function getPrevIndex(pathname) {
1329
+ return this.length - 1 - this.getDelta(pathname);
1330
+ }
1331
+ }, {
1332
+ key: "pop",
1333
+ value: function pop() {
1334
+ return this.stacks.pop();
1335
+ }
1336
+ }, {
1337
+ key: "push",
1338
+ value: function push(page) {
1339
+ return this.stacks.push(page);
1340
+ }
1341
+ }]);
1342
+
1343
+ return Stacks;
1344
+ }();
1345
+
1346
+ var stacks = new Stacks();
1267
1347
  var routesAlias = {};
1268
1348
 
1269
1349
  function setRoutesAlias(alias) {
@@ -1276,33 +1356,7 @@ function addLeadingSlash(path) {
1276
1356
  }
1277
1357
 
1278
1358
  return path.charAt(0) === '/' ? path : '/' + path;
1279
- } // 解决navigateBack调用delta>1时,路由栈异常问题
1280
- // 比如:A->B->C,navigateBack({delta: 2}),此时路由栈中还存在B页面
1281
- // 原因:主要是由于一次性退出多层级页面时,此action只会执行一次,此处进行手动处理
1282
-
1283
-
1284
- var historyBackDelta = 1;
1285
-
1286
- function setHistoryBackDelta(delta) {
1287
- historyBackDelta = delta;
1288
- } // eslint-disable-next-line @typescript-eslint/ban-types
1289
-
1290
-
1291
- var throttle = function throttle(fn, threshold) {
1292
- var lastTime = 0;
1293
- return function () {
1294
- var now = Date.now();
1295
-
1296
- if (now - lastTime > threshold) {
1297
- fn.apply(this, arguments);
1298
- lastTime = now;
1299
- }
1300
- };
1301
- };
1302
-
1303
- var stripBasename = function stripBasename(path, basename) {
1304
- return path.startsWith(basename) ? path.replace(basename, '') : path;
1305
- };
1359
+ }
1306
1360
 
1307
1361
  var isTabBar = function isTabBar(config) {
1308
1362
  var _a, _b;
@@ -1326,13 +1380,29 @@ var isTabBar = function isTabBar(config) {
1326
1380
  };
1327
1381
 
1328
1382
  function processNavigateUrl(option) {
1383
+ var _a;
1384
+
1329
1385
  var pathPieces = J(option.url); // 处理自定义路由
1330
1386
 
1331
1387
  Object.keys(routesAlias).forEach(function (key) {
1332
1388
  if (addLeadingSlash(key) === addLeadingSlash(pathPieces.pathname)) {
1333
1389
  pathPieces.pathname = routesAlias[key];
1334
1390
  }
1335
- }); // 处理 basename
1391
+ }); // 处理相对路径
1392
+
1393
+ if ((_a = pathPieces === null || pathPieces === void 0 ? void 0 : pathPieces.pathname) === null || _a === void 0 ? void 0 : _a.includes('./')) {
1394
+ var parts = exports.history.location.pathname.split('/');
1395
+ parts.pop();
1396
+ pathPieces.pathname.split('/').forEach(function (item) {
1397
+ if (item === '.') {
1398
+ return;
1399
+ }
1400
+
1401
+ item === '..' ? parts.pop() : parts.push(item);
1402
+ });
1403
+ pathPieces.pathname = parts.join('/');
1404
+ } // 处理 basename
1405
+
1336
1406
 
1337
1407
  pathPieces.pathname = prependBasename(pathPieces.pathname); // hack fix history v5 bug: https://github.com/remix-run/history/issues/814
1338
1408
 
@@ -1374,7 +1444,7 @@ function _navigate() {
1374
1444
  exports.history.replace(pathPieces, state);
1375
1445
  }
1376
1446
  } else if (method === 'navigateBack') {
1377
- setHistoryBackDelta(option.delta);
1447
+ stacks.delta = option.delta;
1378
1448
  exports.history.go(-option.delta);
1379
1449
  }
1380
1450
  } catch (error) {
@@ -1425,7 +1495,7 @@ function reLaunch(option) {
1425
1495
  }
1426
1496
 
1427
1497
  function getCurrentPages() {
1428
- return stacks;
1498
+ return stacks.get();
1429
1499
  }
1430
1500
  /**
1431
1501
  * Expose `pathToRegexp`.
@@ -2070,6 +2140,8 @@ var UniversalRouter = function () {
2070
2140
 
2071
2141
  UniversalRouter.pathToRegexp = pathToRegexp_1;
2072
2142
 
2143
+ var Taro$1 = require('@tarojs/taro-h5');
2144
+
2073
2145
  function initTabbar(config) {
2074
2146
  if (config.tabBar == null) {
2075
2147
  return;
@@ -2082,7 +2154,6 @@ function initTabbar(config) {
2082
2154
  tabbar.conf.homePage = exports.history.location.pathname === '/' ? homePage : exports.history.location.pathname;
2083
2155
  var routerConfig = config.router;
2084
2156
  tabbar.conf.mode = routerConfig && routerConfig.mode ? routerConfig.mode : 'hash';
2085
- tabbar.conf.custom = !!routerConfig.customRoutes;
2086
2157
 
2087
2158
  if (routerConfig.customRoutes) {
2088
2159
  tabbar.conf.custom = true;
@@ -2099,6 +2170,7 @@ function initTabbar(config) {
2099
2170
  var container = document.getElementById('container'); // eslint-disable-next-line no-unused-expressions
2100
2171
 
2101
2172
  container === null || container === void 0 ? void 0 : container.appendChild(tabbar);
2173
+ Taro$1.initTabBarApis(config);
2102
2174
  }
2103
2175
 
2104
2176
  var routerConfig = Object.create(null);
@@ -2124,6 +2196,64 @@ function init(config) {
2124
2196
  initTabbar(config);
2125
2197
  }
2126
2198
 
2199
+ var pageScrollFn;
2200
+ var pageDOM = window;
2201
+
2202
+ function bindPageScroll(page, config) {
2203
+ pageDOM.removeEventListener('scroll', pageScrollFn);
2204
+ pageDOM = getScrollContainer();
2205
+ var distance = config.onReachBottomDistance || 50;
2206
+ var isReachBottom = false;
2207
+
2208
+ pageScrollFn = function pageScrollFn() {
2209
+ page.onPageScroll && page.onPageScroll({
2210
+ scrollTop: pageDOM instanceof Window ? window.scrollY : pageDOM.scrollTop
2211
+ });
2212
+
2213
+ if (isReachBottom && getOffset() > distance) {
2214
+ isReachBottom = false;
2215
+ }
2216
+
2217
+ if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
2218
+ isReachBottom = true;
2219
+ page.onReachBottom();
2220
+ }
2221
+ };
2222
+
2223
+ pageDOM.addEventListener('scroll', pageScrollFn, false);
2224
+ }
2225
+
2226
+ window.addEventListener('DOMSubtreeModified', function (e) {
2227
+ var _a; // @ts-ignore
2228
+
2229
+
2230
+ var className = (_a = e.target) === null || _a === void 0 ? void 0 : _a.className;
2231
+
2232
+ if (className && /taro-tabbar__/.test(className)) {
2233
+ pageDOM.removeEventListener('scroll', pageScrollFn);
2234
+ pageDOM = getScrollContainer();
2235
+ pageDOM.addEventListener('scroll', pageScrollFn, false);
2236
+ }
2237
+ }, false);
2238
+
2239
+ function getScrollContainer() {
2240
+ if (document.querySelector('.taro-tabbar__tabbar') === null) {
2241
+ // 没设置tabbar
2242
+ return window;
2243
+ } else {
2244
+ // 有设置tabbar
2245
+ return document.querySelector('.taro-tabbar__panel') || window;
2246
+ }
2247
+ }
2248
+
2249
+ function getOffset() {
2250
+ if (pageDOM instanceof Window) {
2251
+ return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
2252
+ } else {
2253
+ return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
2254
+ }
2255
+ }
2256
+
2127
2257
  function createCommonjsModule$1(fn, module) {
2128
2258
  return module = {
2129
2259
  exports: {}
@@ -2693,10 +2823,26 @@ var queryString_5 = queryString.stringifyUrl;
2693
2823
  var queryString_6 = queryString.pick;
2694
2824
  var queryString_7 = queryString.exclude;
2695
2825
 
2826
+ function getSearch() {
2827
+ var search = '?';
2828
+
2829
+ if (routerConfig.router.mode === 'hash') {
2830
+ var idx = location.hash.indexOf('?');
2831
+
2832
+ if (idx > -1) {
2833
+ search = location.hash.slice(idx);
2834
+ }
2835
+ } else {
2836
+ search = location.search;
2837
+ }
2838
+
2839
+ return search.substr(1);
2840
+ }
2841
+
2696
2842
  var qs = function qs() {
2697
2843
  var stamp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
2698
- var search = routerConfig.router.mode === 'hash' ? location.hash.slice(routerConfig.router.pathname.length + 1) : location.search;
2699
- var query = search ? queryString.parse(search.substr(1)) : {};
2844
+ var search = getSearch();
2845
+ var query = search ? queryString.parse(search) : {};
2700
2846
 
2701
2847
  if (stamp) {
2702
2848
  query.stamp = stamp.toString();
@@ -2704,142 +2850,90 @@ var qs = function qs() {
2704
2850
 
2705
2851
  return query;
2706
2852
  };
2853
+ /* eslint-disable dot-notation */
2707
2854
 
2708
- var pageScrollFn;
2709
- var pageDOM = window;
2710
-
2711
- function bindPageScroll(page, config) {
2712
- pageDOM.removeEventListener('scroll', pageScrollFn);
2713
- pageDOM = getScrollContainer();
2714
- var distance = config.onReachBottomDistance || 50;
2715
- var isReachBottom = false;
2716
2855
 
2717
- pageScrollFn = function pageScrollFn() {
2718
- page.onPageScroll && page.onPageScroll({
2719
- scrollTop: pageDOM instanceof Window ? window.scrollY : pageDOM.scrollTop
2720
- });
2856
+ function pageOnReady(page) {
2857
+ var onLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
2721
2858
 
2722
- if (isReachBottom && getOffset() > distance) {
2723
- isReachBottom = false;
2724
- }
2859
+ var _a;
2725
2860
 
2726
- if (page.onReachBottom && !isReachBottom && getOffset() < distance) {
2727
- isReachBottom = true;
2728
- page.onReachBottom();
2729
- }
2730
- };
2861
+ var pageEl = document.getElementById(page.path);
2731
2862
 
2732
- pageDOM.addEventListener('scroll', pageScrollFn, false);
2863
+ if (pageEl && !(pageEl === null || pageEl === void 0 ? void 0 : pageEl['__isReady'])) {
2864
+ var el = pageEl.firstElementChild;
2865
+ (_a = el === null || el === void 0 ? void 0 : el['componentOnReady']) === null || _a === void 0 ? void 0 : _a.call(el).then(function () {
2866
+ runtime.requestAnimationFrame(function () {
2867
+ page.onReady();
2868
+ pageEl['__isReady'] = true;
2869
+ });
2870
+ });
2871
+ onLoad && (pageEl['__page'] = page);
2872
+ }
2733
2873
  }
2734
2874
 
2735
- window.addEventListener('DOMSubtreeModified', function (e) {
2736
- var _a; // @ts-ignore
2737
-
2738
-
2739
- var className = (_a = e.target) === null || _a === void 0 ? void 0 : _a.className;
2740
-
2741
- if (className && /taro-tabbar__/.test(className)) {
2742
- pageDOM.removeEventListener('scroll', pageScrollFn);
2743
- pageDOM = getScrollContainer();
2744
- pageDOM.addEventListener('scroll', pageScrollFn, false);
2745
- }
2746
- }, false);
2875
+ function loadPage(page) {
2876
+ var pageConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2877
+ var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
2878
+ if (!page) return;
2879
+ var pageEl = document.getElementById(page.path);
2747
2880
 
2748
- function getScrollContainer() {
2749
- if (document.querySelector('.taro-tabbar__tabbar') === null) {
2750
- // 没设置tabbar
2751
- return window;
2881
+ if (pageEl) {
2882
+ pageEl.style.display = 'block';
2752
2883
  } else {
2753
- // 有设置tabbar
2754
- return document.querySelector('.taro-tabbar__panel') || window;
2884
+ page.onLoad(qs(stacksIndex), function () {
2885
+ return pageOnReady(page, true);
2886
+ });
2755
2887
  }
2756
- }
2757
2888
 
2758
- function getOffset() {
2759
- if (pageDOM instanceof Window) {
2760
- return document.documentElement.scrollHeight - window.scrollY - window.innerHeight;
2761
- } else {
2762
- return pageDOM.scrollHeight - pageDOM.scrollTop - pageDOM.clientHeight;
2763
- }
2889
+ stacks.push(page);
2890
+ page.onShow();
2891
+ bindPageScroll(page, pageConfig);
2764
2892
  }
2765
- /* eslint-disable dot-notation */
2766
-
2767
-
2768
- function hidePage(page) {
2769
- if (page != null) {
2770
- page.onHide();
2771
- var pageEl = document.getElementById(page.path);
2772
2893
 
2773
- if (pageEl) {
2774
- pageEl.style.display = 'none';
2775
- }
2776
- }
2894
+ function unloadPage(page) {
2895
+ var delta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
2896
+ if (!page) return;
2897
+ stacks.delta = --delta;
2898
+ stacks.pop();
2899
+ page.onUnload();
2900
+ if (delta >= 1) unloadPage(stacks.last, delta);
2777
2901
  }
2778
2902
 
2779
- function showPage(page, pageConfig) {
2903
+ function showPage(page) {
2904
+ var pageConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2780
2905
  var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
2906
+ if (!page) return;
2907
+ page.onShow();
2908
+ var pageEl = document.getElementById(page.path);
2781
2909
 
2782
- if (page != null) {
2783
- page.onShow();
2784
- var pageEl = document.getElementById(page.path);
2785
-
2786
- if (pageEl) {
2787
- pageEl.style.display = 'block';
2788
- } else {
2789
- page.onLoad(qs(stacksIndex));
2790
- pageEl = document.getElementById(page.path);
2791
- pageOnReady(pageEl, page, false);
2792
- }
2793
-
2794
- bindPageScroll(page, pageConfig || {});
2910
+ if (pageEl) {
2911
+ pageEl.style.display = 'block';
2912
+ } else {
2913
+ page.onLoad(qs(stacksIndex), function () {
2914
+ return pageOnReady(page, false);
2915
+ });
2795
2916
  }
2796
- }
2797
2917
 
2798
- function unloadPage(page) {
2799
- if (page != null) {
2800
- stacks.pop();
2801
- page.onUnload();
2802
- }
2918
+ bindPageScroll(page, pageConfig);
2803
2919
  }
2804
2920
 
2805
- function pageOnReady(pageEl, page) {
2806
- var onLoad = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
2807
-
2808
- var _a;
2921
+ function hidePage(page) {
2922
+ if (!page) return; // NOTE: 修复多页并发问题,此处可能因为路由跳转过快,执行时页面可能还没有创建成功
2809
2923
 
2810
- if (pageEl && !(pageEl === null || pageEl === void 0 ? void 0 : pageEl['__isReady'])) {
2811
- var el = pageEl.firstElementChild; // eslint-disable-next-line no-unused-expressions
2924
+ var pageEl = document.getElementById(page.path);
2812
2925
 
2813
- (_a = el === null || el === void 0 ? void 0 : el['componentOnReady']) === null || _a === void 0 ? void 0 : _a.call(el).then(function () {
2814
- runtime.requestAnimationFrame(function () {
2815
- page.onReady();
2816
- pageEl['__isReady'] = true;
2817
- });
2818
- });
2819
- onLoad && (pageEl['__page'] = page);
2926
+ if (pageEl) {
2927
+ pageEl.style.display = 'none';
2928
+ page.onHide();
2929
+ } else {
2930
+ setTimeout(function () {
2931
+ return hidePage(page);
2932
+ }, 0);
2820
2933
  }
2821
2934
  }
2935
+ /* eslint-disable dot-notation */
2822
2936
 
2823
- function loadPage(page, pageConfig) {
2824
- var stacksIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
2825
-
2826
- if (page !== null) {
2827
- var pageEl = document.getElementById(page.path);
2828
-
2829
- if (pageEl) {
2830
- pageEl.style.display = 'block';
2831
- } else {
2832
- page.onLoad(qs(stacksIndex), function () {
2833
- pageEl = document.getElementById(page.path);
2834
- pageOnReady(pageEl, page);
2835
- });
2836
- }
2837
-
2838
- stacks.push(page);
2839
- page.onShow();
2840
- bindPageScroll(page, pageConfig || {});
2841
- }
2842
- }
2843
2937
 
2844
2938
  function createRouter(app, config, framework) {
2845
2939
  var _a;
@@ -2864,9 +2958,10 @@ function createRouter(app, config, framework) {
2864
2958
  baseUrl: basename || ''
2865
2959
  });
2866
2960
  app.onLaunch();
2867
- var render = throttle( /*#__PURE__*/function () {
2961
+
2962
+ var render = /*#__PURE__*/function () {
2868
2963
  var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref3) {
2869
- var location, action, _a, _b, _c, _d, element, pageConfig, enablePullDownRefresh, shouldLoad, delta, prevIndex, prev, pathname, _prevIndex, _prev, el, loadConfig, _pathname, routerIndex, page;
2964
+ var location, action, _a, _b, _c, _d, element, pageConfig, enablePullDownRefresh, currentPage, pathname, shouldLoad, prevIndex, delta, _prevIndex, el, loadConfig, stacksIndex, page;
2870
2965
 
2871
2966
  return regeneratorRuntime.wrap(function _callee$(_context) {
2872
2967
  while (1) {
@@ -2926,98 +3021,86 @@ function createRouter(app, config, framework) {
2926
3021
  enablePullDownRefresh = pageConfig.enablePullDownRefresh;
2927
3022
  }
2928
3023
 
3024
+ currentPage = runtime.Current.page;
3025
+ pathname = location.pathname;
2929
3026
  shouldLoad = false;
2930
3027
 
2931
3028
  if (!(action === 'POP')) {
2932
- _context.next = 32;
3029
+ _context.next = 31;
2933
3030
  break;
2934
3031
  }
2935
3032
 
2936
- unloadPage(runtime.Current.page);
2937
- delta = historyBackDelta;
3033
+ // NOTE: 浏览器事件退后多次时,该事件只会被触发一次
3034
+ prevIndex = stacks.getPrevIndex(pathname);
3035
+ delta = stacks.getDelta(pathname);
3036
+ unloadPage(currentPage, delta);
2938
3037
 
2939
- while (delta-- > 1) {
2940
- unloadPage(stacks.slice(-1)[0]);
2941
- } // 最终必须重置为 1
2942
-
2943
-
2944
- setHistoryBackDelta(1);
2945
- prevIndex = stacks.reduceRight(function (p, s, i) {
2946
- if (p !== 0) return p;else if (s.path === location.pathname + runtime.stringify(qs(i))) return i;else return 0;
2947
- }, 0);
2948
- prev = stacks[prevIndex];
2949
-
2950
- if (prev) {
2951
- showPage(prev, pageConfig, prevIndex);
3038
+ if (prevIndex > -1) {
3039
+ showPage(stacks.getItem(prevIndex), pageConfig, prevIndex);
2952
3040
  } else {
2953
3041
  shouldLoad = true;
2954
3042
  }
2955
3043
 
2956
- _context.next = 49;
3044
+ _context.next = 46;
2957
3045
  break;
2958
3046
 
2959
- case 32:
3047
+ case 31:
2960
3048
  if (!(action === 'PUSH')) {
2961
- _context.next = 37;
3049
+ _context.next = 36;
2962
3050
  break;
2963
3051
  }
2964
3052
 
2965
- hidePage(runtime.Current.page);
3053
+ hidePage(currentPage);
2966
3054
  shouldLoad = true;
2967
- _context.next = 49;
3055
+ _context.next = 46;
2968
3056
  break;
2969
3057
 
2970
- case 37:
3058
+ case 36:
2971
3059
  if (!(action === 'REPLACE')) {
2972
- _context.next = 49;
3060
+ _context.next = 46;
2973
3061
  break;
2974
3062
  }
2975
3063
 
2976
3064
  if (!isTabBar(config)) {
2977
- _context.next = 47;
3065
+ _context.next = 44;
2978
3066
  break;
2979
3067
  }
2980
3068
 
2981
- hidePage(runtime.Current.page);
2982
- pathname = stripBasename(config.router.pathname, basename);
2983
- _prevIndex = stacks.findIndex(function (r) {
2984
- var _a;
2985
-
2986
- return ((_a = r.path) === null || _a === void 0 ? void 0 : _a.replace(/\?.*/g, '')) === pathname;
2987
- });
3069
+ hidePage(currentPage);
3070
+ _prevIndex = stacks.getPrevIndex(pathname);
2988
3071
 
2989
3072
  if (!(_prevIndex > -1)) {
2990
- _context.next = 45;
3073
+ _context.next = 42;
2991
3074
  break;
2992
3075
  }
2993
3076
 
2994
- // tabbar 页且之前出现过,直接复用
2995
- _prev = stacks[_prevIndex];
2996
- return _context.abrupt("return", showPage(_prev, pageConfig, _prevIndex));
3077
+ return _context.abrupt("return", showPage(stacks.getItem(_prevIndex), pageConfig, _prevIndex));
2997
3078
 
2998
- case 45:
2999
- _context.next = 48;
3079
+ case 42:
3080
+ _context.next = 45;
3000
3081
  break;
3001
3082
 
3002
- case 47:
3003
- unloadPage(runtime.Current.page);
3083
+ case 44:
3084
+ unloadPage(currentPage);
3004
3085
 
3005
- case 48:
3086
+ case 45:
3006
3087
  shouldLoad = true;
3007
3088
 
3008
- case 49:
3009
- if (shouldLoad) {
3010
- el = (_c = element["default"]) !== null && _c !== void 0 ? _c : element;
3011
- loadConfig = Object.assign({}, pageConfig);
3012
- delete loadConfig['path'];
3013
- delete loadConfig['load'];
3014
- _pathname = stripBasename(config.router.pathname, basename);
3015
- routerIndex = stacks.length;
3016
- page = runtime.createPageConfig(enablePullDownRefresh ? (_d = runtimeHooks.createPullDownComponent) === null || _d === void 0 ? void 0 : _d.call(runtimeHooks, el, location.pathname, framework, routerConfig.PullDownRefresh) : el, _pathname + runtime.stringify(qs(routerIndex)), {}, loadConfig);
3017
- loadPage(page, pageConfig, routerIndex);
3089
+ case 46:
3090
+ if (!shouldLoad) {
3091
+ _context.next = 54;
3092
+ break;
3018
3093
  }
3019
3094
 
3020
- case 50:
3095
+ el = (_c = element["default"]) !== null && _c !== void 0 ? _c : element;
3096
+ loadConfig = Object.assign({}, pageConfig);
3097
+ stacksIndex = stacks.length;
3098
+ delete loadConfig['path'];
3099
+ delete loadConfig['load'];
3100
+ page = runtime.createPageConfig(enablePullDownRefresh ? (_d = runtimeHooks.createPullDownComponent) === null || _d === void 0 ? void 0 : _d.call(runtimeHooks, el, location.pathname, framework, routerConfig.PullDownRefresh) : el, pathname + runtime.stringify(qs(stacksIndex)), {}, loadConfig);
3101
+ return _context.abrupt("return", loadPage(page, pageConfig, stacksIndex));
3102
+
3103
+ case 54:
3021
3104
  case "end":
3022
3105
  return _context.stop();
3023
3106
  }
@@ -3025,10 +3108,10 @@ function createRouter(app, config, framework) {
3025
3108
  }, _callee, null, [[2, 8]]);
3026
3109
  }));
3027
3110
 
3028
- return function (_x3) {
3111
+ return function render(_x3) {
3029
3112
  return _ref4.apply(this, arguments);
3030
3113
  };
3031
- }(), 500);
3114
+ }();
3032
3115
 
3033
3116
  if (exports.history.location.pathname === '/') {
3034
3117
  exports.history.replace(prependBasename(routes[0].path + exports.history.location.search));
@@ -10343,12 +10426,9 @@ var scanCode = processOpenapi('scanQRCode', {
10343
10426
  });
10344
10427
 
10345
10428
  var tabConf;
10346
- var App;
10347
10429
  function initTabBarApis() {
10348
- var _App = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
10349
-
10350
- tabConf = _App.state.__tabs;
10351
- App = _App;
10430
+ var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
10431
+ tabConf = config.tabBar;
10352
10432
  }
10353
10433
  /**
10354
10434
  * 为 tabBar 某一项的右上角添加文本
@@ -10410,7 +10490,6 @@ function setTabBarBadge() {
10410
10490
  successHandler: successHandler(success, complete),
10411
10491
  errorHandler: errorHandler(fail, complete)
10412
10492
  });
10413
- return successHandler(success, complete)(res);
10414
10493
  }
10415
10494
  /**
10416
10495
  * 移除 tabBar 某一项右上角的文本
@@ -10458,7 +10537,6 @@ function removeTabBarBadge() {
10458
10537
  successHandler: successHandler(success, complete),
10459
10538
  errorHandler: errorHandler(fail, complete)
10460
10539
  });
10461
- return successHandler(success, complete)(res);
10462
10540
  }
10463
10541
  /**
10464
10542
  * 显示 tabBar 某一项的右上角的红点
@@ -10506,7 +10584,6 @@ function showTabBarRedDot() {
10506
10584
  successHandler: successHandler(success, complete),
10507
10585
  errorHandler: errorHandler(fail, complete)
10508
10586
  });
10509
- return successHandler(success, complete)(res);
10510
10587
  }
10511
10588
  /**
10512
10589
  * 隐藏 tabBar 某一项的右上角的红点
@@ -10554,7 +10631,6 @@ function hideTabBarRedDot() {
10554
10631
  successHandler: successHandler(success, complete),
10555
10632
  errorHandler: errorHandler(fail, complete)
10556
10633
  });
10557
- return successHandler(success, complete)(res);
10558
10634
  }
10559
10635
  /**
10560
10636
  * 显示 tabBar
@@ -10602,7 +10678,6 @@ function showTabBar() {
10602
10678
  successHandler: successHandler(success, complete),
10603
10679
  errorHandler: errorHandler(success, complete)
10604
10680
  });
10605
- return successHandler(success, complete)(res);
10606
10681
  }
10607
10682
  /**
10608
10683
  * 隐藏 tabBar
@@ -10650,7 +10725,6 @@ function hideTabBar() {
10650
10725
  successHandler: successHandler(success, complete),
10651
10726
  errorHandler: errorHandler(success, complete)
10652
10727
  });
10653
- return successHandler(success, complete)(res);
10654
10728
  }
10655
10729
  /**
10656
10730
  * 动态设置 tabBar 的整体样式
@@ -10708,17 +10782,14 @@ function setTabBarStyle() {
10708
10782
  res.errMsg = 'setTabBarStyle:fail';
10709
10783
  return Promise.reject(res);
10710
10784
  }
10711
-
10712
- var obj = {};
10713
- if (color) obj.color = color;
10714
- if (selectedColor) obj.selectedColor = selectedColor;
10715
- if (backgroundColor) obj.backgroundColor = backgroundColor;
10716
- if (borderStyle) obj.borderStyle = borderStyle;
10717
- var temp = Object.assign({}, tabConf, obj);
10718
- App.setState && App.setState({
10719
- __tabs: temp
10785
+ Taro.eventCenter.trigger('__taroSetTabBarStyle', {
10786
+ color: color,
10787
+ selectedColor: selectedColor,
10788
+ backgroundColor: backgroundColor,
10789
+ borderStyle: borderStyle,
10790
+ successHandler: successHandler(success, complete),
10791
+ errorHandler: errorHandler(success, complete)
10720
10792
  });
10721
- return successHandler(success, complete)(res);
10722
10793
  }
10723
10794
  /**
10724
10795
  * 动态设置 tabBar 某一项的内容
@@ -10767,21 +10838,14 @@ function setTabBarItem() {
10767
10838
  return errorHandler(fail, complete)(res);
10768
10839
  }
10769
10840
 
10770
- if (!tabConf || !tabConf.list || !tabConf.list[index]) {
10771
- res.errMsg = 'setTabBarItem:fail tabbar item not found';
10772
- return errorHandler(fail, complete)(res);
10773
- }
10774
-
10775
- var obj = {};
10776
- if (text) obj.text = text;
10777
- if (iconPath) obj.iconPath = iconPath;
10778
- if (selectedIconPath) obj.selectedIconPath = selectedIconPath;
10779
- var temp = Object.assign({}, tabConf);
10780
- temp.list[index] = Object.assign({}, temp.list[index], obj);
10781
- App.setState && App.setState({
10782
- __tabs: temp
10841
+ Taro.eventCenter.trigger('__taroSetTabBarItem', {
10842
+ index: index,
10843
+ text: text,
10844
+ iconPath: iconPath,
10845
+ selectedIconPath: selectedIconPath,
10846
+ successHandler: successHandler(success, complete),
10847
+ errorHandler: errorHandler(success, complete)
10783
10848
  });
10784
- return successHandler(success, complete)(res);
10785
10849
  }
10786
10850
 
10787
10851
  var vibrator = function vibrator(mm) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tarojs/taro-h5",
3
- "version": "3.3.14",
3
+ "version": "3.3.15",
4
4
  "description": "Taro h5 framework",
5
5
  "main:h5": "src/index.js",
6
6
  "main": "dist/index.cjs.js",
@@ -33,9 +33,9 @@
33
33
  "author": "O2Team",
34
34
  "license": "MIT",
35
35
  "dependencies": {
36
- "@tarojs/api": "3.3.14",
37
- "@tarojs/router": "3.3.14",
38
- "@tarojs/runtime": "3.3.14",
36
+ "@tarojs/api": "3.3.15",
37
+ "@tarojs/router": "3.3.15",
38
+ "@tarojs/runtime": "3.3.15",
39
39
  "base64-js": "^1.3.0",
40
40
  "jsonp-retry": "^1.0.3",
41
41
  "mobile-detect": "^1.4.2",
@@ -45,5 +45,5 @@
45
45
  "devDependencies": {
46
46
  "jest-fetch-mock": "^3.0.3"
47
47
  },
48
- "gitHead": "ffd2b33c2a760094372a9ec69735ab9c4d1877e5"
48
+ "gitHead": "4a11ab9a8950f6a580e1278c160f6b4aaa8ac4f2"
49
49
  }
@@ -2,11 +2,9 @@ import Taro from '@tarojs/api'
2
2
  import { shouldBeObject, getParameterError, isValidColor, successHandler, errorHandler } from '../utils'
3
3
 
4
4
  let tabConf
5
- let App
6
5
 
7
- export function initTabBarApis (_App = {}) {
8
- tabConf = _App.state.__tabs
9
- App = _App
6
+ export function initTabBarApis (config = {}) {
7
+ tabConf = config.tabBar
10
8
  }
11
9
 
12
10
  /**
@@ -64,8 +62,6 @@ export function setTabBarBadge (options = {}) {
64
62
  successHandler: successHandler(success, complete),
65
63
  errorHandler: errorHandler(fail, complete)
66
64
  })
67
-
68
- return successHandler(success, complete)(res)
69
65
  }
70
66
 
71
67
  /**
@@ -109,8 +105,6 @@ export function removeTabBarBadge (options = {}) {
109
105
  successHandler: successHandler(success, complete),
110
106
  errorHandler: errorHandler(fail, complete)
111
107
  })
112
-
113
- return successHandler(success, complete)(res)
114
108
  }
115
109
 
116
110
  /**
@@ -154,8 +148,6 @@ export function showTabBarRedDot (options = {}) {
154
148
  successHandler: successHandler(success, complete),
155
149
  errorHandler: errorHandler(fail, complete)
156
150
  })
157
-
158
- return successHandler(success, complete)(res)
159
151
  }
160
152
 
161
153
  /**
@@ -199,8 +191,6 @@ export function hideTabBarRedDot (options = {}) {
199
191
  successHandler: successHandler(success, complete),
200
192
  errorHandler: errorHandler(fail, complete)
201
193
  })
202
-
203
- return successHandler(success, complete)(res)
204
194
  }
205
195
 
206
196
  /**
@@ -245,8 +235,6 @@ export function showTabBar (options = {}) {
245
235
  successHandler: successHandler(success, complete),
246
236
  errorHandler: errorHandler(success, complete)
247
237
  })
248
-
249
- return successHandler(success, complete)(res)
250
238
  }
251
239
 
252
240
  /**
@@ -291,8 +279,6 @@ export function hideTabBar (options = {}) {
291
279
  successHandler: successHandler(success, complete),
292
280
  errorHandler: errorHandler(success, complete)
293
281
  })
294
-
295
- return successHandler(success, complete)(res)
296
282
  }
297
283
 
298
284
  /**
@@ -353,10 +339,14 @@ export function setTabBarStyle (options = {}) {
353
339
  if (backgroundColor) obj.backgroundColor = backgroundColor
354
340
  if (borderStyle) obj.borderStyle = borderStyle
355
341
 
356
- const temp = Object.assign({}, tabConf, obj)
357
- App.setState && App.setState({ __tabs: temp })
358
-
359
- return successHandler(success, complete)(res)
342
+ Taro.eventCenter.trigger('__taroSetTabBarStyle', {
343
+ color,
344
+ selectedColor,
345
+ backgroundColor,
346
+ borderStyle,
347
+ successHandler: successHandler(success, complete),
348
+ errorHandler: errorHandler(success, complete)
349
+ })
360
350
  }
361
351
 
362
352
  /**
@@ -401,24 +391,12 @@ export function setTabBarItem (options = {}) {
401
391
  return errorHandler(fail, complete)(res)
402
392
  }
403
393
 
404
- if (
405
- !tabConf ||
406
- !tabConf.list ||
407
- !tabConf.list[index]
408
- ) {
409
- res.errMsg = 'setTabBarItem:fail tabbar item not found'
410
- return errorHandler(fail, complete)(res)
411
- }
412
-
413
- const obj = {}
414
- if (text) obj.text = text
415
- if (iconPath) obj.iconPath = iconPath
416
- if (selectedIconPath) obj.selectedIconPath = selectedIconPath
417
-
418
- const temp = Object.assign({}, tabConf)
419
- temp.list[index] = Object.assign({}, temp.list[index], obj)
420
-
421
- App.setState && App.setState({ __tabs: temp })
422
-
423
- return successHandler(success, complete)(res)
394
+ Taro.eventCenter.trigger('__taroSetTabBarItem', {
395
+ index,
396
+ text,
397
+ iconPath,
398
+ selectedIconPath,
399
+ successHandler: successHandler(success, complete),
400
+ errorHandler: errorHandler(success, complete)
401
+ })
424
402
  }