import Vue from 'vue'; import Vuex from 'vuex'; import Router from "vue-router"; import eventBus from '../lib/event-bus.ts'; import GetTextPlugin from 'vue-gettext'; import { getLocale, getVueConfig } from '../lib/gettext.js'; import PortalVue from 'portal-vue'; import BaseComponents from '../../../vue/base-components.js'; import BaseDirectives from "../../../vue/base-directives.js"; import StudipStore from "../../../vue/store/StudipStore.js"; import CKEditor from '@ckeditor/ckeditor5-vue2'; // Setup gettext Vue.use(GetTextPlugin, getVueConfig()); eventBus.on('studip:set-locale', (locale) => { Vue.config.language = locale; }) // Register global components and directives registerGlobalComponents(); registerGlobalDirectives(); // Setup store and default Stud.IP store Vue.use(Vuex); const store = new Vuex.Store({}); store.registerModule('studip', StudipStore); // Setup router and PortalVue Vue.use(Router); Vue.use(PortalVue); // Define our own global mixin for Vue Vue.mixin({ methods: { globalEmit(...args) { eventBus.emit(...args); }, globalOn(...args) { eventBus.on(...args); }, getStudipConfig: store.getters['studip/getConfig'] }, beforeCreate() { eventBus.emit('vue:app:will-create', this); }, created() { eventBus.emit('vue:app:did-create', this); }, beforeMount() { eventBus.emit('vue:app:will-mount', this); }, mounted() { eventBus.emit('vue:app:did-mount', this); }, beforeUpdate() { eventBus.emit('vue:app:will-update', this); }, updated() { eventBus.emit('vue:app:did-update', this); }, beforeDestroy() { eventBus.emit('vue:app:will-destroy', this); }, destroyed() { eventBus.emit('vue:app:did-destroy', this); } }); Vue.use(CKEditor); // Define createApp function function createApp(options, ...args) { Vue.config.language = getLocale(); return new Vue({ store, ...options }, ...args); } // Define global registration functions for components and directives function registerGlobalComponents() { for (const [name, component] of Object.entries(BaseComponents)) { Vue.component(name, component); } } function registerGlobalDirectives() { for (const [name, directive] of Object.entries(BaseDirectives)) { Vue.directive(name, directive); } } export { Vue, createApp, eventBus, store };