happy-dom 7.6.5 → 7.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of happy-dom might be problematic. Click here for more details.
- package/lib/nodes/html-option-element/HTMLOptionElement.js +1 -1
- package/lib/nodes/html-option-element/HTMLOptionElement.js.map +1 -1
- package/lib/xml-parser/XMLParser.js +57 -54
- package/lib/xml-parser/XMLParser.js.map +1 -1
- package/package.json +2 -2
- package/src/nodes/html-option-element/HTMLOptionElement.ts +1 -1
- package/src/xml-parser/XMLParser.ts +62 -58
@@ -100,7 +100,7 @@ class HTMLOptionElement extends HTMLElement_1.default {
|
|
100
100
|
* @returns Value.
|
101
101
|
*/
|
102
102
|
get value() {
|
103
|
-
return this.getAttributeNS(null, 'value') ||
|
103
|
+
return this.getAttributeNS(null, 'value') || this.textContent;
|
104
104
|
}
|
105
105
|
/**
|
106
106
|
* Sets value.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"HTMLOptionElement.js","sourceRoot":"","sources":["../../../src/nodes/html-option-element/HTMLOptionElement.ts"],"names":[],"mappings":";;;;;AACA,8EAAsD;AAMtD;;;;;GAKG;AACH,MAAqB,iBAAkB,SAAQ,qBAAW;IAA1D;;QAEQ,kBAAa,GAAG,KAAK,CAAC;QACtB,eAAU,GAAG,KAAK,CAAC;IAmK3B,CAAC;IAjKA;;;;OAIG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAY;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,IAAW,IAAI;QACd,IAAI,MAAM,GAAiB,IAAI,CAAC,UAAU,CAAC;QAC3C,OAAO,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE;YAC3C,MAAM,GAAiB,MAAM,CAAC,UAAU,CAAC;SACzC;QACD,OAAyB,MAAM,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAiB;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,aAAa,EAAE;YAClB,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACxE;IACF,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAiB;QACpC,IAAI,CAAC,QAAQ,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SACzC;aAAM;YACN,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;SAC1C;IACF,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,
|
1
|
+
{"version":3,"file":"HTMLOptionElement.js","sourceRoot":"","sources":["../../../src/nodes/html-option-element/HTMLOptionElement.ts"],"names":[],"mappings":";;;;;AACA,8EAAsD;AAMtD;;;;;GAKG;AACH,MAAqB,iBAAkB,SAAQ,qBAAW;IAA1D;;QAEQ,kBAAa,GAAG,KAAK,CAAC;QACtB,eAAU,GAAG,KAAK,CAAC;IAmK3B,CAAC;IAjKA;;;;OAIG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,IAAY;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,IAAW,IAAI;QACd,IAAI,MAAM,GAAiB,IAAI,CAAC,UAAU,CAAC;QAC3C,OAAO,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE;YAC3C,MAAM,GAAiB,MAAM,CAAC,UAAU,CAAC;SACzC;QACD,OAAyB,MAAM,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAiB;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,aAAa,EAAE;YAClB,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACxE;IACF,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ,CAAC,QAAiB;QACpC,IAAI,CAAC,QAAQ,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SACzC;aAAM;YACN,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;SAC1C;IACF,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACH,IAAW,KAAK,CAAC,KAAa;QAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,SAAgB;QACvC,MAAM,iBAAiB,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE5D,IACC,CAAC,IAAI,CAAC,UAAU;YAChB,SAAS,CAAC,IAAI,KAAK,UAAU;YAC7B,iBAAiB,EAAE,KAAK,KAAK,SAAS,CAAC,KAAK,EAC3C;YACD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,IAAI,aAAa,EAAE;gBAClB,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;aAC5C;SACD;QAED,OAAO,iBAAiB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,SAAgB;QAC1C,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAE3B,IAAI,aAAa,EAAE;gBAClB,aAAa,CAAC,uBAAuB,EAAE,CAAC;aACxC;SACD;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACK,iBAAiB;QACxB,MAAM,UAAU,GAAsB,IAAI,CAAC,UAAU,CAAC;QACtD,IAAI,UAAU,EAAE,OAAO,KAAK,QAAQ,EAAE;YACrC,OAA0B,UAAU,CAAC;SACrC;QACD,IAAwB,UAAU,EAAE,UAAW,EAAE,OAAO,KAAK,QAAQ,EAAE;YACtE,OAA0B,UAAU,CAAC,UAAU,CAAC;SAChD;IACF,CAAC;CACD;AAtKD,oCAsKC"}
|
@@ -32,68 +32,71 @@ class XMLParser {
|
|
32
32
|
let parentUnnestableTagName = null;
|
33
33
|
let lastTextIndex = 0;
|
34
34
|
let match;
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
const
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
const namespaceURI = tagName === 'svg'
|
44
|
-
? NamespaceURI_1.default.svg
|
45
|
-
: parent.namespaceURI || NamespaceURI_1.default.html;
|
46
|
-
const newElement = document.createElementNS(namespaceURI, tagName);
|
47
|
-
// Scripts are not allowed to be executed when they are parsed using innerHTML, outerHTML, replaceWith() etc.
|
48
|
-
// However, they are allowed to be executed when document.write() is used.
|
49
|
-
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
|
50
|
-
if (tagName === 'script') {
|
51
|
-
newElement._evaluateScript = evaluateScripts;
|
52
|
-
}
|
53
|
-
// An assumption that the same rule should be applied for the HTMLLinkElement is made here.
|
54
|
-
if (tagName === 'link') {
|
55
|
-
newElement._evaluateCSS = evaluateScripts;
|
35
|
+
if (data !== null && data !== undefined) {
|
36
|
+
data = String(data);
|
37
|
+
while ((match = markupRegexp.exec(data))) {
|
38
|
+
const tagName = match[2].toLowerCase();
|
39
|
+
const isStartTag = !match[1];
|
40
|
+
if (parent && match.index !== lastTextIndex) {
|
41
|
+
const text = data.substring(lastTextIndex, match.index);
|
42
|
+
this.appendTextAndCommentNodes(document, parent, text);
|
56
43
|
}
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
44
|
+
if (isStartTag) {
|
45
|
+
const namespaceURI = tagName === 'svg'
|
46
|
+
? NamespaceURI_1.default.svg
|
47
|
+
: parent.namespaceURI || NamespaceURI_1.default.html;
|
48
|
+
const newElement = document.createElementNS(namespaceURI, tagName);
|
49
|
+
// Scripts are not allowed to be executed when they are parsed using innerHTML, outerHTML, replaceWith() etc.
|
50
|
+
// However, they are allowed to be executed when document.write() is used.
|
51
|
+
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
|
52
|
+
if (tagName === 'script') {
|
53
|
+
newElement._evaluateScript = evaluateScripts;
|
64
54
|
}
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
55
|
+
// An assumption that the same rule should be applied for the HTMLLinkElement is made here.
|
56
|
+
if (tagName === 'link') {
|
57
|
+
newElement._evaluateCSS = evaluateScripts;
|
58
|
+
}
|
59
|
+
this.setAttributes(newElement, match[3]);
|
60
|
+
if (!match[4] && !VoidElements_1.default.includes(tagName)) {
|
61
|
+
// Some elements are not allowed to be nested (e.g. "<a><a></a></a>" is not allowed.).
|
62
|
+
// Therefore we will auto-close the tag.
|
63
|
+
if (parentUnnestableTagName === tagName) {
|
64
|
+
stack.pop();
|
65
|
+
parent = parent.parentNode || root;
|
66
|
+
}
|
67
|
+
parent = parent.appendChild(newElement);
|
68
|
+
parentUnnestableTagName = this.getUnnestableTagName(parent);
|
69
|
+
stack.push(parent);
|
70
|
+
}
|
71
|
+
else {
|
72
|
+
parent.appendChild(newElement);
|
73
|
+
}
|
74
|
+
lastTextIndex = markupRegexp.lastIndex;
|
75
|
+
// Tags which contain non-parsed content
|
76
|
+
// For example: <script> JavaScript should not be parsed
|
77
|
+
if (ChildLessElements_1.default.includes(tagName)) {
|
78
|
+
let childLessMatch = null;
|
79
|
+
while ((childLessMatch = markupRegexp.exec(data))) {
|
80
|
+
if (childLessMatch[2].toLowerCase() === tagName && childLessMatch[1]) {
|
81
|
+
markupRegexp.lastIndex -= childLessMatch[0].length;
|
82
|
+
break;
|
83
|
+
}
|
81
84
|
}
|
82
85
|
}
|
83
86
|
}
|
87
|
+
else {
|
88
|
+
stack.pop();
|
89
|
+
parent = stack[stack.length - 1] || root;
|
90
|
+
parentUnnestableTagName = this.getUnnestableTagName(parent);
|
91
|
+
lastTextIndex = markupRegexp.lastIndex;
|
92
|
+
}
|
84
93
|
}
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
lastTextIndex = markupRegexp.lastIndex;
|
94
|
+
// Text after last element
|
95
|
+
if ((!match && data.length > 0) || (match && lastTextIndex !== match.index)) {
|
96
|
+
const text = data.substring(lastTextIndex);
|
97
|
+
this.appendTextAndCommentNodes(document, parent || root, text);
|
90
98
|
}
|
91
99
|
}
|
92
|
-
// Text after last element
|
93
|
-
if ((!match && data.length > 0) || (match && lastTextIndex !== match.index)) {
|
94
|
-
const text = data.substring(lastTextIndex);
|
95
|
-
this.appendTextAndCommentNodes(document, parent || root, text);
|
96
|
-
}
|
97
100
|
return root;
|
98
101
|
}
|
99
102
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"XMLParser.js","sourceRoot":"","sources":["../../src/xml-parser/XMLParser.ts"],"names":[],"mappings":";;;;;AAGA,0EAAkD;AAClD,sFAA8D;AAC9D,oFAA4D;AAC5D,2BAA4B;AAC5B,0EAAkD;AAOlD,MAAM,aAAa,GAAG,+CAA+C,CAAC;AACtE,MAAM,cAAc,GAAG,gCAAgC,CAAC;AACxD,MAAM,8BAA8B,GAAG,aAAa,CAAC;AACrD,MAAM,gBAAgB,GAAG,sDAAsD,CAAC;AAEhF;;GAEG;AACH,MAAqB,SAAS;IAC7B;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAClB,QAAmB,EACnB,IAAY,EACZ,eAAe,GAAG,KAAK;QAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAwC,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,MAAM,GAAiC,IAAI,CAAC;QAChD,IAAI,uBAAuB,GAAG,IAAI,CAAC;QACnC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,KAAsB,CAAC;QAE3B,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;
|
1
|
+
{"version":3,"file":"XMLParser.js","sourceRoot":"","sources":["../../src/xml-parser/XMLParser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "happy-dom",
|
3
|
-
"version": "7.6.
|
3
|
+
"version": "7.6.7",
|
4
4
|
"license": "MIT",
|
5
5
|
"homepage": "https://github.com/capricorn86/happy-dom",
|
6
6
|
"repository": "https://github.com/capricorn86/happy-dom",
|
@@ -75,5 +75,5 @@
|
|
75
75
|
"ts-jest": "^27.1.3",
|
76
76
|
"typescript": "^4.6.2"
|
77
77
|
},
|
78
|
-
"gitHead": "
|
78
|
+
"gitHead": "801a6dc7344c6376c05eb1f17086409fc0197c3e"
|
79
79
|
}
|
@@ -109,7 +109,7 @@ export default class HTMLOptionElement extends HTMLElement implements IHTMLOptio
|
|
109
109
|
* @returns Value.
|
110
110
|
*/
|
111
111
|
public get value(): string {
|
112
|
-
return this.getAttributeNS(null, 'value') ||
|
112
|
+
return this.getAttributeNS(null, 'value') || this.textContent;
|
113
113
|
}
|
114
114
|
|
115
115
|
/**
|
@@ -42,76 +42,80 @@ export default class XMLParser {
|
|
42
42
|
let lastTextIndex = 0;
|
43
43
|
let match: RegExpExecArray;
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
const isStartTag = !match[1];
|
45
|
+
if (data !== null && data !== undefined) {
|
46
|
+
data = String(data);
|
48
47
|
|
49
|
-
|
50
|
-
const
|
51
|
-
|
52
|
-
}
|
53
|
-
|
54
|
-
if (isStartTag) {
|
55
|
-
const namespaceURI =
|
56
|
-
tagName === 'svg'
|
57
|
-
? NamespaceURI.svg
|
58
|
-
: (<IElement>parent).namespaceURI || NamespaceURI.html;
|
59
|
-
const newElement = document.createElementNS(namespaceURI, tagName);
|
60
|
-
|
61
|
-
// Scripts are not allowed to be executed when they are parsed using innerHTML, outerHTML, replaceWith() etc.
|
62
|
-
// However, they are allowed to be executed when document.write() is used.
|
63
|
-
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
|
64
|
-
if (tagName === 'script') {
|
65
|
-
(<HTMLScriptElement>newElement)._evaluateScript = evaluateScripts;
|
66
|
-
}
|
48
|
+
while ((match = markupRegexp.exec(data))) {
|
49
|
+
const tagName = match[2].toLowerCase();
|
50
|
+
const isStartTag = !match[1];
|
67
51
|
|
68
|
-
|
69
|
-
|
70
|
-
(
|
52
|
+
if (parent && match.index !== lastTextIndex) {
|
53
|
+
const text = data.substring(lastTextIndex, match.index);
|
54
|
+
this.appendTextAndCommentNodes(document, parent, text);
|
71
55
|
}
|
72
56
|
|
73
|
-
|
57
|
+
if (isStartTag) {
|
58
|
+
const namespaceURI =
|
59
|
+
tagName === 'svg'
|
60
|
+
? NamespaceURI.svg
|
61
|
+
: (<IElement>parent).namespaceURI || NamespaceURI.html;
|
62
|
+
const newElement = document.createElementNS(namespaceURI, tagName);
|
63
|
+
|
64
|
+
// Scripts are not allowed to be executed when they are parsed using innerHTML, outerHTML, replaceWith() etc.
|
65
|
+
// However, they are allowed to be executed when document.write() is used.
|
66
|
+
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement
|
67
|
+
if (tagName === 'script') {
|
68
|
+
(<HTMLScriptElement>newElement)._evaluateScript = evaluateScripts;
|
69
|
+
}
|
74
70
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
if (parentUnnestableTagName === tagName) {
|
79
|
-
stack.pop();
|
80
|
-
parent = <Element>parent.parentNode || root;
|
71
|
+
// An assumption that the same rule should be applied for the HTMLLinkElement is made here.
|
72
|
+
if (tagName === 'link') {
|
73
|
+
(<HTMLLinkElement>newElement)._evaluateCSS = evaluateScripts;
|
81
74
|
}
|
82
75
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
76
|
+
this.setAttributes(newElement, match[3]);
|
77
|
+
|
78
|
+
if (!match[4] && !VoidElements.includes(tagName)) {
|
79
|
+
// Some elements are not allowed to be nested (e.g. "<a><a></a></a>" is not allowed.).
|
80
|
+
// Therefore we will auto-close the tag.
|
81
|
+
if (parentUnnestableTagName === tagName) {
|
82
|
+
stack.pop();
|
83
|
+
parent = <Element>parent.parentNode || root;
|
84
|
+
}
|
85
|
+
|
86
|
+
parent = <Element>parent.appendChild(newElement);
|
87
|
+
parentUnnestableTagName = this.getUnnestableTagName(parent);
|
88
|
+
stack.push(parent);
|
89
|
+
} else {
|
90
|
+
parent.appendChild(newElement);
|
91
|
+
}
|
92
|
+
lastTextIndex = markupRegexp.lastIndex;
|
93
|
+
|
94
|
+
// Tags which contain non-parsed content
|
95
|
+
// For example: <script> JavaScript should not be parsed
|
96
|
+
if (ChildLessElements.includes(tagName)) {
|
97
|
+
let childLessMatch = null;
|
98
|
+
while ((childLessMatch = markupRegexp.exec(data))) {
|
99
|
+
if (childLessMatch[2].toLowerCase() === tagName && childLessMatch[1]) {
|
100
|
+
markupRegexp.lastIndex -= childLessMatch[0].length;
|
101
|
+
break;
|
102
|
+
}
|
99
103
|
}
|
100
104
|
}
|
101
|
-
}
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
parentUnnestableTagName = this.getUnnestableTagName(parent);
|
105
|
+
} else {
|
106
|
+
stack.pop();
|
107
|
+
parent = stack[stack.length - 1] || root;
|
108
|
+
parentUnnestableTagName = this.getUnnestableTagName(parent);
|
106
109
|
|
107
|
-
|
110
|
+
lastTextIndex = markupRegexp.lastIndex;
|
111
|
+
}
|
108
112
|
}
|
109
|
-
}
|
110
113
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
114
|
+
// Text after last element
|
115
|
+
if ((!match && data.length > 0) || (match && lastTextIndex !== match.index)) {
|
116
|
+
const text = data.substring(lastTextIndex);
|
117
|
+
this.appendTextAndCommentNodes(document, parent || root, text);
|
118
|
+
}
|
115
119
|
}
|
116
120
|
|
117
121
|
return root;
|