Showing the changes to assets/javascripts (7 of 7 files). Show all
Unified · Split
| @@ -67,7 +67,7 @@ · 66 unmodified lines | ||
| 67 | 67 | true |
| 68 | 68 | dataCallback: (data) -> |
| 69 | 69 | try |
| 70 | − $.extend(data.user ||= {}, app.settings.settings) | |
| 70 | + $.extend(data.user ||= {}, app.settings.dump()) | |
| 71 | 71 | data.user.lastIDBTransaction = app.lastIDBTransaction if app.lastIDBTransaction |
| 72 | 72 | data |
| 73 | 73 | .install() |
| @@ -170,10 +170,10 @@ · 96 unmodified lines | ||
| 170 | 170 | |
| 171 | 171 | showTip: (tip) -> |
| 172 | 172 | return if @isSingleDoc() |
| 173 | − tips = @settings.get('tips') || [] | |
| 173 | + tips = @settings.getTips() | |
| 174 | 174 | if tips.indexOf(tip) is -1 |
| 175 | 175 | tips.push(tip) |
| 176 | − @settings.set('tips', tips) | |
| 176 | + @settings.setTips(tips) | |
| 177 | 177 | new app.views.Tip(tip) |
| 178 | 178 | return |
| 179 | 179 | |
| @@ -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 |
| @@ -22,7 +22,7 @@ class app.UpdateChecker · 21 unmodified lines | ||
| 22 | 22 | return |
| 23 | 23 | |
| 24 | 24 | checkDocs: -> |
| 25 | − if app.settings.get('autoUpdate') | |
| 25 | + unless app.settings.get('manualUpdate') | |
| 26 | 26 | app.docs.updateInBackground() |
| 27 | 27 | else |
| 28 | 28 | app.docs.checkForUpdates (i) => @onDocsUpdateReady() if i > 0 |
| @@ -0,0 +1,40 @@ | ||
| 1 | +class @CookieStore | |
| 2 | + INT = /^\d+$/ | |
| 3 | + | |
| 4 | + get: (key) -> | |
| 5 | + try | |
| 6 | + value = Cookies.get(key) | |
| 7 | + value = parseInt(value, 10) if value? and INT.test(value) | |
| 8 | + value | |
| 9 | + catch | |
| 10 | + | |
| 11 | + set: (key, value) -> | |
| 12 | + if value == false | |
| 13 | + return @del(key) | |
| 14 | + else if value == true | |
| 15 | + value = 1 | |
| 16 | + | |
| 17 | + try | |
| 18 | + Cookies.set(key, '' + value, path: '/', expires: 1e8) | |
| 19 | + true | |
| 20 | + catch | |
| 21 | + | |
| 22 | + del: (key) -> | |
| 23 | + try | |
| 24 | + Cookies.expire(key) | |
| 25 | + true | |
| 26 | + catch | |
| 27 | + | |
| 28 | + reset: -> | |
| 29 | + try | |
| 30 | + for cookie in document.cookie.split(/;\s?/) | |
| 31 | + Cookies.expire(cookie.split('=')[0]) | |
| 32 | + return | |
| 33 | + catch | |
| 34 | + | |
| 35 | + dump: -> | |
| 36 | + result = {} | |
| 37 | + for cookie in document.cookie.split(/;\s?/) | |
| 38 | + cookie = cookie.split('=') | |
| 39 | + result[cookie[0]] = cookie[1] | |
| 40 | + result | |
| @@ -6,7 +6,7 @@ app.templates.offlinePage = (docs) -> """ · 5 unmodified lines | ||
| 6 | 6 | <a class="_docs-link" data-action-all="install">Install all</a><a class="_docs-link" data-action-all="update"><strong>Update all</strong></a><a class="_docs-link" data-action-all="uninstall">Uninstall all</a> |
| 7 | 7 | </div> |
| 8 | 8 | <label class="_docs-label"> |
| 9 | − <input type="checkbox" name="autoUpdate" value="1" #{if app.settings.get('autoUpdate') then 'checked' else ''}> | |
| 9 | + <input type="checkbox" name="autoUpdate" value="1" #{if app.settings.get('manualUpdate') then '' else 'checked'}> | |
| 10 | 10 | Check for and install updates automatically |
| 11 | 11 | </label> |
| 12 | 12 | </div> |
| @@ -81,5 +81,5 @@ class app.views.OfflinePage extends app.View · 80 unmodified lines | ||
| 81 | 81 | |
| 82 | 82 | onChange: (event) -> |
| 83 | 83 | if event.target.name is 'autoUpdate' |
| 84 | − app.settings.set 'autoUpdate', !!event.target.checked | |
| 84 | + app.settings.set 'manualUpdate', !event.target.checked | |
| 85 | 85 | return |
| @@ -46,10 +46,9 @@ class app.views.DocList extends app.View · 45 unmodified lines | ||
| 46 | 46 | return |
| 47 | 47 | |
| 48 | 48 | renderDisabledList: -> |
| 49 | − if (hidden = app.settings.get 'hideDisabled') is true | |
| 49 | + if app.settings.get('hideDisabled') | |
| 50 | 50 | @removeDisabledList() |
| 51 | 51 | else |
| 52 | − app.settings.set 'hideDisabled', false unless hidden is false | |
| 53 | 52 | @appendDisabledList() |
| 54 | 53 | return |
| 55 | 54 | |