forked from AkkomaGang/akkoma-fe
cd4ad2df11
* origin/develop: (475 commits) Apply 1 suggestion(s) to 1 file(s) Update dependency @ungap/event-target to v0.2.3 Update package.json fix broken icons after FA upgrade Update Font Awesome Update dependency webpack-dev-middleware to v3.7.3 Update dependency vuelidate to v0.7.7 Pin dependency @kazvmoe-infra/pinch-zoom-element to 1.2.0 lint Make media modal buttons larger Add English translation for hide tooltip Add hide button to media modal Lint Prevent hiding media viewer if swiped over SwipeClick Fix webkit image blurs Fix video in media modal not displaying properly Add changelog for https://git.pleroma.social/pleroma/pleroma-fe/-/merge_requests/1403 Remove image box-shadow in media modal Clean up debug code for image pinch zoom Bump @kazvmoe-infra/pinch-zoom-element to 1.2.0 on npm ...
230 lines
6.7 KiB
JavaScript
230 lines
6.7 KiB
JavaScript
import { getPreset, applyTheme } from '../services/style_setter/style_setter.js'
|
|
import { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js'
|
|
import apiService from '../services/api/api.service.js'
|
|
import { instanceDefaultProperties } from './config.js'
|
|
|
|
const defaultState = {
|
|
// Stuff from apiConfig
|
|
name: 'Pleroma FE',
|
|
registrationOpen: true,
|
|
server: 'http://localhost:4040/',
|
|
textlimit: 5000,
|
|
themeData: undefined,
|
|
vapidPublicKey: undefined,
|
|
|
|
// Stuff from static/config.json
|
|
alwaysShowSubjectInput: true,
|
|
defaultAvatar: '/images/avi.png',
|
|
defaultBanner: '/images/banner.png',
|
|
background: '/static/aurora_borealis.jpg',
|
|
collapseMessageWithSubject: false,
|
|
greentext: false,
|
|
useAtIcon: false,
|
|
mentionLinkDisplay: 'short',
|
|
mentionLinkShowTooltip: true,
|
|
mentionLinkShowAvatar: false,
|
|
mentionLinkFadeDomain: true,
|
|
mentionLinkShowYous: false,
|
|
mentionLinkBoldenYou: true,
|
|
hideFilteredStatuses: false,
|
|
// bad name: actually hides posts of muted USERS
|
|
hideMutedPosts: false,
|
|
hideMutedThreads: true,
|
|
hideWordFilteredPosts: false,
|
|
hidePostStats: false,
|
|
hideBotIndication: false,
|
|
hideSitename: false,
|
|
hideUserStats: false,
|
|
muteBotStatuses: false,
|
|
loginMethod: 'password',
|
|
logo: '/static/logo.svg',
|
|
logoMargin: '.2em',
|
|
logoMask: true,
|
|
logoLeft: false,
|
|
minimalScopesMode: false,
|
|
nsfwCensorImage: undefined,
|
|
postContentType: 'text/plain',
|
|
redirectRootLogin: '/main/friends',
|
|
redirectRootNoLogin: '/main/all',
|
|
scopeCopy: true,
|
|
showFeaturesPanel: true,
|
|
showInstanceSpecificPanel: false,
|
|
sidebarRight: false,
|
|
subjectLineBehavior: 'email',
|
|
theme: 'pleroma-dark',
|
|
virtualScrolling: true,
|
|
sensitiveByDefault: false,
|
|
conversationDisplay: 'linear',
|
|
conversationTreeAdvanced: false,
|
|
conversationOtherRepliesButton: 'below',
|
|
conversationTreeFadeAncestors: false,
|
|
maxDepthInThread: 6,
|
|
|
|
// Nasty stuff
|
|
customEmoji: [],
|
|
customEmojiFetched: false,
|
|
emoji: [],
|
|
emojiFetched: false,
|
|
pleromaBackend: true,
|
|
postFormats: [],
|
|
restrictedNicknames: [],
|
|
safeDM: true,
|
|
knownDomains: [],
|
|
|
|
// Feature-set, apparently, not everything here is reported...
|
|
shoutAvailable: false,
|
|
pleromaChatMessagesAvailable: false,
|
|
gopherAvailable: false,
|
|
mediaProxyAvailable: 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') {
|
|
state[name] = value
|
|
}
|
|
},
|
|
setKnownDomains (state, domains) {
|
|
state.knownDomains = domains
|
|
}
|
|
},
|
|
getters: {
|
|
instanceDefaultConfig (state) {
|
|
return instanceDefaultProperties
|
|
.map(key => [key, state[key]])
|
|
.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})
|
|
},
|
|
instanceDomain (state) {
|
|
return new URL(state.server).hostname
|
|
}
|
|
},
|
|
actions: {
|
|
setInstanceOption ({ commit, dispatch }, { name, value }) {
|
|
commit('setInstanceOption', { name, value })
|
|
switch (name) {
|
|
case 'name':
|
|
dispatch('setPageTitle')
|
|
break
|
|
case 'shoutAvailable':
|
|
if (value) {
|
|
dispatch('initializeSocket')
|
|
}
|
|
break
|
|
case 'theme':
|
|
dispatch('setTheme', value)
|
|
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.name > b.name ? 1 : -1)
|
|
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 : -1)
|
|
commit('setInstanceOption', { name: 'customEmoji', value: emoji })
|
|
} else {
|
|
throw (res)
|
|
}
|
|
} catch (e) {
|
|
console.warn("Can't load custom emojis")
|
|
console.warn(e)
|
|
}
|
|
},
|
|
|
|
setTheme ({ commit, rootState }, themeName) {
|
|
commit('setInstanceOption', { name: 'theme', value: themeName })
|
|
getPreset(themeName)
|
|
.then(themeData => {
|
|
commit('setInstanceOption', { name: 'themeData', value: themeData })
|
|
// No need to apply theme if there's user theme already
|
|
const { customTheme } = rootState.config
|
|
if (customTheme) return
|
|
|
|
// New theme presets don't have 'theme' property, they use 'source'
|
|
const themeSource = themeData.source
|
|
if (!themeData.theme || (themeSource && themeSource.themeEngineVersion === CURRENT_VERSION)) {
|
|
applyTheme(themeSource)
|
|
} else {
|
|
applyTheme(themeData.theme)
|
|
}
|
|
})
|
|
},
|
|
fetchEmoji ({ dispatch, state }) {
|
|
if (!state.customEmojiFetched) {
|
|
state.customEmojiFetched = true
|
|
dispatch('getCustomEmoji')
|
|
}
|
|
if (!state.emojiFetched) {
|
|
state.emojiFetched = true
|
|
dispatch('getStaticEmoji')
|
|
}
|
|
},
|
|
|
|
async getKnownDomains ({ commit, rootState }) {
|
|
try {
|
|
const result = await apiService.fetchKnownDomains({
|
|
credentials: rootState.users.currentUser.credentials
|
|
})
|
|
commit('setKnownDomains', result)
|
|
} catch (e) {
|
|
console.warn("Can't load known domains")
|
|
console.warn(e)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export default instance
|