app.js 6.3 KB

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