You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.1 KiB
40 lines
1.1 KiB
|
3 years ago
|
"use strict";
|
||
|
|
|
||
|
|
const { produceXMLSerialization } = require("w3c-xmlserializer");
|
||
|
|
const parse5 = require("parse5");
|
||
|
|
|
||
|
|
const utils = require("../generated/utils");
|
||
|
|
const treeAdapter = require("./parse5-adapter-serialization");
|
||
|
|
const NODE_TYPE = require("../node-type");
|
||
|
|
const NAMESPACES = require("../helpers/namespaces");
|
||
|
|
|
||
|
|
function htmlSerialization(node) {
|
||
|
|
if (
|
||
|
|
node.nodeType === NODE_TYPE.ELEMENT_NODE &&
|
||
|
|
node.namespaceURI === NAMESPACES.HTML_NS &&
|
||
|
|
node.tagName === "TEMPLATE"
|
||
|
|
) {
|
||
|
|
node = node.content;
|
||
|
|
}
|
||
|
|
|
||
|
|
return parse5.serialize(node, { treeAdapter });
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports.fragmentSerialization = (node, { requireWellFormed }) => {
|
||
|
|
const contextDocument =
|
||
|
|
node.nodeType === NODE_TYPE.DOCUMENT_NODE ? node : node._ownerDocument;
|
||
|
|
if (contextDocument._parsingMode === "html") {
|
||
|
|
return htmlSerialization(node);
|
||
|
|
}
|
||
|
|
|
||
|
|
const childNodes = node.childNodesForSerializing || node.childNodes;
|
||
|
|
let serialized = "";
|
||
|
|
for (let i = 0; i < childNodes.length; ++i) {
|
||
|
|
serialized += produceXMLSerialization(
|
||
|
|
utils.wrapperForImpl(childNodes[i] || childNodes.item(i)),
|
||
|
|
requireWellFormed
|
||
|
|
);
|
||
|
|
}
|
||
|
|
return serialized;
|
||
|
|
};
|