57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
const Fileinfo = require('./fileinfo')
|
|
|
|
const Newsentry = {
|
|
strip: function(html) {
|
|
var doc = new DOMParser().parseFromString(html, 'text/html')
|
|
var out = doc.body.textContent || ''
|
|
var splitted = out.split('.')
|
|
if (splitted.length > 2) {
|
|
return splitted.slice(0, 2).join('.') + '...'
|
|
}
|
|
return out
|
|
},
|
|
|
|
view: function(vnode) {
|
|
var deviceWidth = window.innerWidth
|
|
var pixelRatio = window.devicePixelRatio || 1
|
|
var imagePath = ''
|
|
|
|
if (vnode.attrs.media) {
|
|
if (deviceWidth > 440 || pixelRatio <= 1) {
|
|
imagePath = vnode.attrs.media.small_url
|
|
} else {
|
|
imagePath = vnode.attrs.media.medium_url
|
|
}
|
|
}
|
|
return m('newsentry', [
|
|
imagePath
|
|
? m(m.route.Link, {
|
|
class: 'cover',
|
|
href: '/article/' + vnode.attrs.path,
|
|
}, m('picture', [
|
|
m('source', { srcset:
|
|
vnode.attrs.media.small_url + ''
|
|
}),
|
|
m('img', { src: imagePath, alt: 'Article image for ' + vnode.attrs.name }),
|
|
]))
|
|
: m('a.cover.nobg'),
|
|
m('div.entrycontent', [
|
|
m('div.title', [
|
|
m(m.route.Link,
|
|
{ href: '/article/' + vnode.attrs.path },
|
|
m('h3', [vnode.attrs.name])
|
|
),
|
|
]),
|
|
(vnode.attrs.files && vnode.attrs.files.length
|
|
? vnode.attrs.files.map(function(file) {
|
|
return m(Fileinfo, { file: file, slim: true })
|
|
})
|
|
: vnode.attrs.description
|
|
? m('span.entrydescription', Newsentry.strip(vnode.attrs.description))
|
|
: null),
|
|
]),
|
|
])
|
|
},
|
|
}
|
|
|
|
module.exports = Newsentry
|