|
|
'use strict'
/* global siteConfig */ /* eslint-disable no-new */
import CONSTANTS from './constants'
import Vue from 'vue' import VueResource from 'vue-resource' import VueClipboards from 'vue-clipboards' import VeeValidate from 'vee-validate' import { ApolloClient, createBatchingNetworkInterface } from 'apollo-client' import store from './store'
// ====================================
// Load Modules
// ====================================
import localization from './modules/localization'
// ====================================
// Load Helpers
// ====================================
import helpers from './helpers'
// ====================================
// Load Vue Components
// ====================================
import alertComponent from './components/alert.vue' import anchorComponent from './components/anchor.vue' import colorPickerComponent from './components/color-picker.vue' import editorCodeblockComponent from './components/editor-codeblock.vue' import editorFileComponent from './components/editor-file.vue' import editorVideoComponent from './components/editor-video.vue' import historyComponent from './components/history.vue' import loadingSpinnerComponent from './components/loading-spinner.vue' import loginComponent from './components/login.vue' import modalCreatePageComponent from './components/modal-create-page.vue' import modalCreateUserComponent from './components/modal-create-user.vue' import modalDeletePageComponent from './components/modal-delete-page.vue' import modalDeleteUserComponent from './components/modal-delete-user.vue' import modalDiscardPageComponent from './components/modal-discard-page.vue' import modalMovePageComponent from './components/modal-move-page.vue' import modalProfile2faComponent from './components/modal-profile-2fa.vue' import modalUpgradeSystemComponent from './components/modal-upgrade-system.vue' import pageLoaderComponent from './components/page-loader.vue' import searchComponent from './components/search.vue' import toggleComponent from './components/toggle.vue' import treeComponent from './components/tree.vue'
import adminEditUserComponent from './pages/admin-edit-user.component.js' import adminProfileComponent from './pages/admin-profile.component.js' import adminSettingsComponent from './pages/admin-settings.component.js' import adminThemeComponent from './pages/admin-theme.component.js' import configManagerComponent from './components/config-manager.component.js' import contentViewComponent from './pages/content-view.component.js' import editorComponent from './components/editor.component.js' import sourceViewComponent from './pages/source-view.component.js'
// ====================================
// Initialize Global Vars
// ====================================
window.wiki = null window.CONSTANTS = CONSTANTS
// ====================================
// Initialize Apollo Client (GraphQL)
// ====================================
window.graphQL = new ApolloClient({ networkInterface: createBatchingNetworkInterface({ uri: window.location.protocol + '//' + window.location.host + siteConfig.path + '/graphql' }), connectToDevTools: true })
// ====================================
// Initialize Vue Modules
// ====================================
Vue.use(VueResource) Vue.use(VueClipboards) Vue.use(localization.VueI18Next) Vue.use(helpers) Vue.use(VeeValidate, { enableAutoClasses: true, classNames: { touched: 'is-touched', // the control has been blurred
untouched: 'is-untouched', // the control hasn't been blurred
valid: 'is-valid', // model is valid
invalid: 'is-invalid', // model is invalid
pristine: 'is-pristine', // control has not been interacted with
dirty: 'is-dirty' // control has been interacted with
} })
// ====================================
// Register Vue Components
// ====================================
Vue.component('alert', alertComponent) Vue.component('adminEditUser', adminEditUserComponent) Vue.component('adminProfile', adminProfileComponent) Vue.component('adminSettings', adminSettingsComponent) Vue.component('adminTheme', adminThemeComponent) Vue.component('anchor', anchorComponent) Vue.component('colorPicker', colorPickerComponent) Vue.component('configManager', configManagerComponent) Vue.component('contentView', contentViewComponent) Vue.component('editor', editorComponent) Vue.component('editorCodeblock', editorCodeblockComponent) Vue.component('editorFile', editorFileComponent) Vue.component('editorVideo', editorVideoComponent) Vue.component('history', historyComponent) Vue.component('loadingSpinner', loadingSpinnerComponent) Vue.component('login', loginComponent) Vue.component('modalCreatePage', modalCreatePageComponent) Vue.component('modalCreateUser', modalCreateUserComponent) Vue.component('modalDeletePage', modalDeletePageComponent) Vue.component('modalDeleteUser', modalDeleteUserComponent) Vue.component('modalDiscardPage', modalDiscardPageComponent) Vue.component('modalMovePage', modalMovePageComponent) Vue.component('modalProfile2fa', modalProfile2faComponent) Vue.component('modalUpgradeSystem', modalUpgradeSystemComponent) Vue.component('pageLoader', pageLoaderComponent) Vue.component('search', searchComponent) Vue.component('sourceView', sourceViewComponent) Vue.component('toggle', toggleComponent) Vue.component('tree', treeComponent)
document.addEventListener('DOMContentLoaded', ev => { // ====================================
// Notifications
// ====================================
window.addEventListener('beforeunload', () => { store.dispatch('startLoading') })
// ====================================
// Bootstrap Vue
// ====================================
const i18n = localization.init() window.wiki = new Vue({ mixins: [helpers], components: {}, store, i18n, el: '#app', methods: { changeTheme(opts) { this.$el.className = `has-stickynav is-primary-${opts.primary} is-alternate-${opts.alt}` this.$refs.header.className = `nav is-${opts.primary}` this.$refs.footer.className = `footer is-${opts.footer}` } }, mounted() {
} }) })
|