{"version":3,"file":"DatasetDetailsKeywords.vue.mjs","sources":["../../../lib/datasetDetails/features/DatasetDetailsKeywords.vue"],"sourcesContent":["<template>\n    <div class=\"mt-2 flex-column dsd-feature\">\n      <div >\n      <dataset-details-feature-header\n      :title=\"'Keywords '+'(' + getKeywords.length + ')'\"\n      :arrowDown=\"!isKeywordsAllDisplayed\"\n      tag=\"keywords-toggle\"\n      :onClick=\"toggleDisplayCount\"\n    />\n      </div>\n      <div v-if=\"isKeywordsAllDisplayed\" class=\"keywords__item row mt-4\">\n          <span\n            v-for='(keyword, i) in displayedKeywords'\n            :key=\"i\"\n            class=\"col-6 col-sm-3 col-md-2 mt-md-0 mt-3 mb-2 px-1\"\n          >\n          <app-link v-if=\"showKeyword(keyword) && isKeywordsAllDisplayed\" :to=\"getKeywordLink(keyword)\" :rel=\"followKeywordLinks\">\n              <small class=\"d-inline-block text-nowrap w-100 py-2 rounded-pill text-center tag-color\"\n                     :data-toggle=\"keywordTruncated(keyword) ? 'tooltip' : false\"\n                     :data-placement=\"keywordTruncated(keyword) ? 'top' : false\"\n                     :aria-label=\"keyword.title\"\n                     :title=\"keywordTruncated(keyword) ? keyword.title : false\">\n                {{ truncate(keyword.title, maxKeywordLength, false) }}\n              </small>\n            </app-link>\n          </span>\n      </div>\n      <div>\n      </div>\n<!--      <div>-->\n<!--        <div-->\n<!--          v-if=\"!keywords.displayAll && !isKeywordsAllDisplayed\"-->\n<!--          class=\"keywords__item\"-->\n<!--        >-->\n<!--          <div-->\n<!--            class=\"keywords__actions pb-md-3\"-->\n<!--          >-->\n<!--            <button-->\n<!--              v-for=\"increment in keywords.incrementSteps.filter(nonOverflowingIncrementsForKeywords)\"-->\n<!--              :key=\"increment\"-->\n<!--              class=\"btn btn-sm btn-secondary mr-1\"-->\n<!--              @click=\"increaseNumDisplayedKeywords(increment)\"-->\n<!--            >-->\n<!--              <i class=\"fas fa-chevron-down\"/> {{ $t('message.metadata.showXMore', { increment }) }}-->\n<!--            </button>-->\n<!--            <button-->\n<!--              class=\"btn btn-sm btn-primary\"-->\n<!--              @click=\"keywords.displayCount = getKeywords.length\"-->\n<!--            >-->\n<!--              <i class=\"fas fa-eye\"/> {{ $t('message.metadata.showAll') }} {{ getKeywords.length.toLocaleString('fi') }}-->\n<!--            </button>-->\n<!--          </div>-->\n<!--        </div>-->\n<!--      </div> -->\n    </div>\n</template>\n\n<script>\n// DatasetDetailsFeatureHeader is imported globally\n// import DatasetDetailsFeatureHeader from \"@/modules/datasetDetails/features/DatasetDetailsFeatureHeader\";\nimport {truncate} from \"../../utils/helpers\";\nimport {mapGetters} from \"vuex\";\nimport {has, isString} from \"lodash\";\nimport AppLink from \"../../widgets/AppLink\";\nimport {sortAlphabetically} from \"../../datasetDetails/features/utils/sortAlphabetically\";\nimport $ from \"jquery\";\n\n\nexport default {\n  name: \"DatasetDetailsKeywords\",\n  components: {AppLink,\n    // DatasetDetailsFeatureHeader\n  },\n  props: {\n    showKeyword: Function,\n  },\n  data() {\n    return {\n      defaultLocale: this.$env.languages.locale,\n      showTitle: this.$env.content.datasetDetails.keywords.showTitle,\n      defaultDisplayCount: 0,\n      keywords: {\n        displayAll: this.$env.content.datasetDetails.keywords.collapsed ? this.$env.content.datasetDetails.keywords.collapsed : false,\n        displayCount: 24, // Should never exceed number of keywords\n        incrementSteps: [12, 60],\n      },\n      maxKeywordLength: this.$env.content.datasets.maxKeywordLength,\n      followKeywordLinks: this.$env.content.datasets.followKeywordLinks\n    }\n  },\n  computed: {\n    ...mapGetters('datasetDetails', [\n      'getKeywords'\n    ]),\n    displayedKeywords() {\n      return this.keywords.displayAll\n        ? Object.freeze(this.sortedKeywords)\n        : Object.freeze(this.sortedKeywords.slice(0, this.keywords.displayCount));\n    },\n    isKeywordsAllDisplayed() {\n      return this.keywords.displayAll;\n    },\n    remainingKeywords() {\n      return this.getKeywords.length - this.keywords.displayCount;\n    },\n    sortedKeywords() {\n      let selected = [], fallback = [], other = {}, without = []; // eslint-disable-line\n      const selectedLanguage = this.$route.query.locale;\n      const fallbackLanguage = this.defaultLocale;\n      // Sort by language\n      this.getKeywords.forEach(k => has(k, 'language') && isString(k.language)\n        ? (k.language === selectedLanguage\n          ? selected.push(k)\n          : k.language === fallbackLanguage\n            ? fallback.push(k)\n            : has(other, k.language)\n              ? other[k.language].push(k)\n              : other[k.language] = [k])\n        : without.push(k));\n      // Sort alphabetically\n      this.sortAlphabetically(selected, 'title', selectedLanguage);\n      this.sortAlphabetically(fallback, 'title', fallbackLanguage);\n      Object.keys(other).forEach(key => this.sortAlphabetically(other[key], 'title', selectedLanguage || fallbackLanguage));\n      other = Object.keys(other).sort().reduce((arr, el) => arr.concat(other[el]), []);\n      this.sortAlphabetically(without, 'title', selectedLanguage || fallbackLanguage);\n      // Return sorted keywords by language order\n      return selected\n        .concat(fallback)\n        .concat(other)\n        .concat(without);\n    }\n  },\n  methods: {\n    truncate,\n    sortAlphabetically,\n    // Increases the current number of keywords displayed\n    // and clamps the result so that it never exceeds the number of all keywords.\n    increaseNumDisplayedKeywords(increment) {\n      const clampedSum = this.clamp(this.keywords.displayCount + increment, 0, this.getKeywords.length);\n      this.keywords.displayCount = clampedSum;\n    },\n    nonOverflowingIncrementsForKeywords(incrementStep) {\n      return this.keywords.displayCount + incrementStep <= this.getKeywords.length;\n    },\n    keywordTruncated(keyword) {\n      return keyword.title.length > this.maxKeywordLength;\n    },\n    clamp(n, min, max) {\n      return Math.min(Math.max(n, min), max);\n    },\n    getKeywordLink(keyword) {\n      return { path: `/datasets`, query: Object.assign({}, { keywords: keyword.id, locale: this.$route.query.locale}) };\n    },\n    toggleDisplayCount() {\n    this.keywords.displayAll = !this.keywords.displayAll;\n    $('body').tooltip({selector: '[data-toggle=\"tooltip\"]'});\n    }\n  }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.tag-color {\n  background-color: var(--tag-color);\n}\n.keywords__item > div {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n</style>\n"],"names":["_sfc_main","AppLink","mapGetters","selected","fallback","other","without","selectedLanguage","fallbackLanguage","k","has","isString","key","arr","el","truncate","sortAlphabetically","increment","clampedSum","incrementStep","keyword","n","min","max","$","_hoisted_1","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_dataset_details_feature_header","_ctx","$options","_hoisted_2","_Fragment","_renderList","i","$props","_createBlock","_component_app_link","$data","_toDisplayString","_hoisted_3"],"mappings":"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"}