2018-09-09 16:36:13 +00:00
|
|
|
const defaultState = {
|
2020-05-03 14:36:12 +00:00
|
|
|
settingsModalState: 'hidden',
|
2020-06-01 22:10:52 +00:00
|
|
|
settingsModalLoaded: false,
|
2020-09-03 12:45:13 +00:00
|
|
|
settingsModalTargetTab: null,
|
2022-11-06 21:26:05 +00:00
|
|
|
modModalState: 'hidden',
|
|
|
|
modModalLoaded: false,
|
|
|
|
modModalTargetTab: null,
|
2018-09-09 16:36:13 +00:00
|
|
|
settings: {
|
|
|
|
currentSaveStateNotice: null,
|
2018-12-13 11:04:09 +00:00
|
|
|
noticeClearTimeout: null,
|
|
|
|
notificationPermission: null
|
2018-11-30 13:39:07 +00:00
|
|
|
},
|
|
|
|
browserSupport: {
|
|
|
|
cssFilter: window.CSS && window.CSS.supports && (
|
|
|
|
window.CSS.supports('filter', 'drop-shadow(0 0)') ||
|
2018-12-13 11:22:15 +00:00
|
|
|
window.CSS.supports('-webkit-filter', 'drop-shadow(0 0)')
|
2018-11-30 13:39:07 +00:00
|
|
|
)
|
2019-03-03 14:33:40 +00:00
|
|
|
},
|
2022-04-05 15:38:05 +00:00
|
|
|
layoutType: 'normal',
|
2020-05-07 13:10:53 +00:00
|
|
|
globalNotices: [],
|
2020-07-23 12:09:32 +00:00
|
|
|
layoutHeight: 0,
|
|
|
|
lastTimeline: null
|
2018-09-09 16:36:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const interfaceMod = {
|
|
|
|
state: defaultState,
|
|
|
|
mutations: {
|
|
|
|
settingsSaved (state, { success, error }) {
|
|
|
|
if (success) {
|
|
|
|
if (state.noticeClearTimeout) {
|
|
|
|
clearTimeout(state.noticeClearTimeout)
|
|
|
|
}
|
2021-04-25 10:24:08 +00:00
|
|
|
state.settings.currentSaveStateNotice = { error: false, data: success }
|
|
|
|
state.settings.noticeClearTimeout = setTimeout(() => delete state.settings.currentSaveStateNotice, 2000)
|
2018-09-09 16:36:13 +00:00
|
|
|
} else {
|
2021-04-25 10:24:08 +00:00
|
|
|
state.settings.currentSaveStateNotice = { error: true, errorData: error }
|
2018-09-09 16:36:13 +00:00
|
|
|
}
|
2018-12-13 11:04:09 +00:00
|
|
|
},
|
|
|
|
setNotificationPermission (state, permission) {
|
|
|
|
state.notificationPermission = permission
|
2019-03-03 14:33:40 +00:00
|
|
|
},
|
2022-04-05 15:38:05 +00:00
|
|
|
setLayoutType (state, value) {
|
|
|
|
state.layoutType = value
|
2020-05-03 14:36:12 +00:00
|
|
|
},
|
|
|
|
closeSettingsModal (state) {
|
|
|
|
state.settingsModalState = 'hidden'
|
|
|
|
},
|
|
|
|
togglePeekSettingsModal (state) {
|
|
|
|
switch (state.settingsModalState) {
|
|
|
|
case 'minimized':
|
|
|
|
state.settingsModalState = 'visible'
|
|
|
|
return
|
|
|
|
case 'visible':
|
|
|
|
state.settingsModalState = 'minimized'
|
|
|
|
return
|
|
|
|
default:
|
|
|
|
throw new Error('Illegal minimization state of settings modal')
|
|
|
|
}
|
|
|
|
},
|
|
|
|
openSettingsModal (state) {
|
|
|
|
state.settingsModalState = 'visible'
|
2020-06-01 22:10:52 +00:00
|
|
|
if (!state.settingsModalLoaded) {
|
|
|
|
state.settingsModalLoaded = true
|
|
|
|
}
|
2020-07-01 16:15:28 +00:00
|
|
|
},
|
2020-09-03 12:45:13 +00:00
|
|
|
setSettingsModalTargetTab (state, value) {
|
|
|
|
state.settingsModalTargetTab = value
|
|
|
|
},
|
2022-11-06 21:26:05 +00:00
|
|
|
closeModModal (state) {
|
|
|
|
state.modModalState = 'hidden'
|
|
|
|
},
|
|
|
|
togglePeekModModal (state) {
|
|
|
|
switch (state.modModalState) {
|
|
|
|
case 'minimized':
|
|
|
|
state.modModalState = 'visible'
|
|
|
|
return
|
|
|
|
case 'visible':
|
|
|
|
state.modModalState = 'minimized'
|
|
|
|
return
|
|
|
|
default:
|
|
|
|
throw new Error('Illegal minimization state of mod modal')
|
|
|
|
}
|
|
|
|
},
|
|
|
|
openModModal (state) {
|
|
|
|
state.modModalState = 'visible'
|
|
|
|
if (!state.modModalLoaded) {
|
|
|
|
state.modModalLoaded = true
|
|
|
|
}
|
|
|
|
},
|
|
|
|
setModModalTargetTab (state, value) {
|
|
|
|
state.modModalTargetTab = value
|
|
|
|
},
|
2020-07-02 07:40:41 +00:00
|
|
|
pushGlobalNotice (state, notice) {
|
|
|
|
state.globalNotices.push(notice)
|
|
|
|
},
|
|
|
|
removeGlobalNotice (state, notice) {
|
|
|
|
state.globalNotices = state.globalNotices.filter(n => n !== notice)
|
2020-05-07 13:10:53 +00:00
|
|
|
},
|
|
|
|
setLayoutHeight (state, value) {
|
|
|
|
state.layoutHeight = value
|
2020-07-23 12:09:32 +00:00
|
|
|
},
|
2022-04-12 18:18:06 +00:00
|
|
|
setLayoutWidth (state, value) {
|
|
|
|
state.layoutWidth = value
|
|
|
|
},
|
2020-07-23 12:09:32 +00:00
|
|
|
setLastTimeline (state, value) {
|
|
|
|
state.lastTimeline = value
|
2018-09-09 16:36:13 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
actions: {
|
2018-09-09 18:21:23 +00:00
|
|
|
setPageTitle ({ rootState }, option = '') {
|
|
|
|
document.title = `${option} ${rootState.instance.name}`
|
2018-09-09 16:36:13 +00:00
|
|
|
},
|
|
|
|
settingsSaved ({ commit, dispatch }, { success, error }) {
|
|
|
|
commit('settingsSaved', { success, error })
|
2018-12-13 11:04:09 +00:00
|
|
|
},
|
|
|
|
setNotificationPermission ({ commit }, permission) {
|
|
|
|
commit('setNotificationPermission', permission)
|
2019-03-03 14:33:40 +00:00
|
|
|
},
|
2020-05-03 14:36:12 +00:00
|
|
|
closeSettingsModal ({ commit }) {
|
|
|
|
commit('closeSettingsModal')
|
|
|
|
},
|
|
|
|
openSettingsModal ({ commit }) {
|
|
|
|
commit('openSettingsModal')
|
|
|
|
},
|
|
|
|
togglePeekSettingsModal ({ commit }) {
|
|
|
|
commit('togglePeekSettingsModal')
|
2020-07-01 16:15:28 +00:00
|
|
|
},
|
2020-09-03 12:45:13 +00:00
|
|
|
clearSettingsModalTargetTab ({ commit }) {
|
|
|
|
commit('setSettingsModalTargetTab', null)
|
|
|
|
},
|
|
|
|
openSettingsModalTab ({ commit }, value) {
|
|
|
|
commit('setSettingsModalTargetTab', value)
|
|
|
|
commit('openSettingsModal')
|
|
|
|
},
|
2022-11-06 21:26:05 +00:00
|
|
|
closeModModal ({ commit }) {
|
|
|
|
commit('closeModModal')
|
|
|
|
},
|
|
|
|
openModModal ({ commit }) {
|
|
|
|
commit('openModModal')
|
|
|
|
},
|
|
|
|
togglePeekModModal ({ commit }) {
|
|
|
|
commit('togglePeekModModal')
|
|
|
|
},
|
|
|
|
clearModModalTargetTab ({ commit }) {
|
|
|
|
commit('setModModalTargetTab', null)
|
|
|
|
},
|
2020-07-02 07:40:41 +00:00
|
|
|
pushGlobalNotice (
|
2022-03-27 09:21:33 +00:00
|
|
|
{ commit, dispatch, state },
|
2020-07-02 07:40:41 +00:00
|
|
|
{
|
|
|
|
messageKey,
|
|
|
|
messageArgs = {},
|
|
|
|
level = 'error',
|
|
|
|
timeout = 0
|
|
|
|
}) {
|
|
|
|
const notice = {
|
|
|
|
messageKey,
|
|
|
|
messageArgs,
|
|
|
|
level
|
|
|
|
}
|
2022-03-27 09:21:33 +00:00
|
|
|
commit('pushGlobalNotice', notice)
|
|
|
|
// Adding a new element to array wraps it in a Proxy, which breaks the comparison
|
|
|
|
// TODO: Generate UUID or something instead or relying on !== operator?
|
|
|
|
const newNotice = state.globalNotices[state.globalNotices.length - 1]
|
2020-07-02 07:40:41 +00:00
|
|
|
if (timeout) {
|
2022-03-27 09:21:33 +00:00
|
|
|
setTimeout(() => dispatch('removeGlobalNotice', newNotice), timeout)
|
2020-07-02 07:40:41 +00:00
|
|
|
}
|
2022-03-27 09:21:33 +00:00
|
|
|
return newNotice
|
2020-07-02 07:40:41 +00:00
|
|
|
},
|
|
|
|
removeGlobalNotice ({ commit }, notice) {
|
|
|
|
commit('removeGlobalNotice', notice)
|
2020-05-07 13:10:53 +00:00
|
|
|
},
|
|
|
|
setLayoutHeight ({ commit }, value) {
|
|
|
|
commit('setLayoutHeight', value)
|
2020-07-23 12:09:32 +00:00
|
|
|
},
|
2022-04-12 18:18:06 +00:00
|
|
|
// value is optional, assuming it was cached prior
|
2022-05-09 20:24:35 +00:00
|
|
|
setLayoutWidth ({ commit, state, rootGetters, rootState }, value) {
|
2022-04-12 18:18:06 +00:00
|
|
|
let width = value
|
|
|
|
if (value !== undefined) {
|
|
|
|
commit('setLayoutWidth', value)
|
|
|
|
} else {
|
|
|
|
width = state.layoutWidth
|
|
|
|
}
|
|
|
|
const mobileLayout = width <= 800
|
|
|
|
const normalOrMobile = mobileLayout ? 'mobile' : 'normal'
|
|
|
|
const { thirdColumnMode } = rootGetters.mergedConfig
|
2022-05-09 20:24:35 +00:00
|
|
|
if (thirdColumnMode === 'none' || !rootState.users.currentUser) {
|
2022-04-12 18:18:06 +00:00
|
|
|
commit('setLayoutType', normalOrMobile)
|
|
|
|
} else {
|
2022-12-30 03:01:17 +00:00
|
|
|
const wideLayout = width >= 1280
|
2022-04-12 18:18:06 +00:00
|
|
|
commit('setLayoutType', wideLayout ? 'wide' : normalOrMobile)
|
|
|
|
}
|
|
|
|
},
|
2020-07-23 12:09:32 +00:00
|
|
|
setLastTimeline ({ commit }, value) {
|
|
|
|
commit('setLastTimeline', value)
|
2018-09-09 16:36:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default interfaceMod
|