Skip to content

Commit caa6a4f

Browse files
authored
Fix parsing flex-basis in shorthand flex
Fixes the case in the flex shorthand where the third value isn't an explicit value or dimension, which was causing a parse error when called with (e.g.) `flex: 0 0 auto`. Closes #246.
1 parent 79811e2 commit caa6a4f

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

lib/properties/flex.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,15 @@ module.exports.parse = function parse(v, opt = {}) {
5353
return name;
5454
}
5555
case "Identifier": {
56-
if (name === "auto") {
57-
flex["flex-basis"] = name;
58-
return flex;
59-
} else if (name === "none") {
56+
if (name === "none") {
6057
return {
6158
"flex-grow": "0",
6259
"flex-shrink": "0",
6360
"flex-basis": "auto"
6461
};
6562
}
66-
break;
63+
flex["flex-basis"] = name;
64+
return flex;
6765
}
6866
case "Number": {
6967
flex["flex-grow"] = itemValue;
@@ -92,7 +90,9 @@ module.exports.parse = function parse(v, opt = {}) {
9290
} else {
9391
return;
9492
}
95-
if (val3.type === "Calc" && !val3.isNumber) {
93+
if (val3.type === "GlobalKeyword" || val3.type === "Identifier") {
94+
flex["flex-basis"] = val3.name;
95+
} else if (val3.type === "Calc" && !val3.isNumber) {
9696
flex["flex-basis"] = `${val3.name}(${val3.value})`;
9797
} else if (val3.type === "Dimension") {
9898
flex["flex-basis"] = `${val3.value}${val3.unit}`;
@@ -123,6 +123,10 @@ module.exports.parse = function parse(v, opt = {}) {
123123
flex["flex-basis"] = `${val2.value}%`;
124124
break;
125125
}
126+
case "Identifier": {
127+
flex["flex-basis"] = val2.name;
128+
break;
129+
}
126130
default: {
127131
return;
128132
}

test/CSSStyleDeclaration.test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,18 @@ describe("CSSStyleDeclaration", () => {
11431143
assert.strictEqual(style.getPropertyValue("flex-shrink"), "1");
11441144
assert.strictEqual(style.getPropertyValue("flex-basis"), "250px");
11451145
style.removeProperty("flex");
1146+
style.setProperty("flex", "0 0 auto");
1147+
assert.strictEqual(style.getPropertyValue("flex"), "0 0 auto");
1148+
assert.strictEqual(style.getPropertyValue("flex-grow"), "0");
1149+
assert.strictEqual(style.getPropertyValue("flex-shrink"), "0");
1150+
assert.strictEqual(style.getPropertyValue("flex-basis"), "auto");
1151+
style.removeProperty("flex");
1152+
style.setProperty("flex", "0 auto");
1153+
assert.strictEqual(style.getPropertyValue("flex"), "0 1 auto");
1154+
assert.strictEqual(style.getPropertyValue("flex-grow"), "0");
1155+
assert.strictEqual(style.getPropertyValue("flex-shrink"), "1");
1156+
assert.strictEqual(style.getPropertyValue("flex-basis"), "auto");
1157+
style.removeProperty("flex");
11461158
style.setProperty("flex", "2");
11471159
assert.strictEqual(style.getPropertyValue("flex-grow"), "2");
11481160
assert.strictEqual(style.getPropertyValue("flex-shrink"), "1");

0 commit comments

Comments
 (0)