const Fileinfo = require('./fileinfo')
const media = require('./media')

const Articleslim = {
  oninit: function(vnode) {
    this.lastId = null
    this.onbeforeupdate(vnode)
  },

  strip: function(html) {
    var doc = new DOMParser().parseFromString(html, 'text/html')
    var out = (doc.body.textContent || '').replace(/([\.!?])/g, '$1 ')
    var splitted = out.split('.')
    if (splitted.length > 2) {
      return splitted.slice(0, 2).join('.') + '...'
    }
    return out
  },

  onbeforeupdate: function(vnode) {
    let article = vnode.attrs.article

    if (this.lastId !== article.id) {
      this.lastId = article.id
      this.description = null

      if (article.content) {
        for (let i = 0; i < article.content.blocks.length; i++) {
          if (article.content.blocks[i].type === 'paragraph') {
            this.description = article.content.blocks[i].data.text
            break
          } else if (article.content.blocks[i].type === 'htmlraw') {
            this.description = this.strip(article.content.blocks[i].data.html)
            break
          }
        }
      }

      this.pictureData = media.generatePictureSource(
        article,
        '(max-width: 440px) calc(100vw - 40px), '
        + '124px')
    }
  },

  view: function(vnode) {
    let article = vnode.attrs.article

    return m('articleslim', [
      media.getArticlePicture(
        this.pictureData,
        true,
        '/article/' + article.path,
        'Image for news item ' + article.name,
        m('a.cover.nobg')
      ),
      m('div', [
        m(m.route.Link,
          { class: 'title', href: '/article/' + article.path },
          article.name
        ),
        (article.files && article.files.length
          ? article.files.map(function(file) {
              return m(Fileinfo, { file: file, slim: true })
            })
          : this.description
            ? m('p.description', this.description)
            : null),
      ]),
    ])
  },
}

module.exports = Articleslim
