add a new getHtmlFromFragment method that is used in the editor and in the stand-alone generateHtml helper
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
14
packages/core/src/utils/getHtmlFromFragment.ts
Normal file
14
packages/core/src/utils/getHtmlFromFragment.ts
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user