Skip to content

Commit 7272e95

Browse files
committed
Support color keywords
1 parent b79e0ec commit 7272e95

File tree

4 files changed

+34
-18
lines changed

4 files changed

+34
-18
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ Type: `boolean`<br>
6363
Required: `false`<br>
6464
Default: `false`
6565

66-
If you set true, only colors (hex, rgb, hsl, color keyword isn`t supported now) will be extracted from values.
66+
If you set true, only colors (hex, rgb, hsl, color keywords) will be extracted from values.
6767

6868

6969
See [PostCSS] docs for examples for your environment.

index.js

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1-
var postcss = require('postcss');
1+
var postcss = require('postcss'),
2+
colorName = Object.keys(require('color-name'));
23

34
module.exports = postcss.plugin('postcss-extract-value', function (opts) {
45
opts = opts || {};
56

67
// Cache RegExp
7-
var reCheck = /#\w+|rgba?|hsla?/;
8+
var reColorKeywords = new RegExp(colorName.join('|'));
9+
var reCheck = new RegExp(/#\w+|rgba?|hsla?/.source + '|' + reColorKeywords.source, 'g');
810
var reCSSVariable = /var\(-{2}\w{1}[\w+-]*/;
911
var reHex = /#(\w{6}|\w{3})/;
1012
var reRgb = /rgba?\([\d,.\s]+\)/;
1113
var reHls = /hsla?\(\s?[0-9]{1,3},\s?(([0-9]{1,3})+%,\s?){2}[0-9.]+\s?\)/;
1214
var reExtract = new RegExp(reHex.source + '|' + reRgb.source + '|' +
13-
reHls.source, 'g');
15+
reHls.source + '|' + reColorKeywords.source, 'g');
1416

1517
// Options
16-
var filterByProps = opts.filterByProps,
17-
onlyColor = opts.onlyColor;
18+
var filterByProps = opts.filterByProps;
19+
var onlyColor = opts.onlyColor;
1820

1921
function checkColor(value) {
2022
return reCheck.test(value);
@@ -23,6 +25,7 @@ module.exports = postcss.plugin('postcss-extract-value', function (opts) {
2325
function extractColor(value) {
2426
var resultArray = [];
2527
var result = [];
28+
2629
while ((result = reExtract.exec(value)) !== null) {
2730
resultArray.push(result[0]);
2831
}
@@ -44,18 +47,19 @@ module.exports = postcss.plugin('postcss-extract-value', function (opts) {
4447
function extractValue(decl, storePropsLink, valueFiltered) {
4548
var positionValue = storePropsLink.indexOf(valueFiltered) + 1;
4649
var variable = 'var(' + makeCSSVariable(decl.prop, positionValue) + ')';
47-
decl.value = decl.value.replace(valueFiltered, variable);
50+
51+
return decl.value.replace(valueFiltered, variable);
4852
}
4953

5054
return function (css) {
51-
var root = css.root(),
52-
storeProps = {},
53-
storePropsLink = {},
54-
checkColorFilter = true,
55-
checkPropFilter = true,
56-
valueFilteredList = [],
57-
valueFiltered = '',
58-
rootSel = null;
55+
var root = css.root();
56+
var storeProps = {};
57+
var storePropsLink = {};
58+
var checkColorFilter = true;
59+
var checkPropFilter = true;
60+
var valueFilteredList = [];
61+
var valueFiltered = '';
62+
var rootSel = null;
5963

6064
css.walkRules(function (rule) {
6165

@@ -90,7 +94,7 @@ module.exports = postcss.plugin('postcss-extract-value', function (opts) {
9094
storePropsLink.push(valueFiltered);
9195
}
9296

93-
extractValue(decl, storePropsLink, valueFiltered);
97+
decl.value = extractValue(decl, storePropsLink, valueFiltered);
9498
}
9599
}
96100
}

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "postcss-extract-value",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"description": "PostCSS plugin to extract values from css properties and put them into variables.",
55
"keywords": [
66
"postcss",
@@ -16,7 +16,8 @@
1616
},
1717
"homepage": "https://github.com/lutien/postcss-extract-value",
1818
"dependencies": {
19-
"postcss": "^5.0.21"
19+
"postcss": "^5.0.21",
20+
"color-name": "^1.1.1"
2021
},
2122
"devDependencies": {
2223
"ava": "^0.14.0",

test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,14 @@ test('several colors in one property', t => {
9898
}`;
9999
return run(t, input, output, { onlyColor: true });
100100
});
101+
102+
test('color keyword', t => {
103+
let input = `.foo {
104+
border: 1px solid black;
105+
}`;
106+
let output = `:root {
107+
--border-1: black;\n}\n.foo {
108+
border: 1px solid var(--border-1);
109+
}`;
110+
return run(t, input, output, { onlyColor: true });
111+
});

0 commit comments

Comments
 (0)