80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
|
|
const FileUpload = {
|
|
fileChanged: function(vnode, event) {
|
|
if (!event.target.files[0]) return
|
|
|
|
let preview = null
|
|
if (event.target.files[0].type.startsWith('image')) {
|
|
preview = URL.createObjectURL(event.target.files[0])
|
|
}
|
|
if (this.preview) {
|
|
this.preview.clear()
|
|
}
|
|
|
|
let out = {
|
|
file: event.target.files[0],
|
|
preview: preview,
|
|
clear: function() {
|
|
URL.revokeObjectURL(preview)
|
|
}
|
|
}
|
|
|
|
this.preview = out
|
|
|
|
vnode.attrs.onfile(out)
|
|
},
|
|
|
|
oninit: function(vnode) {
|
|
this.loading = false
|
|
this.preview = null
|
|
},
|
|
|
|
view: function(vnode) {
|
|
let imageLink = this.preview && this.preview.preview || vnode.attrs.media
|
|
|
|
return m('fileupload', {
|
|
class: (vnode.attrs.class || '') + ' '
|
|
+ (!imageLink ? 'empty' : '') + ' '
|
|
+ (vnode.attrs.useimg ? 'useimg' : ''),
|
|
}, [
|
|
imageLink && vnode.attrs.useimg
|
|
? m('img', { src: imageLink })
|
|
: null,
|
|
imageLink && !vnode.attrs.useimg
|
|
? m('a', {
|
|
href: imageLink,
|
|
style: {
|
|
'background-image': 'url("' + (imageLink) + '")',
|
|
'height': vnode.attrs.height + 'px'
|
|
},
|
|
})
|
|
: null
|
|
,
|
|
!imageLink
|
|
? [
|
|
m('div.noimage', {
|
|
style: {
|
|
'padding-top': vnode.attrs.useimg ? '56.25%' : null,
|
|
'height': !vnode.attrs.useimg ? vnode.attrs.height + 'px' : null,
|
|
},
|
|
}),
|
|
m('div.text', vnode.children)
|
|
]
|
|
: null,
|
|
m('input', {
|
|
accept: 'image/*',
|
|
type: 'file',
|
|
onchange: this.fileChanged.bind(this, vnode),
|
|
}),
|
|
/*imageLink && vnode.attrs.ondelete
|
|
? m('button.remove', { onclick: vnode.attrs.ondelete })
|
|
: null,
|
|
this.loading
|
|
? m('div.loading-spinner')
|
|
: null,*/
|
|
])
|
|
},
|
|
}
|
|
|
|
module.exports = FileUpload
|