mp-darkmode 1.1.4 → 1.1.5

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/README.md CHANGED
@@ -48,12 +48,16 @@ Darkmode.run(document.body.querySelectorAll('*')); // process all DOM nodes unde
48
48
  - `options.error` <Function> Callback triggered when an error occurs.
49
49
  - `err` <Error> Error object.
50
50
  - `options.mode` <string> The specified color mode (dark | light), if specified, the system color will not be monitored.
51
+ - ...
52
+ - ...
53
+ - ...
51
54
 
52
55
  Run Dark Mode conversion algorithm.
53
56
 
54
57
  ```javascript
55
58
  Darkmode.run(document.body.querySelectorAll('*'), {
56
- mode: 'dark' // force dark mode
59
+ mode: 'dark', // force dark mode
60
+ ... // other configuration items
57
61
  });
58
62
  ```
59
63
 
package/README_CN.md CHANGED
@@ -48,12 +48,16 @@ Darkmode.run(document.body.querySelectorAll('*')); // 处理body下的所有DOM
48
48
  - `options.error` <Function> 发生 error 时触发的回调。
49
49
  - `err` <Error> 错误对象。
50
50
  - `options.mode` <string> 强制指定的颜色模式( dark | light ),指定了就不监听系统颜色。
51
+ - ...
52
+ - ...
53
+ - ...
51
54
 
52
55
  运行 Dark Mode 转换算法。
53
56
 
54
57
  ```javascript
55
58
  Darkmode.run(document.body.querySelectorAll('*'), {
56
- mode: 'dark' // 强制指定深色模式
59
+ mode: 'dark', // 强制指定深色模式
60
+ ... // 其它配置项
57
61
  });
58
62
  ```
59
63
 
package/dist/darkmode.js CHANGED
@@ -2312,7 +2312,7 @@ swizzle.wrap = function (fn) {
2312
2312
  /*!*************************!*\
2313
2313
  !*** ./src/darkmode.js ***!
2314
2314
  \*************************/
2315
- /*! exports provided: run, init, convertBg, extend, updateStyle, getContrast */
2315
+ /*! exports provided: run, init, convertBg, updateStyle, getContrast, extend */
2316
2316
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2317
2317
 
2318
2318
  "use strict";
@@ -2320,9 +2320,9 @@ __webpack_require__.r(__webpack_exports__);
2320
2320
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "run", function() { return run; });
2321
2321
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "init", function() { return init; });
2322
2322
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertBg", function() { return convertBg; });
2323
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });
2324
2323
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateStyle", function() { return updateStyle; });
2325
2324
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getContrast", function() { return getContrast; });
2325
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; });
2326
2326
  /* harmony import */ var _modules_constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/constant */ "./src/modules/constant.js");
2327
2327
  /* harmony import */ var _modules_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/config */ "./src/modules/config.js");
2328
2328
  /* harmony import */ var _modules_global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/global */ "./src/modules/global.js");
@@ -2340,6 +2340,7 @@ __webpack_require__.r(__webpack_exports__);
2340
2340
  * @param {string} opt.mode 强制指定的颜色模式(dark|light), 指定了就不监听系统颜色
2341
2341
  * @param {Object} opt.whitelist 节点白名单
2342
2342
  * @param {Array} opt.whitelist.tagName 标签名列表
2343
+ * @param {Array} opt.whitelist.attribute 属性列表
2343
2344
  * @param {boolean} opt.needJudgeFirstPage 是否需要判断首屏
2344
2345
  * @param {boolean} opt.delayBgJudge 是否延迟背景判断
2345
2346
  * @param {DOM Object} opt.container 延迟运行js时使用的容器
@@ -2352,13 +2353,18 @@ __webpack_require__.r(__webpack_exports__);
2352
2353
  * @function convertBg 处理背景
2353
2354
  * @param {DOM Object Array} nodes 要处理的节点列表
2354
2355
  *
2355
- * @function extend 挂载插件
2356
- * @param {Array} pluginList 插件列表
2357
- *
2358
2356
  * @function updateStyle 更新节点Dark Mode样式
2359
2357
  * @param {DOM Object} node 要更新的节点
2360
2358
  * @param {Object} styles 更新的样式键值对对象,如:{ color: '#ddd' }
2361
2359
  *
