| @@ -1,101 +1,88 @@ |
| 1 | 1 | class app.Settings |
| 2 | | − SETTINGS_KEY = 'settings' |
| 3 | 2 | DOCS_KEY = 'docs' |
| 4 | 3 | DARK_KEY = 'dark' |
| 5 | 4 | LAYOUT_KEY = 'layout' |
| 6 | 5 | SIZE_KEY = 'size' |
| 6 | + TIPS_KEY = 'tips' |
| 7 | 7 | |
| 8 | 8 | @defaults: |
| 9 | 9 | count: 0 |
| 10 | 10 | hideDisabled: false |
| 11 | 11 | hideIntro: false |
| 12 | 12 | news: 0 |
| 13 | | − autoUpdate: true |
| 13 | + manualUpdate: false |
| 14 | 14 | schema: 1 |
| 15 | 15 | |
| 16 | | − constructor: (@store) -> |
| 17 | | − @create() unless @settings = @store.get(SETTINGS_KEY) |
| 18 | | − |
| 19 | | − create: -> |
| 20 | | − @settings = $.extend({}, @constructor.defaults) |
| 21 | | − @applyLegacyValues @settings |
| 22 | | − @save() |
| 23 | | − return |
| 24 | | − |
| 25 | | − applyLegacyValues: (settings) -> |
| 26 | | − for key, v of settings when (value = @store.get(key))? |
| 27 | | − settings[key] = value |
| 28 | | − @store.del(key) |
| 16 | + constructor: (legacyStore) -> |
| 17 | + @store = new CookieStore |
| 18 | + @importLegacyValues(legacyStore) |
| 19 | + |
| 20 | + importLegacyValues: (legacyStore) -> |
| 21 | + return unless settings = legacyStore.get('settings') |
| 22 | + for key, value of settings |
| 23 | + if key == 'autoUpdate' |
| 24 | + key = 'manualUpdate' |
| 25 | + value = !value |
| 26 | + else if key == 'tips' |
| 27 | + value = value.join('/') |
| 28 | + @store.set(key, value) |
| 29 | + legacyStore.del('settings') |
| 29 | 30 | return |
| 30 | 31 | |
| 31 | | − save: -> |
| 32 | | − @store.set SETTINGS_KEY, @settings |
| 33 | | − |
| 34 | 32 | set: (key, value) -> |
| 35 | | − @settings[key] = value |
| 36 | | − @save() |
| 33 | + @store.set(key, value) |
| 34 | + return |
| 37 | 35 | |
| 38 | 36 | get: (key) -> |
| 39 | | − @settings[key] ? @constructor.defaults[key] |
| 37 | + @store.get(key) ? @constructor.defaults[key] |
| 40 | 38 | |
| 41 | 39 | hasDocs: -> |
| 42 | | − try !!Cookies.get DOCS_KEY |
| 40 | + try !!@store.get(DOCS_KEY) |
| 43 | 41 | |
| 44 | 42 | getDocs: -> |
| 45 | | − try |
| 46 | | − Cookies.get(DOCS_KEY)?.split('/') or app.config.default_docs |
| 47 | | − catch |
| 48 | | − app.config.default_docs |
| 43 | + @store.get(DOCS_KEY)?.split('/') or app.config.default_docs |
| 49 | 44 | |
| 50 | 45 | setDocs: (docs) -> |
| 51 | | − try |
| 52 | | − Cookies.set DOCS_KEY, docs.join('/'), path: '/', expires: 1e8 |
| 53 | | − catch |
| 46 | + @store.set DOCS_KEY, docs.join('/') |
| 47 | + return |
| 48 | + |
| 49 | + getTips: -> |
| 50 | + @store.get(TIPS_KEY)?.split('/') or [] |
| 51 | + |
| 52 | + setTips: (tips) -> |
| 53 | + @store.set TIPS_KEY, tips.join('/') |
| 54 | 54 | return |
| 55 | 55 | |
| 56 | 56 | setDark: (value) -> |
| 57 | | − try |
| 58 | | − if value |
| 59 | | − Cookies.set DARK_KEY, '1', path: '/', expires: 1e8 |
| 60 | | − else |
| 61 | | − Cookies.expire DARK_KEY |
| 62 | | − catch |
| 57 | + @store.set DARK_KEY, !!value |
| 63 | 58 | return |
| 64 | 59 | |
| 65 | 60 | setLayout: (name, enable) -> |
| 66 | | − try |
| 67 | | − layout = (Cookies.get(LAYOUT_KEY) || '').split(' ') |
| 68 | | − $.arrayDelete(layout, '') |
| 69 | | − |
| 70 | | − if enable |
| 71 | | − layout.push(name) if layout.indexOf(name) is -1 |
| 72 | | − else |
| 73 | | − $.arrayDelete(layout, name) |
| 74 | | − |
| 75 | | − if layout.length > 0 |
| 76 | | − Cookies.set LAYOUT_KEY, layout.join(' '), path: '/', expires: 1e8 |
| 77 | | − else |
| 78 | | − Cookies.expire LAYOUT_KEY |
| 79 | | − catch |
| 61 | + layout = (@store.get(LAYOUT_KEY) || '').split(' ') |
| 62 | + $.arrayDelete(layout, '') |
| 63 | + |
| 64 | + if enable |
| 65 | + layout.push(name) if layout.indexOf(name) is -1 |
| 66 | + else |
| 67 | + $.arrayDelete(layout, name) |
| 68 | + |
| 69 | + if layout.length > 0 |
| 70 | + @store.set LAYOUT_KEY, layout.join(' ') |
| 71 | + else |
| 72 | + @store.del LAYOUT_KEY |
| 80 | 73 | return |
| 81 | 74 | |
| 82 | 75 | hasLayout: (name) -> |
| 83 | | − try |
| 84 | | − layout = (Cookies.get(LAYOUT_KEY) || '').split(' ') |
| 85 | | − layout.indexOf(name) isnt -1 |
| 86 | | − catch |
| 87 | | − false |
| 76 | + layout = (@store.get(LAYOUT_KEY) || '').split(' ') |
| 77 | + layout.indexOf(name) isnt -1 |
| 88 | 78 | |
| 89 | 79 | setSize: (value) -> |
| 90 | | − try |
| 91 | | − Cookies.set SIZE_KEY, value, path: '/', expires: 1e8 |
| 92 | | − catch |
| 80 | + @store.set SIZE_KEY, value |
| 93 | 81 | return |
| 94 | 82 | |
| 83 | + dump: -> |
| 84 | + @store.dump() |
| 85 | + |
| 95 | 86 | reset: -> |
| 96 | | − try Cookies.expire DOCS_KEY |
| 97 | | − try Cookies.expire DARK_KEY |
| 98 | | − try Cookies.expire LAYOUT_KEY |
| 99 | | − try Cookies.expire SIZE_KEY |
| 100 | | − try @store.del(SETTINGS_KEY) |
| 87 | + @store.reset() |
| 101 | 88 | return |