| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- "use strict";
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.io/license
- */
- Object.defineProperty(exports, "__esModule", { value: true });
- const parse5_1 = require("parse5");
- /**
- * Parses a HTML fragment and traverses all AST nodes in order find elements that
- * include the specified attribute.
- */
- function findElementsWithAttribute(html, attributeName) {
- const document = parse5_1.parseFragment(html, { sourceCodeLocationInfo: true });
- const elements = [];
- const visitNodes = nodes => {
- nodes.forEach(node => {
- if (node.childNodes) {
- visitNodes(node.childNodes);
- }
- if (node.attrs && node.attrs.some(attr => attr.name === attributeName.toLowerCase())) {
- elements.push(node);
- }
- });
- };
- visitNodes(document.childNodes);
- return elements;
- }
- exports.findElementsWithAttribute = findElementsWithAttribute;
- /**
- * Finds elements with explicit tag names that also contain the specified attribute. Returns the
- * attribute start offset based on the specified HTML.
- */
- function findAttributeOnElementWithTag(html, name, tagNames) {
- return findElementsWithAttribute(html, name)
- .filter(element => tagNames.includes(element.tagName))
- .map(element => getStartOffsetOfAttribute(element, name));
- }
- exports.findAttributeOnElementWithTag = findAttributeOnElementWithTag;
- /**
- * Finds elements that contain the given attribute and contain at least one of the other
- * specified attributes. Returns the primary attribute's start offset based on the specified HTML.
- */
- function findAttributeOnElementWithAttrs(html, name, attrs) {
- return findElementsWithAttribute(html, name)
- .filter(element => attrs.some(attr => hasElementAttribute(element, attr)))
- .map(element => getStartOffsetOfAttribute(element, name));
- }
- exports.findAttributeOnElementWithAttrs = findAttributeOnElementWithAttrs;
- /** Shorthand function that checks if the specified element contains the given attribute. */
- function hasElementAttribute(element, attributeName) {
- return element.attrs && element.attrs.some(attr => attr.name === attributeName.toLowerCase());
- }
- /** Gets the start offset of the given attribute from a Parse5 element. */
- function getStartOffsetOfAttribute(element, attributeName) {
- return element.sourceCodeLocation.attrs[attributeName.toLowerCase()].startOffset;
- }
- exports.getStartOffsetOfAttribute = getStartOffsetOfAttribute;
- //# sourceMappingURL=elements.js.map
|