summaryrefslogblamecommitdiffstats
path: root/webapp/src/main.js
blob: 3f59edea24d816f451d7d0862a217717e3bd32e1 (plain) (tree)
1
2
3
4
5
6
7
8


                                     



                                          
                                


                                         
                         
                                                       
                              
                                        



                                
             


                                          

                                       
                           
 


                          
                                      
                              








                                              
   

  








                            

                 





                                                                                                         
 
                           





                                                 




         
                                                          


                                              
import Vue from 'vue'
import Vuetify from 'vuetify'
import 'vuetify/dist/vuetify.min.css'
import VueCodemirror from 'vue-codemirror'
import 'codemirror/mode/shell/shell.js'
import 'codemirror/lib/codemirror.css'
import 'codemirror/theme/monokai.css'
import VueTouch from 'vue-touch'
import Vuex from 'vuex'
import globalStore from '@/store/global'
import storeModules from '@/config/store'
import axios from 'axios'
import { router, registerRouterGuards } from '@/router'
import VueI18n from 'vue-i18n'
import i18nMessages from '@/config/i18n'
import '@/assets/styles.css'

Vue.config.productionTip = false

Vue.use(Vuex)
Object.keys(storeModules).forEach(key => {
  storeModules[key].namespaced = true
})
globalStore.modules = storeModules
var store = new Vuex.Store(globalStore)
registerRouterGuards(store)

Vue.use(VueI18n)

const i18n = new VueI18n({
  locale: store.state.settings.locale,
  silentTranslationWarn: true,
  messages: i18nMessages
})

Vue.use(Vuetify, {
  theme: {
    primary: '#0195ff'
  },
  lang: {
    t: (key, ...params) => i18n.t(key, params)
  }
})

Vue.use(VueCodemirror, {
  options: {
    theme: 'monokai',
    mode: 'shell',
    lineNumbers: true,
    viewportMargin: Infinity
  }
})

Vue.use(VueTouch)

axios.interceptors.response.use(null, error => {
  if (error.response.data.status === 'TOKEN_INVALID' || error.response.data.status === 'TOKEN_MISSING') {
    axios.post('/api/logout').then(response => { router.push('/login') })
  }
  return Promise.reject(error)
})

Vue.prototype.$http = axios
Vue.prototype.$alert = function (data) {
  store.commit('notifications/newAlert', data)
}
Vue.prototype.$snackbar = function (data) {
  store.commit('notifications/newSnackbar', data)
}

new Vue({
  store,
  router,
  i18n,
  computed: { locale: () => store.state.settings.locale },
  watch: { locale: v => { i18n.locale = v } },
  template: '<router-view/>'
}).$mount('#app')