css-color-parser-h 3.0.4 → 3.0.6
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.
Potentially problematic release.
This version of css-color-parser-h might be problematic. Click here for more details.
- package/@types/CssColorParser.d.ts +219 -0
- package/@types/CssColorParserPlus.d.ts +186 -0
- package/@types/index.d.ts +4 -382
- package/example.html +3 -1
- package/lib/css-color-parser-h.cjs.js +936 -0
- package/lib/css-color-parser-h.esm.js +933 -0
- package/lib/css-color-parser-h.umd.js +1 -0
- package/package.json +34 -25
- package/readme.md +8 -2
- package/LICENSE +0 -21
- package/dist/css-color-parser-h.cjs +0 -2550
- package/dist/css-color-parser-h.esm.js +0 -2532
- package/dist/css-color-parser-h.esm.min.js +0 -1
- package/dist/css-color-parser-h.min.cjs +0 -1
- package/dist/css-color-parser-h.umd.js +0 -2559
- package/dist/css-color-parser-h.umd.min.js +0 -1
|
@@ -0,0 +1,936 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var convert = require('color-convert');
|
|
4
|
+
|
|
5
|
+
var Check = /** @class */ (function () {
|
|
6
|
+
function Check() {
|
|
7
|
+
}
|
|
8
|
+
Check.type = function (paramName, value, type) {
|
|
9
|
+
var valueType = typeof value;
|
|
10
|
+
if (valueType !== type) {
|
|
11
|
+
throw new Error("Expected ".concat(paramName, " to be typeof ").concat(type, ", actual typeof was ").concat(valueType));
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
Check.types = function (paramName, value, types) {
|
|
15
|
+
var valueType = typeof value;
|
|
16
|
+
var isContained = types.includes(valueType);
|
|
17
|
+
if (!isContained) {
|
|
18
|
+
throw new Error("Expected ".concat(paramName, " to be typeof ").concat(types.join('|'), ", actual typeof was ").concat(valueType));
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
Check.numValue = function (paramName, value, min, max) {
|
|
22
|
+
Check.numMinValue(paramName, value, min);
|
|
23
|
+
Check.numMaxValue(paramName, value, max);
|
|
24
|
+
};
|
|
25
|
+
Check.numMinValue = function (paramName, value, min) {
|
|
26
|
+
if (value < min) {
|
|
27
|
+
throw new Error("Expected ".concat(paramName, " to > ").concat(min, ", actual value was ").concat(value));
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
Check.numMaxValue = function (paramName, value, max) {
|
|
31
|
+
if (value > max) {
|
|
32
|
+
throw new Error("Expected ".concat(paramName, " to < ").concat(max, ", actual value was ").concat(value));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
Check.numIsInt = function (paramName, value, expectIsInt) {
|
|
36
|
+
var isInt = Math.floor(value) === value;
|
|
37
|
+
if (isInt !== expectIsInt) {
|
|
38
|
+
throw new Error("Expected ".concat(paramName, " to ").concat(expectIsInt ? 'Integer' : 'Float', ", actual value was ").concat(isInt ? 'Integer' : 'Float'));
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return Check;
|
|
42
|
+
}());
|
|
43
|
+
function defaultValue(v, defaultV) {
|
|
44
|
+
if (v === undefined || v === null) {
|
|
45
|
+
return defaultV;
|
|
46
|
+
}
|
|
47
|
+
if (isNaN(v) && typeof defaultV === 'number') {
|
|
48
|
+
return defaultV;
|
|
49
|
+
}
|
|
50
|
+
return v;
|
|
51
|
+
}
|
|
52
|
+
function limitNumber(min, max, v) {
|
|
53
|
+
if (v > max) {
|
|
54
|
+
v = max;
|
|
55
|
+
}
|
|
56
|
+
else if (v < min) {
|
|
57
|
+
v = min;
|
|
58
|
+
}
|
|
59
|
+
return v;
|
|
60
|
+
}
|
|
61
|
+
function setNumberPrecision(number, precision) {
|
|
62
|
+
if (number === void 0) { number = 0; }
|
|
63
|
+
var prec = Math.pow(10, precision);
|
|
64
|
+
return Math.round(number * prec) / prec;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/*
|
|
68
|
+
* @Author: roman_123
|
|
69
|
+
* @Description: 部分核心代码修改自cesium
|
|
70
|
+
* @Date: 2022-11-28 17:32:57
|
|
71
|
+
* @LastEditTime: 2022-12-06 00:02:21
|
|
72
|
+
*/
|
|
73
|
+
var CssColorStringParser = /** @class */ (function () {
|
|
74
|
+
function CssColorStringParser() {
|
|
75
|
+
}
|
|
76
|
+
// 去除字符串内所有空格
|
|
77
|
+
CssColorStringParser.clearStrSpace = function (v) {
|
|
78
|
+
return v.replace(/\s/g, '');
|
|
79
|
+
};
|
|
80
|
+
// 去除字符串两边空格,将中间多个空格合并为一个
|
|
81
|
+
CssColorStringParser.trimStr = function (v) {
|
|
82
|
+
v = v.replace(/\s+/g, ' ');
|
|
83
|
+
return v.trim();
|
|
84
|
+
};
|
|
85
|
+
// 解析3位16进制 #fff #fff0
|
|
86
|
+
CssColorStringParser.parse3BitsHEX = function (v) {
|
|
87
|
+
var regx = /^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i;
|
|
88
|
+
var res = regx.exec(v);
|
|
89
|
+
if (res) {
|
|
90
|
+
var res4 = defaultValue(res[4], 'f');
|
|
91
|
+
var r = CssColorStringParser._parseResStrForRgb(parseInt(res[1] + res[1], 16));
|
|
92
|
+
var g = CssColorStringParser._parseResStrForRgb(parseInt(res[2] + res[2], 16));
|
|
93
|
+
var b = CssColorStringParser._parseResStrForRgb(parseInt(res[3] + res[3], 16));
|
|
94
|
+
var a = CssColorStringParser._parsePercent(parseInt(res4 + res4, 16) / 255);
|
|
95
|
+
return [r, g, b, a];
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
};
|
|
99
|
+
// 解析6位16进制 #ffffff #ffffff00
|
|
100
|
+
CssColorStringParser.parse6BitsHEX = function (v) {
|
|
101
|
+
var regx = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i;
|
|
102
|
+
var res = regx.exec(v);
|
|
103
|
+
if (res) {
|
|
104
|
+
var res4 = defaultValue(res[4], 'ff');
|
|
105
|
+
var r = CssColorStringParser._parseResStrForRgb(parseInt(res[1], 16));
|
|
106
|
+
var g = CssColorStringParser._parseResStrForRgb(parseInt(res[2], 16));
|
|
107
|
+
var b = CssColorStringParser._parseResStrForRgb(parseInt(res[3], 16));
|
|
108
|
+
var a = CssColorStringParser._parsePercent(parseInt(res4, 16) / 255.0);
|
|
109
|
+
return [r, g, b, a];
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
};
|
|
113
|
+
// 解析rgb rgba rgb(255,255,255) rgba(255,255,255,1) rgba(100%,100%,100%, 1)
|
|
114
|
+
CssColorStringParser.parseRGBA = function (v) {
|
|
115
|
+
var regx = /^rgba?\(([0-9.]+%?),([0-9.]+%?),([0-9.]+%?)(?:,([0-9.]+%?))?\)$/i;
|
|
116
|
+
var res = regx.exec(v);
|
|
117
|
+
if (res) {
|
|
118
|
+
var r = CssColorStringParser._parseResStrForRgb(res[1]);
|
|
119
|
+
var g = CssColorStringParser._parseResStrForRgb(res[2]);
|
|
120
|
+
var b = CssColorStringParser._parseResStrForRgb(res[3]);
|
|
121
|
+
var a = CssColorStringParser._parsePercent(res[4]);
|
|
122
|
+
return [r, g, b, a];
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
};
|
|
126
|
+
// 解析hsl hsla hsl(360,100%,100%) hsla(360,100%,100%,1)
|
|
127
|
+
CssColorStringParser.parseHSLA = function (v) {
|
|
128
|
+
var regx = /^hsla?\(([0-9.]+)(?:deg)?,([0-9.]+%?),([0-9.]+%?)(?:,([0-9.]+%?))?\)$/i;
|
|
129
|
+
var res = regx.exec(v);
|
|
130
|
+
if (res) {
|
|
131
|
+
var h = CssColorStringParser._parseResStrForHue(res[1]);
|
|
132
|
+
var s = CssColorStringParser._parsePercent(res[2]);
|
|
133
|
+
var l = CssColorStringParser._parsePercent(res[3]);
|
|
134
|
+
var a = CssColorStringParser._parsePercent(res[4]);
|
|
135
|
+
return [h, s, l, a];
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
};
|
|
139
|
+
// 解析hwb
|
|
140
|
+
CssColorStringParser.parseHWB = function (v) {
|
|
141
|
+
var regx = /^hwb\s?\(\s?([0-9.]+)(?:deg)?\s([0-9.]+%?)\s([0-9.]+%?)\s?(?:\/\s?([0-9.]+%?))?\s?\)$/i;
|
|
142
|
+
var res = regx.exec(v);
|
|
143
|
+
if (res) {
|
|
144
|
+
var h = CssColorStringParser._parseResStrForHue(res[1]);
|
|
145
|
+
var w = CssColorStringParser._parsePercent(res[2]);
|
|
146
|
+
var b = CssColorStringParser._parsePercent(res[3]);
|
|
147
|
+
var a = CssColorStringParser._parsePercent(res[4]);
|
|
148
|
+
return [h, w, b, a];
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
};
|
|
152
|
+
// 解析rgb rgb(178 57 57 / 44%) 字符串中存在空格,因此使用清除两侧空格的原始字符串
|
|
153
|
+
CssColorStringParser.parseRGBA2 = function (v) {
|
|
154
|
+
var regx = /^rgba?\s?\(\s?([0-9.]+%?)\s?([0-9.]+%?)\s?([0-9.]+%?)(?:\s?\/\s?([0-9.]+%?))?\s?\)$/i;
|
|
155
|
+
var res = regx.exec(v);
|
|
156
|
+
if (res) {
|
|
157
|
+
var r = CssColorStringParser._parseResStrForRgb(res[1]);
|
|
158
|
+
var g = CssColorStringParser._parseResStrForRgb(res[2]);
|
|
159
|
+
var b = CssColorStringParser._parseResStrForRgb(res[3]);
|
|
160
|
+
var a = CssColorStringParser._parsePercent(res[4]);
|
|
161
|
+
return [r, g, b, a];
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
};
|
|
165
|
+
// 解析hsl hsl(215 85% 62% / 1)
|
|
166
|
+
CssColorStringParser.parseHSLA2 = function (v) {
|
|
167
|
+
var regx = /^hsla?\s?\(\s?([0-9.]+)(?:deg)?\s([0-9.]+%?)\s([0-9.]+%?)\s?(?:\/\s?([0-9.]+%?))?\s?\)$/i;
|
|
168
|
+
var res = regx.exec(v);
|
|
169
|
+
if (res) {
|
|
170
|
+
var h = CssColorStringParser._parseResStrForHue(res[1]);
|
|
171
|
+
var s = CssColorStringParser._parsePercent(res[2]);
|
|
172
|
+
var l = CssColorStringParser._parsePercent(res[3]);
|
|
173
|
+
var a = CssColorStringParser._parsePercent(res[4]);
|
|
174
|
+
return [h, s, l, a];
|
|
175
|
+
}
|
|
176
|
+
return null;
|
|
177
|
+
};
|
|
178
|
+
// 将结果解析为数字
|
|
179
|
+
CssColorStringParser._parseResStrForRgb = function (v) {
|
|
180
|
+
if (typeof v === 'string') {
|
|
181
|
+
v = parseFloat(v) / ('%' === v.substr(-1) ? 100.0 / 255 : 1);
|
|
182
|
+
}
|
|
183
|
+
if (isNaN(v)) {
|
|
184
|
+
v = 1;
|
|
185
|
+
}
|
|
186
|
+
return limitNumber(0, 255, v);
|
|
187
|
+
};
|
|
188
|
+
CssColorStringParser._parseResStrForHue = function (v) {
|
|
189
|
+
if (typeof v === 'string') {
|
|
190
|
+
v = parseFloat(v);
|
|
191
|
+
}
|
|
192
|
+
if (isNaN(v)) {
|
|
193
|
+
v = 0;
|
|
194
|
+
}
|
|
195
|
+
return limitNumber(0, 360, v);
|
|
196
|
+
};
|
|
197
|
+
CssColorStringParser._parsePercent = function (v) {
|
|
198
|
+
if (typeof v === 'string') {
|
|
199
|
+
v = parseFloat(v) / ('%' === v.substr(-1) ? 100.0 : 1);
|
|
200
|
+
}
|
|
201
|
+
if (isNaN(v)) {
|
|
202
|
+
v = 1;
|
|
203
|
+
}
|
|
204
|
+
return limitNumber(0, 1, v);
|
|
205
|
+
};
|
|
206
|
+
return CssColorStringParser;
|
|
207
|
+
}());
|
|
208
|
+
|
|
209
|
+
/*
|
|
210
|
+
* @Descripttion: 颜色解析器(轻量)
|
|
211
|
+
* @version: 1.0.0
|
|
212
|
+
* @Author: roman_123
|
|
213
|
+
* @Date: 2021-01-19 09:22:11
|
|
214
|
+
* @LastEditors: Please set LastEditors
|
|
215
|
+
* @LastEditTime: 2023-06-27 19:01:50
|
|
216
|
+
*/
|
|
217
|
+
var CssColorParser = /** @class */ (function () {
|
|
218
|
+
function CssColorParser(red, green, blue, alpha) {
|
|
219
|
+
this.r = 255;
|
|
220
|
+
this.g = 255;
|
|
221
|
+
this.b = 255;
|
|
222
|
+
this.a = 1;
|
|
223
|
+
this._outColorPrecision = 2;
|
|
224
|
+
this._outAlphaPrecision = 2;
|
|
225
|
+
this.setColor(red, green, blue, alpha);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* @description: 设置CssColorParser实例输出的精度
|
|
229
|
+
* @param {number} colorPrecision 输出颜色的精度
|
|
230
|
+
* @param {number} outAlphaPrecision 输出透明度的精度
|
|
231
|
+
* @return {CssColorParser}
|
|
232
|
+
*/
|
|
233
|
+
CssColorParser.prototype.setOutPrecision = function (colorPrecision, outAlphaPrecision) {
|
|
234
|
+
Check.type('colorPrecision', colorPrecision, 'number');
|
|
235
|
+
Check.type('outAlphaPrecision', outAlphaPrecision, 'number');
|
|
236
|
+
Check.numMinValue('colorPrecision', colorPrecision, 0);
|
|
237
|
+
Check.numMinValue('outAlphaPrecision', outAlphaPrecision, 0);
|
|
238
|
+
Check.numIsInt('colorPrecision', colorPrecision, true);
|
|
239
|
+
Check.numIsInt('outAlphaPrecision', outAlphaPrecision, true);
|
|
240
|
+
this._outColorPrecision = colorPrecision;
|
|
241
|
+
this._outAlphaPrecision = outAlphaPrecision;
|
|
242
|
+
return this;
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* 设置颜色
|
|
246
|
+
* @param red
|
|
247
|
+
* @param green
|
|
248
|
+
* @param blue
|
|
249
|
+
* @param alpha
|
|
250
|
+
* @example: this.setColor(255,255,255,1)
|
|
251
|
+
*/
|
|
252
|
+
CssColorParser.prototype.setColor = function (red, green, blue, alpha, isLimit) {
|
|
253
|
+
if (isLimit === void 0) { isLimit = true; }
|
|
254
|
+
if (isLimit) {
|
|
255
|
+
this.r = limitNumber(0, 255, defaultValue(Number(red), 0));
|
|
256
|
+
this.g = limitNumber(0, 255, defaultValue(Number(green), 0));
|
|
257
|
+
this.b = limitNumber(0, 255, defaultValue(Number(blue), 0));
|
|
258
|
+
this.a = limitNumber(0, 1, defaultValue(Number(alpha), 1));
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
this.r = defaultValue(Number(red), 0);
|
|
262
|
+
this.g = defaultValue(Number(green), 0);
|
|
263
|
+
this.b = defaultValue(Number(blue), 0);
|
|
264
|
+
this.a = defaultValue(Number(alpha), 1);
|
|
265
|
+
}
|
|
266
|
+
return this;
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* 设置颜色到范围内
|
|
270
|
+
* @example: this.limitColor()
|
|
271
|
+
*/
|
|
272
|
+
CssColorParser.prototype.limitColor = function () {
|
|
273
|
+
return this.setColor(this.r, this.g, this.b, this.a, true);
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* @description: 设置透明度
|
|
277
|
+
* @param {number} alpha
|
|
278
|
+
* @return {CssColorParser}
|
|
279
|
+
*/
|
|
280
|
+
CssColorParser.prototype.setAlpha = function (alpha) {
|
|
281
|
+
this.a = limitNumber(0, 1, defaultValue(Number(alpha), 1));
|
|
282
|
+
return this;
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* @description: 设置红色值
|
|
286
|
+
* @param {number} red
|
|
287
|
+
* @return {CssColorParser}
|
|
288
|
+
*/
|
|
289
|
+
CssColorParser.prototype.setRed = function (red) {
|
|
290
|
+
this.r = limitNumber(0, 255, defaultValue(Number(red), 0));
|
|
291
|
+
return this;
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* @description: 设置绿色值
|
|
295
|
+
* @param {number} green
|
|
296
|
+
* @return {CssColorParser}
|
|
297
|
+
*/
|
|
298
|
+
CssColorParser.prototype.setGreen = function (green) {
|
|
299
|
+
this.g = limitNumber(0, 255, defaultValue(Number(green), 0));
|
|
300
|
+
return this;
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* @description: 设置蓝色值
|
|
304
|
+
* @param {number} blue
|
|
305
|
+
* @return {CssColorParser}
|
|
306
|
+
*/
|
|
307
|
+
CssColorParser.prototype.setBlue = function (blue) {
|
|
308
|
+
this.b = limitNumber(0, 255, defaultValue(Number(blue), 0));
|
|
309
|
+
return this;
|
|
310
|
+
};
|
|
311
|
+
/**
|
|
312
|
+
* @description: 返回rgba格式的css字符串
|
|
313
|
+
* @return {string}
|
|
314
|
+
*/
|
|
315
|
+
CssColorParser.prototype.toRGBA = function () {
|
|
316
|
+
var color = this.toJson();
|
|
317
|
+
if (color.a === 1) {
|
|
318
|
+
return "rgb(".concat(color.r, ",").concat(color.g, ",").concat(color.b, ")");
|
|
319
|
+
}
|
|
320
|
+
return "rgba(".concat(color.r, ",").concat(color.g, ",").concat(color.b, ",").concat(color.a, ")");
|
|
321
|
+
};
|
|
322
|
+
/**
|
|
323
|
+
* @description: 返回字符串
|
|
324
|
+
* @return {string}
|
|
325
|
+
*/
|
|
326
|
+
CssColorParser.prototype.toString = function () {
|
|
327
|
+
return this.toRGBA();
|
|
328
|
+
};
|
|
329
|
+
/**
|
|
330
|
+
* @description: 归一化
|
|
331
|
+
* @return {array}
|
|
332
|
+
*/
|
|
333
|
+
CssColorParser.prototype.toNormalize = function () {
|
|
334
|
+
var r = setNumberPrecision(this.r / 255, this._outColorPrecision);
|
|
335
|
+
var g = setNumberPrecision(this.g / 255, this._outColorPrecision);
|
|
336
|
+
var b = setNumberPrecision(this.b / 255, this._outColorPrecision);
|
|
337
|
+
var a = setNumberPrecision(this.a, this._outAlphaPrecision);
|
|
338
|
+
return [r, g, b, a];
|
|
339
|
+
};
|
|
340
|
+
/**
|
|
341
|
+
* @description: 返回16进制格式的css字符串
|
|
342
|
+
* @return {string}
|
|
343
|
+
*/
|
|
344
|
+
CssColorParser.prototype.toHEX = function () {
|
|
345
|
+
var color = this.toJson();
|
|
346
|
+
var r = color.r.toString(16);
|
|
347
|
+
if (r.length < 2) {
|
|
348
|
+
r = "0".concat(r);
|
|
349
|
+
}
|
|
350
|
+
var g = color.g.toString(16);
|
|
351
|
+
if (g.length < 2) {
|
|
352
|
+
g = "0".concat(g);
|
|
353
|
+
}
|
|
354
|
+
var b = color.b.toString(16);
|
|
355
|
+
if (b.length < 2) {
|
|
356
|
+
b = "0".concat(b);
|
|
357
|
+
}
|
|
358
|
+
// 由于tojson后a会丢失精度,此处使用this.a
|
|
359
|
+
if (this.a < 1) {
|
|
360
|
+
var hexAlpha = parseInt((this.a * 255).toFixed()).toString(16);
|
|
361
|
+
if (hexAlpha.length < 2) {
|
|
362
|
+
hexAlpha = "0".concat(hexAlpha);
|
|
363
|
+
}
|
|
364
|
+
return "#".concat(r).concat(g).concat(b).concat(hexAlpha);
|
|
365
|
+
}
|
|
366
|
+
return "#".concat(r).concat(g).concat(b);
|
|
367
|
+
};
|
|
368
|
+
/**
|
|
369
|
+
* @description: 返回rgba数组
|
|
370
|
+
* @return {array}
|
|
371
|
+
*/
|
|
372
|
+
CssColorParser.prototype.toArray = function () {
|
|
373
|
+
var color = this.toJson();
|
|
374
|
+
return [color.r, color.g, color.b, color.a];
|
|
375
|
+
};
|
|
376
|
+
/**
|
|
377
|
+
* @description: 返回ColorJson
|
|
378
|
+
* @return {ColorJson}
|
|
379
|
+
*/
|
|
380
|
+
CssColorParser.prototype.toJson = function () {
|
|
381
|
+
return {
|
|
382
|
+
r: setNumberPrecision(this.r, this._outColorPrecision),
|
|
383
|
+
g: setNumberPrecision(this.g, this._outColorPrecision),
|
|
384
|
+
b: setNumberPrecision(this.b, this._outColorPrecision),
|
|
385
|
+
a: setNumberPrecision(this.a, this._outAlphaPrecision),
|
|
386
|
+
};
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* @description: 返回取反色后的新的实例
|
|
390
|
+
* @return {CssColorParser}
|
|
391
|
+
*/
|
|
392
|
+
CssColorParser.prototype.toInvert = function () {
|
|
393
|
+
var r = 255 - this.r;
|
|
394
|
+
var g = 255 - this.g;
|
|
395
|
+
var b = 255 - this.b;
|
|
396
|
+
var a = 1 - this.a;
|
|
397
|
+
return new CssColorParser(r, g, b, a);
|
|
398
|
+
};
|
|
399
|
+
/**
|
|
400
|
+
* @description: 拷贝
|
|
401
|
+
* @return {CssColorParser}
|
|
402
|
+
*/
|
|
403
|
+
CssColorParser.prototype.clone = function () {
|
|
404
|
+
return new CssColorParser(this.r, this.g, this.b, this.a);
|
|
405
|
+
};
|
|
406
|
+
/**
|
|
407
|
+
* @description: 比较两个解析对象的数据是否相等
|
|
408
|
+
* @param {string} color
|
|
409
|
+
* @return {boolean}
|
|
410
|
+
*/
|
|
411
|
+
CssColorParser.prototype.equals = function (color) {
|
|
412
|
+
if (this === color) {
|
|
413
|
+
return true;
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
var json1 = this.toJson();
|
|
417
|
+
var json2 = color.toJson();
|
|
418
|
+
return (json1.r === json2.r &&
|
|
419
|
+
json1.g === json2.g &&
|
|
420
|
+
json1.b === json2.g &&
|
|
421
|
+
json1.a === json2.a);
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
/**
|
|
425
|
+
* @description: 反色
|
|
426
|
+
* @return {CssColorParser}
|
|
427
|
+
*/
|
|
428
|
+
CssColorParser.prototype.setInvert = function () {
|
|
429
|
+
this.r = 255 - this.r;
|
|
430
|
+
this.g = 255 - this.g;
|
|
431
|
+
this.b = 255 - this.b;
|
|
432
|
+
this.a = 1 - this.a;
|
|
433
|
+
return this;
|
|
434
|
+
};
|
|
435
|
+
/**
|
|
436
|
+
* @description: 乘以倍数
|
|
437
|
+
* @param {number} scalar
|
|
438
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
439
|
+
* @return {CssColorParser}
|
|
440
|
+
*/
|
|
441
|
+
CssColorParser.prototype.multiplyByScalar = function (scalar, isSetAlpha) {
|
|
442
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
443
|
+
var r = this.r * scalar;
|
|
444
|
+
var g = this.g * scalar;
|
|
445
|
+
var b = this.b * scalar;
|
|
446
|
+
var a = isSetAlpha ? this.a * scalar : this.a;
|
|
447
|
+
return this.setColor(r, g, b, a, false);
|
|
448
|
+
};
|
|
449
|
+
/**
|
|
450
|
+
* @description: 除以倍数
|
|
451
|
+
* @param {number} scalar
|
|
452
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
453
|
+
* @return {CssColorParser}
|
|
454
|
+
*/
|
|
455
|
+
CssColorParser.prototype.divideByScalar = function (scalar, isSetAlpha) {
|
|
456
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
457
|
+
var r = this.r / scalar;
|
|
458
|
+
var g = this.g / scalar;
|
|
459
|
+
var b = this.b / scalar;
|
|
460
|
+
var a = isSetAlpha ? this.a / scalar : this.a;
|
|
461
|
+
return this.setColor(r, g, b, a, false);
|
|
462
|
+
};
|
|
463
|
+
/**
|
|
464
|
+
* @description: 实例相加
|
|
465
|
+
* @param {CssColorParser} colorParser
|
|
466
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
467
|
+
* @return {CssColorParser}
|
|
468
|
+
*/
|
|
469
|
+
CssColorParser.prototype.add = function (colorParser, isSetAlpha) {
|
|
470
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
471
|
+
var r = this.r + colorParser.r;
|
|
472
|
+
var g = this.g + colorParser.g;
|
|
473
|
+
var b = this.b + colorParser.b;
|
|
474
|
+
var a = isSetAlpha ? this.a + colorParser.a : this.a;
|
|
475
|
+
return this.setColor(r, g, b, a, false);
|
|
476
|
+
};
|
|
477
|
+
/**
|
|
478
|
+
* @description: 实例相减
|
|
479
|
+
* @param {CssColorParser} colorParser
|
|
480
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
481
|
+
* @return {CssColorParser}
|
|
482
|
+
*/
|
|
483
|
+
CssColorParser.prototype.subtract = function (colorParser, isSetAlpha) {
|
|
484
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
485
|
+
var r = this.r - colorParser.r;
|
|
486
|
+
var g = this.g - colorParser.g;
|
|
487
|
+
var b = this.b - colorParser.b;
|
|
488
|
+
var a = isSetAlpha ? this.a - colorParser.a : this.a;
|
|
489
|
+
return this.setColor(r, g, b, a, false);
|
|
490
|
+
};
|
|
491
|
+
/**
|
|
492
|
+
* @description: 实例相乘
|
|
493
|
+
* @param {CssColorParser} colorParser
|
|
494
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
495
|
+
* @return {CssColorParser}
|
|
496
|
+
*/
|
|
497
|
+
CssColorParser.prototype.multiply = function (colorParser, isSetAlpha) {
|
|
498
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
499
|
+
var r = this.r * colorParser.r;
|
|
500
|
+
var g = this.g * colorParser.g;
|
|
501
|
+
var b = this.b * colorParser.b;
|
|
502
|
+
var a = isSetAlpha ? this.a * colorParser.a : this.a;
|
|
503
|
+
return this.setColor(r, g, b, a, false);
|
|
504
|
+
};
|
|
505
|
+
/**
|
|
506
|
+
* @description: 实例相除
|
|
507
|
+
* @param {CssColorParser} colorParser
|
|
508
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
509
|
+
* @return {CssColorParser}
|
|
510
|
+
*/
|
|
511
|
+
CssColorParser.prototype.divide = function (colorParser, isSetAlpha) {
|
|
512
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
513
|
+
var r = this.r / colorParser.r;
|
|
514
|
+
var g = this.g / colorParser.g;
|
|
515
|
+
var b = this.b / colorParser.b;
|
|
516
|
+
var a = isSetAlpha ? this.a / colorParser.a : this.a;
|
|
517
|
+
return this.setColor(r, g, b, a, false);
|
|
518
|
+
};
|
|
519
|
+
/**
|
|
520
|
+
* @description: 颜色RGB加上数字
|
|
521
|
+
* @param {number} num
|
|
522
|
+
* @return {CssColorParser}
|
|
523
|
+
*/
|
|
524
|
+
CssColorParser.prototype.addNumberForRGB = function (num) {
|
|
525
|
+
this.r = this.r + num;
|
|
526
|
+
this.g = this.g + num;
|
|
527
|
+
this.b = this.b + num;
|
|
528
|
+
return this;
|
|
529
|
+
};
|
|
530
|
+
/**
|
|
531
|
+
* @description: 透明度加上数字
|
|
532
|
+
* @param {number} num
|
|
533
|
+
* @return {CssColorParser}
|
|
534
|
+
*/
|
|
535
|
+
CssColorParser.prototype.addNumberForAlpha = function (num) {
|
|
536
|
+
this.a = this.a + num;
|
|
537
|
+
return this;
|
|
538
|
+
};
|
|
539
|
+
/**
|
|
540
|
+
* @description: 解析16进制颜色
|
|
541
|
+
* @param {string} v
|
|
542
|
+
* @return {CssColorParser}
|
|
543
|
+
* @example: CssColorParser.parseHEX('#FFF')
|
|
544
|
+
*/
|
|
545
|
+
CssColorParser.parseHEX = function (v) {
|
|
546
|
+
var cssStr = CssColorStringParser.clearStrSpace(v);
|
|
547
|
+
var res = CssColorStringParser.parse3BitsHEX(cssStr);
|
|
548
|
+
if (!res) {
|
|
549
|
+
res = CssColorStringParser.parse6BitsHEX(cssStr);
|
|
550
|
+
}
|
|
551
|
+
return res && CssColorParser.fromArray(res);
|
|
552
|
+
};
|
|
553
|
+
/**
|
|
554
|
+
* @description: 解析rgba、rgb颜色
|
|
555
|
+
* @param {string} v
|
|
556
|
+
* @return {CssColorParser}
|
|
557
|
+
* @example: CssColorParser.parseRGBA('rgba(255,255,255,1)')
|
|
558
|
+
*/
|
|
559
|
+
CssColorParser.parseRGBA = function (v) {
|
|
560
|
+
var cssStr = CssColorStringParser.clearStrSpace(v);
|
|
561
|
+
var res = CssColorStringParser.parseRGBA(cssStr);
|
|
562
|
+
if (!res) {
|
|
563
|
+
var cssStr2 = CssColorStringParser.trimStr(v);
|
|
564
|
+
res = CssColorStringParser.parseRGBA2(cssStr2);
|
|
565
|
+
}
|
|
566
|
+
return res && CssColorParser.fromArray(res);
|
|
567
|
+
};
|
|
568
|
+
/**
|
|
569
|
+
* @description: 将ColorJson格式的json数据转换为解析对象
|
|
570
|
+
* @param {ColorJson} json
|
|
571
|
+
* @return {CssColorParser}
|
|
572
|
+
* @example: CssColorParser.fromJson({r: 255, g: 255, b: 255, a: 1})
|
|
573
|
+
*/
|
|
574
|
+
CssColorParser.fromJson = function (json) {
|
|
575
|
+
return new CssColorParser(json.r, json.g, json.b, json.a);
|
|
576
|
+
};
|
|
577
|
+
/**
|
|
578
|
+
* @description: 将RGBA数组转换为解析对象
|
|
579
|
+
* @param {Array} color
|
|
580
|
+
* @return {CssColorParser}
|
|
581
|
+
* @example: CssColorParser.fromArray([255,255,255,1])
|
|
582
|
+
*/
|
|
583
|
+
CssColorParser.fromArray = function (color) {
|
|
584
|
+
return new CssColorParser(color[0], color[1], color[2], color[3]);
|
|
585
|
+
};
|
|
586
|
+
/**
|
|
587
|
+
* @description: 产生随机颜色
|
|
588
|
+
* @return {CssColorParser}
|
|
589
|
+
* @example: CssColorParser.fromRandom(new CssColorParser(0,0,0,0), new CssColorParser(255,255,255,1))
|
|
590
|
+
*/
|
|
591
|
+
CssColorParser.fromRandom = function (color1, color2) {
|
|
592
|
+
var r = Math.random() * Math.abs(color2.r - color1.r) +
|
|
593
|
+
Math.min(color1.r, color2.r);
|
|
594
|
+
var g = Math.random() * Math.abs(color2.g - color1.g) +
|
|
595
|
+
Math.min(color1.g, color2.g);
|
|
596
|
+
var b = Math.random() * Math.abs(color2.b - color1.b) +
|
|
597
|
+
Math.min(color1.b, color2.b);
|
|
598
|
+
var a = Math.random() * Math.abs(color2.a - color1.a) +
|
|
599
|
+
Math.min(color1.a, color2.a);
|
|
600
|
+
return new CssColorParser(r, g, b, a);
|
|
601
|
+
};
|
|
602
|
+
/**
|
|
603
|
+
* @description: 颜色序列化数组转换为CssColorParser对象实例
|
|
604
|
+
* @param {array} colorArr
|
|
605
|
+
* @example: CssColorParser.fromNormaliz([1, 0, 0, 1])
|
|
606
|
+
*/
|
|
607
|
+
CssColorParser.fromNormalize = function (colorArr) {
|
|
608
|
+
var r = colorArr[0] * 255;
|
|
609
|
+
var g = colorArr[1] * 255;
|
|
610
|
+
var b = colorArr[2] * 255;
|
|
611
|
+
var a = colorArr[3];
|
|
612
|
+
return CssColorParser.fromArray([r, g, b, a]);
|
|
613
|
+
};
|
|
614
|
+
return CssColorParser;
|
|
615
|
+
}());
|
|
616
|
+
|
|
617
|
+
/******************************************************************************
|
|
618
|
+
Copyright (c) Microsoft Corporation.
|
|
619
|
+
|
|
620
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
621
|
+
purpose with or without fee is hereby granted.
|
|
622
|
+
|
|
623
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
624
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
625
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
626
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
627
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
628
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
629
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
630
|
+
***************************************************************************** */
|
|
631
|
+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
632
|
+
|
|
633
|
+
var extendStatics = function(d, b) {
|
|
634
|
+
extendStatics = Object.setPrototypeOf ||
|
|
635
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
636
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
637
|
+
return extendStatics(d, b);
|
|
638
|
+
};
|
|
639
|
+
|
|
640
|
+
function __extends(d, b) {
|
|
641
|
+
if (typeof b !== "function" && b !== null)
|
|
642
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
643
|
+
extendStatics(d, b);
|
|
644
|
+
function __() { this.constructor = d; }
|
|
645
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
649
|
+
var e = new Error(message);
|
|
650
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
651
|
+
};
|
|
652
|
+
|
|
653
|
+
var CssColorParserPlus = /** @class */ (function (_super) {
|
|
654
|
+
__extends(CssColorParserPlus, _super);
|
|
655
|
+
function CssColorParserPlus() {
|
|
656
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* @description: 返回取反色后的新的实例
|
|
660
|
+
* @return {CssColorParserPlus}
|
|
661
|
+
*/
|
|
662
|
+
CssColorParserPlus.prototype.toInvert = function () {
|
|
663
|
+
var r = 255 - this.r;
|
|
664
|
+
var g = 255 - this.g;
|
|
665
|
+
var b = 255 - this.b;
|
|
666
|
+
var a = 1 - this.a;
|
|
667
|
+
return new CssColorParserPlus(r, g, b, a);
|
|
668
|
+
};
|
|
669
|
+
/**
|
|
670
|
+
* @description: 拷贝
|
|
671
|
+
* @return {CssColorParserPlus}
|
|
672
|
+
*/
|
|
673
|
+
CssColorParserPlus.prototype.clone = function () {
|
|
674
|
+
return new CssColorParserPlus(this.r, this.g, this.b, this.a);
|
|
675
|
+
};
|
|
676
|
+
/**
|
|
677
|
+
* @description: 比较两个解析对象的数据是否相等
|
|
678
|
+
* @param {string} color
|
|
679
|
+
* @return {boolean}
|
|
680
|
+
*/
|
|
681
|
+
CssColorParserPlus.prototype.equals = function (color) {
|
|
682
|
+
color = CssColorParserPlus.parseColor(color);
|
|
683
|
+
if (this === color) {
|
|
684
|
+
return true;
|
|
685
|
+
}
|
|
686
|
+
else {
|
|
687
|
+
var json1 = this.toJson();
|
|
688
|
+
var json2 = color.toJson();
|
|
689
|
+
return (json1.r === json2.r &&
|
|
690
|
+
json1.g === json2.g &&
|
|
691
|
+
json1.b === json2.g &&
|
|
692
|
+
json1.a === json2.a);
|
|
693
|
+
}
|
|
694
|
+
};
|
|
695
|
+
/**
|
|
696
|
+
* @description: 实例相加
|
|
697
|
+
* @param {CssColorParser} colorParser
|
|
698
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
699
|
+
* @return {CssColorParser}
|
|
700
|
+
*/
|
|
701
|
+
CssColorParserPlus.prototype.add = function (color, isSetAlpha) {
|
|
702
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
703
|
+
var colorParser = CssColorParserPlus.parseColor(color);
|
|
704
|
+
return _super.prototype.add.call(this, colorParser, isSetAlpha);
|
|
705
|
+
};
|
|
706
|
+
/**
|
|
707
|
+
* @description: 实例相减
|
|
708
|
+
* @param {CssColorParser} colorParser
|
|
709
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
710
|
+
* @return {CssColorParser}
|
|
711
|
+
*/
|
|
712
|
+
CssColorParserPlus.prototype.subtract = function (color, isSetAlpha) {
|
|
713
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
714
|
+
var colorParser = CssColorParserPlus.parseColor(color);
|
|
715
|
+
return _super.prototype.subtract.call(this, colorParser, isSetAlpha);
|
|
716
|
+
};
|
|
717
|
+
/**
|
|
718
|
+
* @description: 实例相乘
|
|
719
|
+
* @param {CssColorParser} colorParser
|
|
720
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
721
|
+
* @return {CssColorParser}
|
|
722
|
+
*/
|
|
723
|
+
CssColorParserPlus.prototype.multiply = function (color, isSetAlpha) {
|
|
724
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
725
|
+
var colorParser = CssColorParserPlus.parseColor(color);
|
|
726
|
+
return _super.prototype.multiply.call(this, colorParser, isSetAlpha);
|
|
727
|
+
};
|
|
728
|
+
/**
|
|
729
|
+
* @description: 实例相除
|
|
730
|
+
* @param {CssColorParser} colorParser
|
|
731
|
+
* @param {boolean} isSetAlpha 透明度值是否参与计算(默认:是)
|
|
732
|
+
* @return {CssColorParser}
|
|
733
|
+
*/
|
|
734
|
+
CssColorParserPlus.prototype.divide = function (color, isSetAlpha) {
|
|
735
|
+
if (isSetAlpha === void 0) { isSetAlpha = true; }
|
|
736
|
+
var colorParser = CssColorParserPlus.parseColor(color);
|
|
737
|
+
return _super.prototype.divide.call(this, colorParser, isSetAlpha);
|
|
738
|
+
};
|
|
739
|
+
/**
|
|
740
|
+
* @description: 解析css颜色
|
|
741
|
+
* @param {string} v
|
|
742
|
+
* @return {CssColorParserPlus}
|
|
743
|
+
* @example: parseCssColorStr('rgba(255,255,255,1)')
|
|
744
|
+
*/
|
|
745
|
+
CssColorParserPlus.parseColor = function (v) {
|
|
746
|
+
if (v instanceof CssColorParser) {
|
|
747
|
+
return v;
|
|
748
|
+
}
|
|
749
|
+
return CssColorParserPlus.parseCssColorStr(v);
|
|
750
|
+
};
|
|
751
|
+
/**
|
|
752
|
+
* @description: 将css字符串转换为解析对象
|
|
753
|
+
* @param {string} v
|
|
754
|
+
* @return {CssColorParserPlus}
|
|
755
|
+
* @example: parseCssColorStr('rgba(255,255,255,1)')
|
|
756
|
+
*/
|
|
757
|
+
CssColorParserPlus.parseCssColorStr = function (v) {
|
|
758
|
+
Check.type('color', v, 'string');
|
|
759
|
+
return (CssColorParserPlus.parseHEX(v) ||
|
|
760
|
+
CssColorParserPlus.parseRGBA(v) ||
|
|
761
|
+
CssColorParserPlus.parseKeyWord(v) ||
|
|
762
|
+
CssColorParserPlus.parseHSLA(v) ||
|
|
763
|
+
CssColorParserPlus.parseHWB(v));
|
|
764
|
+
};
|
|
765
|
+
/**
|
|
766
|
+
* @description: 解析颜色关键字
|
|
767
|
+
* @param {string} v
|
|
768
|
+
* @return {CssColorParserPlus}
|
|
769
|
+
* @example: parseKeyWord('red')
|
|
770
|
+
*/
|
|
771
|
+
CssColorParserPlus.parseKeyWord = function (v) {
|
|
772
|
+
var cssStr = CssColorStringParser.clearStrSpace(v);
|
|
773
|
+
var res = convert.keyword.rgb(cssStr);
|
|
774
|
+
return res && CssColorParserPlus.fromArray(res);
|
|
775
|
+
};
|
|
776
|
+
/**
|
|
777
|
+
* @description: 解析HSLA
|
|
778
|
+
* @param {string} v
|
|
779
|
+
* @return {CssColorParserPlus}
|
|
780
|
+
* @example: parseHSLA('hsla(215,85%,62%,0.8)')
|
|
781
|
+
*/
|
|
782
|
+
CssColorParserPlus.parseHSLA = function (v) {
|
|
783
|
+
var cssStr = CssColorStringParser.clearStrSpace(v);
|
|
784
|
+
var res = CssColorStringParser.parseHSLA(cssStr);
|
|
785
|
+
if (!res) {
|
|
786
|
+
var cssStr2 = CssColorStringParser.trimStr(v);
|
|
787
|
+
res = CssColorStringParser.parseHSLA2(cssStr2);
|
|
788
|
+
}
|
|
789
|
+
return res && CssColorParserPlus.fromHSL(res[0], res[1], res[2], res[3]);
|
|
790
|
+
};
|
|
791
|
+
/**
|
|
792
|
+
* @description: 解析HWB
|
|
793
|
+
* @param {string} v
|
|
794
|
+
* @return {CssColorParserPlus}
|
|
795
|
+
* @example: parseHWB('hwb(215deg 30% 6% / 80%)')
|
|
796
|
+
*/
|
|
797
|
+
CssColorParserPlus.parseHWB = function (v) {
|
|
798
|
+
var cssStr2 = CssColorStringParser.trimStr(v);
|
|
799
|
+
var res = CssColorStringParser.parseHWB(cssStr2);
|
|
800
|
+
return res && CssColorParserPlus.fromHWB(res[0], res[1], res[2], res[3]);
|
|
801
|
+
};
|
|
802
|
+
/**
|
|
803
|
+
* @description: 将HSL色彩模式转换为解析对象
|
|
804
|
+
* @param {number} hue 色相
|
|
805
|
+
* @param {number} saturation 饱和度
|
|
806
|
+
* @param {number} lightness 亮度
|
|
807
|
+
* @param {number} alpha 不透明度
|
|
808
|
+
* @return {CssColorParserPlus}
|
|
809
|
+
* @example: fromHSL(0,1,1,1)
|
|
810
|
+
*/
|
|
811
|
+
CssColorParserPlus.fromHSL = function (h, s, l, a) {
|
|
812
|
+
var res = convert.hsl.rgb(limitNumber(0, 360, h), limitNumber(0, 100, s * 100), limitNumber(0, 100, l * 100));
|
|
813
|
+
return new CssColorParserPlus(res[0], res[1], res[2], defaultValue(Number(a), 1));
|
|
814
|
+
};
|
|
815
|
+
/**
|
|
816
|
+
* @description: 将HWB色彩模式转换为解析对象
|
|
817
|
+
* @param {number} h 色调
|
|
818
|
+
* @param {number} w 白度
|
|
819
|
+
* @param {number} b 黑度
|
|
820
|
+
* @param {number} a 不透明度
|
|
821
|
+
* @return {CssColorParserPlus}
|
|
822
|
+
* @example: fromHSL(0,1,1,1)
|
|
823
|
+
*/
|
|
824
|
+
CssColorParserPlus.fromHWB = function (h, w, b, a) {
|
|
825
|
+
var res = convert.hwb.rgb(limitNumber(0, 360, h), limitNumber(0, 100, w * 100), limitNumber(0, 100, b * 100));
|
|
826
|
+
return new CssColorParserPlus(res[0], res[1], res[2], defaultValue(Number(a), 1));
|
|
827
|
+
};
|
|
828
|
+
/**
|
|
829
|
+
* @description: 解析16进制颜色
|
|
830
|
+
* @param {string} v
|
|
831
|
+
* @return {CssColorParserPlus}
|
|
832
|
+
* @example: CssColorParserPlus.parseHEX('#FFF')
|
|
833
|
+
*/
|
|
834
|
+
CssColorParserPlus.parseHEX = function (v) {
|
|
835
|
+
var cssStr = CssColorStringParser.clearStrSpace(v);
|
|
836
|
+
var res = CssColorStringParser.parse3BitsHEX(cssStr);
|
|
837
|
+
if (!res) {
|
|
838
|
+
res = CssColorStringParser.parse6BitsHEX(cssStr);
|
|
839
|
+
}
|
|
840
|
+
return res && CssColorParserPlus.fromArray(res);
|
|
841
|
+
};
|
|
842
|
+
/**
|
|
843
|
+
* @description: 解析rgba、rgb颜色
|
|
844
|
+
* @param {string} v
|
|
845
|
+
* @return {CssColorParserPlus}
|
|
846
|
+
* @example: CssColorParserPlus.parseRGBA('rgba(255,255,255,1)')
|
|
847
|
+
*/
|
|
848
|
+
CssColorParserPlus.parseRGBA = function (v) {
|
|
849
|
+
var cssStr = CssColorStringParser.clearStrSpace(v);
|
|
850
|
+
var res = CssColorStringParser.parseRGBA(cssStr);
|
|
851
|
+
if (!res) {
|
|
852
|
+
var cssStr2 = CssColorStringParser.trimStr(v);
|
|
853
|
+
res = CssColorStringParser.parseRGBA2(cssStr2);
|
|
854
|
+
}
|
|
855
|
+
return res && CssColorParserPlus.fromArray(res);
|
|
856
|
+
};
|
|
857
|
+
/**
|
|
858
|
+
* @description: 将ColorJson格式的json数据转换为解析对象
|
|
859
|
+
* @param {ColorJson} json
|
|
860
|
+
* @return {CssColorParserPlus}
|
|
861
|
+
* @example: CssColorParserPlus.fromJson({r: 255, g: 255, b: 255, a: 1})
|
|
862
|
+
*/
|
|
863
|
+
CssColorParserPlus.fromJson = function (json) {
|
|
864
|
+
return new CssColorParserPlus(json.r, json.g, json.b, json.a);
|
|
865
|
+
};
|
|
866
|
+
/**
|
|
867
|
+
* @description: 将RGBA数组转换为解析对象
|
|
868
|
+
* @param {Array} color
|
|
869
|
+
* @return {CssColorParserPlus}
|
|
870
|
+
* @example: CssColorParserPlus.fromArray([255,255,255,1])
|
|
871
|
+
*/
|
|
872
|
+
CssColorParserPlus.fromArray = function (color) {
|
|
873
|
+
return new CssColorParserPlus(color[0], color[1], color[2], color[3]);
|
|
874
|
+
};
|
|
875
|
+
/**
|
|
876
|
+
* @description: 产生随机颜色
|
|
877
|
+
* @return {CssColorParserPlus}
|
|
878
|
+
* @example: CssColorParserPlus.fromRandom('black', new CssColorParserPlus(255,255,255,1))
|
|
879
|
+
*/
|
|
880
|
+
CssColorParserPlus.fromRandom = function (color1, color2) {
|
|
881
|
+
color1 = CssColorParserPlus.parseColor(color1);
|
|
882
|
+
color2 = CssColorParserPlus.parseColor(color2);
|
|
883
|
+
var r = Math.random() * Math.abs(color2.r - color1.r) +
|
|
884
|
+
Math.min(color1.r, color2.r);
|
|
885
|
+
var g = Math.random() * Math.abs(color2.g - color1.g) +
|
|
886
|
+
Math.min(color1.g, color2.g);
|
|
887
|
+
var b = Math.random() * Math.abs(color2.b - color1.b) +
|
|
888
|
+
Math.min(color1.b, color2.b);
|
|
889
|
+
var a = Math.random() * Math.abs(color2.a - color1.a) +
|
|
890
|
+
Math.min(color1.a, color2.a);
|
|
891
|
+
return new CssColorParserPlus(r, g, b, a);
|
|
892
|
+
};
|
|
893
|
+
/**
|
|
894
|
+
* @description: 颜色序列化数组转换为CssColorParserPlus对象实例
|
|
895
|
+
* @param {array} colorArr
|
|
896
|
+
* @example: CssColorParserPlus.fromNormaliz([1, 0, 0, 1])
|
|
897
|
+
*/
|
|
898
|
+
CssColorParserPlus.fromNormalize = function (colorArr) {
|
|
899
|
+
var r = colorArr[0] * 255;
|
|
900
|
+
var g = colorArr[1] * 255;
|
|
901
|
+
var b = colorArr[2] * 255;
|
|
902
|
+
var a = colorArr[3];
|
|
903
|
+
return CssColorParserPlus.fromArray([r, g, b, a]);
|
|
904
|
+
};
|
|
905
|
+
/**
|
|
906
|
+
* @description: 获取颜色插值
|
|
907
|
+
* @param opt ColorLerpOpt
|
|
908
|
+
* @param value number
|
|
909
|
+
* @returns {CssColorParserPlus}
|
|
910
|
+
* @example: CssColorParserPlus.lerp({0: "rgba(255, 255, 0, 1)",0.5: "rgba(0, 255, 0, 1)",1: "rgba(255, 0, 0, 1)"}, 0.8)
|
|
911
|
+
*/
|
|
912
|
+
CssColorParserPlus.lerp = function (opt, value) {
|
|
913
|
+
var keys = Object.keys(opt).map(function (k) { return Number(k); });
|
|
914
|
+
keys.sort(function (a, b) { return a - b; });
|
|
915
|
+
for (var i = 0; i < keys.length; i++) {
|
|
916
|
+
if (value <= keys[i]) {
|
|
917
|
+
var last = keys[i - 1];
|
|
918
|
+
var next = keys[i];
|
|
919
|
+
if (last === undefined) {
|
|
920
|
+
return CssColorParserPlus.parseColor(opt[next]);
|
|
921
|
+
}
|
|
922
|
+
else {
|
|
923
|
+
var ratio = (value - last) / (next - last);
|
|
924
|
+
var color1 = CssColorParserPlus.parseColor(opt[last]);
|
|
925
|
+
var color2 = CssColorParserPlus.parseColor(opt[next]);
|
|
926
|
+
return color2.subtract(color1).multiplyByScalar(ratio).add(color1);
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
return CssColorParserPlus.parseColor(opt[keys[keys.length - 1]]).limitColor();
|
|
931
|
+
};
|
|
932
|
+
return CssColorParserPlus;
|
|
933
|
+
}(CssColorParser));
|
|
934
|
+
|
|
935
|
+
exports.CssColorParser = CssColorParser;
|
|
936
|
+
exports.CssColorParserPlus = CssColorParserPlus;
|