Skip to content

Commit

Permalink
fix(client): ensure head and body with newline are parsed correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
remarkablemark committed Jul 10, 2022
1 parent 6370cb3 commit b26b645
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions lib/client/domparser.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ var HTML = 'html';
var HEAD = 'head';
var BODY = 'body';
var FIRST_TAG_REGEX = /<([a-zA-Z]+[0-9]?)/; // e.g., <h1>
var HEAD_TAG_REGEX = /<head.*>/i;
var BODY_TAG_REGEX = /<body.*>/i;
// match-all-characters in case of newlines (DOTALL)
var HEAD_TAG_REGEX = /<head[^]*>/i;
var BODY_TAG_REGEX = /<body[^]*>/i;

// falls back to `parseFromString` if `createHTMLDocument` cannot be used
var parseFromDocument = function () {
Expand Down Expand Up @@ -63,7 +64,8 @@ if (document.implementation) {
*/
parseFromDocument = function (html, tagName) {
if (tagName) {
doc.documentElement.getElementsByTagName(tagName)[0].innerHTML = html;
var element = doc.documentElement.querySelector(tagName);
element.innerHTML = html;
return doc;
}

Expand Down Expand Up @@ -118,24 +120,25 @@ function domparser(html) {
// the created document may come with filler head/body elements,
// so make sure to remove them if they don't actually exist
if (!HEAD_TAG_REGEX.test(html)) {
element = doc.getElementsByTagName(HEAD)[0];
element = doc.querySelector(HEAD);
if (element) {
element.parentNode.removeChild(element);
}
}

if (!BODY_TAG_REGEX.test(html)) {
element = doc.getElementsByTagName(BODY)[0];
element = doc.querySelector(BODY);
if (element) {
element.parentNode.removeChild(element);
}
}

return doc.getElementsByTagName(HTML);
return doc.querySelectorAll(HTML);

case HEAD:
case BODY:
elements = parseFromDocument(html).getElementsByTagName(firstTagName);
doc = parseFromDocument(html);
elements = doc.querySelectorAll(firstTagName);

// if there's a sibling element, then return both elements
if (BODY_TAG_REGEX.test(html) && HEAD_TAG_REGEX.test(html)) {
Expand All @@ -148,9 +151,8 @@ function domparser(html) {
if (parseFromTemplate) {
return parseFromTemplate(html);
}

return parseFromDocument(html, BODY).getElementsByTagName(BODY)[0]
.childNodes;
element = parseFromDocument(html, BODY).querySelector(BODY);
return element.childNodes;
}
}

Expand Down

0 comments on commit b26b645

Please sign in to comment.