Skip to content

Commit 1845473

Browse files
Merrifield, Jayfracmak
Merrifield, Jay
authored andcommitted
added support for calc wherever <length> is expected
1 parent 80f795c commit 1845473

File tree

5 files changed

+13
-3
lines changed

5 files changed

+13
-3
lines changed

src/css/Parser.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -712,14 +712,14 @@ Parser.prototype = function(){
712712

713713
/*
714714
* operator
715-
* : '/' S* | ',' S* | /( empty )/
715+
* : '/' S* | ',' S* | '*' S* | '-' S* /( empty )/
716716
* ;
717717
*/
718718

719719
var tokenStream = this._tokenStream,
720720
token = null;
721721

722-
if (tokenStream.match([Tokens.SLASH, Tokens.COMMA])){
722+
if (tokenStream.match([Tokens.SLASH, Tokens.COMMA, Tokens.STAR, Tokens.MINUS])){
723723
token = tokenStream.token();
724724
this._readWhitespace();
725725
}

src/css/ValidationTypes.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,11 @@ var ValidationTypes = {
121121
},
122122

123123
"<length>": function(part){
124-
return part.type == "length" || part.type == "number" || part.type == "integer" || part == "0";
124+
if (part.type == "function" && /^(?:\-(?:ms|moz|o|webkit)\-)?calc/i.test(part)){
125+
return true;
126+
}else{
127+
return part.type == "length" || part.type == "number" || part.type == "integer" || part == "0";
128+
}
125129
},
126130

127131
"<color>": function(part){

tests/css/CSSTokensTests.htm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ <h1>CSS Tokens Tests</h1>
420420
//regular CSS functions
421421
"rgb(255,0,1)" : [CSSTokens.FUNCTION, CSSTokens.NUMBER, CSSTokens.COMMA, CSSTokens.NUMBER, CSSTokens.COMMA, CSSTokens.NUMBER, CSSTokens.RPAREN],
422422
"counter(par-num,upper-roman)" : [CSSTokens.FUNCTION, CSSTokens.IDENT, CSSTokens.COMMA, CSSTokens.IDENT, CSSTokens.RPAREN],
423+
"calc(100% - 5px)" : [CSSTokens.FUNCTION, CSSTokens.PERCENTAGE, CSSTokens.S, CSSTokens.MINUS, CSSTokens.S, CSSTokens.LENGTH, CSSTokens.RPAREN],
423424

424425
//old-style IE filters - interpreted as bunch of tokens
425426
"alpha(opacity=50)" : [CSSTokens.FUNCTION, CSSTokens.IDENT, CSSTokens.EQUALS, CSSTokens.NUMBER, CSSTokens.RPAREN],

tests/css/TokenStream.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,7 @@
405405
//regular CSS functions
406406
"rgb(255,0,1)" : [CSSTokens.FUNCTION, CSSTokens.NUMBER, CSSTokens.COMMA, CSSTokens.NUMBER, CSSTokens.COMMA, CSSTokens.NUMBER, CSSTokens.RPAREN],
407407
"counter(par-num,upper-roman)" : [CSSTokens.FUNCTION, CSSTokens.IDENT, CSSTokens.COMMA, CSSTokens.IDENT, CSSTokens.RPAREN],
408+
"calc(100% - 5px)" : [CSSTokens.FUNCTION, CSSTokens.PERCENTAGE, CSSTokens.S, CSSTokens.MINUS, CSSTokens.S, CSSTokens.LENGTH, CSSTokens.RPAREN],
408409

409410
//old-style IE filters - interpreted as bunch of tokens
410411
"alpha(opacity=50)" : [CSSTokens.FUNCTION, CSSTokens.IDENT, CSSTokens.EQUALS, CSSTokens.NUMBER, CSSTokens.RPAREN],

tests/css/Validation.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,10 @@
492492
valid: [
493493
"1px",
494494
"1%",
495+
"calc(100% - 5px)",
496+
"calc(100% - 1em)",
497+
"calc(100%/6)",
498+
"calc(10%*6)",
495499
"inherit"
496500
],
497501

0 commit comments

Comments
 (0)