pinafore/src/routes/_store/store.js

87 lines
2.4 KiB
JavaScript
Raw Normal View History

2018-03-03 14:15:50 -08:00
import { observers } from './observers/observers'
import { computations } from './computations/computations'
import { mixins } from './mixins/mixins'
2018-01-28 13:09:39 -08:00
import { LocalStorageStore } from './LocalStorageStore'
import { observe } from 'svelte-extras'
import { isKaiOS } from '../_utils/userAgent/isKaiOS'
2018-01-28 13:09:39 -08:00
const persistedState = {
autoplayGifs: false,
composeData: {},
2018-01-28 13:09:39 -08:00
currentInstance: null,
currentRegisteredInstanceName: undefined,
currentRegisteredInstance: undefined,
// we disable scrollbars by default on iOS
disableCustomScrollbars: process.browser && /iP(?:hone|ad|od)/.test(navigator.userAgent),
disableFavCounts: false,
disableFollowerCounts: false,
disableHotkeys: false,
disableInfiniteScroll: false,
disableLongAriaLabels: false,
disableNotificationBadge: false,
disableReblogCounts: false,
disableTapOnStatus: false,
enableGrayscale: false,
hideCards: false,
largeInlineMedia: false,
leftRightChangesFocus: isKaiOS(),
instanceNameInSearch: '',
instanceThemes: {},
instanceSettings: {},
2018-01-28 13:09:39 -08:00
loggedInInstances: {},
loggedInInstancesInOrder: [],
markMediaAsSensitive: false,
neverMarkMediaAsSensitive: false,
ignoreBlurhash: false,
omitEmojiInDisplayNames: undefined,
2018-02-08 09:15:25 -08:00
pinnedPages: {},
pushSubscriptions: {},
reduceMotion:
!process.browser ||
matchMedia('(prefers-reduced-motion: reduce)').matches,
underlineLinks: false
}
const nonPersistedState = {
customEmoji: {},
followRequestCounts: {},
instanceInfos: {},
instanceLists: {},
online: !process.browser || navigator.onLine,
pinnedStatuses: {},
polls: {},
pushNotificationsSupport:
process.browser &&
('serviceWorker' in navigator &&
'PushManager' in window &&
'getKey' in window.PushSubscription.prototype),
queryInSearch: '',
repliesShown: {},
sensitivesShown: {},
spoilersShown: {},
statusModifications: {},
verifyCredentials: {},
openShareDialog: false
}
const state = Object.assign({}, persistedState, nonPersistedState)
const keysToStoreInLocalStorage = new Set(Object.keys(persistedState))
export class PinaforeStore extends LocalStorageStore {
constructor (state) {
super(state, keysToStoreInLocalStorage)
}
}
PinaforeStore.prototype.observe = observe
export const store = new PinaforeStore(state)
2018-01-28 13:09:39 -08:00
mixins(PinaforeStore)
computations(store)
2018-02-20 21:29:59 -08:00
observers(store)
2018-01-28 13:09:39 -08:00
if (process.browser) {
window.__store = store // for debugging
2018-02-19 20:28:31 -08:00
}