Skip to content
Snippets Groups Projects
Preview.vue 1.92 KiB
Newer Older
Ole Voldsæter's avatar
Ole Voldsæter committed
<template>
  <li>
    <div class="preview">
      <h4 v-html="previewHeader"></h4>
      <h5 v-if="searchHit.body">{{group_list}}</h5>
Ole Voldsæter's avatar
Ole Voldsæter committed
      {{previewText.substring(0, 40) + (previewText ? '...' : '')}}
    </div>
  </li>
</template>

<script>
import entities from '../utils/entities.js'
import languages from '../utils/languages.js'
import helpers from '../utils/helpers.js'

Ole Voldsæter's avatar
Ole Voldsæter committed
let labels = {
Ole Voldsæter's avatar
Ole Voldsæter committed
  'bob': 'Bokmål',
  'nob': 'Nynorsk',
Ole Voldsæter's avatar
Ole Voldsæter committed
  'norsk_ordbok': 'Norsk Ordbok'
}

Ole Voldsæter's avatar
Ole Voldsæter committed
export default {
  name: 'Preview',
  props: {
    searchHit: Object
  },
  computed: {
    previewHeader: function(){
      return this.searchHit.match && this.searchHit.match + " (" + labels[this.searchHit.dictionary] + ")" ||
            (this.searchHit.lemmas && this.searchHit.lemmas.map(l => `${l.lemma}`) || []).join(',') ||
            "Alle søkeresultater..."
    },
Ole Voldsæter's avatar
Ole Voldsæter committed
    previewText: function(){
      if (! this.searchHit.body) return ''
      let element = this.searchHit.body.definitions[0] || ''
Ole Voldsæter's avatar
Ole Voldsæter committed
      while (element.type_ == 'definition') element = element.elements[0]
      if (element.type_ == 'example') {
        element = element.quote
      } else if (! element.content){
        element = {content: '', items: []}
      }

      let lang = this.searchHit.dictionary
Ole Voldsæter's avatar
Ole Voldsæter committed
      let replacements = element.items.map(item => item.text ||
                                           item.string ||
                                           entities[lang][item.id] ||
                                           languages[lang][item.id] ||
Ole Voldsæter's avatar
Ole Voldsæter committed
                                           item.id ||
                                           item.lemmas[0].lemma).reverse()
Ole Voldsæter's avatar
Ole Voldsæter committed

      let replacement = () => replacements.pop()

      return element.content.replace(/\$/gi, replacement)
    },
    group_list: function() {
      return helpers.group_list(this.searchHit.lemmas)
Ole Voldsæter's avatar
Ole Voldsæter committed
    }
  },
  components: {

  }
}

</script>
<style scoped>
h4, h5 {
    padding: 0px;
    margin: 0px;
}
</style>