Skip to content
Snippets Groups Projects
App.vue 3.64 KiB
Newer Older
Ole Voldsæter's avatar
Ole Voldsæter committed
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <div class="">
      <form class="" action="search" method="get">
        <input placeholder="Søk..." name="q" />
        <select class="" name="lang">
          <option value="nob">Bokmål</option>
          <option value="nno">Nynorsk</option>
        </select>
        <input type="submit" name="" value="Yay!">
    <img id="spinner" :class="waiting ? 'show' : 'hide'" src="./assets/spinner.gif" alt="" />
    <SearchResults :hits="search_results" :lang="query_lang" />
    <Article :article="article" />
Ole Voldsæter's avatar
Ole Voldsæter committed
  </div>
</template>

<script>
Ole Voldsæter's avatar
Ole Voldsæter committed
import axios from "axios"
Ole Voldsæter's avatar
Ole Voldsæter committed
import Article from './components/Article.vue'
Ole Voldsæter's avatar
Ole Voldsæter committed
import SearchResults from './components/SearchResults.vue'
//import Autocomplete from '@trevoreyre/autocomplete-vue'
//import '@trevoreyre/autocomplete-vue/dist/style.css'
var api_endpoint = 'https://ordbok-dev.aws.uib.no/api/dict/'
Ole Voldsæter's avatar
Ole Voldsæter committed

export default {
  name: 'app',
  data: function() {
    let params = new URLSearchParams(window.location.search.substring(1))
    let path = window.location.href.split("/")
    return {
      article_id: parseInt(path.pop()),
      search_query: params.get('q'),
      query_lang: params.get('lang'),
      path_lang: path.pop(),
Ole Voldsæter's avatar
Ole Voldsæter committed
      search_results: [],
      waiting: true,
      article: {lemmas: [], body:{pronunciation: [], definitions: [], etymology: []}},
      /*search: function(q) {
        return new Promise(resolve => {
                            {
                                "suggest": {
                                  "suggest" : {
                                    "prefix" : q,
                                    "completion" : {
                                      "field" : "suggest"
                                    }
                                  }
                                }
Ole Voldsæter's avatar
Ole Voldsæter committed
                              }).then(function(response) {
                                let hits = response.data.suggest.suggest[0].options
                                if(q.length) hits = hits.concat({q: q})
                                resolve(hits)
                              })
      result_view: function(result) {
Ole Voldsæter's avatar
Ole Voldsæter committed
        if (result._source)
          return result._source.lemmas.map(x => x.word).join(', ')
        else
          return 'Alle søkeresultater...'
Ole Voldsæter's avatar
Ole Voldsæter committed
  components: {
Ole Voldsæter's avatar
Ole Voldsæter committed
    SearchResults
  },
  methods: {
    select_result: function(event) {
Ole Voldsæter's avatar
Ole Voldsæter committed
      if(event._source){
        this.search_results = []
        this.article = event._source
      }else{
        window.location.href="search?q=" + event.q
      }
    }
  },
  mounted: function(){
    var self = this;
Ole Voldsæter's avatar
Ole Voldsæter committed
    if(this.search_query) {
      axios.get(api_endpoint + self.query_lang + '/article' + '?expand_lemmas=true&lemma_text=' + self.search_query)
Ole Voldsæter's avatar
Ole Voldsæter committed
      .then(function(response){
        self.waiting = false
Ole Voldsæter's avatar
Ole Voldsæter committed
      })
    }
    else if(this.article_id)
Ole Voldsæter's avatar
Ole Voldsæter committed
    {
      axios.get(api_endpoint + self.path_lang + '/article' + '/' + self.article_id + '?expand_lemmas=true&expand_refs=true')
      .then(function(response){
        self.waiting = false
Ole Voldsæter's avatar
Ole Voldsæter committed
    }
    else {
      this.waiting = false
    }
Ole Voldsæter's avatar
Ole Voldsæter committed
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #2c3e50;
  margin-top: 60px;
  margin-left: 30%;
Ole Voldsæter's avatar
Ole Voldsæter committed
  margin-right: 10%;
Ole Voldsæter's avatar
Ole Voldsæter committed
}
.show {
  display: block;
}

.hide {
  display: none;
}

.autocomplete {
  width: 25em;
}
Ole Voldsæter's avatar
Ole Voldsæter committed
</style>