substance
Version:
Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing systems.
53 lines (42 loc) • 1.52 kB
JavaScript
import { Document, HTMLExporter, JSONConverter } from '../model'
/**
Export HTML from clipboard. Used for inter-application copy'n'paste.
@internal
*/
class ClipboardExporter extends HTMLExporter {
/**
Exports document in html format.
@param {Document} doc document to export
@return {String} html representation of given document
*/
exportDocument(doc) {
this.state.doc = doc
let html
let elements = this.convertDocument(doc);
// special treatment for a text snippet
if (elements.length === 1 && elements[0].attr('data-id') === Document.TEXT_SNIPPET_ID) {
html = elements[0].innerHTML
} else {
html = elements.map(function(el) {
return el.outerHTML
}).join('')
}
let jsonConverter = new JSONConverter()
let jsonStr = JSON.stringify(jsonConverter.exportDocument(doc))
let substanceContent = `<script id="substance-clipboard" type="application/json">${jsonStr}</script>`
return '<html><head>' +substanceContent+ '</head><body>' + html + '</body></html>'
}
/**
Coverts document to set of DOM elements.
@param {Document} doc document to convert
@return {Array} array of DOM elements each represented single node
*/
convertDocument(doc) {
let content = doc.get(Document.SNIPPET_ID)
if (!content) {
throw new Error('Illegal clipboard document: could not find container "' + Document.SNIPPET_ID + '"')
}
return this.convertContainer(content)
}
}
export default ClipboardExporter