rittenhop-ghost/versions/5.94.2/node_modules/mobiledoc-dom-renderer/lib/renderer-factory.js

100 lines
2.5 KiB
JavaScript
Raw Normal View History

import Renderer_0_2, {
MOBILEDOC_VERSION as MOBILEDOC_VERSION_0_2
} from './renderers/0-2';
import Renderer_0_3, {
MOBILEDOC_VERSION_0_3_0,
MOBILEDOC_VERSION_0_3_1,
MOBILEDOC_VERSION_0_3_2
} from './renderers/0-3';
import RENDER_TYPE from './utils/render-type';
/**
* runtime DOM renderer
* renders a mobiledoc to DOM
*
* input: mobiledoc
* output: DOM
*/
function validateCards(cards) {
if (!Array.isArray(cards)) {
throw new Error('`cards` must be passed as an array');
}
for (let i=0; i < cards.length; i++) {
let card = cards[i];
if (card.type !== RENDER_TYPE) {
throw new Error(`Card "${card.name}" must be of type "${RENDER_TYPE}", was "${card.type}"`);
}
if (!card.render) {
throw new Error(`Card "${card.name}" must define \`render\``);
}
}
}
function validateAtoms(atoms) {
if (!Array.isArray(atoms)) {
throw new Error('`atoms` must be passed as an array');
}
for (let i=0; i < atoms.length; i++) {
let atom = atoms[i];
if (atom.type !== RENDER_TYPE) {
throw new Error(`Atom "${atom.name}" must be type "${RENDER_TYPE}", was "${atom.type}"`);
}
if (!atom.render) {
throw new Error(`Atom "${atom.name}" must define \`render\``);
}
}
}
export default class RendererFactory {
constructor({
cards=[],
atoms=[],
cardOptions={},
unknownCardHandler,
unknownAtomHandler,
markupElementRenderer={},
sectionElementRenderer={},
dom,
markupSanitizer=null
}={}) {
validateCards(cards);
validateAtoms(atoms);
if (!dom) {
if (typeof window === 'undefined') {
throw new Error('A `dom` option must be provided to the renderer when running without window.document');
}
dom = window.document;
}
this.options = {
cards,
atoms,
cardOptions,
unknownCardHandler,
unknownAtomHandler,
markupElementRenderer,
sectionElementRenderer,
dom,
markupSanitizer
};
}
render(mobiledoc) {
let { version } = mobiledoc;
switch (version) {
case MOBILEDOC_VERSION_0_2:
case undefined:
case null:
return new Renderer_0_2(mobiledoc, this.options).render();
case MOBILEDOC_VERSION_0_3_0:
case MOBILEDOC_VERSION_0_3_1:
case MOBILEDOC_VERSION_0_3_2:
return new Renderer_0_3(mobiledoc, this.options).render();
default:
throw new Error(`Unexpected Mobiledoc version "${version}"`);
}
}
}