diff options
Diffstat (limited to 'alarm/node_modules/jsdom/lib/jsdom/living/domparsing/serialization.js')
-rw-r--r-- | alarm/node_modules/jsdom/lib/jsdom/living/domparsing/serialization.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/alarm/node_modules/jsdom/lib/jsdom/living/domparsing/serialization.js b/alarm/node_modules/jsdom/lib/jsdom/living/domparsing/serialization.js new file mode 100644 index 0000000..6de7674 --- /dev/null +++ b/alarm/node_modules/jsdom/lib/jsdom/living/domparsing/serialization.js @@ -0,0 +1,45 @@ +"use strict"; + +const produceXMLSerialization = require("w3c-xmlserializer"); +const parse5 = require("parse5"); +const DOMException = require("domexception/webidl2js-wrapper"); + +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, globalObject }) => { + const contextDocument = + node.nodeType === NODE_TYPE.DOCUMENT_NODE ? node : node._ownerDocument; + if (contextDocument._parsingMode === "html") { + return htmlSerialization(node); + } + + const childNodes = node.childNodesForSerializing || node.childNodes; + + try { + let serialized = ""; + for (let i = 0; i < childNodes.length; ++i) { + serialized += produceXMLSerialization( + utils.wrapperForImpl(childNodes[i] || childNodes.item(i)), + { requireWellFormed } + ); + } + return serialized; + } catch (e) { + throw DOMException.create(globalObject, [e.message, "InvalidStateError"]); + } +}; |