From adeb2b85d4fe41dae5966dfcde14ed2b30482c23 Mon Sep 17 00:00:00 2001 From: Sam Sudar Date: Mon, 15 May 2023 09:06:29 -0600 Subject: [PATCH 1/2] allow caller to specify a document implementation --- packages/html/src/getHTMLFromFragment.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/html/src/getHTMLFromFragment.ts b/packages/html/src/getHTMLFromFragment.ts index dcc46a931f9..07f82408fa5 100644 --- a/packages/html/src/getHTMLFromFragment.ts +++ b/packages/html/src/getHTMLFromFragment.ts @@ -1,7 +1,17 @@ import { DOMSerializer, Node, Schema } from '@tiptap/pm/model' import { createHTMLDocument, VHTMLDocument } from 'zeed-dom' -export function getHTMLFromFragment(doc: Node, schema: Schema): string { +export function getHTMLFromFragment(doc: Node, schema: Schema, options?: { document?: Document }): string { + if (options?.document) { + // The caller is relying on their own document implementation. Use this + // instead of the default zeed-dom. + const contentNode = Node.fromJSON(schema, doc); + const wrap = document.createElement('div'); + const serializedDocument = DOMSerializer.fromSchema(schema).serializeFragment(doc.content, { document: options.document }, wrap); + return wrap.innerHTML; + } + + // Use zeed-dom for serialization. const document = DOMSerializer.fromSchema(schema).serializeFragment(doc.content, { document: createHTMLDocument() as unknown as Document, }) as unknown as VHTMLDocument From 7881dea293391296c31705e65c5cbabdd53d225e Mon Sep 17 00:00:00 2001 From: Sam Sudar Date: Sat, 8 Jul 2023 16:42:17 -0700 Subject: [PATCH 2/2] fix up lint errors --- packages/html/src/getHTMLFromFragment.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/html/src/getHTMLFromFragment.ts b/packages/html/src/getHTMLFromFragment.ts index 07f82408fa5..f625e7b77de 100644 --- a/packages/html/src/getHTMLFromFragment.ts +++ b/packages/html/src/getHTMLFromFragment.ts @@ -5,16 +5,16 @@ export function getHTMLFromFragment(doc: Node, schema: Schema, options?: { docum if (options?.document) { // The caller is relying on their own document implementation. Use this // instead of the default zeed-dom. - const contentNode = Node.fromJSON(schema, doc); - const wrap = document.createElement('div'); - const serializedDocument = DOMSerializer.fromSchema(schema).serializeFragment(doc.content, { document: options.document }, wrap); - return wrap.innerHTML; + const wrap = options.document.createElement('div') + + DOMSerializer.fromSchema(schema).serializeFragment(doc.content, { document: options.document }, wrap) + return wrap.innerHTML } // Use zeed-dom for serialization. - const document = DOMSerializer.fromSchema(schema).serializeFragment(doc.content, { + const zeedDocument = DOMSerializer.fromSchema(schema).serializeFragment(doc.content, { document: createHTMLDocument() as unknown as Document, }) as unknown as VHTMLDocument - return document.render() + return zeedDocument.render() }