diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index a6dab394..ad53265d 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -67,7 +67,7 @@ true dataCallback: (data) -> try - $.extend(data.user ||= {}, app.settings.settings) + $.extend(data.user ||= {}, app.settings.dump()) data.user.lastIDBTransaction = app.lastIDBTransaction if app.lastIDBTransaction data .install() @@ -170,10 +170,10 @@ showTip: (tip) -> return if @isSingleDoc() - tips = @settings.get('tips') || [] + tips = @settings.getTips() if tips.indexOf(tip) is -1 tips.push(tip) - @settings.set('tips', tips) + @settings.setTips(tips) new app.views.Tip(tip) return diff --git a/assets/javascripts/app/settings.coffee b/assets/javascripts/app/settings.coffee index 23c74a2a..a2aad287 100644 --- a/assets/javascripts/app/settings.coffee +++ b/assets/javascripts/app/settings.coffee @@ -1,101 +1,88 @@ class app.Settings - SETTINGS_KEY = 'settings' DOCS_KEY = 'docs' DARK_KEY = 'dark' LAYOUT_KEY = 'layout' SIZE_KEY = 'size' + TIPS_KEY = 'tips' @defaults: count: 0 hideDisabled: false hideIntro: false news: 0 - autoUpdate: true + manualUpdate: false schema: 1 - constructor: (@store) -> - @create() unless @settings = @store.get(SETTINGS_KEY) - - create: -> - @settings = $.extend({}, @constructor.defaults) - @applyLegacyValues @settings - @save() - return - - applyLegacyValues: (settings) -> - for key, v of settings when (value = @store.get(key))? - settings[key] = value - @store.del(key) + constructor: (legacyStore) -> + @store = new CookieStore + @importLegacyValues(legacyStore) + + importLegacyValues: (legacyStore) -> + return unless settings = legacyStore.get('settings') + for key, value of settings + if key == 'autoUpdate' + key = 'manualUpdate' + value = !value + else if key == 'tips' + value = value.join('/') + @store.set(key, value) + legacyStore.del('settings') return - save: -> - @store.set SETTINGS_KEY, @settings - set: (key, value) -> - @settings[key] = value - @save() + @store.set(key, value) + return get: (key) -> - @settings[key] ? @constructor.defaults[key] + @store.get(key) ? @constructor.defaults[key] hasDocs: -> - try !!Cookies.get DOCS_KEY + try !!@store.get(DOCS_KEY) getDocs: -> - try - Cookies.get(DOCS_KEY)?.split('/') or app.config.default_docs - catch - app.config.default_docs + @store.get(DOCS_KEY)?.split('/') or app.config.default_docs setDocs: (docs) -> - try - Cookies.set DOCS_KEY, docs.join('/'), path: '/', expires: 1e8 - catch + @store.set DOCS_KEY, docs.join('/') + return + + getTips: -> + @store.get(TIPS_KEY)?.split('/') or [] + + setTips: (tips) -> + @store.set TIPS_KEY, tips.join('/') return setDark: (value) -> - try - if value - Cookies.set DARK_KEY, '1', path: '/', expires: 1e8 - else - Cookies.expire DARK_KEY - catch + @store.set DARK_KEY, !!value return setLayout: (name, enable) -> - try - layout = (Cookies.get(LAYOUT_KEY) || '').split(' ') - $.arrayDelete(layout, '') - - if enable - layout.push(name) if layout.indexOf(name) is -1 - else - $.arrayDelete(layout, name) - - if layout.length > 0 - Cookies.set LAYOUT_KEY, layout.join(' '), path: '/', expires: 1e8 - else - Cookies.expire LAYOUT_KEY - catch + layout = (@store.get(LAYOUT_KEY) || '').split(' ') + $.arrayDelete(layout, '') + + if enable + layout.push(name) if layout.indexOf(name) is -1 + else + $.arrayDelete(layout, name) + + if layout.length > 0 + @store.set LAYOUT_KEY, layout.join(' ') + else + @store.del LAYOUT_KEY return hasLayout: (name) -> - try - layout = (Cookies.get(LAYOUT_KEY) || '').split(' ') - layout.indexOf(name) isnt -1 - catch - false + layout = (@store.get(LAYOUT_KEY) || '').split(' ') + layout.indexOf(name) isnt -1 setSize: (value) -> - try - Cookies.set SIZE_KEY, value, path: '/', expires: 1e8 - catch + @store.set SIZE_KEY, value return + dump: -> + @store.dump() + reset: -> - try Cookies.expire DOCS_KEY - try Cookies.expire DARK_KEY - try Cookies.expire LAYOUT_KEY - try Cookies.expire SIZE_KEY - try @store.del(SETTINGS_KEY) + @store.reset() return diff --git a/assets/javascripts/app/update_checker.coffee b/assets/javascripts/app/update_checker.coffee index e7af516e..444661f9 100644 --- a/assets/javascripts/app/update_checker.coffee +++ b/assets/javascripts/app/update_checker.coffee @@ -22,7 +22,7 @@ class app.UpdateChecker return checkDocs: -> - if app.settings.get('autoUpdate') + unless app.settings.get('manualUpdate') app.docs.updateInBackground() else app.docs.checkForUpdates (i) => @onDocsUpdateReady() if i > 0 diff --git a/assets/javascripts/lib/cookie_store.coffee b/assets/javascripts/lib/cookie_store.coffee new file mode 100644 index 00000000..041035f3 --- /dev/null +++ b/assets/javascripts/lib/cookie_store.coffee @@ -0,0 +1,40 @@ +class @CookieStore + INT = /^\d+$/ + + get: (key) -> + try + value = Cookies.get(key) + value = parseInt(value, 10) if value? and INT.test(value) + value + catch + + set: (key, value) -> + if value == false + return @del(key) + else if value == true + value = 1 + + try + Cookies.set(key, '' + value, path: '/', expires: 1e8) + true + catch + + del: (key) -> + try + Cookies.expire(key) + true + catch + + reset: -> + try + for cookie in document.cookie.split(/;\s?/) + Cookies.expire(cookie.split('=')[0]) + return + catch + + dump: -> + result = {} + for cookie in document.cookie.split(/;\s?/) + cookie = cookie.split('=') + result[cookie[0]] = cookie[1] + result diff --git a/assets/javascripts/templates/pages/offline_tmpl.coffee b/assets/javascripts/templates/pages/offline_tmpl.coffee index e5bf670f..c65cc1dc 100644 --- a/assets/javascripts/templates/pages/offline_tmpl.coffee +++ b/assets/javascripts/templates/pages/offline_tmpl.coffee @@ -6,7 +6,7 @@ app.templates.offlinePage = (docs) -> """ Install allUpdate allUninstall all diff --git a/assets/javascripts/views/content/offline_page.coffee b/assets/javascripts/views/content/offline_page.coffee index 5556a1e6..f93fe54e 100644 --- a/assets/javascripts/views/content/offline_page.coffee +++ b/assets/javascripts/views/content/offline_page.coffee @@ -81,5 +81,5 @@ class app.views.OfflinePage extends app.View onChange: (event) -> if event.target.name is 'autoUpdate' - app.settings.set 'autoUpdate', !!event.target.checked + app.settings.set 'manualUpdate', !event.target.checked return diff --git a/assets/javascripts/views/sidebar/doc_list.coffee b/assets/javascripts/views/sidebar/doc_list.coffee index 6d4acb72..77338c7c 100644 --- a/assets/javascripts/views/sidebar/doc_list.coffee +++ b/assets/javascripts/views/sidebar/doc_list.coffee @@ -46,10 +46,9 @@ class app.views.DocList extends app.View return renderDisabledList: -> - if (hidden = app.settings.get 'hideDisabled') is true + if app.settings.get('hideDisabled') @removeDisabledList() else - app.settings.set 'hideDisabled', false unless hidden is false @appendDisabledList() return