parserlib: container query
This commit is contained in:
parent
31177f1017
commit
484ff24950
|
@ -213,6 +213,9 @@ self.parserlib = (() => {
|
|||
'columns': 1,
|
||||
'contain': 'none | strict | content | [ size || layout || style || paint ]',
|
||||
'contain-intrinsic-size': 'none | <length>{1,2}',
|
||||
'container': '<container-name> [ / <container-type> ]?',
|
||||
'container-name': '<container-name>',
|
||||
'container-type': '<container-type>',
|
||||
'content': 'normal | none | <content-list> [ / <string> ]?',
|
||||
'content-visibility': 'visible | auto | hidden',
|
||||
'counter-increment': '<counter>',
|
||||
|
@ -880,6 +883,8 @@ self.parserlib = (() => {
|
|||
'<clip-path>': '<basic-shape> || <geometry-box>',
|
||||
'<color>': '<hex-color> | <named-color> | rgb( <rgb-color> ) | rgba( <rgb-color> ) | ' +
|
||||
'hsl( <hsl-color> ) | hsla( <hsl-color> ) | hwb( <hwb-color> )',
|
||||
'<container-name>': 'none | <custom-ident>+',
|
||||
'<container-type>': 'normal || [ size | inline-size ]',
|
||||
'<content-list>':
|
||||
'[ <string> | <image> | <attr> | ' +
|
||||
'content( text | before | after | first-letter | marker ) | ' +
|
||||
|
@ -1238,6 +1243,7 @@ self.parserlib = (() => {
|
|||
STRING: {},
|
||||
// at-keywords
|
||||
CHARSET_SYM: {text: '@charset'},
|
||||
CONTAINER_SYM: {text: '@container'},
|
||||
DOCUMENT_SYM: {text: ['@document', '@-moz-document']},
|
||||
FONT_FACE_SYM: {text: '@font-face'},
|
||||
FONT_PALETTE_VALUES_SYM: {text: '@font-palette-values'},
|
||||
|
@ -3618,6 +3624,26 @@ self.parserlib = (() => {
|
|||
this._ws();
|
||||
}
|
||||
|
||||
_container(start) {
|
||||
this._ws();
|
||||
const stream = this._tokenStream;
|
||||
const next = stream.get(true).value;
|
||||
let name;
|
||||
if (/^(\(|not)$/i.test(next)) {
|
||||
stream.unget();
|
||||
} else {
|
||||
name = next;
|
||||
stream.mustMatch(Tokens.S);
|
||||
}
|
||||
// TODO: write a proper condition parser
|
||||
const condition = stream.readDeclValue({omitComments: true, stopOn: ';{}'});
|
||||
stream.mustMatch(Tokens.LBRACE);
|
||||
this.fire({type: 'startcontainer', name, condition}, start);
|
||||
this._rulesetBlock(start);
|
||||
this.fire('endcontainer');
|
||||
this._ws();
|
||||
}
|
||||
|
||||
_supports(start) {
|
||||
const stream = this._tokenStream;
|
||||
this._ws();
|
||||
|
@ -4586,11 +4612,13 @@ self.parserlib = (() => {
|
|||
Object.assign(Parser.prototype, TYPES);
|
||||
Parser.prototype._readWhitespace = Parser.prototype._ws;
|
||||
|
||||
ParserRoute[Tokens.CONTAINER_SYM] = // we don't allow @document inside @container
|
||||
ParserRoute[Tokens.DOCUMENT_SYM] =
|
||||
ParserRoute[Tokens.LAYER_SYM] =
|
||||
ParserRoute[Tokens.MEDIA_SYM] =
|
||||
ParserRoute[Tokens.SUPPORTS_SYM] = {
|
||||
[Tokens.DOCUMENT_SYM]: Parser.prototype._documentMisplaced,
|
||||
[Tokens.CONTAINER_SYM]: Parser.prototype._container,
|
||||
[Tokens.FONT_FACE_SYM]: Parser.prototype._fontFace,
|
||||
[Tokens.FONT_PALETTE_VALUES_SYM]: Parser.prototype._fontPaletteValues,
|
||||
[Tokens.KEYFRAMES_SYM]: Parser.prototype._keyframes,
|
||||
|
|
Loading…
Reference in New Issue
Block a user