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 @@ ...@@ -27,8 +27,8 @@
</ul> </ul>
</section> </section>
<div class="fade"> <div class="fade">
<router-link :to="link_to_self.ref" @click.native="article_link_click(link_to_self)"> <router-link :to="link_to_self.ref" @click.native="details_click(link_to_self)">
Velg Velg 🡢
</router-link> </router-link>
</div> </div>
</div> </div>
...@@ -60,11 +60,17 @@ export default { ...@@ -60,11 +60,17 @@ export default {
props: { props: {
article: Object article: Object
}, },
data: function() {
return {
source: null
}
},
computed: { computed: {
link_to_self: function() { link_to_self: function() {
return { return {
ref: '/' + this.dictionary + '/' + this.article.article_id + '/' + encodeURIComponent(this.article.lemmas[0].lemma), 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() { dictionary: function() {
...@@ -86,7 +92,14 @@ export default { ...@@ -86,7 +92,14 @@ export default {
methods: { methods: {
article_link_click: function(item) { article_link_click: function(item) {
this.$emit('article-click', 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> </script>
......
<template> <template>
<main> <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="search_container">
<div class="lang_select_container"> <div class="lang_select_container">
<v-radio-group row v-model="lang"> <v-radio-group row v-model="lang">
...@@ -38,7 +35,11 @@ ...@@ -38,7 +35,11 @@
<div id="spinner" v-if="waiting"> <div id="spinner" v-if="waiting">
<v-progress-circular indeterminate color="secondary" size="120"></v-progress-circular> <v-progress-circular indeterminate color="secondary" size="120"></v-progress-circular>
</div> </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"> <div id="single_article_container" v-if="article">
<Article :key="article_key" :article="article" @article-click="article_link_click" /> <Article :key="article_key" :article="article" @article-click="article_link_click" />
</div> </div>
...@@ -78,7 +79,7 @@ axios.interceptors.request.use(function (config) { ...@@ -78,7 +79,7 @@ axios.interceptors.request.use(function (config) {
function navigate_to_article(self, source) { function navigate_to_article(self, source) {
axios.get(api_endpoint + '/' + self.$route.params.lang + '/article/' + self.$route.params.id) axios.get(api_endpoint + '/' + self.$route.params.lang + '/article/' + self.$route.params.id)
.then(function(response){ .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.search_results = []
self.error = null self.error = null
}) })
...@@ -201,6 +202,11 @@ export default { ...@@ -201,6 +202,11 @@ export default {
this.waiting_for_articles = true this.waiting_for_articles = true
navigate_to_article(this, item.source) 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(){ mounted: function(){
...@@ -289,7 +295,7 @@ div.welcome { ...@@ -289,7 +295,7 @@ div.welcome {
padding-bottom: 10px; 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-left: calc((100vw - 1000px) / 2);
padding-right: calc((100vw - 1000px) / 2); padding-right: calc((100vw - 1000px) / 2);
} }
...@@ -298,14 +304,6 @@ div.welcome { ...@@ -298,14 +304,6 @@ div.welcome {
padding-top: 40px; 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 { div.monthly {
padding: 20px; padding: 20px;
border-radius: 10px; border-radius: 10px;
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
<div class="flex-container" :class="$vuetify.breakpoint.name"> <div class="flex-container" :class="$vuetify.breakpoint.name">
<ul class="hits" v-if="results_bob.length"> <ul class="hits" v-if="results_bob.length">
<li class="article_container" v-for="(result, index) in results_bob" :key="index + results_hash"> <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> </Article>
</li> </li>
</ul> </ul>
<ul class="hits" v-if="results_nob.length"> <ul class="hits" v-if="results_nob.length">
<li class="article_container" v-for="(result, index) in results_nob" :key="index + results_hash"> <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> </Article>
</li> </li>
</ul> </ul>
...@@ -40,6 +40,9 @@ export default { ...@@ -40,6 +40,9 @@ export default {
methods: { methods: {
article_link_click: function(item) { article_link_click: function(item) {
this.$emit('article-click', item) this.$emit('article-click', item)
},
details_click: function(item) {
this.$emit('details-click', Object.assign(item, {results: this.hits}))
} }
}, },
components: { 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