1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
16 | return new (P || (P = Promise))(function (resolve, reject) {
|
17 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
18 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
19 | function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
20 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
21 | });
|
22 | };
|
23 | Object.defineProperty(exports, "__esModule", { value: true });
|
24 | const dom5 = require("dom5/lib/index-next");
|
25 | const parse5_1 = require("parse5");
|
26 | const element_reference_1 = require("../model/element-reference");
|
27 | const isCustomElement = dom5.predicates.hasMatchingTagName(/(.+-)+.+/);
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | class HtmlElementReferenceScanner {
|
35 | matches(node) {
|
36 | return !!node;
|
37 | }
|
38 | scan(document, visit) {
|
39 | return __awaiter(this, void 0, void 0, function* () {
|
40 | const elements = [];
|
41 | const visitor = (node) => {
|
42 | if (node.tagName && this.matches(node)) {
|
43 | const element = new element_reference_1.ScannedElementReference(node.tagName, document.sourceRangeForNode(node), { language: 'html', containingDocument: document, node });
|
44 | if (node.attrs) {
|
45 | for (const attr of node.attrs) {
|
46 | element.attributes.set(attr.name, {
|
47 | name: attr.name,
|
48 | value: attr.value,
|
49 | sourceRange: document.sourceRangeForAttribute(node, attr.name),
|
50 | nameSourceRange: document.sourceRangeForAttributeName(node, attr.name),
|
51 | valueSourceRange: document.sourceRangeForAttributeValue(node, attr.name)
|
52 | });
|
53 | }
|
54 | }
|
55 | elements.push(element);
|
56 | }
|
57 |
|
58 | if (node.tagName === 'template') {
|
59 | const content = parse5_1.treeAdapters.default.getTemplateContent(node);
|
60 | if (content) {
|
61 | for (const n of dom5.depthFirst(content)) {
|
62 | visitor(n);
|
63 | }
|
64 | }
|
65 | }
|
66 | };
|
67 | yield visit(visitor);
|
68 | return { features: elements };
|
69 | });
|
70 | }
|
71 | }
|
72 | exports.HtmlElementReferenceScanner = HtmlElementReferenceScanner;
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 | class HtmlCustomElementReferenceScanner extends HtmlElementReferenceScanner {
|
79 | matches(node) {
|
80 | return isCustomElement(node) && node.nodeName !== 'dom-module';
|
81 | }
|
82 | }
|
83 | exports.HtmlCustomElementReferenceScanner = HtmlCustomElementReferenceScanner;
|
84 |
|
\ | No newline at end of file |