Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/flo-bit/shapecraft. flo-bit.dev/shapecraft
Something went wrong. Try again.
2.6 kB · 100 lines
at commit da69385e
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101'use strict';
const types = require('../../tokenizer/types.cjs');
const name = 'MediaQuery';const structure = { modifier: [String, null], mediaType: [String, null], condition: ['Condition', null]};
function parse() { const start = this.tokenStart; let modifier = null; let mediaType = null; let condition = null;
this.skipSC();
if (this.tokenType === types.Ident && this.lookupTypeNonSC(1) !== types.LeftParenthesis) { // [ not | only ]? <media-type> const ident = this.consume(types.Ident); const identLowerCase = ident.toLowerCase();
if (identLowerCase === 'not' || identLowerCase === 'only') { this.skipSC(); modifier = identLowerCase; mediaType = this.consume(types.Ident); } else { mediaType = ident; }
switch (this.lookupTypeNonSC(0)) { case types.Ident: { // and <media-condition-without-or> this.skipSC(); this.eatIdent('and'); condition = this.Condition('media'); break; }
case types.LeftCurlyBracket: case types.Semicolon: case types.Comma: case types.EOF: break;
default: this.error('Identifier or parenthesis is expected'); } } else { switch (this.tokenType) { case types.Ident: case types.LeftParenthesis: case types.Function: { // <media-condition> condition = this.Condition('media'); break; }
case types.LeftCurlyBracket: case types.Semicolon: case types.EOF: break;
default: this.error('Identifier or parenthesis is expected'); } }
return { type: 'MediaQuery', loc: this.getLocation(start, this.tokenStart), modifier, mediaType, condition };}
function generate(node) { if (node.mediaType) { if (node.modifier) { this.token(types.Ident, node.modifier); }
this.token(types.Ident, node.mediaType);
if (node.condition) { this.token(types.Ident, 'and'); this.node(node.condition); } } else if (node.condition) { this.node(node.condition); }}
exports.generate = generate;exports.name = name;exports.parse = parse;exports.structure = structure;