Skip to content
Snippets Groups Projects
Header.vue 4.29 KiB
Newer Older
<!-- eslint-disable -->
<template>
    <h1 class="article_header">{{header_text}}</h1>
      {{group_list}}
      <details title="Klikk for å se bøyninger" @toggle="toggle()">
Ole Voldsæter's avatar
Ole Voldsæter committed
        <summary>Bøying</summary>
          <div v-for="(lemma, index) in inflection_groups_by_lemma" :key="index">
            <component  v-for="grp in Object.keys(lemma.inflection_groups)"
                        :key="grp.replace('/', '_')"
                        :is="grp.replace('/', '_')"
                        :dictionary="dictionary"
                        :standardisations="lemma.inflection_groups[grp]"></component>
Ole Voldsæter's avatar
Ole Voldsæter committed
      <span class="dict-label">{{dict_label}}</span>
</template>

<script>
  /* eslint-disable */
Ole Voldsæter's avatar
Ole Voldsæter committed
import helpers from '../utils/helpers.js'
import ADJ from './inflection/Adjective.vue'
import ADJ_adv from './inflection/AdjectiveAdv.vue'
import ADJ_masc_fem from './inflection/AdjectiveMF.vue'
import ADJ_masc_fem_fem from './inflection/AdjectiveMF_F.vue'
import DET from './inflection/Determinative.vue'
import DET_adj from './inflection/DeterminativeAdj.vue'
import PRON from './inflection/Pronoun.vue'
Ole Voldsæter's avatar
Ole Voldsæter committed
import NOUN from './inflection/Noun.vue'
import NOUN_reg_fem from './inflection/NounRegFem.vue'
import VERB from './inflection/Verb.vue'
import VERB_sPass from './inflection/VerbSPass.vue'

export default {
  name: 'Header',
  props: {
    lemmas: Array,
  },
  computed: {
    header_text: function() {
      return this.lemmas.map(lemma => lemma.lemma).join(', ')
    },
Ole Voldsæter's avatar
Ole Voldsæter committed
    dict_label: function() {
      return {
        'bob': 'BOKMÅL',
        'nob': 'NYNORSK'
      }[this.dictionary] || ''
Ole Voldsæter's avatar
Ole Voldsæter committed
    },
    group_list: function() {
      return helpers.group_list(this.lemmas, this.dictionary)
    },
    inflection_groups_by_lemma: function() {
      let components = Object.keys(this.$options.components)
      return this.lemmas.map(
        function(lemma_){
          let inflection_groups = lemma_.paradigm_info.reduce((acc, std) =>  Object.assign(acc, {[std.inflection_group]: []}), {})
          lemma_.paradigm_info.forEach(std => inflection_groups[std.inflection_group].push(std))
          return {
            lemma: lemma_.lemma,
Ole Voldsæter's avatar
Ole Voldsæter committed
            inflection_groups: Object.fromEntries(Object.entries(inflection_groups).filter(e => components.includes(e[0].replace('/', '_'))))
    }
  },
  components: {
    ADJ,
    ADJ_adv,
    ADJ_masc_fem,
Ole Voldsæter's avatar
Ole Voldsæter committed
    PRON,
    NOUN,
    NOUN_reg_fem,
    VERB,
    VERB_sPass
  },
  data: function() {
    return {
      inflect_reported: false
    }
  },
  methods: {
    toggle: function() {
      if (! this.inflect_reported) {
        this.$plausible.trackEvent('open inflection', {props: {article: `/${this.dictionary}/${this.article_id}/${this.lemmas[0].lemma}`}})
      }
      this.inflect_reported = true
    }
Ole Voldsæter's avatar
Ole Voldsæter committed
<style>

article (table, th, td) {
  border: solid 1px;
}
Ole Voldsæter's avatar
Ole Voldsæter committed

Ole Voldsæter's avatar
Ole Voldsæter committed
summary {
  width: 30em;
}

Ole Voldsæter's avatar
Ole Voldsæter committed
article h1 {
Ole Voldsæter's avatar
Ole Voldsæter committed
  padding-top: 7px;
}

.word-classification {
  text-decoration: underline dashed;
}

Ole Voldsæter's avatar
Ole Voldsæter committed
.dict-label {
Ole Voldsæter's avatar
Ole Voldsæter committed
  color: var(--v-primary-base)  ;
Ole Voldsæter's avatar
Ole Voldsæter committed
  font-weigth: bold;
  padding-left: 5px;
  position: absolute;
  top: 0px;
  font-variant-caps: all-small-caps;
details {
  margin-top: 10px;
}

details[open] summary:after {
  content: "▼";
}

  position: relative;
  max-width: 90px;
Ole Voldsæter's avatar
Ole Voldsæter committed
  border: solid 2px var(--v-secondary-base);
  border-radius: 4px;
  padding: 3px;
Ole Voldsæter's avatar
Ole Voldsæter committed
  color: var(--v-secondary-base);
  cursor: pointer;
}

details > summary:after {
  content: "▶";
  font-weight: bold;
  position: absolute;
  right: 0;
  top: 1px;
  margin-right: 3px;
}

@keyframes open {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

details[open] summary ~ * {
  animation: open 0.3s ease-in-out;
.inflection table {
  border-collapse: collapse;
  margin: 10px;
}

.inflection td, .inflection th {
  border: solid;
  border-width: 1px;
  margin: 0px 0px 0px 0px;
  padding: 3px;
}


details > summary::-webkit-details-marker {
  display: none;
}

details > div {
  border-radius: 0 0 10px 10px;
  background-color: #eee;
  padding: 2px 6px;
  margin: 0;
  box-shadow: 3px 3px 4px black;
}

</style>