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 getSchema } from './src/utils/getSchema'
|
||||||
export { default as generateHtml } from './src/utils/generateHtml'
|
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 getTopNodeFromExtensions } from './src/utils/getTopNodeFromExtensions'
|
||||||
export { default as getNodesFromExtensions } from './src/utils/getNodesFromExtensions'
|
export { default as getNodesFromExtensions } from './src/utils/getNodesFromExtensions'
|
||||||
export { default as getMarksFromExtensions } from './src/utils/getMarksFromExtensions'
|
export { default as getMarksFromExtensions } from './src/utils/getMarksFromExtensions'
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import getNodeAttrs from './utils/getNodeAttrs'
|
|||||||
import getMarkAttrs from './utils/getMarkAttrs'
|
import getMarkAttrs from './utils/getMarkAttrs'
|
||||||
import removeElement from './utils/removeElement'
|
import removeElement from './utils/removeElement'
|
||||||
import getSchemaTypeByName from './utils/getSchemaTypeByName'
|
import getSchemaTypeByName from './utils/getSchemaTypeByName'
|
||||||
|
import getHtmlFromFragment from './utils/getHtmlFromFragment'
|
||||||
import ExtensionManager from './ExtensionManager'
|
import ExtensionManager from './ExtensionManager'
|
||||||
import Extension from './Extension'
|
import Extension from './Extension'
|
||||||
import Node from './Node'
|
import Node from './Node'
|
||||||
@@ -357,14 +358,7 @@ export class Editor extends EventEmitter {
|
|||||||
* Get the document as HTML.
|
* Get the document as HTML.
|
||||||
*/
|
*/
|
||||||
public html() {
|
public html() {
|
||||||
const div = document.createElement('div')
|
return getHtmlFromFragment(this.state.doc, this.schema)
|
||||||
const fragment = DOMSerializer
|
|
||||||
.fromSchema(this.schema)
|
|
||||||
.serializeFragment(this.state.doc.content)
|
|
||||||
|
|
||||||
div.appendChild(fragment)
|
|
||||||
|
|
||||||
return div.innerHTML
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,26 +1,11 @@
|
|||||||
import getSchema from './getSchema'
|
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 { Extensions } from '../types'
|
||||||
import { Schema } from 'prosemirror-model'
|
|
||||||
|
|
||||||
export default function generateHtml(doc: object, schema: (Extensions | Schema)): string {
|
export default function generateHtml(doc: object, extensions: Extensions): string {
|
||||||
let useSchema
|
const schema = getSchema(extensions)
|
||||||
|
const contentNode = Node.fromJSON(schema, doc)
|
||||||
|
|
||||||
if (Array.isArray(schema)) {
|
return getHtmlFromFragment(contentNode, 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
|
|
||||||
}
|
}
|
||||||
|
|||||||
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