2360
+ * @function getContrast 获取两个颜色的对比度
2361
+ * @param {string} color1 要计算颜色对比度的颜色1,支持css颜色格式
2362
+ * @param {string} color2 要计算颜色对比度的颜色2,支持css颜色格式
2363
+ * @return {number} contrast 颜色对比度,取值范围为`[1, 21]`
2364
+ *
2365
+ * @function extend 挂载插件
2366
+ * @param {Array} pluginList 插件列表
2367
+ *
2362
2368
  */
2363
2369
 
2364
2370
  var classReg = new RegExp("".concat(_modules_constant__WEBPACK_IMPORTED_MODULE_0__["CLASS_PREFIX"], "[^ ]+"), 'g'); // Darkmode配置
@@ -2475,10 +2481,17 @@ function init() {
2475
2481
  _modules_config__WEBPACK_IMPORTED_MODULE_1__["default"].hasInit = true; // 记录为配置已设置
2476
2482
 
2477
2483
  var tagName = _modules_config__WEBPACK_IMPORTED_MODULE_1__["default"].whitelist.tagName;
2478
- opt.whitelist && opt.whitelist.tagName instanceof Array && opt.whitelist.tagName.forEach(function (item) {
2479
- item = item.toUpperCase();
2480
- tagName.indexOf(item) === -1 && tagName.push(item);
2481
- });
2484
+ var attribute = _modules_config__WEBPACK_IMPORTED_MODULE_1__["default"].whitelist.attribute;
2485
+
2486
+ if (opt.whitelist) {
2487
+ opt.whitelist.tagName instanceof Array && opt.whitelist.tagName.forEach(function (item) {
2488
+ item = item.toUpperCase();
2489
+ tagName.indexOf(item) === -1 && tagName.push(item);
2490
+ });
2491
+ opt.whitelist.attribute instanceof Array && opt.whitelist.attribute.forEach(function (item) {
2492
+ attribute.indexOf(item) === -1 && attribute.push(item);
2493
+ });
2494
+ }
2482
2495
 
2483
2496
  if (['dark', 'light'].indexOf(opt.mode) > -1) {
2484
2497
  _modules_config__WEBPACK_IMPORTED_MODULE_1__["default"].set('string', opt, 'mode');
@@ -2519,12 +2532,6 @@ function convertBg(nodes) {
2519
2532
  });
2520
2533
  }
2521
2534
  ;
2522
- function extend(pluginList) {
2523
- pluginList.forEach(function (plugin) {
2524
- return _modules_global__WEBPACK_IMPORTED_MODULE_2__["plugins"].extend(plugin);
2525
- });
2526
- }
2527
- ;
2528
2535
  function updateStyle(node, styles) {
2529
2536
  if (!_modules_global__WEBPACK_IMPORTED_MODULE_2__["cssUtils"].isFinish) return; // 没有运行过Dark Mode处理逻辑则无需运行
2530
2537
 
@@ -2537,6 +2544,13 @@ function updateStyle(node, styles) {
2537
2544
  function getContrast(color1, color2) {
2538
2545
  return _modules_global__WEBPACK_IMPORTED_MODULE_2__["sdk"].getContrast(color1, color2);
2539
2546
  }
2547
+ ;
2548
+ function extend(pluginList) {
2549
+ pluginList.forEach(function (plugin) {
2550
+ return _modules_global__WEBPACK_IMPORTED_MODULE_2__["plugins"].extend(plugin);
2551
+ });
2552
+ }
2553
+ ;
2540
2554
 
2541
2555
  /***/ }),
2542
2556
 
@@ -2576,7 +2590,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2576
2590
  * @param {Function} callback 如果在背景节点区域内,则执行该回调函数
2577
2591
  *
2578
2592
  * @method update 更新堆栈的节点对象,主要解决前后节点不一致的问题
2579
- * @param {DOM Object Array} nodes 要更新的节点对象列表
2593
+ * @param {DOM Object Array} els 要更新的节点对象列表
2580
2594
  *
2581
2595
  */
2582
2596
  // Darkmode配置
@@ -2635,12 +2649,12 @@ var BgNodeStack = /*#__PURE__*/function () {
2635
2649
  }
