-
Notifications
You must be signed in to change notification settings - Fork 89
/
formatValues.js
77 lines (61 loc) · 2.2 KB
/
formatValues.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
var formatTransforms = require('./formatTransforms')
var formatColors = require('./formatColors')
function formatvalues (decl, stylelint) {
var isDataUrl = /data:.+\/(.+);base64,(.*)/.test(decl.value)
var isVarNotation = /var\s*\(.*\)/.test(decl.value)
var isString = /^("|').*("|')$/.test(decl.value)
var isFunctionCall = /\w+\(.+\)/.test(decl.value)
var zeroWithUnitRegex = /^0[\.0]*(?:px|r?em|ex|ch|vh|vw|cm|mm|in|pt|pc|vmin|vmax)/g
if (decl.raws.value) {
decl.raws.value.raw = decl.raws.value.raw.trim()
}
if (!isString) {
decl.value = decl.value.trim().replace(/\s+/g, ' ')
}
if (stylelint && stylelint['string-quotes']) {
if (stylelint['string-quotes'] === 'double') {
decl.value = decl.value.replace(/'/g, '"')
} else if (stylelint['string-quotes'] === 'single') {
decl.value = decl.value.replace(/"/g, '\'')
}
}
if (decl.prop === 'content') {
return decl
}
if (decl.prop === 'font-family') {
decl.value = decl.value.trim().replace(/\s+,\s/g, ', ')
return decl
}
if (!isDataUrl) {
// Remove spaces before commas and keep only one space after.
decl.value = decl.value.trim().replace(/(\s+)?,(\s)*/g, ', ')
}
if (isVarNotation) {
decl.value = decl.value.replace(/var\s*\(\s*/g, 'var(')
decl.value = decl.value.replace(/\s*\)/g, ')')
}
if (!isFunctionCall) {
// format math operators before `$` or `(`.
decl.value = decl.value.replace(/(?!^)[+\-*%](?=\$|\()/g, ' $& ')
// don't format "/" from a "font" shorthand property.
if (decl.prop !== 'font') {
decl.value = decl.value.replace(/\/(?=\$|\(|\d)/g, ' $& ')
}
// format "-" if it is between numbers
decl.value = decl.value.replace(/\d+-(?=\d)/g, function(value) {
return value.replace(/-/g, ' $& ')
})
}
decl.value = decl.value.replace(/\(\s*/g, '(')
decl.value = decl.value.replace(/\s*\)/g, ')')
if (stylelint && stylelint['length-zero-no-unit'] === true) {
decl.value = decl.value.replace(zeroWithUnitRegex, '0')
}
decl.value = formatColors(decl.value, stylelint)
decl.value = formatTransforms(decl.value)
if (decl.important) {
decl.raws.important = " !important"
}
return decl
}
module.exports = formatvalues