diff options
Diffstat (limited to 'includes/external/addressbook/node_modules/parse5/dist/serializer')
-rw-r--r-- | includes/external/addressbook/node_modules/parse5/dist/serializer/index.d.ts | 61 | ||||
-rw-r--r-- | includes/external/addressbook/node_modules/parse5/dist/serializer/index.js | 168 |
2 files changed, 229 insertions, 0 deletions
diff --git a/includes/external/addressbook/node_modules/parse5/dist/serializer/index.d.ts b/includes/external/addressbook/node_modules/parse5/dist/serializer/index.d.ts new file mode 100644 index 0000000..bf759e6 --- /dev/null +++ b/includes/external/addressbook/node_modules/parse5/dist/serializer/index.d.ts @@ -0,0 +1,61 @@ +import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js'; +import { type DefaultTreeAdapterMap } from '../tree-adapters/default.js'; +export interface SerializerOptions<T extends TreeAdapterTypeMap> { + /** + * Specifies input tree format. + * + * @default `treeAdapters.default` + */ + treeAdapter?: TreeAdapter<T>; + /** + * The [scripting flag](https://html.spec.whatwg.org/multipage/parsing.html#scripting-flag). If set + * to `true`, `noscript` element content will not be escaped. + * + * @default `true` + */ + scriptingEnabled?: boolean; +} +/** + * Serializes an AST node to an HTML string. + * + * @example + * + * ```js + * const parse5 = require('parse5'); + * + * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>'); + * + * // Serializes a document. + * const html = parse5.serialize(document); + * + * // Serializes the <html> element content. + * const str = parse5.serialize(document.childNodes[1]); + * + * console.log(str); //> '<head></head><body>Hi there!</body>' + * ``` + * + * @param node Node to serialize. + * @param options Serialization options. + */ +export declare function serialize<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(node: T['parentNode'], options?: SerializerOptions<T>): string; +/** + * Serializes an AST element node to an HTML string, including the element node. + * + * @example + * + * ```js + * const parse5 = require('parse5'); + * + * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>'); + * + * // Serializes the <div> element. + * const html = parse5.serializeOuter(document.childNodes[0]); + * + * console.log(str); //> '<div>Hello, <b>world</b>!</div>' + * ``` + * + * @param node Node to serialize. + * @param options Serialization options. + */ +export declare function serializeOuter<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(node: T['node'], options?: SerializerOptions<T>): string; +//# sourceMappingURL=index.d.ts.map
\ No newline at end of file diff --git a/includes/external/addressbook/node_modules/parse5/dist/serializer/index.js b/includes/external/addressbook/node_modules/parse5/dist/serializer/index.js new file mode 100644 index 0000000..f8d6e34 --- /dev/null +++ b/includes/external/addressbook/node_modules/parse5/dist/serializer/index.js @@ -0,0 +1,168 @@ +import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js'; +import { escapeText, escapeAttribute } from 'entities/lib/escape.js'; +import { defaultTreeAdapter } from '../tree-adapters/default.js'; +// Sets +const VOID_ELEMENTS = new Set([ + $.AREA, + $.BASE, + $.BASEFONT, + $.BGSOUND, + $.BR, + $.COL, + $.EMBED, + $.FRAME, + $.HR, + $.IMG, + $.INPUT, + $.KEYGEN, + $.LINK, + $.META, + $.PARAM, + $.SOURCE, + $.TRACK, + $.WBR, +]); +function isVoidElement(node, options) { + return (options.treeAdapter.isElementNode(node) && + options.treeAdapter.getNamespaceURI(node) === NS.HTML && + VOID_ELEMENTS.has(options.treeAdapter.getTagName(node))); +} +const defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true }; +/** + * Serializes an AST node to an HTML string. + * + * @example + * + * ```js + * const parse5 = require('parse5'); + * + * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>'); + * + * // Serializes a document. + * const html = parse5.serialize(document); + * + * // Serializes the <html> element content. + * const str = parse5.serialize(document.childNodes[1]); + * + * console.log(str); //> '<head></head><body>Hi there!</body>' + * ``` + * + * @param node Node to serialize. + * @param options Serialization options. + */ +export function serialize(node, options) { + const opts = { ...defaultOpts, ...options }; + if (isVoidElement(node, opts)) { + return ''; + } + return serializeChildNodes(node, opts); +} +/** + * Serializes an AST element node to an HTML string, including the element node. + * + * @example + * + * ```js + * const parse5 = require('parse5'); + * + * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>'); + * + * // Serializes the <div> element. + * const html = parse5.serializeOuter(document.childNodes[0]); + * + * console.log(str); //> '<div>Hello, <b>world</b>!</div>' + * ``` + * + * @param node Node to serialize. + * @param options Serialization options. + */ +export function serializeOuter(node, options) { + const opts = { ...defaultOpts, ...options }; + return serializeNode(node, opts); +} +function serializeChildNodes(parentNode, options) { + let html = ''; + // Get container of the child nodes + const container = options.treeAdapter.isElementNode(parentNode) && + options.treeAdapter.getTagName(parentNode) === $.TEMPLATE && + options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML + ? options.treeAdapter.getTemplateContent(parentNode) + : parentNode; + const childNodes = options.treeAdapter.getChildNodes(container); + if (childNodes) { + for (const currentNode of childNodes) { + html += serializeNode(currentNode, options); + } + } + return html; +} +function serializeNode(node, options) { + if (options.treeAdapter.isElementNode(node)) { + return serializeElement(node, options); + } + if (options.treeAdapter.isTextNode(node)) { + return serializeTextNode(node, options); + } + if (options.treeAdapter.isCommentNode(node)) { + return serializeCommentNode(node, options); + } + if (options.treeAdapter.isDocumentTypeNode(node)) { + return serializeDocumentTypeNode(node, options); + } + // Return an empty string for unknown nodes + return ''; +} +function serializeElement(node, options) { + const tn = options.treeAdapter.getTagName(node); + return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`; +} +function serializeAttributes(node, { treeAdapter }) { + let html = ''; + for (const attr of treeAdapter.getAttrList(node)) { + html += ' '; + if (!attr.namespace) { + html += attr.name; + } + else + switch (attr.namespace) { + case NS.XML: { + html += `xml:${attr.name}`; + break; + } + case NS.XMLNS: { + if (attr.name !== 'xmlns') { + html += 'xmlns:'; + } + html += attr.name; + break; + } + case NS.XLINK: { + html += `xlink:${attr.name}`; + break; + } + default: { + html += `${attr.prefix}:${attr.name}`; + } + } + html += `="${escapeAttribute(attr.value)}"`; + } + return html; +} +function serializeTextNode(node, options) { + const { treeAdapter } = options; + const content = treeAdapter.getTextNodeContent(node); + const parent = treeAdapter.getParentNode(node); + const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent); + return parentTn && + treeAdapter.getNamespaceURI(parent) === NS.HTML && + hasUnescapedText(parentTn, options.scriptingEnabled) + ? content + : escapeText(content); +} +function serializeCommentNode(node, { treeAdapter }) { + return `<!--${treeAdapter.getCommentNodeContent(node)}-->`; +} +function serializeDocumentTypeNode(node, { treeAdapter }) { + return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`; +} +//# sourceMappingURL=index.js.map
\ No newline at end of file |