var IGNORE_END_COMMENT_PATTERN = /\/\* clean\-css ignore:end \*\/$/;
var IGNORE_START_COMMENT_PATTERN = /^\/\* clean\-css ignore:start \*\//;
+
+var PAGE_MARGIN_BOXES = [
+ '@bottom-center',
+ '@bottom-left',
+ '@bottom-left-corner',
+ '@bottom-right',
+ '@bottom-right-corner',
+ '@left-bottom',
+ '@left-middle',
+ '@left-top',
+ '@right-bottom',
+ '@right-middle',
+ '@right-top',
+ '@top-center',
+ '@top-left',
+ '@top-left-corner',
+ '@top-right',
+ '@top-right-corner'
+];
+
+var EXTRA_PAGE_BOXES = [
+ '@footnote',
+ '@footnotes',
+ '@left',
+ '@page-float-bottom',
+ '@page-float-top',
+ '@right'
+];
+
var REPEAT_PATTERN = /^\[\s*\d+\s*\]$/;
var RULE_WORD_SEPARATOR_PATTERN = /[\s\(]/;
var TAIL_BROKEN_VALUE_PATTERN = /[\s|\}]*$/;
levels.push(level);
level = Level.RULE;
seekingValue = false;
+ } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && isPageMarginBox(buffer)) {
+ // open brace opening page-margin box at rule level, e.g. @page{@top-center{<--
+ serializedBuffer = buffer.join('').trim();
+ ruleTokens.push(ruleToken);
+ ruleToken = [Token.AT_RULE_BLOCK, [], []];
+ ruleToken[1].push([Token.AT_RULE_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+ newTokens.push(ruleToken);
+ newTokens = ruleToken[2];
+
+ levels.push(level);
+ level = Level.RULE;
+ buffer = [];
} else if (character == Marker.COLON && level == Level.RULE && !seekingValue) {
// colon at rule level, e.g. a{color:<--
serializedBuffer = buffer.join('').trim();
}
}
+function isPageMarginBox(buffer) {
+ var serializedBuffer = buffer.join('').trim();
+
+ return PAGE_MARGIN_BOXES.indexOf(serializedBuffer) > -1 || EXTRA_PAGE_BOXES.indexOf(serializedBuffer) > -1;
+}
+
function isRepeatToken(buffer) {
return REPEAT_PATTERN.test(buffer.join('') + Marker.CLOSE_SQUARE_BRACKET);
}
store(context, token);
store(context, semicolon(context, Breaks.AfterProperty, false));
break;
+ case Token.AT_RULE_BLOCK:
+ rules(context, token[1]);
+ store(context, openBrace(context, Breaks.AfterRuleBegins, true));
+ body(context, token[2]);
+ store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
+ break;
case Token.COMMENT:
store(context, token);
break;
'@page{margin:.5em}',
'@page{margin:.5em}'
],
+ '@page named': [
+ '@page :first{margin:.5em}',
+ '@page :first{margin:.5em}'
+ ],
+ '@page named with page-margin box': [
+ '@page :first{margin:10px;@top-center{content:"Page One"}padding:5px}',
+ '@page :first{margin:10px;@top-center{content:"Page One"}padding:5px}'
+ ],
'@supports': [
'@supports (display:flexbox){.flex{display:flexbox}}',
'@supports (display:flexbox){.flex{display:flexbox}}'
]
]
],
+ '@page named rule': [
+ '@page one{margin:10px}',
+ [
+ [
+ 'at-rule-block',
+ [
+ [
+ 'at-rule-block-scope',
+ '@page one',
+ [
+ [1, 0, undefined]
+ ]
+ ]
+ ],
+ [
+ [
+ 'property',
+ [
+ 'property-name',
+ 'margin',
+ [
+ [1, 10, undefined]
+ ]
+ ],
+ [
+ 'property-value',
+ '10px',
+ [
+ [1, 17, undefined]
+ ]
+ ]
+ ]
+
+ ]
+ ]
+ ]
+ ],
+ '@page named rule with page-margin box': [
+ '@page :first{margin:10px;@top-center{content:"Page One"}padding:5px}',
+ [
+ [
+ 'at-rule-block',
+ [
+ [
+ 'at-rule-block-scope',
+ '@page :first',
+ [
+ [1, 0, undefined]
+ ]
+ ]
+ ],
+ [
+ [
+ 'property',
+ [
+ 'property-name',
+ 'margin',
+ [
+ [1, 13, undefined]
+ ]
+ ],
+ [
+ 'property-value',
+ '10px',
+ [
+ [1, 20, undefined]
+ ]
+ ]
+ ],
+ [
+ 'at-rule-block',
+ [
+ [
+ 'at-rule-block-scope',
+ '@top-center',
+ [
+ [1, 25, undefined]
+ ]
+ ]
+ ],
+ [
+ [
+ 'property',
+ [
+ 'property-name',
+ 'content',
+ [
+ [1, 37, undefined]
+ ]
+ ],
+ [
+ 'property-value',
+ '"Page One"',
+ [
+ [1, 45, undefined]
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'property',
+ [
+ 'property-name',
+ 'padding',
+ [
+ [1, 56, undefined]
+ ]
+ ],
+ [
+ 'property-value',
+ '5px',
+ [
+ [1, 64, undefined]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ],
'media query': [
'@media (min-width:980px){}',
[