diff --git a/src/components/Article.vue b/src/components/Article.vue index aa96c988168545658b1aad5b5b20ed84fb51bf8c..5f23ab60fcf929bc421618433b9edb4aabeb5399 100644 --- a/src/components/Article.vue +++ b/src/components/Article.vue @@ -14,7 +14,7 @@ <DefElement v-for="(element, index) in article.body.etymology" :dictionary="dictionary" :key="index" :body='element' @article-click="article_link_click" /> </ul> </section> - <section class="definitions"> + <section class="definitions" v-if="has_content"> <h3>{{def_label}}</h3> <ol> <Definition v-for="definition in article.body.definitions" :dictionary="dictionary" :level="1" :key="definition.id" :body='definition' @article-click="article_link_click" /> @@ -55,6 +55,20 @@ function find_sub_articles(definition) { return sub_art_list } +function find_content(definition) { + let content_list = [] + let sub_definitions = definition.elements.filter(el => el.type_ == 'definition') + + sub_definitions.forEach((subdef, i) => { + content_list = content_list.concat(find_content(subdef)) + }) + + let content_nodes = definition.elements.filter(el => ['explanation', 'example', 'compound_list'].includes(el.type_)) + content_list = content_list.concat(content_nodes) + + return content_list +} + export default { name: 'Article', props: { @@ -78,6 +92,9 @@ export default { }, 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])) + }, + has_content: function() { + return this.article.body.definitions.reduce((acc, val) => acc.concat(find_content(val)), []).length > 0 } }, components: { @@ -189,4 +206,4 @@ ul li.definition { vertical-align: sub; } -</style> +</style> \ No newline at end of file