app.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. 'use strict'
  2. /* global siteLang */
  3. /* eslint-disable no-new */
  4. import $ from 'jquery'
  5. import Vue from 'vue'
  6. import VueResource from 'vue-resource'
  7. import store from './store'
  8. import io from 'socket.io-client'
  9. import i18next from 'i18next'
  10. import i18nextXHR from 'i18next-xhr-backend'
  11. import VueI18Next from '@panter/vue-i18next'
  12. import 'jquery-smooth-scroll'
  13. import 'jquery-sticky'
  14. // ====================================
  15. // Load Vue Components
  16. // ====================================
  17. import alertComponent from './components/alert.vue'
  18. import anchorComponent from './components/anchor.vue'
  19. import colorPickerComponent from './components/color-picker.vue'
  20. import loadingSpinnerComponent from './components/loading-spinner.vue'
  21. import searchComponent from './components/search.vue'
  22. import treeComponent from './components/tree.vue'
  23. import adminUsersCreateComponent from './modals/admin-users-create.vue'
  24. import adminProfileComponent from './pages/admin-profile.component.js'
  25. import adminSettingsComponent from './pages/admin-settings.component.js'
  26. import sourceComponent from './pages/source.component.js'
  27. // ====================================
  28. // Initialize Vue Modules
  29. // ====================================
  30. Vue.use(VueResource)
  31. Vue.use(VueI18Next)
  32. i18next
  33. .use(i18nextXHR)
  34. .init({
  35. backend: {
  36. loadPath: '/js/i18n/{{lng}}.json'
  37. },
  38. lng: siteLang,
  39. fallbackLng: siteLang
  40. })
  41. $(() => {
  42. // ====================================
  43. // Notifications
  44. // ====================================
  45. $(window).bind('beforeunload', () => {
  46. store.dispatch('startLoading')
  47. })
  48. $(document).ajaxSend(() => {
  49. store.dispatch('startLoading')
  50. }).ajaxComplete(() => {
  51. store.dispatch('stopLoading')
  52. })
  53. // ====================================
  54. // Establish WebSocket connection
  55. // ====================================
  56. let socket = io(window.location.origin)
  57. window.socket = socket
  58. // ====================================
  59. // Bootstrap Vue
  60. // ====================================
  61. const i18n = new VueI18Next(i18next)
  62. new Vue({
  63. components: {
  64. alert: alertComponent,
  65. adminProfile: adminProfileComponent,
  66. adminSettings: adminSettingsComponent,
  67. adminUsersCreate: adminUsersCreateComponent,
  68. anchor: anchorComponent,
  69. colorPicker: colorPickerComponent,
  70. loadingSpinner: loadingSpinnerComponent,
  71. search: searchComponent,
  72. sourceView: sourceComponent,
  73. tree: treeComponent
  74. },
  75. store,
  76. i18n,
  77. el: '#root',
  78. mounted() {
  79. $('a').smoothScroll({ speed: 500, offset: -50 })
  80. $('#header').sticky({ topSpacing: 0 })
  81. $('.sidebar-pagecontents').sticky({ topSpacing: 15, bottomSpacing: 75 })
  82. }
  83. })
  84. })