mp-darkmode 1.2.1 → 1.2.3-beta.0

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/darkmode.js CHANGED
@@ -2357,6 +2357,13 @@ __webpack_require__.r(__webpack_exports__);
2357
2357
  /* harmony import */ var _modules_constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/constant */ "./src/modules/constant.js");
2358
2358
  /* harmony import */ var _modules_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/config */ "./src/modules/config.js");
2359
2359
  /* harmony import */ var _modules_global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/global */ "./src/modules/global.js");
2360
+ /* harmony import */ var _modules_domUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/domUtils */ "./src/modules/domUtils.js");
2361
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2362
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2363
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
2364
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
2365
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
2366
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
2360
2367
  /**
2361
2368
  * @name Darkmode主入口
2362
2369
  *
@@ -2411,6 +2418,7 @@ var classReg = new RegExp("".concat(_modules_constant__WEBPACK_IMPORTED_MODULE_0
2411
2418
 
2412
2419
 
2413
2420
 
2421
+
2414
2422
  // Dark Mode切换
2415
2423
  var mql = null;
2416
2424
  var switchToDarkmode = function switchToDarkmode(mqlObj) {
@@ -2468,10 +2476,34 @@ var switchToDarkmode = function switchToDarkmode(mqlObj) {
2468
2476
  _modules_global__WEBPACK_IMPORTED_MODULE_2__["sdk"].isDarkmode && _modules_global__WEBPACK_IMPORTED_MODULE_2__["tnQueue"].forEach(function (text) {
2469
2477
  return _modules_global__WEBPACK_IMPORTED_MODULE_2__["bgStack"].contains(text, function (bg) {
2470
2478
  _modules_global__WEBPACK_IMPORTED_MODULE_2__["cssUtils"].addCss(_modules_global__WEBPACK_IMPORTED_MODULE_2__["cssUtils"].genCss(bg.className, bg.cssKV)); // 写入非首屏样式
2479
+ typeof bg.cb === 'function' && bg.cb(bg);
2480
+
2481
+ // 还得处理该背景下的所有新老节点
2482
+ [bg.elOld, bg.el].forEach(function (el) {
2483
+ var _el$COLORATTR, _el$BGCOLORATTR, _el$ORIGINAL_COLORATT, _el$ORIGINAL_BGCOLORA, _el$BGIMAGEATTR, _el$COMPLEMENTARY_BGI;
2484
+ var inheritAttrs = [[_modules_constant__WEBPACK_IMPORTED_MODULE_0__["COLORATTR"], (_el$COLORATTR = el[_modules_constant__WEBPACK_IMPORTED_MODULE_0__["COLORATTR"]]) !== null && _el$COLORATTR !== void 0 ? _el$COLORATTR : null], [_modules_constant__WEBPACK_IMPORTED_MODULE_0__["BGCOLORATTR"], (_el$BGCOLORATTR = el[_modules_constant__WEBPACK_IMPORTED_MODULE_0__["BGCOLORATTR"]]) !== null && _el$BGCOLORATTR !== void 0 ? _el$BGCOLORATTR : null], [_modules_constant__WEBPACK_IMPORTED_MODULE_0__["ORIGINAL_COLORATTR"], (_el$ORIGINAL_COLORATT = el[_modules_constant__WEBPACK_IMPORTED_MODULE_0__["ORIGINAL_COLORATTR"]]) !== null && _el$ORIGINAL_COLORATT !== void 0 ? _el$ORIGINAL_COLORATT : null], [_modules_constant__WEBPACK_IMPORTED_MODULE_0__["ORIGINAL_BGCOLORATTR"], (_el$ORIGINAL_BGCOLORA = el[_modules_constant__WEBPACK_IMPORTED_MODULE_0__["ORIGINAL_BGCOLORATTR"]]) !== null && _el$ORIGINAL_BGCOLORA !== void 0 ? _el$ORIGINAL_BGCOLORA : null], [_modules_constant__WEBPACK_IMPORTED_MODULE_0__["BGIMAGEATTR"], (_el$BGIMAGEATTR = el[_modules_constant__WEBPACK_IMPORTED_MODULE_0__["BGIMAGEATTR"]]) !== null && _el$BGIMAGEATTR !== void 0 ? _el$BGIMAGEATTR : null], [_modules_constant__WEBPACK_IMPORTED_MODULE_0__["COMPLEMENTARY_BGIMAGECOLORATTR"], (_el$COMPLEMENTARY_BGI = el[_modules_constant__WEBPACK_IMPORTED_MODULE_0__["COMPLEMENTARY_BGIMAGECOLORATTR"]]) !== null && _el$COMPLEMENTARY_BGI !== void 0 ? _el$COMPLEMENTARY_BGI : null]];
2485
+ var children = Object(_modules_domUtils__WEBPACK_IMPORTED_MODULE_3__["getChildrenAndIt"])(el, true);
2486
+ children.forEach(function (child) {
2487
+ // 重置继承属性
2488
+ inheritAttrs.forEach(function (_ref) {
2489
+ var _ref2 = _slicedToArray(_ref, 2),
2490
+ attr = _ref2[0],
2491
+ value = _ref2[1];
2492
+ if (value === null) {
2493
+ delete child[attr];
2494
+ } else {
2495
+ child[attr] = value;
2496
+ }
2497
+ });
2498
+ });
2499
+ children.forEach(function (child) {
2500
+ // 重新运行Dark Mode处理逻辑
2501
+ _modules_global__WEBPACK_IMPORTED_MODULE_2__["cssUtils"].addCss(_modules_global__WEBPACK_IMPORTED_MODULE_2__["sdk"].convert(child, undefined, false, true));
2502
+ });
2503
+ });
2471
2504
  });
2472
2505
  });
2473
2506
  }
2474
-
2475
2507
  if (_modules_config__WEBPACK_IMPORTED_MODULE_1__["default"].needJudgeFirstPage || !_modules_config__WEBPACK_IMPORTED_MODULE_1__["default"].needJudgeFirstPage && !_modules_global__WEBPACK_IMPORTED_MODULE_2__["domUtils"].showFirstPage) {
2476
2508
  // config.needJudgeFirstPage === ture,表示需要判断首屏但是正文长度没超过一屏
2477
2509
  // config.needJudgeFirstPage === false && domUtils.showFirstPage === false,表示不需要判断首屏且没有做首屏优化
@@ -2636,7 +2668,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2636
2668
  // Darkmode配置
2637
2669
 
2638
2670
  var BgNodeStack = /*#__PURE__*/function () {
2639
- // 需要判断位置的背景堆栈,{ el, className, cssKV, updated, rect }
2671
+ // 需要判断位置的背景堆栈,{ elOld, el, className, cssKV, updated, rect }
2640
2672
  // 索引值
2641
2673
 
2642
2674
  function BgNodeStack(prefix) {
@@ -2654,6 +2686,7 @@ var BgNodeStack = /*#__PURE__*/function () {
2654
2686
  var className = "".concat(this._prefix).concat(this._idx++);
2655
2687
  el.classList.add(className);
2656
2688
  this._stack.unshift({
2689
+ elOld: el,
2657
2690
  el: el,
2658
2691
  className: className,
2659
2692
  cssKV: cssKV,
@@ -2679,7 +2712,8 @@ var BgNodeStack = /*#__PURE__*/function () {
2679
2712
  }
2680
2713
  });
2681
2714
  while (idxStack.length) {
2682
- var item = this._stack.splice(idxStack.shift(), 1)[0];
2715
+ var idx = idxStack.shift();
2716
+ var item = this._stack.splice(idx, 1)[0];
2683
2717
  typeof callback === 'function' && callback(item);
2684
2718
  }
2685
2719
  }
@@ -3122,6 +3156,15 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3122
3156
  * @param {boolean} isFirstPageStyle 是否首屏样式
3123
3157
  * @return void
3124
3158
  *
3159
+ * @method watch 监听生成css键值对
3160
+ * @param {string} key css属性
3161
+ * @param {function} cb 回调函数
3162
+ * @return void
3163
+ *
3164
+ * @method unwatch 取消监听生成css键值对
3165
+ * @param {string} key css属性
3166
+ * @return void
3167
+ *
3125
3168
  */
3126
3169
 
3127
3170
  // 常量
@@ -3133,6 +3176,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3133
3176
  var CssUtils = /*#__PURE__*/function () {
3134
3177
  // 首屏样式
3135
3178
  // 非首屏样式
3179
+ // 监听器,用于监听生成css键值对
3136
3180
 
3137
3181
  // 是否运行过Dark Mode处理逻辑(写入过非首屏样式表则表示已运行过)
3138
3182
 
@@ -3140,6 +3184,7 @@ var CssUtils = /*#__PURE__*/function () {
3140
3184
  _classCallCheck(this, CssUtils);
3141
3185
  _defineProperty(this, "_firstPageStyle", '');
3142
3186
  _defineProperty(this, "_otherPageStyle", '');
3187
+ _defineProperty(this, "_watcher", {});
3143
3188
  _defineProperty(this, "isFinish", false);
3144
3189
  }
3145
3190
 
@@ -3147,6 +3192,8 @@ var CssUtils = /*#__PURE__*/function () {
3147
3192
  _createClass(CssUtils, [{
3148
3193
  key: "genCssKV",
3149
3194
  value: function genCssKV(key, val) {
3195
+ var _this$_watcher$key, _this$_watcher;
3196
+ (_this$_watcher$key = (_this$_watcher = this._watcher)[key]) === null || _this$_watcher$key === void 0 ? void 0 : _this$_watcher$key.call(_this$_watcher);
3150
3197
  return "".concat(key, ": ").concat(val, " !important;");
3151
3198
  }
3152
3199
 
@@ -3212,6 +3259,20 @@ var CssUtils = /*#__PURE__*/function () {
3212
3259
  // 写入样式表
3213
3260
  styles && document.head.insertAdjacentHTML('beforeend', "<style type=\"text/css\">".concat(styles, "</style>"));
3214
3261
  }
3262
+
3263
+ // 监听生成css键值对
3264
+ }, {
3265
+ key: "watch",
3266
+ value: function watch(key, cb) {
3267
+ this._watcher[key] = cb;
3268
+ }
3269
+
3270
+ // 取消监听生成css键值对
3271
+ }, {
3272
+ key: "unwatch",
3273
+ value: function unwatch(key) {
3274
+ delete this._watcher[key];
3275
+ }
3215
3276
  }]);
3216
3277
  return CssUtils;
3217
3278
  }();
@@ -3250,6 +3311,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
3250
3311
  *
3251
3312
  * @function getChildrenAndIt 获取某个节点及它的所有子节点
3252
3313
  * @param {DOM Object} el 节点对象
3314
+ * @param {boolean} exceptIt 是否排除自身
3253
3315
  * @return {DOM Object Array} 节点对象列表
3254
3316
  *
3255
3317
  * @function hasTextNode 判断某个节点里是否包含文字节点
@@ -3269,7 +3331,8 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
3269
3331
  // 获取某个节点及它的所有子节点
3270
3332
  function getChildrenAndIt(el) {
3271
3333
  var _ref;
3272
- return (_ref = [el]).concat.apply(_ref, _toConsumableArray(el.querySelectorAll('*')));
3334
+ var exceptIt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3335
+ return (_ref = exceptIt ? [] : [el]).concat.apply(_ref, _toConsumableArray(el.querySelectorAll('*')));
3273
3336
  }
3274
3337
  ;
3275
3338
 
@@ -3748,7 +3811,7 @@ var SDK = /*#__PURE__*/function () {
3748
3811
  // 调整明度
3749
3812
  _createClass(SDK, [{
3750
3813
  key: "_adjustBrightness",
3751
- value: function _adjustBrightness(color, el, options, isUpdate) {
3814
+ value: function _adjustBrightness(color, el, options, isUpdate, needReset) {
3752
3815
  // 背景:
3753
3816
  // 处理原则:白背景改黑,其他高感知亮度背景调暗,低亮度适当提高亮度(感知亮度:https://www.w3.org/TR/AERT/#color-contrast)
3754
3817
  // 处理方法:
@@ -3778,10 +3841,12 @@ var SDK = /*#__PURE__*/function () {
3778
3841
  // 根据最小可觉差Just-noticeable difference(即JND,表示人类或动物对于某一特定的感官刺激所能察觉的最小改变)和韦伯-费希纳定律,在特定条件下,人类能感知小至 0.5% - 2% 的变化,0.5%换算成对比度为1.1
3779
3842
  // https://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E5%8F%AF%E8%A6%BA%E5%B7%AE 最小可觉差wiki
3780
3843
  // https://zh.wikipedia.org/wiki/%E9%9F%8B%E4%BC%AF-%E8%B2%BB%E5%B8%8C%E7%B4%8D%E5%AE%9A%E7%90%86 韦伯-费希纳定理wiki
3781
- if (el[_constant__WEBPACK_IMPORTED_MODULE_2__["COMPLEMENTARY_BGIMAGECOLORATTR"]] === color.toString() || this.getContrast(el[_constant__WEBPACK_IMPORTED_MODULE_2__["COMPLEMENTARY_BGIMAGECOLORATTR"]], color.toString()) < 1.1) return {
3782
- newColor: '',
3783
- extStyle: extStyle
3784
- };
3844
+ if (el[_constant__WEBPACK_IMPORTED_MODULE_2__["COMPLEMENTARY_BGIMAGECOLORATTR"]] === color.toString() || this.getContrast(el[_constant__WEBPACK_IMPORTED_MODULE_2__["COMPLEMENTARY_BGIMAGECOLORATTR"]], color.toString()) < 1.1) {
3845
+ return {
3846
+ newColor: needReset ? color.toString() : '',
3847
+ extStyle: extStyle
3848
+ };
3849
+ }
3785
3850
 
3786
3851
  // 否则取消背景图片补色的影响
3787
3852
  Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["getChildrenAndIt"])(el).forEach(function (dom) {
@@ -3797,7 +3862,7 @@ var SDK = /*#__PURE__*/function () {
3797
3862
  var ret = this._adjustBrightness(parentTextColor, el, {
3798
3863
  isTextColor: true,
3799
3864
  parentElementBgColorStr: newColor || color
3800
- }, isUpdate);
3865
+ }, isUpdate, needReset);
3801
3866
  if (ret.newColor) {
3802
3867
  extStyle += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('color', ret.newColor);
3803
3868
  } else {
@@ -3813,7 +3878,13 @@ var SDK = /*#__PURE__*/function () {
3813
3878
  // 无背景图片
3814
3879
  if (parentElementBgColor && !el[_constant__WEBPACK_IMPORTED_MODULE_2__["BGIMAGEATTR"]]) {
3815
3880
  newColor = this._adjustTextBrightness(color, parentElementBgColor);
3816
- _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].emit("afterConvertTextColor".concat(isUpdate ? 'ByUpdateStyle' : ''), el, {
3881
+ var emitNameSuffix = '';
3882
+ if (isUpdate) {
3883
+ emitNameSuffix = 'ByUpdateStyle';
3884
+ } else if (needReset) {
3885
+ emitNameSuffix = 'ByReset';
3886
+ }
3887
+ _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].emit("afterConvertTextColor".concat(emitNameSuffix), el, {
3817
3888
  // fontColor: color,
3818
3889
  fontColor: newColor,
3819
3890
  bgColor: parentElementBgColor
@@ -3905,7 +3976,7 @@ var SDK = /*#__PURE__*/function () {
3905
3976
  // 叠加渐变色到背景色中,并更新背景色相关属性值以及文本颜色
3906
3977
  }, {
3907
3978
  key: "_updateBgWithGradient",
3908
- value: function _updateBgWithGradient(gradientColor, el, className, cssKVList, hasInlineColor, isUpdate) {
3979
+ value: function _updateBgWithGradient(gradientColor, el, className, cssKVList, hasInlineColor, isUpdate, needReset) {
3909
3980
  var newBgColor = Object(_color__WEBPACK_IMPORTED_MODULE_1__["mixColors"])([el[_constant__WEBPACK_IMPORTED_MODULE_2__["BGCOLORATTR"]] || _config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkBgColor, gradientColor], 'normal');
3910
3981
  var newOriginalBgColor = (el[_constant__WEBPACK_IMPORTED_MODULE_2__["ORIGINAL_BGCOLORATTR"]] || _config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultLightBgColor).split(_constant__WEBPACK_IMPORTED_MODULE_2__["BG_COLOR_DELIMITER"]).concat(gradientColor.toString()).join(_constant__WEBPACK_IMPORTED_MODULE_2__["BG_COLOR_DELIMITER"]);
3911
3982
  Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["getChildrenAndIt"])(el).forEach(function (dom) {
@@ -3920,7 +3991,7 @@ var SDK = /*#__PURE__*/function () {
3920
3991
  isTextColor: true,
3921
3992
  isBorderColor: false,
3922
3993
  hasInlineColor: hasInlineColor
3923
- }, isUpdate);
3994
+ }, isUpdate, needReset);
3924
3995
  if (ret.newColor) return _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCss(className, _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('color', ret.newColor));
3925
3996
  }
3926
3997
  return '';
@@ -3952,14 +4023,20 @@ var SDK = /*#__PURE__*/function () {
3952
4023
  // 处理节点
3953
4024
  }, {
3954
4025
  key: "convert",
3955
- value: function convert(el, cssKVList, isUpdate) {
4026
+ value: function convert(el, cssKVList, isUpdate, needReset) {
3956
4027
  var _this = this;
3957
4028
  _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].resetCss();
3958
- _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].emit("beforeConvertNode".concat(isUpdate ? 'ByUpdateStyle' : ''), el);
4029
+ var emitNameSuffix = '';
4030
+ if (isUpdate) {
4031
+ emitNameSuffix = 'ByUpdateStyle';
4032
+ } else if (needReset) {
4033
+ emitNameSuffix = 'ByReset';
4034
+ }
4035
+ _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].emit("beforeConvertNode".concat(emitNameSuffix), el);
3959
4036
  var css = ''; // css
3960
4037
  var bgCss = ''; // 文字底图css
3961
4038
 
3962
- if (this.isDarkmode || isUpdate) {
4039
+ if (this.isDarkmode || isUpdate || needReset) {
3963
4040
  var nodeName = el.nodeName;
3964
4041
  if (_config__WEBPACK_IMPORTED_MODULE_3__["default"].whitelist.tagName.indexOf(nodeName) > -1) return '';
3965
4042
  if (_config__WEBPACK_IMPORTED_MODULE_3__["default"].whitelist.attribute.some(function (attribute) {
@@ -4102,7 +4179,7 @@ var SDK = /*#__PURE__*/function () {
4102
4179
 
4103
4180
  var dmClassName = '';
4104
4181
  var dmBgClassName = '';
4105
- if (isUpdate && el.className && typeof el.className === 'string') {
4182
+ if ((isUpdate || needReset) && el.className && typeof el.className === 'string') {
4106
4183
  // 先提取dm className
4107
4184
  var matches = el.className.match(_constant__WEBPACK_IMPORTED_MODULE_2__["DM_CLASSNAME_REGEXP"]);
4108
4185
  if (matches) {
@@ -4116,6 +4193,11 @@ var SDK = /*#__PURE__*/function () {
4116
4193
  }
4117
4194
  }
4118
4195
  var cssKV = ''; // css键值对
4196
+ var noColor = needReset;
4197
+ noColor && _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].watch('color', function () {
4198
+ noColor = false;
4199
+ _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].unwatch('color');
4200
+ });
4119
4201
  cssKVList.forEach(function (_ref9) {
4120
4202
  var _ref10 = _slicedToArray(_ref9, 2),
4121
4203
  key = _ref10[0],
@@ -4166,7 +4248,7 @@ var SDK = /*#__PURE__*/function () {
4166
4248
  isTextColor: textColorIdx > -1,
4167
4249
  isBorderColor: isBorderColor,
4168
4250
  hasInlineColor: hasInlineColor
4169
- }, isUpdate);
4251
+ }, isUpdate, needReset);
4170
4252
  var retColor = !hasInlineBackgroundImage && ret.newColor;
4171
4253
  extStyle += ret.extStyle;
4172
4254
 
@@ -4232,23 +4314,25 @@ var SDK = /*#__PURE__*/function () {
4232
4314
  cssKV += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('background-size', elBackgroundSizeAttr);
4233
4315
  tmpCssKvStr += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('background-size', imgBgColor ? "".concat(elBackgroundSizeAttr, ",100%") : elBackgroundSizeAttr);
4234
4316
  }
4235
- if (dmBgClassName) {
4236
- // 如果是文字底图,则直接加样式
4237
- bgCss += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCss(dmBgClassName, tmpCssKvStr);
4238
- Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["getChildrenAndIt"])(el).forEach(function (dom) {
4239
- dom[_constant__WEBPACK_IMPORTED_MODULE_2__["COMPLEMENTARY_BGIMAGECOLORATTR"]] = imgBgColor || newValue;
4240
- });
4241
- } else {
4242
- // 否则背景图入栈
4243
- _global__WEBPACK_IMPORTED_MODULE_4__["bgStack"].push(el, tmpCssKvStr, function () {
4317
+ if (!needReset) {
4318
+ if (dmBgClassName) {
4319
+ // 如果是文字底图,则直接加样式
4320
+ bgCss += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCss(dmBgClassName, tmpCssKvStr);
4244
4321
  Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["getChildrenAndIt"])(el).forEach(function (dom) {
4245
4322
  dom[_constant__WEBPACK_IMPORTED_MODULE_2__["COMPLEMENTARY_BGIMAGECOLORATTR"]] = imgBgColor || newValue;
4246
4323
  });
4247
- });
4324
+ } else {
4325
+ // 否则背景图入栈
4326
+ _global__WEBPACK_IMPORTED_MODULE_4__["bgStack"].push(el, tmpCssKvStr, function () {
4327
+ Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["getChildrenAndIt"])(el).forEach(function (dom) {
4328
+ dom[_constant__WEBPACK_IMPORTED_MODULE_2__["COMPLEMENTARY_BGIMAGECOLORATTR"]] = imgBgColor || newValue;
4329
+ });
4330
+ });
4331
+ }
4248
4332
  }
4249
4333
  } else {
4250
4334
  // border-image元素,如果当前元素没有背景颜色,补背景颜色
4251
- if (imgBgColor && !hasInlineBackground) {
4335
+ if (imgBgColor && !hasInlineBackground && !needReset) {
4252
4336
  tmpCssKvStr = _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('background-image', "linear-gradient(".concat(imgBgColor, ", ").concat(imgBgColor, ")"));
4253
4337
  if (dmBgClassName) {
4254
4338
  // 如果是文字底图,则直接加样式
@@ -4273,32 +4357,42 @@ var SDK = /*#__PURE__*/function () {
4273
4357
  }
4274
4358
  }
4275
4359
  }
4276
- if (cssChange) {
4277
- !isUpdate && _constant__WEBPACK_IMPORTED_MODULE_2__["IMPORTANT_REGEXP"].test(oldValue) && (styles[key] = oldValue.replace(_constant__WEBPACK_IMPORTED_MODULE_2__["IMPORTANT_REGEXP"], '')); // 清除inline style的!important
4360
+ if (cssChange || needReset) {
4361
+ !isUpdate && !needReset && _constant__WEBPACK_IMPORTED_MODULE_2__["IMPORTANT_REGEXP"].test(oldValue) && (styles[key] = oldValue.replace(_constant__WEBPACK_IMPORTED_MODULE_2__["IMPORTANT_REGEXP"], '')); // 清除inline style的!important
4278
4362
  if (isGradient) {
4279
- if (dmBgClassName) {
4280
- // 如果是文字底图,则直接加样式(其实理论上不会走到这里)
4281
- bgCss += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCss(dmBgClassName, _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, value));
4282
- if (/^background/.test(key) && !/url\([^)]*\)/i.test(value)) {
4283
- // 是无背景图的渐变,需要重新计算背景色
4284
- css += _this._updateBgWithGradient(gradientMixColor, el, dmBgClassName, cssKVList, hasInlineColor, isUpdate);
4285
- }
4286
- } else {
4287
- // 否则渐变入栈
4288
- _global__WEBPACK_IMPORTED_MODULE_4__["bgStack"].push(el, _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, value), function (item) {
4289
- // 渐变入栈
4363
+ if (!needReset) {
4364
+ if (dmBgClassName) {
4365
+ // 如果是文字底图,则直接加样式
4366
+ bgCss += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCss(dmBgClassName, _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, value));
4290
4367
  if (/^background/.test(key) && !/url\([^)]*\)/i.test(value)) {
4291
4368
  // 是无背景图的渐变,需要重新计算背景色
4292
- css += _this._updateBgWithGradient(gradientMixColor, el, item.className, cssKVList, hasInlineColor, isUpdate);
4369
+ css += _this._updateBgWithGradient(gradientMixColor, el, dmBgClassName, cssKVList, hasInlineColor, isUpdate, needReset);
4293
4370
  }
4294
- });
4371
+ } else {
4372
+ // 否则渐变入栈
4373
+ _global__WEBPACK_IMPORTED_MODULE_4__["bgStack"].push(el, _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, value), function (item) {
4374
+ // 渐变入栈
4375
+ if (/^background/.test(key) && !/url\([^)]*\)/i.test(value)) {
4376
+ // 是无背景图的渐变,需要重新计算背景色
4377
+ css += _this._updateBgWithGradient(gradientMixColor, el, item.className, cssKVList, hasInlineColor, isUpdate, needReset);
4378
+ }
4379
+ });
4380
+ }
4295
4381
  }
4296
4382
  } else {
4297
- cssKV += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, value);
4383
+ if (key === 'color') {
4384
+ noColor = false;
4385
+ _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].unwatch('color');
4386
+ }
4387
+ cssKV += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, !cssChange && needReset ? el.style[key] : value);
4298
4388
  }
4299
4389
  }
4300
4390
  });
4301
4391
  });
4392
+ if (noColor) {
4393
+ cssKV += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('color', el.style.color || el[_constant__WEBPACK_IMPORTED_MODULE_2__["COLORATTR"]] || _config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkTextColor);
4394
+ _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].unwatch('color');
4395
+ }
4302
4396
  if (cssKV) {
4303
4397
  // 有处理过或者是背景图片就加class以及css
4304
4398
  if (!dmClassName) {
@@ -4309,7 +4403,7 @@ var SDK = /*#__PURE__*/function () {
4309
4403
  }
4310
4404
  css += bgCss; // 追加文字底图样式,要在添加cssKV之后添加,避免被覆盖
4311
4405
 
4312
- if (!isUpdate && Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["hasTextNode"])(el)) {
4406
+ if (!isUpdate && Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["hasTextNode"])(el) && !needReset) {
4313
4407
  // 如果节点里有文本,要判断是否在背景图里
4314
4408
  if (_config__WEBPACK_IMPORTED_MODULE_3__["default"].delayBgJudge) {
4315
4409
  // 延迟背景判断
@@ -4322,7 +4416,7 @@ var SDK = /*#__PURE__*/function () {
4322
4416
  }
4323
4417
  }
4324
4418
  }
4325
- _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].emit("afterConvertNode".concat(isUpdate ? 'ByUpdateStyle' : ''), el);
4419
+ _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].emit("afterConvertNode".concat(emitNameSuffix), el);
4326
4420
  return css;
4327
4421
  }
4328
4422
 
@@ -4366,6 +4460,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
4366
4460
  * @constructor
4367
4461
  * @param {string} prefix 类名前缀
4368
4462
  *
4463
+ * @attr {number} length 队列长度
4464
+ *
4369
4465
  * @method push 文本节点入队
4370
4466
  * @param {DOM Object} el 文本节点对象
4371
4467
  * @return void
@@ -4393,8 +4489,15 @@ var TextNodeQueue = /*#__PURE__*/function () {
4393
4489
  this._prefix = prefix;
4394
4490
  }
4395
4491
 
4396
- // 文本节点入队
4492
+ // 队列长度
4397
4493
  _createClass(TextNodeQueue, [{
4494
+ key: "length",
4495
+ get: function get() {
4496
+ return this._queue.length;
4497
+ }
4498
+
4499
+ // 文本节点入队
4500
+ }, {
4398
4501
  key: "push",
4399
4502
  value: function push(el) {
4400
4503
  var className = "".concat(this._prefix).concat(this._idx++);