app.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. 'use strict'
  2. /* global siteConfig */
  3. /* eslint-disable no-new */
  4. import CONSTANTS from './constants'
  5. import Vue from 'vue'
  6. import VueResource from 'vue-resource'
  7. import VueClipboards from 'vue-clipboards'
  8. import { ApolloClient, createBatchingNetworkInterface } from 'apollo-client'
  9. import store from './store'
  10. // ====================================
  11. // Load Modules
  12. // ====================================
  13. import localization from './modules/localization'
  14. // ====================================
  15. // Load Helpers
  16. // ====================================
  17. import helpers from './helpers'
  18. // ====================================
  19. // Load Vue Components
  20. // ====================================
  21. import alertComponent from './components/alert.vue'
  22. import anchorComponent from './components/anchor.vue'
  23. import colorPickerComponent from './components/color-picker.vue'
  24. import editorCodeblockComponent from './components/editor-codeblock.vue'
  25. import editorFileComponent from './components/editor-file.vue'
  26. import editorVideoComponent from './components/editor-video.vue'
  27. import historyComponent from './components/history.vue'
  28. import loadingSpinnerComponent from './components/loading-spinner.vue'
  29. import loginComponent from './components/login.vue'
  30. import modalCreatePageComponent from './components/modal-create-page.vue'
  31. import modalCreateUserComponent from './components/modal-create-user.vue'
  32. import modalDeleteUserComponent from './components/modal-delete-user.vue'
  33. import modalDiscardPageComponent from './components/modal-discard-page.vue'
  34. import modalMovePageComponent from './components/modal-move-page.vue'
  35. import modalProfile2faComponent from './components/modal-profile-2fa.vue'
  36. import modalUpgradeSystemComponent from './components/modal-upgrade-system.vue'
  37. import pageLoaderComponent from './components/page-loader.vue'
  38. import searchComponent from './components/search.vue'
  39. import toggleComponent from './components/toggle.vue'
  40. import treeComponent from './components/tree.vue'
  41. import adminEditUserComponent from './pages/admin-edit-user.component.js'
  42. import adminProfileComponent from './pages/admin-profile.component.js'
  43. import adminSettingsComponent from './pages/admin-settings.component.js'
  44. import adminThemeComponent from './pages/admin-theme.component.js'
  45. import contentViewComponent from './pages/content-view.component.js'
  46. import editorComponent from './components/editor.component.js'
  47. import sourceViewComponent from './pages/source-view.component.js'
  48. // ====================================
  49. // Initialize Global Vars
  50. // ====================================
  51. window.wiki = null
  52. window.CONSTANTS = CONSTANTS
  53. // ====================================
  54. // Initialize Apollo Client (GraphQL)
  55. // ====================================
  56. window.graphQL = new ApolloClient({
  57. networkInterface: createBatchingNetworkInterface({
  58. uri: window.location.protocol + '//' + window.location.host + siteConfig.path + '/graphql'
  59. }),
  60. connectToDevTools: true
  61. })
  62. // ====================================
  63. // Initialize Vue Modules
  64. // ====================================
  65. Vue.use(VueResource)
  66. Vue.use(VueClipboards)
  67. Vue.use(localization.VueI18Next)
  68. Vue.use(helpers)
  69. // ====================================
  70. // Register Vue Components
  71. // ====================================
  72. Vue.component('alert', alertComponent)
  73. Vue.component('adminEditUser', adminEditUserComponent)
  74. Vue.component('adminProfile', adminProfileComponent)
  75. Vue.component('adminSettings', adminSettingsComponent)
  76. Vue.component('adminTheme', adminThemeComponent)
  77. Vue.component('anchor', anchorComponent)
  78. Vue.component('colorPicker', colorPickerComponent)
  79. Vue.component('contentView', contentViewComponent)
  80. Vue.component('editor', editorComponent)
  81. Vue.component('editorCodeblock', editorCodeblockComponent)
  82. Vue.component('editorFile', editorFileComponent)
  83. Vue.component('editorVideo', editorVideoComponent)
  84. Vue.component('history', historyComponent)
  85. Vue.component('loadingSpinner', loadingSpinnerComponent)
  86. Vue.component('login', loginComponent)
  87. Vue.component('modalCreatePage', modalCreatePageComponent)
  88. Vue.component('modalCreateUser', modalCreateUserComponent)
  89. Vue.component('modalDeleteUser', modalDeleteUserComponent)
  90. Vue.component('modalDiscardPage', modalDiscardPageComponent)
  91. Vue.component('modalMovePage', modalMovePageComponent)
  92. Vue.component('modalProfile2fa', modalProfile2faComponent)
  93. Vue.component('modalUpgradeSystem', modalUpgradeSystemComponent)
  94. Vue.component('pageLoader', pageLoaderComponent)
  95. Vue.component('search', searchComponent)
  96. Vue.component('sourceView', sourceViewComponent)
  97. Vue.component('toggle', toggleComponent)
  98. Vue.component('tree', treeComponent)
  99. document.addEventListener('DOMContentLoaded', ev => {
  100. // ====================================
  101. // Notifications
  102. // ====================================
  103. window.addEventListener('beforeunload', () => {
  104. store.dispatch('startLoading')
  105. })
  106. // ====================================
  107. // Bootstrap Vue
  108. // ====================================
  109. const i18n = localization.init()
  110. window.wiki = new Vue({
  111. mixins: [helpers],
  112. components: {},
  113. store,
  114. i18n,
  115. el: '#app',
  116. methods: {
  117. changeTheme(opts) {
  118. this.$el.className = `has-stickynav is-primary-${opts.primary} is-alternate-${opts.alt}`
  119. this.$refs.header.className = `nav is-${opts.primary}`
  120. this.$refs.footer.className = `footer is-${opts.footer}`
  121. }
  122. },
  123. mounted() {
  124. }
  125. })
  126. })