MCPcopy Index your code
hub / github.com/bigskysoftware/_hyperscript / parse

Method parse

tools/common/_hyperscript.iife.js:7514–7606  ·  view source on GitHub ↗
(parser)

Source from the content-addressed store, hash-verified

7512 this.args = { on: onExpr, time, evt, from, classRef, classRef2, classRefs, betweenValues };
7513 }
7514 static parse(parser) {
7515 if (!parser.matchToken("toggle")) return;
7516 parser.matchAnyToken("the", "my");
7517 var visibility = false;
7518 var hideShowStrategy = null;
7519 var onExpr = null;
7520 var classRef = null;
7521 var classRef2 = null;
7522 var classRefs = null;
7523 var attributeRef = null;
7524 var attributeRef2 = null;
7525 var betweenClass = false;
7526 var betweenAttr = false;
7527 var toggleExpr = null;
7528 var styleProp = null;
7529 if (parser.currentToken().type === "STYLE_REF") {
7530 let styleRef = parser.consumeToken();
7531 styleProp = styleRef.value.slice(1);
7532 visibility = true;
7533 hideShowStrategy = VisibilityCommand.resolveHideShowStrategy(parser, styleProp);
7534 if (parser.matchToken("of")) {
7535 var follows = parser.pushFollows("with", "between");
7536 try {
7537 onExpr = parser.requireElement("expression");
7538 } finally {
7539 parser.popFollows(follows);
7540 }
7541 } else {
7542 onExpr = parser.requireElement("implicitMeTarget");
7543 }
7544 } else if (parser.matchToken("between")) {
7545 classRef = parser.parseElement("classRef");
7546 if (classRef != null) {
7547 betweenClass = true;
7548 parser.requireToken("and");
7549 classRef2 = parser.requireElement("classRef");
7550 } else {
7551 betweenAttr = true;
7552 attributeRef = parser.parseElement("attributeRef");
7553 if (attributeRef == null) {
7554 parser.raiseError("Expected either a class reference or attribute expression");
7555 }
7556 parser.requireToken("and");
7557 attributeRef2 = parser.requireElement("attributeRef");
7558 }
7559 } else if (classRef = parser.parseElement("classRef")) {
7560 classRefs = [classRef];
7561 while (classRef = parser.parseElement("classRef")) {
7562 classRefs.push(classRef);
7563 }
7564 } else if (attributeRef = parser.parseElement("attributeRef")) {
7565 } else {
7566 parser.pushFollow("between");
7567 toggleExpr = parser.parseElement("assignableExpression");
7568 parser.popFollow();
7569 if (toggleExpr == null) {
7570 parser.raiseError("Expected a class reference, attribute, style property, or settable expression");
7571 }

Callers

nothing calls this directly

Calls 14

matchTokenMethod · 0.45
matchAnyTokenMethod · 0.45
currentTokenMethod · 0.45
consumeTokenMethod · 0.45
pushFollowsMethod · 0.45
requireElementMethod · 0.45
popFollowsMethod · 0.45
parseElementMethod · 0.45
requireTokenMethod · 0.45
raiseErrorMethod · 0.45
pushFollowMethod · 0.45

Tested by

no test coverage detected