fix: output color adjusters (#4494)

master
Evilebot Tnawi 2018-05-29 15:24:38 +03:00 committed by GitHub
parent c7d40b0ed9
commit 3d60871458
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 428 additions and 5 deletions

View File

@ -64,7 +64,8 @@ const {
isRightCurlyBraceNode,
isWordNode,
isColonNode,
isMediaAndSupportsKeywords
isMediaAndSupportsKeywords,
isColorAdjusterFuncNode
} = require("./utils");
function shouldPrintComma(options) {
@ -415,6 +416,7 @@ function genericPrint(path, options, print) {
}
case "value-comma_group": {
const parentNode = path.getParentNode();
const parentParentNode = path.getParentNode(1);
const declAncestorProp = getPropOfDeclNode(path);
const isGridValue =
declAncestorProp &&
@ -540,6 +542,15 @@ function genericPrint(path, options, print) {
continue;
}
// Print spaces after `+` and `-` in color adjuster functions as is (i.e. `color(red l(+ 20%))`)
// Invalid syntax (i.e. `color(red l(+20%))`) output as is
const isColorAdjusterNode =
(isAdditionNode(iNode) || isSubtractionNode(iNode)) &&
i === 0 &&
(iNextNode.type === "value-number" || iNextNode.isHex) &&
(parentParentNode && isColorAdjusterFuncNode(parentParentNode)) &&
!hasEmptyRawBefore(iNextNode);
const requireSpaceBeforeOperator =
(iNextNextNode && iNextNextNode.type === "value-func") ||
(iNextNextNode && isWordNode(iNextNextNode)) ||
@ -555,6 +566,7 @@ function genericPrint(path, options, print) {
if (
!(isMultiplicationNode(iNextNode) || isMultiplicationNode(iNode)) &&
!insideValueFunctionNode(path, "calc") &&
!isColorAdjusterNode &&
((isDivisionNode(iNextNode) && !requireSpaceBeforeOperator) ||
(isDivisionNode(iNode) && !requireSpaceAfterOperator) ||
(isAdditionNode(iNextNode) && !requireSpaceBeforeOperator) ||

View File

@ -2,6 +2,34 @@
const htmlTagNames = require("html-tag-names");
const colorAdjusterFunctions = [
"red",
"green",
"blue",
"alpha",
"a",
"rgb",
"hue",
"h",
"saturation",
"s",
"lightness",
"l",
"whiteness",
"w",
"blackness",
"b",
"tint",
"shade",
"blend",
"blenda",
"contrast",
"hsl",
"hsla",
"hwb",
"hwba"
];
function getAncestorCounter(path, typeOrTypes) {
const types = [].concat(typeOrTypes);
@ -346,6 +374,14 @@ function isMediaAndSupportsKeywords(node) {
);
}
function isColorAdjusterFuncNode(node) {
if (node.type !== "value-func") {
return false;
}
return colorAdjusterFunctions.indexOf(node.value.toLowerCase()) !== -1;
}
module.exports = {
getAncestorCounter,
getAncestorNode,
@ -389,5 +425,6 @@ module.exports = {
isRightCurlyBraceNode,
isWordNode,
isColonNode,
isMediaAndSupportsKeywords
isMediaAndSupportsKeywords,
isColorAdjusterFuncNode
};

View File

@ -1,12 +1,264 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`color-adjuster.css 1`] = `
.foo {
color: color(red l(+ 20%));
color: color(red w(+ 20%) s(+ 20%));
color: color(swopc, 0 206 190 77);
color: color(indigo, 24 160 86 42 0 18 31);
color: color(prophoto, 233 150 122);
color: color(P3, 97 253 36);
color: color(#eb8fa9 alpha(75%) blackness(20%));
color: color(red blue(20));
color: color(red blue(20%));
color: color(red green(+ 20));
color: color(red green(+ 20%));
color: color(red red(- 20));
color: color(red red(- 20%));
color: color(red red(- 128));
color: color(red alpha(- 50%));
color: color(red alpha(- .75));
color: color(red rgb(+ 0 255 0));
color: color(red rgb(+ #0f0));
color: color(red rgb(- 60% 0 0));
color: color(red rgb(- #900));
color: color(rebeccapurple rgb(* 1%));
color: color(red hue(20));
color: color(red hue(20deg));
color: color(red hue(+ 20));
color: color(red hue(+ 20deg));
color: color(red hue(- 20));
color: color(red hue(- 20deg));
color: color(red hue(* 20));
color: color(red hue(* 20deg));
color: color(red lightness(50%));
color: color(red lightness(20%));
color: color(red lightness(+ 20%));
color: color(red lightness(- 20%));
color: color(red lightness(* 1.5%));
color: color(beige saturation(20%));
color: color(beige saturation(+ 20%));
color: color(beige saturation(- 20%));
color: color(beige saturation(* 1.5%));
color: color(beige blackness(20%));
color: color(beige blackness(+ 20%));
color: color(beige blackness(- 1%));
color: color(beige blackness(* 20%));
color: color(beige whiteness(20%));
color: color(beige whiteness(+ 1%));
color: color(beige whiteness(- 20%));
color: color(beige whiteness(* .5%));
color: color(red);
color: color(red tint(0%));
color: color(red shade(0%));
color: color(red tint(100%));
color: color(red shade(100%));
color: color(red tint(20%));
color: color(red shade(20%));
color: color(yellow blend(red 50%));
color: color(yellow blend(red 50% rgb));
color: color(yellow blend(red 50% hsl));
color: color(yellow blend(red 50% hwb));
color: color(#937b19 contrast(25%));
color: color(hotpink blend(yellow 59%));
color: color(red);
color: color(color-mod(red));
color: color(color-mod(color-mod(red)));
color: color(#f00);
color: color(#f00f);
color: color(#ff0000);
color: color(#ff0000ff);
color: color(rgb(100% 0% 0%));
color: color(rgb(100% 0% 0% / 100%));
color: color(rgb(255, 0, 0));
color: color(rgb(255, 0, 0, 1));
color: color(rgba(255, 0, 0, 1));
color: color(hsl(0 100% 50%));
color: color(hsl(0 100% 50% / 100%));
color: color(hsl(0, 100%, 50%));
color: color(hsl(0, 100%, 50%, 1));
color: color(hsla(0, 100%, 50%, 1));
color: color(hwb(0 0 0));
color: color(hwb(0 0% 0%));
color: color(hwb(0 0% 0% / 100%));
color: color(0);
color: color(0deg);
color: color(0grad);
color: color(0rad);
color: color(beige);
color: color(beige hue(+ 0deg));
color: color(beige saturation(+ 0%));
color: color(beige lightness(+ 0%));
color: color(beige alpha(1));
color: color(beige alpha(+ 0));
color: color(beige alpha(+ 0%));
color: color(beige blend(beige 0% hsl));
color: color(red);
color: color(red tint(0%));
color: color(red shade(0%));
color: color(red tint(100%));
color: color(red shade(100%));
color: color(red tint(20%));
color: color(red shade(20%));
color: color(yellow blend(red 50%));
color: color(yellow blend(red 50% rgb));
color: color(yellow blend(red 50% hsl));
color: color(yellow blend(red 50% hwb));
color: color(yellow contrast(0%));
color: color(yellow contrast(25%));
color: color(yellow contrast(50%));
color: color(yellow contrast(75%));
color: color(yellow contrast(100%));
color: color(color-mod(0deg blue(10%)) rgb(+ 0 10 0) hue(+ 10deg) tint(10%) lightness(+ 10%) saturation(+ 10%) blend(rebeccapurple 50%));
color: color(var(--color));
color: color(var(--color) l(+ 20%));
color: color(red l(+20%)); /* interpreted as part of the number */
color: color(red l(-20%)); /* interpreted as part of the number */
color: color(red hue(+20));
color: color(red hue(+20deg));
color: color(red hue(-20));
color: color(red hue(-20deg));
color: color(red hue(*20));
color: color(red hue(*20deg));
color: color(var(--highlightColor) blackness(+ 20%));
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.foo {
color: color(red l(+ 20%));
color: color(red w(+ 20%) s(+ 20%));
color: color(swopc, 0 206 190 77);
color: color(indigo, 24 160 86 42 0 18 31);
color: color(prophoto, 233 150 122);
color: color(P3, 97 253 36);
color: color(#eb8fa9 alpha(75%) blackness(20%));
color: color(red blue(20));
color: color(red blue(20%));
color: color(red green(+ 20));
color: color(red green(+ 20%));
color: color(red red(- 20));
color: color(red red(- 20%));
color: color(red red(- 128));
color: color(red alpha(- 50%));
color: color(red alpha(- 0.75));
color: color(red rgb(+ 0 255 0));
color: color(red rgb(+ #0f0));
color: color(red rgb(- 60% 0 0));
color: color(red rgb(- #900));
color: color(rebeccapurple rgb(* 1%));
color: color(red hue(20));
color: color(red hue(20deg));
color: color(red hue(+ 20));
color: color(red hue(+ 20deg));
color: color(red hue(- 20));
color: color(red hue(- 20deg));
color: color(red hue(* 20));
color: color(red hue(* 20deg));
color: color(red lightness(50%));
color: color(red lightness(20%));
color: color(red lightness(+ 20%));
color: color(red lightness(- 20%));
color: color(red lightness(* 1.5%));
color: color(beige saturation(20%));
color: color(beige saturation(+ 20%));
color: color(beige saturation(- 20%));
color: color(beige saturation(* 1.5%));
color: color(beige blackness(20%));
color: color(beige blackness(+ 20%));
color: color(beige blackness(- 1%));
color: color(beige blackness(* 20%));
color: color(beige whiteness(20%));
color: color(beige whiteness(+ 1%));
color: color(beige whiteness(- 20%));
color: color(beige whiteness(* 0.5%));
color: color(red);
color: color(red tint(0%));
color: color(red shade(0%));
color: color(red tint(100%));
color: color(red shade(100%));
color: color(red tint(20%));
color: color(red shade(20%));
color: color(yellow blend(red 50%));
color: color(yellow blend(red 50% rgb));
color: color(yellow blend(red 50% hsl));
color: color(yellow blend(red 50% hwb));
color: color(#937b19 contrast(25%));
color: color(hotpink blend(yellow 59%));
color: color(red);
color: color(color-mod(red));
color: color(color-mod(color-mod(red)));
color: color(#f00);
color: color(#f00f);
color: color(#ff0000);
color: color(#ff0000ff);
color: color(rgb(100% 0% 0%));
color: color(rgb(100% 0% 0% / 100%));
color: color(rgb(255, 0, 0));
color: color(rgb(255, 0, 0, 1));
color: color(rgba(255, 0, 0, 1));
color: color(hsl(0 100% 50%));
color: color(hsl(0 100% 50% / 100%));
color: color(hsl(0, 100%, 50%));
color: color(hsl(0, 100%, 50%, 1));
color: color(hsla(0, 100%, 50%, 1));
color: color(hwb(0 0 0));
color: color(hwb(0 0% 0%));
color: color(hwb(0 0% 0% / 100%));
color: color(0);
color: color(0deg);
color: color(0grad);
color: color(0rad);
color: color(beige);
color: color(beige hue(+ 0deg));
color: color(beige saturation(+ 0%));
color: color(beige lightness(+ 0%));
color: color(beige alpha(1));
color: color(beige alpha(+ 0));
color: color(beige alpha(+ 0%));
color: color(beige blend(beige 0% hsl));
color: color(red);
color: color(red tint(0%));
color: color(red shade(0%));
color: color(red tint(100%));
color: color(red shade(100%));
color: color(red tint(20%));
color: color(red shade(20%));
color: color(yellow blend(red 50%));
color: color(yellow blend(red 50% rgb));
color: color(yellow blend(red 50% hsl));
color: color(yellow blend(red 50% hwb));
color: color(yellow contrast(0%));
color: color(yellow contrast(25%));
color: color(yellow contrast(50%));
color: color(yellow contrast(75%));
color: color(yellow contrast(100%));
color: color(
color-mod(0deg blue(10%)) rgb(+ 0 10 0) hue(+ 10deg) tint(10%)
lightness(+ 10%) saturation(+ 10%) blend(rebeccapurple 50%)
);
color: color(var(--color));
color: color(var(--color) l(+ 20%));
color: color(red l(+20%)); /* interpreted as part of the number */
color: color(red l(-20%)); /* interpreted as part of the number */
color: color(red hue(+20));
color: color(red hue(+20deg));
color: color(red hue(-20));
color: color(red hue(-20deg));
color: color(red hue(* 20));
color: color(red hue(* 20deg));
color: color(var(--highlightColor) blackness(+ 20%));
}
`;
exports[`current-color.css 1`] = `
.foo {
border: 1px dashed currentColor;
border: 1px dashed currentcolor;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.foo {
border: 1px dashed currentColor;
border: 1px dashed currentcolor;
}
`;

View File

@ -0,0 +1,121 @@
.foo {
color: color(red l(+ 20%));
color: color(red w(+ 20%) s(+ 20%));
color: color(swopc, 0 206 190 77);
color: color(indigo, 24 160 86 42 0 18 31);
color: color(prophoto, 233 150 122);
color: color(P3, 97 253 36);
color: color(#eb8fa9 alpha(75%) blackness(20%));
color: color(red blue(20));
color: color(red blue(20%));
color: color(red green(+ 20));
color: color(red green(+ 20%));
color: color(red red(- 20));
color: color(red red(- 20%));
color: color(red red(- 128));
color: color(red alpha(- 50%));
color: color(red alpha(- .75));
color: color(red rgb(+ 0 255 0));
color: color(red rgb(+ #0f0));
color: color(red rgb(- 60% 0 0));
color: color(red rgb(- #900));
color: color(rebeccapurple rgb(* 1%));
color: color(red hue(20));
color: color(red hue(20deg));
color: color(red hue(+ 20));
color: color(red hue(+ 20deg));
color: color(red hue(- 20));
color: color(red hue(- 20deg));
color: color(red hue(* 20));
color: color(red hue(* 20deg));
color: color(red lightness(50%));
color: color(red lightness(20%));
color: color(red lightness(+ 20%));
color: color(red lightness(- 20%));
color: color(red lightness(* 1.5%));
color: color(beige saturation(20%));
color: color(beige saturation(+ 20%));
color: color(beige saturation(- 20%));
color: color(beige saturation(* 1.5%));
color: color(beige blackness(20%));
color: color(beige blackness(+ 20%));
color: color(beige blackness(- 1%));
color: color(beige blackness(* 20%));
color: color(beige whiteness(20%));
color: color(beige whiteness(+ 1%));
color: color(beige whiteness(- 20%));
color: color(beige whiteness(* .5%));
color: color(red);
color: color(red tint(0%));
color: color(red shade(0%));
color: color(red tint(100%));
color: color(red shade(100%));
color: color(red tint(20%));
color: color(red shade(20%));
color: color(yellow blend(red 50%));
color: color(yellow blend(red 50% rgb));
color: color(yellow blend(red 50% hsl));
color: color(yellow blend(red 50% hwb));
color: color(#937b19 contrast(25%));
color: color(hotpink blend(yellow 59%));
color: color(red);
color: color(color-mod(red));
color: color(color-mod(color-mod(red)));
color: color(#f00);
color: color(#f00f);
color: color(#ff0000);
color: color(#ff0000ff);
color: color(rgb(100% 0% 0%));
color: color(rgb(100% 0% 0% / 100%));
color: color(rgb(255, 0, 0));
color: color(rgb(255, 0, 0, 1));
color: color(rgba(255, 0, 0, 1));
color: color(hsl(0 100% 50%));
color: color(hsl(0 100% 50% / 100%));
color: color(hsl(0, 100%, 50%));
color: color(hsl(0, 100%, 50%, 1));
color: color(hsla(0, 100%, 50%, 1));
color: color(hwb(0 0 0));
color: color(hwb(0 0% 0%));
color: color(hwb(0 0% 0% / 100%));
color: color(0);
color: color(0deg);
color: color(0grad);
color: color(0rad);
color: color(beige);
color: color(beige hue(+ 0deg));
color: color(beige saturation(+ 0%));
color: color(beige lightness(+ 0%));
color: color(beige alpha(1));
color: color(beige alpha(+ 0));
color: color(beige alpha(+ 0%));
color: color(beige blend(beige 0% hsl));
color: color(red);
color: color(red tint(0%));
color: color(red shade(0%));
color: color(red tint(100%));
color: color(red shade(100%));
color: color(red tint(20%));
color: color(red shade(20%));
color: color(yellow blend(red 50%));
color: color(yellow blend(red 50% rgb));
color: color(yellow blend(red 50% hsl));
color: color(yellow blend(red 50% hwb));
color: color(yellow contrast(0%));
color: color(yellow contrast(25%));
color: color(yellow contrast(50%));
color: color(yellow contrast(75%));
color: color(yellow contrast(100%));
color: color(color-mod(0deg blue(10%)) rgb(+ 0 10 0) hue(+ 10deg) tint(10%) lightness(+ 10%) saturation(+ 10%) blend(rebeccapurple 50%));
color: color(var(--color));
color: color(var(--color) l(+ 20%));
color: color(red l(+20%)); /* interpreted as part of the number */
color: color(red l(-20%)); /* interpreted as part of the number */
color: color(red hue(+20));
color: color(red hue(+20deg));
color: color(red hue(-20));
color: color(red hue(-20deg));
color: color(red hue(*20));
color: color(red hue(*20deg));
color: color(var(--highlightColor) blackness(+ 20%));
}

View File

@ -1,3 +1,4 @@
.foo {
border: 1px dashed currentColor;
border: 1px dashed currentcolor;
}

View File

@ -33,7 +33,7 @@ color:var(--highlightColor);
}
a:hover{color :gray(255,50%) }
a:active{color : rebeccapurple }
a:any-link { color:color(var(--highlightColor) blackness(+20%)) }
a:any-link { color:color(var(--highlightColor) blackness(+ 20%)) }
/* font stuff */
h2 {font-variant-caps:small-caps;
@ -85,7 +85,7 @@ a:active {
color: rebeccapurple;
}
a:any-link {
color: color(var(--highlightColor) blackness(+20%));
color: color(var(--highlightColor) blackness(+ 20%));
}
/* font stuff */

View File

@ -30,7 +30,7 @@ color:var(--highlightColor);
}
a:hover{color :gray(255,50%) }
a:active{color : rebeccapurple }
a:any-link { color:color(var(--highlightColor) blackness(+20%)) }
a:any-link { color:color(var(--highlightColor) blackness(+ 20%)) }
/* font stuff */
h2 {font-variant-caps:small-caps;