logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://anongit.hacktivis.me/git/pleroma-fe.git/

main.js (4664B)


  1. /* global process */
  2. import { createStore } from 'vuex'
  3. import { createPinia } from 'pinia'
  4. import 'custom-event-polyfill'
  5. import './lib/event_target_polyfill.js'
  6. import instanceModule from './modules/instance.js'
  7. import statusesModule from './modules/statuses.js'
  8. import notificationsModule from './modules/notifications.js'
  9. import usersModule from './modules/users.js'
  10. import apiModule from './modules/api.js'
  11. import configModule from './modules/config.js'
  12. import profileConfigModule from './modules/profileConfig.js'
  13. import serverSideStorageModule from './modules/serverSideStorage.js'
  14. import adminSettingsModule from './modules/adminSettings.js'
  15. import oauthModule from './modules/oauth.js'
  16. import authFlowModule from './modules/auth_flow.js'
  17. import oauthTokensModule from './modules/oauth_tokens.js'
  18. import draftsModule from './modules/drafts.js'
  19. import chatsModule from './modules/chats.js'
  20. import bookmarkFoldersModule from './modules/bookmark_folders.js'
  21. import { createI18n } from 'vue-i18n'
  22. import createPersistedState from './lib/persisted_state.js'
  23. import pushNotifications from './lib/push_notifications_plugin.js'
  24. import messages from './i18n/messages.js'
  25. import afterStoreSetup from './boot/after_store.js'
  26. const currentLocale = (window.navigator.language || 'en').split('-')[0]
  27. const i18n = createI18n({
  28. // By default, use the browser locale, we will update it if neccessary
  29. locale: 'en',
  30. fallbackLocale: 'en',
  31. messages: messages.default
  32. })
  33. messages.setLanguage(i18n.global, currentLocale)
  34. const persistedStateOptions = {
  35. paths: [
  36. 'serverSideStorage.cache',
  37. 'config',
  38. 'users.lastLoginName',
  39. 'oauth'
  40. ]
  41. };
  42. (async () => {
  43. const isFox = Math.floor(Math.random() * 2) > 0 ? '_fox' : ''
  44. const splashError = (i18n, e) => {
  45. const throbber = document.querySelector('#throbber')
  46. throbber.addEventListener('animationend', () => {
  47. document.querySelector('#mascot').src = `/static/pleromatan_orz${isFox}.png`
  48. })
  49. throbber.classList.add('dead')
  50. document.querySelector('#status').textContent = i18n.global.t('splash.error')
  51. console.error('PleromaFE failed to initialize: ', e)
  52. document.querySelector('#statusError').textContent = e
  53. document.querySelector('#statusStack').textContent = e.stack
  54. document.querySelector('#statusError').style = 'display: block'
  55. document.querySelector('#statusStack').style = 'display: block'
  56. }
  57. window.splashError = e => splashError(i18n, e)
  58. window.splashUpdate = key => {
  59. if (document.querySelector('#status')) {
  60. document.querySelector('#status').textContent = i18n.global.t(key)
  61. }
  62. }
  63. try {
  64. let storageError
  65. const plugins = [pushNotifications]
  66. const pinia = createPinia()
  67. try {
  68. const persistedState = await createPersistedState(persistedStateOptions)
  69. plugins.push(persistedState)
  70. } catch (e) {
  71. console.error('Storage error', e)
  72. storageError = e
  73. }
  74. document.querySelector('#mascot').src = `/static/pleromatan_apology${isFox}.png`
  75. document.querySelector('#status').removeAttribute('class')
  76. document.querySelector('#status').textContent = i18n.global.t('splash.loading')
  77. document.querySelector('#splash-credit').textContent = i18n.global.t('update.art_by', { linkToArtist: 'pipivovott' })
  78. const store = createStore({
  79. modules: {
  80. instance: instanceModule,
  81. // TODO refactor users/statuses modules, they depend on each other
  82. users: usersModule,
  83. statuses: statusesModule,
  84. notifications: notificationsModule,
  85. api: apiModule,
  86. config: configModule,
  87. profileConfig: profileConfigModule,
  88. serverSideStorage: serverSideStorageModule,
  89. adminSettings: adminSettingsModule,
  90. oauth: oauthModule,
  91. authFlow: authFlowModule,
  92. oauthTokens: oauthTokensModule,
  93. drafts: draftsModule,
  94. chats: chatsModule,
  95. bookmarkFolders: bookmarkFoldersModule
  96. },
  97. plugins,
  98. options: {
  99. devtools: process.env.NODE_ENV !== 'production'
  100. },
  101. strict: false // Socket modifies itself, let's ignore this for now.
  102. // strict: process.env.NODE_ENV !== 'production'
  103. })
  104. window.vuex = store
  105. // Temporarily passing pinia and vuex stores along with storageError result until migration is fully complete.
  106. return await afterStoreSetup({ pinia, store, storageError, i18n })
  107. } catch (e) {
  108. splashError(i18n, e)
  109. }
  110. })()
  111. // These are inlined by webpack's DefinePlugin
  112. /* eslint-disable */
  113. window.___pleromafe_mode = process.env
  114. window.___pleromafe_commit_hash = COMMIT_HASH
  115. window.___pleromafe_dev_overrides = DEV_OVERRIDES