<template> <section id="search_results" :class="$vuetify.breakpoint.name"> <Pagination @update-page="$emit('update-page')"/> <div class="flex-container" :class="$vuetify.breakpoint.name"> <ul class="hits" v-if="$vuetify.breakpoint.smAndDown"> <li class="article_container" v-for="(result, index) in both_dicts" :key="index + both_hash"> <Article :article="result" :title_id="`title_${index}`" @article-click="article_link_click" @details-click="details_click"> </Article> </li> </ul> <ul class="hits" v-if="!$vuetify.breakpoint.smAndDown && count_bm"> <li class="article_container" v-for="(result, index) in results_bm" :key="index + bm_hash"> <Article :article="result" :title_id="`title_${index}`" @article-click="article_link_click" @details-click="details_click"> </Article> </li> </ul> <ul class="hits" v-if="!$vuetify.breakpoint.smAndDown && count_nn"> <li class="article_container" v-for="(result, index) in results_nn" :key="index + nn_hash"> <Article :article="result" :title_id="`title_${index + results_bm.length}`" @article-click="article_link_click" @details-click="details_click" :class="right_col_class_name"> </Article> </li> </ul> </div> <Pagination @update-page="$emit('update-page')" bottom/> </section> </template> <script> const interleave = ([ x, ...xs ], ys = []) => x === undefined ? ys : [ x, ...interleave (ys, xs) ] import Article from './Article.vue' import Pagination from './Pagination.vue' export default { name: 'SearchResults', props: { results_bm: Array, results_nn: Array, lang: String, meta: Object }, computed: { right_col_class_name: function() { if (this.$vuetify.breakpoint.mdAndUp) { if (this.results_bm) { return 'righ_hand_column' } } return '' }, both_dicts: function() { let merged = interleave(this.results_bm, this.results_nn) return merged }, both_hash: function(){ return this.both_dicts.reduce((hash, hit) => (hash + hit.article_id) % 10000, 0) }, bm_hash: function(){ return this.results_bm.reduce((hash, hit) => (hash + hit.article_id) % 10000, 0) }, nn_hash: function(){ return this.results_nn.reduce((hash, hit) => (hash + hit.article_id) % 10000, 0) }, count_bm: function(){ if (this.$parent.article_info.articles.bm ){ return this.$parent.article_info.articles.bm.length } else { return 0 } }, count_nn: function(){ if (this.$parent.article_info.articles.nn ){ return this.$parent.article_info.articles.nn.length } else { return 0 } } }, methods: { article_link_click: function(item) { this.$emit('article-click', item) }, details_click: function(item) { this.$emit('details-click', item) }, }, components: { Article, Pagination } } </script> <style > h2 { color: var(--v-primary-base); margin: 0px; padding: 20px 0px 20px 0px; } .hits { min-width: 50%; } .flex-container { display: flex; } .flex-container.xs, .flex-container.sm { flex-direction: column; } .flex-container > ul { padding: 0px !important; min-width: 50%; } .results-count { color: var(--v-primary-base); margin-left: 24px; } article.right_hand_column div.inflection-wrapper { right: -35px; } .pagination { margin-left: 10px; display: flex; flex-wrap: wrap; } .total-results { font-weight: bold; color: var(--v-primary-base); } .result-counts { padding: 10px; justify-content: right !important; } .total-results, .dict-counts { white-space: nowrap; } .pagination ul { padding-inline-start: 0px !important; justify-content: right; } </style>