139 lines · 2.9 KB · Text
RawDownload
class app.Settings  PREFERENCE_KEYS = [    'hideDisabled'    'hideIntro'    'manualUpdate'    'fastScroll'    'arrowScroll'    'analyticsConsent'    'docs'    'dark'    'layout'    'size'    'tips'    'autoInstall'  ]   INTERNAL_KEYS = [    'count'    'schema'    'version'    'news'  ]   LAYOUTS: ['_max-width', '_sidebar-hidden', '_native-scrollbars']   @defaults:    count: 0    hideDisabled: false    hideIntro: false    news: 0    manualUpdate: false    schema: 1    analyticsConsent: false   constructor: ->    @store = new CookiesStore    @cache = {}   get: (key) ->    return @cache[key] if @cache.hasOwnProperty(key)    @cache[key] = @store.get(key) ? @constructor.defaults[key]   set: (key, value) ->    @store.set(key, value)    delete @cache[key]    @toggleDark(value) if key == 'dark'    return   del: (key) ->    @store.del(key)    delete @cache[key]    return   hasDocs: ->    try !!@store.get('docs')   getDocs: ->    @store.get('docs')?.split('/') or app.config.default_docs   setDocs: (docs) ->    @set 'docs', docs.join('/')    return   getTips: ->    @store.get('tips')?.split('/') or []   setTips: (tips) ->    @set 'tips', tips.join('/')    return   setLayout: (name, enable) ->    @toggleLayout(name, enable)     layout = (@store.get('layout') || '').split(' ')    $.arrayDelete(layout, '')     if enable      layout.push(name) if layout.indexOf(name) is -1    else      $.arrayDelete(layout, name)     if layout.length > 0      @set 'layout', layout.join(' ')    else      @del 'layout'    return   hasLayout: (name) ->    layout = (@store.get('layout') || '').split(' ')    layout.indexOf(name) isnt -1   setSize: (value) ->    @set 'size', value    return   dump: ->    @store.dump()   export: ->    data = @dump()    delete data[key] for key in INTERNAL_KEYS    data   import: (data) ->    for key, value of @export()      @del key unless data.hasOwnProperty(key)    for key, value of data      @set key, value if PREFERENCE_KEYS.indexOf(key) isnt -1    return   reset: ->    @store.reset()    @cache = {}    return   initLayout: ->    @toggleDark(@get('dark') is 1)    @toggleLayout(layout, @hasLayout(layout)) for layout in @LAYOUTS    @initSidebarWidth()    return   toggleDark: (enable) ->    classList = document.documentElement.classList    classList.toggle('_theme-default', !enable)    classList.toggle('_theme-dark', enable)    color = getComputedStyle(document.documentElement).getPropertyValue('--headerBackground').trim()    $('meta[name=theme-color]').setAttribute('content', color)    return   toggleLayout: (layout, enable) ->    classList = document.body.classList    classList.toggle(layout, enable) unless app.router?.isSettings    classList.toggle('_overlay-scrollbars', $.overlayScrollbarsEnabled())    return   initSidebarWidth: ->    size = @get('size')    document.documentElement.style.setProperty('--sidebarWidth', size + 'px') if size    return