aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs')
-rw-r--r--vanilla/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs100
1 files changed, 100 insertions, 0 deletions
diff --git a/vanilla/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs b/vanilla/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs
new file mode 100644
index 0000000..776efdd
--- /dev/null
+++ b/vanilla/node_modules/css-tree/cjs/syntax/node/MediaQuery.cjs
@@ -0,0 +1,100 @@
+'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;