2636
2650
  }, {
2637
2651
  key: "update",
2638
- value: function update(nodes) {
2652
+ value: function update(els) {
2639
2653
  this._stack.forEach(function (item) {
2640
2654
  if (!item.updated) {
2641
- Array.prototype.some.call(nodes, function (node) {
2642
- if (node.nodeType === 1 && node.classList.contains(item.className)) {
2643
- item.el = node;
2655
+ Array.prototype.some.call(els, function (el) {
2656
+ if (el.nodeType === 1 && el.classList.contains(item.className)) {
2657
+ item.el = el;
2644
2658
  item.updated = true;
2645
2659
  return true;
2646
2660
  }
@@ -2704,7 +2718,8 @@ var config = {
2704
2718
  error: null,
2705
2719
  mode: '',
2706
2720
  whitelist: {
2707
- tagName: ['MPCPS', 'IFRAME']
2721
+ tagName: ['MPCPS', 'IFRAME'],
2722
+ attribute: []
2708
2723
  },
2709
2724
  needJudgeFirstPage: true,
2710
2725
  delayBgJudge: false,
@@ -2805,7 +2820,7 @@ var DEFAULT_LIGHT_TEXTCOLOR = '#191919'; // 非Dark Mode下字体颜色
2805
2820
 
2806
2821
  var DEFAULT_LIGHT_BGCOLOR = '#fff'; // 非Dark Mode下背景颜色
2807
2822
 
2808
- var DEFAULT_DARK_TEXTCOLOR = '#a3a3a3'; // 前景色:rgba(255,255,255,0.6) 背景色:#191919
2823
+ var DEFAULT_DARK_TEXTCOLOR = '#a3a3a3'; // Dark Mode下字体颜色,前景色:rgba(255,255,255,0.6) 背景色:#191919
2809
2824
 
2810
2825
  var DEFAULT_DARK_BGCOLOR = '#191919'; // Dark Mode下背景颜色
2811
2826
 
@@ -3021,32 +3036,32 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
3021
3036
  * @name 节点相关操作工具API
3022
3037
  *
3023
3038
  * @function getChildrenAndIt 获取某个节点及它的所有子节点
3024
- * @param {DOM Object} dom 节点对象
3039
+ * @param {DOM Object} el 节点对象
3025
3040
  * @return {DOM Object Array} 节点对象列表
3026
3041
  *
3027
3042
  * @function hasTextNode 判断某个节点里是否包含文字节点
3028
- * @param {DOM Object} dom 节点对象
3043
+ * @param {DOM Object} el 节点对象
3029
3044
  * @return {boolean} 判断结果
3030
3045
  *
3031
3046
  * @function hasTableClass 判断table相关元素有没有指定class
3032
- * @param {DOM Object} dom 节点对象
3047
+ * @param {DOM Object} el 节点对象
3033
3048
  * @return {string | null} 判断结果,如果有,返回class对应的lm色值,否则返回null
3034
3049
  *
3035
3050
  */
3036
3051
  // Darkmode配置
3037
3052
 
3038
3053
 
3039
- function getChildrenAndIt(dom) {
3054
+ function getChildrenAndIt(el) {
3040
3055
  var _ref;
3041
3056
 
3042
- return (_ref = [dom]).concat.apply(_ref, _toConsumableArray(dom.querySelectorAll('*')));
3057
+ return (_ref = [el]).concat.apply(_ref, _toConsumableArray(el.querySelectorAll('*')));
3043
3058
  }
3044
3059
  ;
3045
- function hasTextNode(dom) {
3060
+ function hasTextNode(el) {
3046
3061
  var cnt = '';
3047
- Array.prototype.forEach.call(dom.childNodes, function (node) {
3048
- if (node.nodeType === 3) {
3049
- cnt += node.nodeValue.replace(/\s/g, ''); // 不考虑空白字符
3062
+ Array.prototype.forEach.call(el.childNodes, function (child) {
3063
+ if (child.nodeType === 3) {
3064
+ cnt += child.nodeValue.replace(/\s/g, ''); // 不考虑空白字符
3050
3065
  }
3051
3066
  });
3052
3067
  return cnt.length > 0;
@@ -3057,9 +3072,9 @@ var tableClassObj = {
3057
3072
  'ue-table-interlace-color-single': '#fcfcfc',
3058
3073
  'ue-table-interlace-color-double': '#f7faff'
3059
3074
  };
3060
- function hasTableClass(dom) {
3075
+ function hasTableClass(el) {
3061
3076
  var color = null;
3062
- Array.prototype.some.call(dom.classList, function (className) {
3077
+ Array.prototype.some.call(el.classList, function (className) {
3063
3078
  if (tableClassObj[className]) {
3064
3079
  color = tableClassObj[className];
3065
3080
  return true;
@@ -3079,7 +3094,7 @@ function hasTableClass(dom) {
3079
3094
  * @attr {boolean} showFirstPage 是否已显示首屏
3080
3095
  *
3081
3096
  * @method set 设置要处理的节点列表
3082
- * @param {DOM Object Array} nodes 要处理的节点列表
3097
+ * @param {DOM Object Array} els 要处理的节点列表
3083
3098
  *
3084
3099
  * @method get 获取要处理的节点列表(包含延迟节点、容器节点等逻辑)
3085
3100
  * @return {DOM Object Array} 要处理的节点列表
@@ -3090,7 +3105,7 @@ function hasTableClass(dom) {
3090
3105
  * @return {boolean} 判断结果
3091
3106
  *
3092
3107
  * @method addFirstPageNode 添加首屏节点
3093
- * @param {DOM Object} node 要添加的首屏节点
3108
+ * @param {DOM Object} el 要添加的首屏节点
3094
3109
  *
3095
3110
  * @method showFirstPageNodes 显示所有首屏节点
3096
3111
  *
@@ -3106,11 +3121,11 @@ var DomUtils = /*#__PURE__*/function () {
3106
3121
  function DomUtils() {
3107
3122
  _classCallCheck(this, DomUtils);
3108
3123
 
3109
- _defineProperty(this, "_nodes", []);
3124
+ _defineProperty(this, "_els", []);
3110
3125
 
3111
- _defineProperty(this, "_firstPageNodes", []);
3126
+ _defineProperty(this, "_firstPageEls", []);
3112
3127
 
3113
- _defineProperty(this, "_delayNodes", []);
3128
+ _defineProperty(this, "_delayEls", []);
3114
3129
 
3115
3130
  _defineProperty(this, "showFirstPage", false);
3116
3131
  }
@@ -3118,29 +3133,29 @@ var DomUtils = /*#__PURE__*/function () {
3118
3133
  _createClass(DomUtils, [{
3119
3134
  key: "length",
3120
3135
  get: function get() {
3121
- return this._nodes.length;
3136
+ return this._els.length;
3122
3137
  }
3123
3138
  }, {
3124
3139
  key: "set",
3125
3140
  value: function set() {
3126
- var nodes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3127
- this._nodes = nodes;
3141
+ var els = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3142
+ this._els = els;
3128
3143
  }
3129
3144
  }, {
3130
3145
  key: "get",
3131
3146
  value: function get() {
3132
3147
  var res = [];
3133
3148
 
3134
- if (this._nodes.length) {
3149
+ if (this._els.length) {
3135
3150
  // 有节点
3136
- res = this._nodes;
3137
- _global__WEBPACK_IMPORTED_MODULE_1__["sdk"].isDarkmode && (this._nodes = []);
3151
+ res = this._els;
3152
+ _global__WEBPACK_IMPORTED_MODULE_1__["sdk"].isDarkmode && (this._els = []);
3138
3153
  } else {
3139
3154
  // 如果没有节点
3140
- if (this._delayNodes.length) {
3155
+ if (this._delayEls.length) {
3141
3156
  // 有延迟节点,则使用延迟节点
3142
- res = this._delayNodes;
3143
- this._delayNodes = [];
3157
+ res = this._delayEls;
3158
+ this._delayEls = [];
3144
3159
  } else if (_config__WEBPACK_IMPORTED_MODULE_0__["default"].container) {
3145
3160
  // 没有延迟节点,但有容器,重新获取容器内的节点
3146
3161
  res = _config__WEBPACK_IMPORTED_MODULE_0__["default"].container.querySelectorAll('*');
@@ -3154,27 +3169,27 @@ var DomUtils = /*#__PURE__*/function () {
3154
3169
  value: function delay() {
3155
3170
  var _this = this;
3156
3171
 
3157
- Array.prototype.forEach.call(this._nodes, function (node) {
3158
- return _this._delayNodes.push(node);
3172
+ Array.prototype.forEach.call(this._els, function (el) {
3173
+ return _this._delayEls.push(el);
3159
3174
  }); // 转移到延迟处理的节点里
3160
3175
 
3161
- this._nodes = []; // 转移后清空列表
3176
+ this._els = []; // 转移后清空列表
3162
3177
  }
3163
3178
  }, {
3164
3179
  key: "hasDelay",
3165
3180
  value: function hasDelay() {
3166
- return this._delayNodes.length > 0;
3181
+ return this._delayEls.length > 0;
3167
3182
  }
3168
3183
  }, {
3169
3184
  key: "addFirstPageNode",
3170
- value: function addFirstPageNode(node) {
3171
- this._firstPageNodes.push(node);
3185
+ value: function addFirstPageNode(el) {
3186
+ this._firstPageEls.push(el);
3172
3187
  }
3173
3188
  }, {
3174
3189
  key: "showFirstPageNodes",
3175
3190
  value: function showFirstPageNodes() {
3176
- this._firstPageNodes.forEach(function (node) {
3177
- return !node.style.visibility && (node.style.visibility = 'visible');
3191
+ this._firstPageEls.forEach(function (el) {
3192
+ return !el.style.visibility && (el.style.visibility = 'visible');
3178
3193
  }); // 显示首屏节点
3179
3194
 
3180
3195
 
@@ -3183,7 +3198,7 @@ var DomUtils = /*#__PURE__*/function () {
3183
3198
  }, {
3184
3199
  key: "emptyFirstPageNodes",
3185
3200
  value: function emptyFirstPageNodes() {
3186
- this._firstPageNodes = [];
3201
+ this._firstPageEls = [];
3187
3202
  }
3188
3203
  }]);
3189
3204
 
@@ -3465,6 +3480,19 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3465
3480
  // dependencies
3466
3481
 
3467
3482
 
3483
+ var ColorParser = function ColorParser(color) {
3484
+ var res = null;
3485
+
3486
+ try {
3487
+ res = color__WEBPACK_IMPORTED_MODULE_0___default()(color);
3488
+ } catch (e) {
3489
+ console.log("ignore the invalid color: `".concat(color, "`"));
3490
+ }
3491
+
3492
+ return res;
3493
+ };
3494
+
3495
+
3468
3496
  color_name__WEBPACK_IMPORTED_MODULE_1___default.a.windowtext = [0, 0, 0]; // 补上这个colorName
3469
3497
 
3470
3498
  color_name__WEBPACK_IMPORTED_MODULE_1___default.a.transparent = [255, 255, 255, 0]; // 支持透明,暂定用白色透明度0来表示
@@ -3501,16 +3529,29 @@ var parseColor = function parseColor(value, parseTransparent) {
3501
3529
  var mixColor = function mixColor(colors) {
3502
3530
  if (!colors || colors.length < 1) return '';
3503
3531
  if (colors.length === 1) return colors[0];
3504
- var retColor = colors.shift();
3505
- var nextColor = colors.shift();
3506
-
3507
- while (nextColor) {
3508
- var nextColorObj = color__WEBPACK_IMPORTED_MODULE_0___default()(nextColor);
3509
- retColor = color__WEBPACK_IMPORTED_MODULE_0___default()(retColor).mix(nextColorObj, nextColorObj.alpha());
3510
- nextColor = colors.shift();
3532
+ var retColorStr = colors.shift();
3533
+ var nextColorStr = colors.shift();
3534
+
3535
+ while (nextColorStr) {
3536
+ var retColor = ColorParser(retColorStr);
3537
+ var nextColor = ColorParser(nextColorStr);
3538
+
3539
+ if (!retColor && nextColor) {
3540
+ // 如果当前色值非法,混入色值合法,则直接使用混入色值
3541
+ retColorStr = nextColorStr;
3542
+ } else if (!retColor && !nextColor) {
3543
+ // 如果两个色值都非法,则使用下一批色值
3544
+ retColorStr = colors.shift() || '';
3545
+ } else if (retColor && nextColor) {
3546
+ // 如果两个色值都合法,执行mix
3547
+ retColorStr = retColor.mix(nextColor, nextColor.alpha());
3548
+ } // 如果当前色值合法,混入色值非法,无需处理
3549
+
3550
+
3551
+ nextColorStr = colors.shift();
3511
3552
  }
3512
3553
 
3513
- return retColor;
3554
+ return retColorStr;
3514
3555
  }; // 处理-webkit-fill-color和-webkit-text-stroke-color,返回处理后的色值,无则返回空字符串
3515
3556
 
3516
3557
 
@@ -3568,11 +3609,11 @@ var SDK = /*#__PURE__*/function () {
3568
3609
 
3569
3610
  _defineProperty(this, "_idx", 0);
3570
3611
 
3571
- _defineProperty(this, "_defaultDarkTextColorRgb", color__WEBPACK_IMPORTED_MODULE_0___default()(_config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkTextColor).rgb().array());
3612
+ _defineProperty(this, "_defaultDarkTextColorRgb", ColorParser(_config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkTextColor).rgb().array());
3572
3613
 
3573
- _defineProperty(this, "_defaultDarkBgColorRgb", color__WEBPACK_IMPORTED_MODULE_0___default()(_config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkBgColor).rgb().array());
3614
+ _defineProperty(this, "_defaultDarkBgColorRgb", ColorParser(_config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkBgColor).rgb().array());
3574
3615
 
3575
- _defineProperty(this, "_defaultDarkBgColorHSL", color__WEBPACK_IMPORTED_MODULE_0___default()(_config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkBgColor).hsl().array());
3616
+ _defineProperty(this, "_defaultDarkBgColorHSL", ColorParser(_config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkBgColor).hsl().array());
3576
3617
 
3577
3618
  _defineProperty(this, "_defaultDarkTextColorBrightness", getColorPerceivedBrightness(this._defaultDarkTextColorRgb));
3578
3619
 
@@ -3685,25 +3726,28 @@ var SDK = /*#__PURE__*/function () {
3685
3726
  newColor = this._adjustBackgroundBrightness(color);
3686
3727
 
3687
3728
  if (!options.hasInlineColor) {
3688
- var parentTextColor = el[_constant__WEBPACK_IMPORTED_MODULE_2__["ORIGINAL_COLORATTR"]] || _config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultLightTextColor;
3729
+ var parentTextColorStr = el[_constant__WEBPACK_IMPORTED_MODULE_2__["ORIGINAL_COLORATTR"]] || _config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultLightTextColor;
3730
+ var parentTextColor = ColorParser(parentTextColorStr);
3689
3731
 
3690
- var ret = this._adjustBrightness(color__WEBPACK_IMPORTED_MODULE_0___default()(parentTextColor), el, {
3691
- isTextColor: true,
3692
- parentElementBgColorStr: newColor || color
3693
- }, isUpdate);
3732
+ if (parentTextColor) {
3733
+ var ret = this._adjustBrightness(parentTextColor, el, {
3734
+ isTextColor: true,
3735
+ parentElementBgColorStr: newColor || color
3736
+ }, isUpdate);
3694
3737
 
3695
- if (ret.newColor) {
3696
- extStyle += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('color', ret.newColor);
3697
- } else {
3698
- extStyle += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('color', parentTextColor);
3738
+ if (ret.newColor) {
3739
+ extStyle += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('color', ret.newColor);
3740
+ } else {
3741
+ extStyle += _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('color', parentTextColor);
3742
+ }
3699
3743
  }
3700
3744
  }
3701
3745
  } else if (options.isTextColor || options.isBorderColor) {
3702
3746
  // 字体色、边框色
3703
3747
  var parentElementBgColorStr = options.parentElementBgColorStr || options.isTextColor && el[_constant__WEBPACK_IMPORTED_MODULE_2__["BGCOLORATTR"]] || _config__WEBPACK_IMPORTED_MODULE_3__["default"].defaultDarkBgColor;
3704
- var parentElementBgColor = color__WEBPACK_IMPORTED_MODULE_0___default()(parentElementBgColorStr); // 无背景图片
3748
+ var parentElementBgColor = ColorParser(parentElementBgColorStr); // 无背景图片
3705
3749
 
3706
- if (!el[_constant__WEBPACK_IMPORTED_MODULE_2__["BGIMAGEATTR"]]) {
3750
+ if (parentElementBgColor && !el[_constant__WEBPACK_IMPORTED_MODULE_2__["BGIMAGEATTR"]]) {
3707
3751
  newColor = this._adjustTextBrightness(color, parentElementBgColor);
3708
3752
  _global__WEBPACK_IMPORTED_MODULE_4__["plugins"].emit("afterConvertTextColor".concat(isUpdate ? 'ByUpdateStyle' : ''), el, {
3709
3753
  // fontColor: color,
@@ -3748,6 +3792,9 @@ var SDK = /*#__PURE__*/function () {
3748
3792
  if (this.isDarkmode || isUpdate) {
3749
3793
  var nodeName = el.nodeName;
3750
3794
  if (_config__WEBPACK_IMPORTED_MODULE_3__["default"].whitelist.tagName.indexOf(nodeName) > -1) return '';
3795
+ if (_config__WEBPACK_IMPORTED_MODULE_3__["default"].whitelist.attribute.some(function (attribute) {
3796
+ return el.hasAttribute(attribute);
3797
+ })) return '';
3751
3798
  var styles = el.style;
3752
3799
 
3753
3800
  if (!cssKVList) {
@@ -3815,14 +3862,18 @@ var SDK = /*#__PURE__*/function () {
3815
3862
  if (_constant__WEBPACK_IMPORTED_MODULE_2__["TABLE_NAME"].indexOf(nodeName) > -1 && !hasInlineBackground) {
3816
3863
  // 如果table没有内联样式
3817
3864
  this._try(function () {
3818
- var color = Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["hasTableClass"])(el); // 获取class对应的lm色值
3865
+ var colorStr = Object(_domUtils__WEBPACK_IMPORTED_MODULE_5__["hasTableClass"])(el); // 获取class对应的lm色值
3819
3866
 
3820
- if (!color) color = el.getAttribute('bgcolor'); // 如果没有class则获取bgcolor的色值
3867
+ if (!colorStr) colorStr = el.getAttribute('bgcolor'); // 如果没有class则获取bgcolor的色值
3821
3868
 
3822
- if (color) {
3869
+ if (colorStr) {
3823
3870
  // 有色值(class对应的lm色值或者是bgcolor色值),则当做内联样式来处理
3824
- cssKVList.unshift(['background-color', color__WEBPACK_IMPORTED_MODULE_0___default()(color).toString()]);
3825
- hasInlineBackground = true;
3871
+ var color = ColorParser(colorStr);
3872
+
3873
+ if (color) {
3874
+ cssKVList.unshift(['background-color', color.toString()]);
3875
+ hasInlineBackground = true;
3876
+ }
3826
3877
  }
3827
3878
  });
3828
3879
  }
@@ -3830,12 +3881,16 @@ var SDK = /*#__PURE__*/function () {
3830
3881
  if (nodeName === 'FONT' && !hasInlineColor) {
3831
3882
  // 如果是font标签且没有内联文本颜色样式
3832
3883
  this._try(function () {
3833
- var color = el.getAttribute('color'); // 获取color的色值
3884
+ var colorStr = el.getAttribute('color'); // 获取color的色值
3834
3885
 
3835
- if (color) {
3886
+ if (colorStr) {
3836
3887
  // 有色值,则当做内联样式来处理
3837
- cssKVList.push(['color', color__WEBPACK_IMPORTED_MODULE_0___default()(color).toString()]);
3838
- hasInlineColor = true;
3888
+ var color = ColorParser(colorStr);
3889
+
3890
+ if (color) {
3891
+ cssKVList.push(['color', color.toString()]);
3892
+ hasInlineColor = true;
3893
+ }
3839
3894
  }
3840
3895
  });
3841
3896
  } // 处理-webkit-text相关样式
@@ -3961,9 +4016,9 @@ var SDK = /*#__PURE__*/function () {
3961
4016
  cssChange = true;
3962
4017
  }
3963
4018
 
3964
- var matchColor = color__WEBPACK_IMPORTED_MODULE_0___default()(match);
4019
+ var matchColor = ColorParser(match);
3965
4020
 
3966
- if (matchColor.alpha() >= _constant__WEBPACK_IMPORTED_MODULE_2__["IGNORE_ALPHA"]) {
4021
+ if ((matchColor === null || matchColor === void 0 ? void 0 : matchColor.alpha()) >= _constant__WEBPACK_IMPORTED_MODULE_2__["IGNORE_ALPHA"]) {
3967
4022
  // 忽略透明度低的色值
3968
4023
  // 使用颜色处理算法
3969
4024
  var ret = _this._adjustBrightness(matchColor, el, {
@@ -3990,7 +4045,9 @@ var SDK = /*#__PURE__*/function () {
3990
4045
  } // 如果设置背景颜色,取消背景图片的影响
3991
4046
 
3992
4047
 
3993
- if (isBgColor && color__WEBPACK_IMPORTED_MODULE_0___default()(retColorStr).alpha() >= _constant__WEBPACK_IMPORTED_MODULE_2__["IGNORE_ALPHA"] && dom[_constant__WEBPACK_IMPORTED_MODULE_2__["BGIMAGEATTR"]]) {
4048
+ var retColor = ColorParser(retColorStr);
4049
+
4050
+ if (isBgColor && (retColor === null || retColor === void 0 ? void 0 : retColor.alpha()) >= _constant__WEBPACK_IMPORTED_MODULE_2__["IGNORE_ALPHA"] && dom[_constant__WEBPACK_IMPORTED_MODULE_2__["BGIMAGEATTR"]]) {
3994
4051
  delete dom[_constant__WEBPACK_IMPORTED_MODULE_2__["BGIMAGEATTR"]];
3995
4052
  }
3996
4053
  });
@@ -4034,7 +4091,7 @@ var SDK = /*#__PURE__*/function () {
4034
4091
 
4035
4092
 
4036
4093
  if (isBackgroundAttr) {
4037
- tmpCssKvStr = _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, "".concat(newValue, ",linear-gradient(").concat(imgBgColor, ", ").concat(imgBgColor, ")"));
4094
+ tmpCssKvStr = _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV(key, imgBgColor ? "".concat(newValue, ",linear-gradient(").concat(imgBgColor, ", ").concat(imgBgColor, ")") : newValue);
4038
4095
 
4039
4096
  if (elBackgroundPositionAttr) {
4040
4097
  newBackgroundPositionValue = "top left,".concat(elBackgroundPositionAttr);
@@ -4057,7 +4114,7 @@ var SDK = /*#__PURE__*/function () {
4057
4114
  }
4058
4115
  } else {
4059
4116
  // border-image元素,如果当前元素没有背景颜色,补背景颜色
4060
- if (!hasInlineBackground) {
4117
+ if (imgBgColor && !hasInlineBackground) {
4061
4118
  tmpCssKvStr = _global__WEBPACK_IMPORTED_MODULE_4__["cssUtils"].genCssKV('background-image', "linear-gradient(".concat(imgBgColor, ", ").concat(imgBgColor, ")"));
4062
4119
 
4063
4120
  if (dmBgClassName) {
@@ -4131,8 +4188,10 @@ var SDK = /*#__PURE__*/function () {
4131
4188
  }
4132
4189
  }, {
4133
4190
  key: "getContrast",
4134
- value: function getContrast(color1, color2) {
4135
- return _getContrast(color__WEBPACK_IMPORTED_MODULE_0___default()(color1).rgb().array(), color__WEBPACK_IMPORTED_MODULE_0___default()(color2).rgb().array());
4191
+ value: function getContrast(colorStr1, colorStr2) {
4192
+ var color1 = ColorParser(colorStr1);
4193
+ var color2 = ColorParser(colorStr2);
4194
+ return color1 && color2 ? _getContrast(color1.rgb().array(), color2.rgb().array()) : 0;
4136
4195
  }
4137
4196
  }]);
4138
4197
 
@@ -4180,7 +4239,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
4180
4239
  * @param {Function} callback 回调
4181
4240
  *
4182
4241
  * @method update 更新队列的节点对象,主要解决前后节点不一致的问题
4183
- * @param {DOM Object Array} nodes 要更新的节点对象列表
4242
+ * @param {DOM Object Array} els 要更新的节点对象列表
4184
4243
  *
4185
4244
  */
4186
4245
  // Darkmode配置
@@ -4230,12 +4289,12 @@ var TextNodeQueue = /*#__PURE__*/function () {
4230
4289
  }
4231
4290
  }, {
4232
4291
  key: "update",
4233
- value: function update(nodes) {
4292
+ value: function update(els) {
4234
4293
  this._queue.forEach(function (item) {
4235
4294
  if (!item.updated) {
4236
- Array.prototype.some.call(nodes, function (node) {
4237
- if (node.nodeType === 1 && node.classList.contains(item.className)) {
4238
- item.el = node;
4295
+ Array.prototype.some.call(els, function (el) {
4296
+ if (el.nodeType === 1 && el.classList.contains(item.className)) {
4297
+ item.el = el;
4239
4298
  item.updated = true;
4240
4299
  return true;
4241
4300
  }