app.js 5.14 KB
Newer Older
1
'use strict'
2

NGPixel's avatar
NGPixel committed
3
/* global siteConfig */
4
/* eslint-disable no-new */
NGPixel's avatar
NGPixel committed
5

6
import Vue from 'vue'
7
import VueResource from 'vue-resource'
8
import VueClipboards from 'vue-clipboards'
9
import { ApolloClient, createBatchingNetworkInterface } from 'apollo-client'
10
import store from './store'
11 12 13 14 15 16

// ====================================
// Load Modules
// ====================================

import localization from './modules/localization'
17

18 19 20 21 22 23
// ====================================
// Load Helpers
// ====================================

import helpers from './helpers'

24 25 26 27
// ====================================
// Load Vue Components
// ====================================

28
import alertComponent from './components/alert.vue'
29 30
import anchorComponent from './components/anchor.vue'
import colorPickerComponent from './components/color-picker.vue'
31
import editorCodeblockComponent from './components/editor-codeblock.vue'
32
import editorFileComponent from './components/editor-file.vue'
33
import editorVideoComponent from './components/editor-video.vue'
34
import historyComponent from './components/history.vue'
35
import loadingSpinnerComponent from './components/loading-spinner.vue'
36
import loginComponent from './components/login.vue'
37 38
import modalCreatePageComponent from './components/modal-create-page.vue'
import modalCreateUserComponent from './components/modal-create-user.vue'
39
import modalDeleteUserComponent from './components/modal-delete-user.vue'
40
import modalDiscardPageComponent from './components/modal-discard-page.vue'
41
import modalMovePageComponent from './components/modal-move-page.vue'
NGPixel's avatar
NGPixel committed
42
import modalProfile2faComponent from './components/modal-profile-2fa.vue'
43
import modalUpgradeSystemComponent from './components/modal-upgrade-system.vue'
44
import pageLoaderComponent from './components/page-loader.vue'
45
import searchComponent from './components/search.vue'
46
import toggleComponent from './components/toggle.vue'
47
import treeComponent from './components/tree.vue'
48

49
import adminEditUserComponent from './pages/admin-edit-user.component.js'
50 51
import adminProfileComponent from './pages/admin-profile.component.js'
import adminSettingsComponent from './pages/admin-settings.component.js'
NGPixel's avatar
NGPixel committed
52
import adminThemeComponent from './pages/admin-theme.component.js'
53
import contentViewComponent from './pages/content-view.component.js'
54
import editorComponent from './components/editor.component.js'
55
import sourceViewComponent from './pages/source-view.component.js'
56

57 58 59 60 61 62 63 64 65 66 67
// ====================================
// Initialize Apollo Client (GraphQL)
// ====================================

window.apollo = new ApolloClient({
  networkInterface: createBatchingNetworkInterface({
    uri: window.location.protocol + '//' + window.location.host + siteConfig.path + '/graphql'
  }),
  connectToDevTools: true
})

68
// ====================================
69
// Initialize Vue Modules
70 71
// ====================================

72
Vue.use(VueResource)
73
Vue.use(VueClipboards)
74
Vue.use(localization.VueI18Next)
75
Vue.use(helpers)
76

NGPixel's avatar
NGPixel committed
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
// ====================================
// 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('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)
95
Vue.component('login', loginComponent)
NGPixel's avatar
NGPixel committed
96 97 98 99 100 101 102 103 104 105 106 107 108
Vue.component('modalCreatePage', modalCreatePageComponent)
Vue.component('modalCreateUser', modalCreateUserComponent)
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)

NGPixel's avatar
NGPixel committed
109
document.addEventListener('DOMContentLoaded', ev => {
110 111 112
  // ====================================
  // Notifications
  // ====================================
113

NGPixel's avatar
NGPixel committed
114
  window.addEventListener('beforeunload', () => {
115
    store.dispatch('startLoading')
116
  })
117

118 119 120 121
  // ====================================
  // Bootstrap Vue
  // ====================================

122
  const i18n = localization.init()
NGPixel's avatar
NGPixel committed
123
  window.wiki = new Vue({
124
    mixins: [helpers],
NGPixel's avatar
NGPixel committed
125
    components: {},
126 127
    store,
    i18n,
128
    el: '#app',
129 130 131 132 133 134 135
    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}`
      }
    },
136
    mounted() {
NGPixel's avatar
NGPixel committed
137

138
    }
139
  })
140
})