79 lines
1.6 KiB
JavaScript
79 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
|