* upstream/develop: (95 commits) Lightbox/modal multi image improvements - #381 '/api/pleroma/profile/mfa' -> '/api/pleroma/accounts/mfa' Add ability to change user's email translations-de-batch-1 eu-translate update profile-banner rounding css, fixes #690 fix indentation remove needless ref show preview popover when hover numbered replies refactor conditions do not make too many nested div add fetchStatus action refactor status loading logic split status preview popover into a separate component uninstall mobile-detect library listen both events minor css fix restrict distance at top side only set different trigger event in desktop and mobile by default fix eslint warnings ...
166 lines
4.6 KiB
JavaScript
166 lines
4.6 KiB
JavaScript
import { set } from 'vue'
|
|
import { setPreset } from '../services/style_setter/style_setter.js'
|
|
import { instanceDefaultProperties } from './config.js'
|
|
|
|
const defaultState = {
|
|
// Stuff from static/config.json and apiConfig
|
|
name: 'Pleroma FE',
|
|
registrationOpen: true,
|
|
safeDM: true,
|
|
textlimit: 5000,
|
|
server: 'http://localhost:4040/',
|
|
theme: 'pleroma-dark',
|
|
background: '/static/aurora_borealis.jpg',
|
|
logo: '/static/logo.png',
|
|
logoMask: true,
|
|
logoMargin: '.2em',
|
|
redirectRootNoLogin: '/main/all',
|
|
redirectRootLogin: '/main/friends',
|
|
showInstanceSpecificPanel: false,
|
|
alwaysShowSubjectInput: true,
|
|
hideMutedPosts: false,
|
|
collapseMessageWithSubject: false,
|
|
hidePostStats: false,
|
|
hideUserStats: false,
|
|
hideFilteredStatuses: false,
|
|
disableChat: false,
|
|
scopeCopy: true,
|
|
subjectLineBehavior: 'email',
|
|
postContentType: 'text/plain',
|
|
nsfwCensorImage: undefined,
|
|
vapidPublicKey: undefined,
|
|
noAttachmentLinks: false,
|
|
showFeaturesPanel: true,
|
|
minimalScopesMode: false,
|
|
|
|
// Nasty stuff
|
|
pleromaBackend: true,
|
|
emoji: [],
|
|
emojiFetched: false,
|
|
customEmoji: [],
|
|
customEmojiFetched: false,
|
|
restrictedNicknames: [],
|
|
postFormats: [],
|
|
|
|
// Feature-set, apparently, not everything here is reported...
|
|
mediaProxyAvailable: false,
|
|
chatAvailable: false,
|
|
gopherAvailable: false,
|
|
suggestionsEnabled: false,
|
|
suggestionsWeb: '',
|
|
|
|
// Html stuff
|
|
instanceSpecificPanelContent: '',
|
|
tos: '',
|
|
|
|
// Version Information
|
|
backendVersion: '',
|
|
frontendVersion: '',
|
|
|
|
pollsAvailable: false,
|
|
pollLimits: {
|
|
max_options: 4,
|
|
max_option_chars: 255,
|
|
min_expiration: 60,
|
|
max_expiration: 60 * 60 * 24
|
|
}
|
|
}
|
|
|
|
const instance = {
|
|
state: defaultState,
|
|
mutations: {
|
|
setInstanceOption (state, { name, value }) {
|
|
if (typeof value !== 'undefined') {
|
|
set(state, name, value)
|
|
}
|
|
}
|
|
},
|
|
getters: {
|
|
instanceDefaultConfig (state) {
|
|
return instanceDefaultProperties
|
|
.map(key => [key, state[key]])
|
|
.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})
|
|
}
|
|
},
|
|
actions: {
|
|
setInstanceOption ({ commit, dispatch }, { name, value }) {
|
|
commit('setInstanceOption', { name, value })
|
|
switch (name) {
|
|
case 'name':
|
|
dispatch('setPageTitle')
|
|
break
|
|
case 'chatAvailable':
|
|
if (value) {
|
|
dispatch('initializeSocket')
|
|
}
|
|
break
|
|
}
|
|
},
|
|
async getStaticEmoji ({ commit }) {
|
|
try {
|
|
const res = await window.fetch('/static/emoji.json')
|
|
if (res.ok) {
|
|
const values = await res.json()
|
|
const emoji = Object.keys(values).map((key) => {
|
|
return {
|
|
displayText: key,
|
|
imageUrl: false,
|
|
replacement: values[key]
|
|
}
|
|
}).sort((a, b) => a.displayText - b.displayText)
|
|
commit('setInstanceOption', { name: 'emoji', value: emoji })
|
|
} else {
|
|
throw (res)
|
|
}
|
|
} catch (e) {
|
|
console.warn("Can't load static emoji")
|
|
console.warn(e)
|
|
}
|
|
},
|
|
|
|
async getCustomEmoji ({ commit, state }) {
|
|
try {
|
|
const res = await window.fetch('/api/pleroma/emoji.json')
|
|
if (res.ok) {
|
|
const result = await res.json()
|
|
const values = Array.isArray(result) ? Object.assign({}, ...result) : result
|
|
const emoji = Object.entries(values).map(([key, value]) => {
|
|
const imageUrl = value.image_url
|
|
return {
|
|
displayText: key,
|
|
imageUrl: imageUrl ? state.server + imageUrl : value,
|
|
tags: imageUrl ? value.tags.sort((a, b) => a > b ? 1 : 0) : ['utf'],
|
|
replacement: `:${key}: `
|
|
}
|
|
// Technically could use tags but those are kinda useless right now,
|
|
// should have been "pack" field, that would be more useful
|
|
}).sort((a, b) => a.displayText.toLowerCase() > b.displayText.toLowerCase() ? 1 : 0)
|
|
commit('setInstanceOption', { name: 'customEmoji', value: emoji })
|
|
} else {
|
|
throw (res)
|
|
}
|
|
} catch (e) {
|
|
console.warn("Can't load custom emojis")
|
|
console.warn(e)
|
|
}
|
|
},
|
|
|
|
setTheme ({ commit }, themeName) {
|
|
commit('setInstanceOption', { name: 'theme', value: themeName })
|
|
return setPreset(themeName, commit)
|
|
},
|
|
fetchEmoji ({ dispatch, state }) {
|
|
if (!state.customEmojiFetched) {
|
|
state.customEmojiFetched = true
|
|
dispatch('getCustomEmoji')
|
|
}
|
|
if (!state.emojiFetched) {
|
|
state.emojiFetched = true
|
|
dispatch('getStaticEmoji')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export default instance
|