nfp_sites/nfp_moe/app/editorblock.js

80 lines
1.6 KiB
JavaScript

/*
Blocks:
* Paragraph
* Header
* SimpleImage
* Quote
* CodeTool
* List
* Delimiter
* RawTool
Other:
* InlineCode
*/
const EditorBlock = {
oninit: function(vnode) {
this.id = null
this.output = null
this.onbeforeupdate(vnode)
},
onbeforeupdate: function(vnode) {
if (!vnode.attrs.block && !this.id) {
return false
}
if (vnode.attrs.block && vnode.attrs.block.id
&& vnode.attrs.block.id === this.id) {
return false
}
if (vnode.attrs.block && vnode.attrs.block.id
&& vnode.attrs.block.id !== this.id) {
this.renderblock(vnode)
} else {
this.output = null
}
},
renderblock: function(vnode) {
let block = vnode.attrs.block
this.id = block.id
switch (block.type) {
case 'header':
this.output = m('h' + block.data.level, block.data.text)
break;
case 'paragraph':
this.output = m('p', m.trust(block.data.text))
break
case 'htmlraw':
this.output = m.trust(block.data.html)
break
case 'quote':
this.output = m('blockquote', [
m('p', block.data.text),
m('span.author', block.data.caption),
])
break
case 'list':
this.output = m(
block.data.style === 'unordered' ? 'ul' : 'ol',
block.data.items.map(item => m('li', item))
)
break
case 'code':
this.output = m('pre', block.data.code)
break
default:
this.output = m('p', m.trust(block))
break
}
},
view: function(vnode) {
return this.output
}
}
module.exports = EditorBlock