Skip to content
Snippets Groups Projects
Article.vue 3.42 KiB
Newer Older
Ole Voldsæter's avatar
Ole Voldsæter committed
<template>
Ole Voldsæter's avatar
Ole Voldsæter committed
  <article v-if="article" :class="dictionary">
    <Header :lemmas="article.lemmas" :dictionary="dictionary" :article_id="article.article_id" />
Ole Voldsæter's avatar
Ole Voldsæter committed
    <section v-if="article.body.pronunciation && article.body.pronunciation.length">
Ole Voldsæter's avatar
Ole Voldsæter committed
      <h3>Uttale</h3>
        <ul>
          <DefElement v-for="(element, index) in article.body.pronunciation" :dictionary="dictionary" :key="index" :body='element' @article-click="article_link_click" />
Ole Voldsæter's avatar
Ole Voldsæter committed
        </ul>
Ole Voldsæter's avatar
Ole Voldsæter committed
    <section v-if="article.body.etymology && article.body.etymology.length">
Ole Voldsæter's avatar
Ole Voldsæter committed
      <h3>Etymologi</h3>
        <ul>
          <DefElement v-for="(element, index) in article.body.etymology" :dictionary="dictionary" :key="index" :body='element' @article-click="article_link_click" />
Ole Voldsæter's avatar
Ole Voldsæter committed
        </ul>
Ole Voldsæter's avatar
Ole Voldsæter committed
    <section>
        <Definition v-for="definition in article.body.definitions" :dictionary="dictionary" :level="1" :key="definition.id" :body='definition' @article-click="article_link_click" />
Ole Voldsæter's avatar
Ole Voldsæter committed
    <section v-if="sub_articles.length">
      <h3>Faste uttrykk</h3>
      <ul>
        <SubArticle :body="subart" v-for="(subart, index) in sub_articles" :dictionary="dictionary" :key="index" @article-click="article_link_click" />
      </ul>
    </section>
Ole Voldsæter's avatar
Ole Voldsæter committed
</template>

<script>
Ole Voldsæter's avatar
Ole Voldsæter committed
import DefElement from './DefElement.vue'
import Definition from './Definition.vue'
Ole Voldsæter's avatar
Ole Voldsæter committed
import SubArticle from './SubArticle.vue'
import Header from './Header.vue'
Ole Voldsæter's avatar
Ole Voldsæter committed
function find_sub_articles(definition) {
  let sub_art_list = []
  let sub_definitions = definition.elements.filter(el => el.type_ == 'definition')

  sub_definitions.forEach((subdef, i) => {
    sub_art_list = sub_art_list.concat(find_sub_articles(subdef))
  })

  let sub_articles = definition.elements.filter(el => el.type_ == 'sub_article')
  sub_art_list = sub_art_list.concat(sub_articles)

  return sub_art_list
}

Ole Voldsæter's avatar
Ole Voldsæter committed
export default {
  name: 'Article',
  props: {
    article: Object
  computed: {
    dictionary: function() {
      return this.article.dictionary
    },
    def_label: function() {
      return this.dictionary == 'bob' ? 'Betydning' : 'Tyding'
Ole Voldsæter's avatar
Ole Voldsæter committed
    },
    sub_articles: function() {
      return this.article.body.definitions.reduce((acc, val) => acc.concat(find_sub_articles(val)), []).sort((s1, s2) => s1.lemmas[0].localeCompare(s2.lemmas[0]))
Ole Voldsæter's avatar
Ole Voldsæter committed
  components: {
    Definition,
Ole Voldsæter's avatar
Ole Voldsæter committed
    SubArticle,
Ole Voldsæter's avatar
Ole Voldsæter committed
  methods: {
    article_link_click: function(item) {
      this.$emit('article-click', item)
    }
Ole Voldsæter's avatar
Ole Voldsæter committed
  }
}
</script>

Ole Voldsæter's avatar
Ole Voldsæter committed
  position: relative;
  margin: 10px;
  border-radius: 2px;
  background-color: #FFFFFF;
  box-shadow: 1px 1px 4px rgba(0.5, 0.5, 0.5, 0.2);
Ole Voldsæter's avatar
Ole Voldsæter committed
section {
  padding-top: 1em;
}

Ole Voldsæter's avatar
Ole Voldsæter committed
h3 {
Ole Voldsæter's avatar
Ole Voldsæter committed
  color: #560027;
Ole Voldsæter's avatar
Ole Voldsæter committed
}
li {
  padding-bottom: 4px;
}

li.level1.definition {
  list-style: upper-alpha;
}

li.level2.definition {
  list-style: decimal;
}

Ole Voldsæter's avatar
Ole Voldsæter committed
  /* Norsk ordbok skal ha "lower.alpha" her */
  list-style: disc;
}

li.sub_article > ul {
  padding-left: 0px;
}

::marker {
  font-weight: bold;
Ole Voldsæter's avatar
Ole Voldsæter committed
  color: var(--v-primary-base);
Ole Voldsæter's avatar
Ole Voldsæter committed
ol > li:only-child.level1, li:only-child.level2 {
  /* level3 a.k.a. underdefinisjoner skal vises med bullet selv om de står alene */
ul, ol {
  padding-left: !important 20px;
  list-style:none;
}

ul li.definition {
  list-style: disc;
Ole Voldsæter's avatar
Ole Voldsæter committed
</style>