<template> <li> <div class="preview"> <h4 v-html="previewHeader"></h4> <h5 v-if="searchHit._source">{{group_list}}</h5> {{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' let labels = { 'nob': 'Bokmål', 'nno': 'Nynorsk', 'norsk_ordbok': 'Norsk Ordbok' } export default { name: 'Preview', props: { searchHit: Object }, computed: { previewHeader: function(){ return this.searchHit.text && this.searchHit.text + " (" + labels[this.searchHit._index] + ")" || (this.searchHit._source && this.searchHit._source.lemmas.map(l => `<span class="homograph">${l.hgno ? String.fromCharCode(0x215f + l.hgno) + ' ' : ''}</span>${l.lemma}`) || []).join(',') || "Alle søkeresultater..." }, previewText: function(){ if (! this.searchHit._source) return '' let element = this.searchHit._source.body.definitions[0] || '' while (element.type_ == 'definition') element = element.elements[0] if (element.type_ == 'example') { element = element.quote } else if (! element.content){ element = {content: '', items: []} } let replacements = element.items.map(item => item.text || item.string || entities[item.id] || languages[item.id] || item.id || item.lemmas[0].lemma).reverse() let replacement = () => replacements.pop() return element.content.replace(/\$/gi, replacement) }, group_list: function() { return helpers.group_list(this.searchHit._source.lemmas) } }, components: { } } </script> <style scoped> h4, h5 { padding: 0px; margin: 0px; } </style>