aboutsummaryrefslogtreecommitdiff
path: root/node_modules/dom-serializer/lib/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-02-09 17:58:07 +0100
committerMinteck <contact@minteck.org>2022-02-09 17:58:07 +0100
commit22a25ded9f7d9c9a96cce8d1bc12475ca0434201 (patch)
tree0e33d0650fe58f41c00bbc4b8047956905766823 /node_modules/dom-serializer/lib/index.js
parent8f54d903fb3470823a5e4d6ff4655de009836245 (diff)
downloadyoutoo-22a25ded9f7d9c9a96cce8d1bc12475ca0434201.tar.gz
youtoo-22a25ded9f7d9c9a96cce8d1bc12475ca0434201.tar.bz2
youtoo-22a25ded9f7d9c9a96cce8d1bc12475ca0434201.zip
Major update
Diffstat (limited to 'node_modules/dom-serializer/lib/index.js')
-rw-r--r--node_modules/dom-serializer/lib/index.js211
1 files changed, 211 insertions, 0 deletions
diff --git a/node_modules/dom-serializer/lib/index.js b/node_modules/dom-serializer/lib/index.js
new file mode 100644
index 0000000..a5e1f93
--- /dev/null
+++ b/node_modules/dom-serializer/lib/index.js
@@ -0,0 +1,211 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+ __assign = Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign.apply(this, arguments);
+};
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+/*
+ * Module dependencies
+ */
+var ElementType = __importStar(require("domelementtype"));
+var entities_1 = require("entities");
+/**
+ * Mixed-case SVG and MathML tags & attributes
+ * recognized by the HTML parser.
+ *
+ * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign
+ */
+var foreignNames_1 = require("./foreignNames");
+var unencodedElements = new Set([
+ "style",
+ "script",
+ "xmp",
+ "iframe",
+ "noembed",
+ "noframes",
+ "plaintext",
+ "noscript",
+]);
+/**
+ * Format attributes
+ */
+function formatAttributes(attributes, opts) {
+ if (!attributes)
+ return;
+ return Object.keys(attributes)
+ .map(function (key) {
+ var _a, _b;
+ var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : "";
+ if (opts.xmlMode === "foreign") {
+ /* Fix up mixed-case attribute names */
+ key = (_b = foreignNames_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;
+ }
+ if (!opts.emptyAttrs && !opts.xmlMode && value === "") {
+ return key;
+ }
+ return key + "=\"" + (opts.decodeEntities !== false
+ ? entities_1.encodeXML(value)
+ : value.replace(/"/g, "&quot;")) + "\"";
+ })
+ .join(" ");
+}
+/**
+ * Self-enclosing tags
+ */
+var singleTag = new Set([
+ "area",
+ "base",
+ "basefont",
+ "br",
+ "col",
+ "command",
+ "embed",
+ "frame",
+ "hr",
+ "img",
+ "input",
+ "isindex",
+ "keygen",
+ "link",
+ "meta",
+ "param",
+ "source",
+ "track",
+ "wbr",
+]);
+/**
+ * Renders a DOM node or an array of DOM nodes to a string.
+ *
+ * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).
+ *
+ * @param node Node to be rendered.
+ * @param options Changes serialization behavior
+ */
+function render(node, options) {
+ if (options === void 0) { options = {}; }
+ var nodes = "length" in node ? node : [node];
+ var output = "";
+ for (var i = 0; i < nodes.length; i++) {
+ output += renderNode(nodes[i], options);
+ }
+ return output;
+}
+exports.default = render;
+function renderNode(node, options) {
+ switch (node.type) {
+ case ElementType.Root:
+ return render(node.children, options);
+ case ElementType.Directive:
+ case ElementType.Doctype:
+ return renderDirective(node);
+ case ElementType.Comment:
+ return renderComment(node);
+ case ElementType.CDATA:
+ return renderCdata(node);
+ case ElementType.Script:
+ case ElementType.Style:
+ case ElementType.Tag:
+ return renderTag(node, options);
+ case ElementType.Text:
+ return renderText(node, options);
+ }
+}
+var foreignModeIntegrationPoints = new Set([
+ "mi",
+ "mo",
+ "mn",
+ "ms",
+ "mtext",
+ "annotation-xml",
+ "foreignObject",
+ "desc",
+ "title",
+]);
+var foreignElements = new Set(["svg", "math"]);
+function renderTag(elem, opts) {
+ var _a;
+ // Handle SVG / MathML in HTML
+ if (opts.xmlMode === "foreign") {
+ /* Fix up mixed-case element names */
+ elem.name = (_a = foreignNames_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;
+ /* Exit foreign mode at integration points */
+ if (elem.parent &&
+ foreignModeIntegrationPoints.has(elem.parent.name)) {
+ opts = __assign(__assign({}, opts), { xmlMode: false });
+ }
+ }
+ if (!opts.xmlMode && foreignElements.has(elem.name)) {
+ opts = __assign(__assign({}, opts), { xmlMode: "foreign" });
+ }
+ var tag = "<" + elem.name;
+ var attribs = formatAttributes(elem.attribs, opts);
+ if (attribs) {
+ tag += " " + attribs;
+ }
+ if (elem.children.length === 0 &&
+ (opts.xmlMode
+ ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags
+ opts.selfClosingTags !== false
+ : // User explicitly asked for self-closing tags, even in HTML mode
+ opts.selfClosingTags && singleTag.has(elem.name))) {
+ if (!opts.xmlMode)
+ tag += " ";
+ tag += "/>";
+ }
+ else {
+ tag += ">";
+ if (elem.children.length > 0) {
+ tag += render(elem.children, opts);
+ }
+ if (opts.xmlMode || !singleTag.has(elem.name)) {
+ tag += "</" + elem.name + ">";
+ }
+ }
+ return tag;
+}
+function renderDirective(elem) {
+ return "<" + elem.data + ">";
+}
+function renderText(elem, opts) {
+ var data = elem.data || "";
+ // If entities weren't decoded, no need to encode them back
+ if (opts.decodeEntities !== false &&
+ !(!opts.xmlMode &&
+ elem.parent &&
+ unencodedElements.has(elem.parent.name))) {
+ data = entities_1.encodeXML(data);
+ }
+ return data;
+}
+function renderCdata(elem) {
+ return "<![CDATA[" + elem.children[0].data + "]]>";
+}
+function renderComment(elem) {
+ return "<!--" + elem.data + "-->";
+}