Skip to content
Snippets Groups Projects
Commit a95c495f authored by Ole Voldsæter's avatar Ole Voldsæter
Browse files

re meta#300 forbedret navigasjon fra "stub" til full artikkel

parent ce68785d
No related branches found
No related tags found
No related merge requests found
......@@ -27,8 +27,8 @@
</ul>
</section>
<div class="fade">
<router-link :to="link_to_self.ref" @click.native="article_link_click(link_to_self)">
Velg
<router-link :to="link_to_self.ref" @click.native="details_click(link_to_self)">
Velg 🡢
</router-link>
</div>
</div>
......@@ -60,11 +60,17 @@ export default {
props: {
article: Object
},
data: function() {
return {
source: null
}
},
computed: {
link_to_self: function() {
return {
return {
ref: '/' + this.dictionary + '/' + this.article.article_id + '/' + encodeURIComponent(this.article.lemmas[0].lemma),
article_id: this.article.article_id
article: this.article,
source: this.source
}
},
dictionary: function() {
......@@ -86,7 +92,14 @@ export default {
methods: {
article_link_click: function(item) {
this.$emit('article-click', item)
},
details_click: function(item) {
this.$emit('details-click', item)
}
},
created: function() {
// make non reactive
this.source = this.$route.path
}
}
</script>
......
<template>
<main>
<p class="description" :class="$vuetify.breakpoint.name" v-if="$vuetify.breakpoint.mdAndUp && ! $route.name">
Skrivemåte og bøying i tråd med norsk rettskriving
</p>
<div class="search_container">
<div class="lang_select_container">
<v-radio-group row v-model="lang">
......@@ -38,7 +35,11 @@
<div id="spinner" v-if="waiting">
<v-progress-circular indeterminate color="secondary" size="120"></v-progress-circular>
</div>
<SearchResults :hits="search_results" :lang="lang" @article-click="article_link_click" v-if="search_results.length && ! waiting" />
<SearchResults :hits="search_results"
:lang="lang"
@article-click="article_link_click"
@details-click="details_click"
v-if="search_results.length && ! waiting" />
<div id="single_article_container" v-if="article">
<Article :key="article_key" :article="article" @article-click="article_link_click" />
</div>
......@@ -78,7 +79,7 @@ axios.interceptors.request.use(function (config) {
function navigate_to_article(self, source) {
axios.get(api_endpoint + '/' + self.$route.params.lang + '/article/' + self.$route.params.id)
.then(function(response){
self.article = Object.assign(response.data, {'dictionary': self.$route.params.lang})
self.article = Object.assign(response.data, {'dictionary': self.$route.params.lang, source: source, results: self.search_results})
self.search_results = []
self.error = null
})
......@@ -201,6 +202,11 @@ export default {
this.waiting_for_articles = true
navigate_to_article(this, item.source)
}
},
details_click: function(item) {
this.article = Object.assign(item.article, {source: item.source})
this.search_results = []
history.replaceState({article: this.article, search_results: [], lang: this.lang, error: null}, '')
}
},
mounted: function(){
......@@ -289,7 +295,7 @@ div.welcome {
padding-bottom: 10px;
}
#search_results, #spinner, #single_article_container, div.welcome, div.search_container, p.description, .error {
#search_results, #spinner, #single_article_container, div.welcome, div.search_container, .error {
padding-left: calc((100vw - 1000px) / 2);
padding-right: calc((100vw - 1000px) / 2);
}
......@@ -298,14 +304,6 @@ div.welcome {
padding-top: 40px;
}
p.description {
font-size: 36px;
color: var(--v-primary-base);
background-color: var(--v-tertiary-base);
padding-top: 40px;
padding-bottom: 10px;
}
div.monthly {
padding: 20px;
border-radius: 10px;
......
......@@ -3,13 +3,13 @@
<div class="flex-container" :class="$vuetify.breakpoint.name">
<ul class="hits" v-if="results_bob.length">
<li class="article_container" v-for="(result, index) in results_bob" :key="index + results_hash">
<Article :article="result" @article-click="article_link_click">
<Article :article="result" @article-click="article_link_click" @details-click="details_click">
</Article>
</li>
</ul>
<ul class="hits" v-if="results_nob.length">
<li class="article_container" v-for="(result, index) in results_nob" :key="index + results_hash">
<Article :article="result" @article-click="article_link_click">
<Article :article="result" @article-click="article_link_click" @details-click="details_click">
</Article>
</li>
</ul>
......@@ -40,6 +40,9 @@ export default {
methods: {
article_link_click: function(item) {
this.$emit('article-click', item)
},
details_click: function(item) {
this.$emit('details-click', Object.assign(item, {results: this.hits}))
}
},
components: {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment