-
Notifications
You must be signed in to change notification settings - Fork 0
/
colorconvert.js
99 lines (87 loc) · 2.59 KB
/
colorconvert.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
Credits to http://www.javascripter.net/faq/hextorgb.htm
for the hex to rgb and rgb to hex conversion
*/
function toHex (n) {
n = parseInt(n, 10)
if (isNaN(n)) return '00'
n = Math.max(0, Math.min(n, 255))
return '0123456789ABCDEF'.charAt((n - n % 16) / 16)
+ '0123456789ABCDEF'.charAt(n % 16)
}
function convertRgbToHex (colordef) {
var components = colordef.substr(4, 12).split(',')
components
return `#${toHex(components[0])}${toHex(components[1])}${toHex(components[2])}`
}
function hexToR (h) { return parseInt((cutHex(h)).substring(0, 2), 16) }
function hexToG (h) { return parseInt((cutHex(h)).substring(2, 4), 16) }
function hexToB (h) { return parseInt((cutHex(h)).substring(4, 6), 16) }
function cutHex (h) { return (h.charAt(0) == '#') ? h.substring(1, 7) : h }
function convertHexToRgb (colordef) {
return `rgb(${hexToR(colordef)},${hexToG(colordef)},${hexToB(colordef)})`
}
function convertHexToRgbA (colordef) {
return `rgb(${hexToR(colordef)},${hexToG(colordef)},${hexToB(colordef)},1)`
}
function getRgbaOpacity (colordef) {
var components = colordef.substr(4, 16).split(',')
components
return parseFloat(components[3])
}
function convertColorMode (colordef, target) {
var currentcolordef = getColorMode(colordef)
if (currentcolordef === target) {
return colordef
} else {
switch (currentcolordef + 'to' + target) {
case 'hextorgb':
return convertHexToRgb(colordef)
case 'hextorgba':
return convertHexToRgbA(colordef)
case 'rgbtohex':
return convertRgbToHex(colordef)
case 'rgbtorgba':
return colordef.replace(')', ',1)')
default:
return colordef
}
}
}
function getColorMode (colordef) {
switch (colordef.replace(/#/, 'h').replace(/rgba/, 'o').substr(0, 1)) {
case 'h':
return 'hex'
case 'r':
return 'rgb'
case 'o':
return 'rgba'
default:
return colordef
}
return colordef
}
function colorsMatch (source, target) {
source = source.replace(/\s/g, '')
target = target.replace(/\s/g, '')
return convertColorMode(source, getColorMode(target)) === target
}
// extending chai
function addChaiColorConvert (chai, utils) {
var Assertion = chai.Assertion
Assertion.addMethod('color', function (color) {
var obj = this._obj
this.assert(
colorsMatch(obj, color)
, 'expected #{this} to be #{exp} but got #{act}'
, 'expected #{this} to not be #{act}'
, color // expected
, obj // actual
)
})
}
if (typeof exports === 'object' && exports) {
module.exports = {
colorconvert: addChaiColorConvert
}
}