From 9f80e16901174bdf9d1972b58e11c22db4ca6117 Mon Sep 17 00:00:00 2001
From: Henrik Askjer <henrik.askjer@uib.no>
Date: Tue, 30 Nov 2021 10:28:46 +0100
Subject: [PATCH] keyword parameters

---
 src/components/DictionaryView.vue | 48 ++++++++++++++++++++++---------
 src/main.js                       |  5 ++++
 2 files changed, 40 insertions(+), 13 deletions(-)

diff --git a/src/components/DictionaryView.vue b/src/components/DictionaryView.vue
index 1b0521e5..29ccb226 100644
--- a/src/components/DictionaryView.vue
+++ b/src/components/DictionaryView.vue
@@ -221,9 +221,9 @@ export default {
     },
     select_result: function (event) {
         this.event = event
-        let name = event.search ? 'search' : 'w'
-        let route = `/${this.lang}/${name}/${event.match || event.q}${this.pos_param()}`
-        this.$router.push(route)
+        let path = `/${this.lang}/search`
+        let query = {q: event.match || event.q, pos: this.pos_param(), scope: this.scope}
+        this.$router.push({path, query})
         navigate_to_query(this)
          
         // Tracking
@@ -234,14 +234,19 @@ export default {
         })
       },
       pos_param: function() {
-        if (this.pos_selected) return '/'+this.pos_selected
-        return ''
+        if (this.pos_selected) return this.pos_selected.toLowerCase()
       },
       update_lang_form: function (lang) {
         this.lang = lang
-        let name = null
-        let query = null
-        if(this.$route.name == 'word') {
+        let name
+        let query
+        if (this.$route.name == 'query') {
+          let path = this.lang + "/search"
+          query = {q: this.$route.query.q, pos: this.pos_param(), scope: this.scope}
+          this.$router.push(path, query)
+          navigate_to_query(this, query.q)
+        }
+        else if(this.$route.name == 'word') {
             name = "w"
             query = this.$route.params.word
             this.$router.push(`/${this.lang}/${name}/${query+this.pos_param()}`)
@@ -258,7 +263,14 @@ export default {
         this.pos_selected = pos
         let name = null
         let query = null
-        if(this.$route.name == 'word') {
+        if(this.$route.name == 'query') {
+          let path = `/${this.lang}/search`
+          query = {q: this.$route.query.q, pos: this.pos_param(), scope: this.scope}
+          this.$router.push({path, query})
+          navigate_to_query(this, query.q)
+          
+        }
+        else if(this.$route.name == 'word') {
             name = "w"
             query = this.$route.params.word
             this.$router.push(`/${this.lang}/${name}/${query+this.pos_param()}`)
@@ -308,16 +320,26 @@ export default {
       })
     ]).then(function(_) {
       self.waiting_for_metadata = false
-      if (self.$route.params.pos) {
-        console.log("pos", self.$route.params.pos )
-        self.pos_selected = self.$route.params.pos 
+
+      if (self.$route.name == 'query') {
+        self.lang = self.$route.params.lang
+        if (self.$route.query.pos) {
+          self.pos_selected = self.$route.query.pos.toUpperCase()
+        }
+        navigate_to_query(self, self.$route.query.q)
       }
-      if(self.$route.name == 'search') {
+      else if(self.$route.name == 'search') {
         self.lang = self.$route.params.lang
+        if (self.$route.params.pos ) {
+          self.pos_selected = self.$route.params.pos 
+        }
         navigate_to_query(self, self.$route.params.query)
       } 
       else if(self.$route.name == 'word') {
         self.lang = self.$route.params.lang
+        if (self.$route.params.pos ) {
+          self.pos_selected = self.$route.params.pos 
+        }
         navigate_to_query(self, self.$route.params.word)
       }
       else if(self.$route.name == 'lookup'){
diff --git a/src/main.js b/src/main.js
index 5171cf54..17020d9b 100644
--- a/src/main.js
+++ b/src/main.js
@@ -84,6 +84,11 @@ const router = new VueRouter({
             {
               path: ':lang(bm|nn|bm,nn)',
               children: [
+                {
+                  path: 'search',
+                  name: 'query',
+                  params: {q: '', pos: 'all', scope: 'w'}
+                },
                 {
                   name: 'word',
                   path: 'w/:word/:pos?'
-- 
GitLab