add a new getHtmlFromFragment method that is used in the editor and in the stand-alone generateHtml helper

This commit is contained in:
Hans Pagel
2020-09-04 13:06:54 +02:00
parent 95fca8aa61
commit 8cee629e19
4 changed files with 23 additions and 29 deletions

View File

@@ -12,6 +12,7 @@ export { default as markPasteRule } from './src/pasteRules/markPasteRule'
export { default as getSchema } from './src/utils/getSchema'
export { default as generateHtml } from './src/utils/generateHtml'
export { default as getHtmlFromFragment } from './src/utils/getHtmlFromFragment'
export { default as getTopNodeFromExtensions } from './src/utils/getTopNodeFromExtensions'
export { default as getNodesFromExtensions } from './src/utils/getNodesFromExtensions'
export { default as getMarksFromExtensions } from './src/utils/getMarksFromExtensions'

View File

@@ -10,6 +10,7 @@ import getNodeAttrs from './utils/getNodeAttrs'
import getMarkAttrs from './utils/getMarkAttrs'
import removeElement from './utils/removeElement'
import getSchemaTypeByName from './utils/getSchemaTypeByName'
import getHtmlFromFragment from './utils/getHtmlFromFragment'
import ExtensionManager from './ExtensionManager'
import Extension from './Extension'
import Node from './Node'
@@ -357,14 +358,7 @@ export class Editor extends EventEmitter {
* Get the document as HTML.
*/
public html() {
const div = document.createElement('div')
const fragment = DOMSerializer
.fromSchema(this.schema)
.serializeFragment(this.state.doc.content)
div.appendChild(fragment)
return div.innerHTML
return getHtmlFromFragment(this.state.doc, this.schema)
}
/**

View File

@@ -1,26 +1,11 @@
import getSchema from './getSchema'
import { Node as ProseMirrorNode, DOMSerializer } from 'prosemirror-model'
import getHtmlFromFragment from './getHtmlFromFragment'
import { Node, DOMSerializer } from 'prosemirror-model'
import { Extensions } from '../types'
import { Schema } from 'prosemirror-model'
export default function generateHtml(doc: object, schema: (Extensions | Schema)): string {
let useSchema
export default function generateHtml(doc: object, extensions: Extensions): string {
const schema = getSchema(extensions)
const contentNode = Node.fromJSON(schema, doc)
if (Array.isArray(schema)) {
useSchema = getSchema(schema as Extensions)
} else {
useSchema = schema as Schema
}
const contentNode = ProseMirrorNode.fromJSON(useSchema, doc)
const temporaryDocument = document.implementation.createHTMLDocument()
const container = temporaryDocument.createElement('div')
const fragment = DOMSerializer
.fromSchema(useSchema)
.serializeFragment(contentNode.content)
container.appendChild(fragment)
return container.innerHTML
return getHtmlFromFragment(contentNode, schema)
}

View File

@@ -0,0 +1,14 @@
import { Node as ProseMirrorNode, DOMSerializer } from 'prosemirror-model'
import { Schema } from 'prosemirror-model'
export default function getHtmlFromFragment(doc: ProseMirrorNode, schema: Schema): string {
const fragment = DOMSerializer
.fromSchema(schema)
.serializeFragment(doc.content)
const temporaryDocument = document.implementation.createHTMLDocument()
const container = temporaryDocument.createElement('div')
container.appendChild(fragment)
return container.innerHTML
}