Store settings in cookies instead of localStorage

pull/427/head
Thibaut Courouble 9 years ago
parent d0802988f1
commit 4b26951ff0

@ -67,7 +67,7 @@
true true
dataCallback: (data) -> dataCallback: (data) ->
try try
$.extend(data.user ||= {}, app.settings.settings) $.extend(data.user ||= {}, app.settings.dump())
data.user.lastIDBTransaction = app.lastIDBTransaction if app.lastIDBTransaction data.user.lastIDBTransaction = app.lastIDBTransaction if app.lastIDBTransaction
data data
.install() .install()
@ -170,10 +170,10 @@
showTip: (tip) -> showTip: (tip) ->
return if @isSingleDoc() return if @isSingleDoc()
tips = @settings.get('tips') || [] tips = @settings.getTips()
if tips.indexOf(tip) is -1 if tips.indexOf(tip) is -1
tips.push(tip) tips.push(tip)
@settings.set('tips', tips) @settings.setTips(tips)
new app.views.Tip(tip) new app.views.Tip(tip)
return return

@ -1,101 +1,88 @@
class app.Settings class app.Settings
SETTINGS_KEY = 'settings'
DOCS_KEY = 'docs' DOCS_KEY = 'docs'
DARK_KEY = 'dark' DARK_KEY = 'dark'
LAYOUT_KEY = 'layout' LAYOUT_KEY = 'layout'
SIZE_KEY = 'size' SIZE_KEY = 'size'
TIPS_KEY = 'tips'
@defaults: @defaults:
count: 0 count: 0
hideDisabled: false hideDisabled: false
hideIntro: false hideIntro: false
news: 0 news: 0
autoUpdate: true manualUpdate: false
schema: 1 schema: 1
constructor: (@store) -> constructor: (legacyStore) ->
@create() unless @settings = @store.get(SETTINGS_KEY) @store = new CookieStore
@importLegacyValues(legacyStore)
create: ->
@settings = $.extend({}, @constructor.defaults) importLegacyValues: (legacyStore) ->
@applyLegacyValues @settings return unless settings = legacyStore.get('settings')
@save() for key, value of settings
return if key == 'autoUpdate'
key = 'manualUpdate'
applyLegacyValues: (settings) -> value = !value
for key, v of settings when (value = @store.get(key))? else if key == 'tips'
settings[key] = value value = value.join('/')
@store.del(key) @store.set(key, value)
legacyStore.del('settings')
return return
save: ->
@store.set SETTINGS_KEY, @settings
set: (key, value) -> set: (key, value) ->
@settings[key] = value @store.set(key, value)
@save() return
get: (key) -> get: (key) ->
@settings[key] ? @constructor.defaults[key] @store.get(key) ? @constructor.defaults[key]
hasDocs: -> hasDocs: ->
try !!Cookies.get DOCS_KEY try !!@store.get(DOCS_KEY)
getDocs: -> getDocs: ->
try @store.get(DOCS_KEY)?.split('/') or app.config.default_docs
Cookies.get(DOCS_KEY)?.split('/') or app.config.default_docs
catch
app.config.default_docs
setDocs: (docs) -> setDocs: (docs) ->
try @store.set DOCS_KEY, docs.join('/')
Cookies.set DOCS_KEY, docs.join('/'), path: '/', expires: 1e8 return
catch
getTips: ->
@store.get(TIPS_KEY)?.split('/') or []
setTips: (tips) ->
@store.set TIPS_KEY, tips.join('/')
return return
setDark: (value) -> setDark: (value) ->
try @store.set DARK_KEY, !!value
if value
Cookies.set DARK_KEY, '1', path: '/', expires: 1e8
else
Cookies.expire DARK_KEY
catch
return return
setLayout: (name, enable) -> setLayout: (name, enable) ->
try layout = (@store.get(LAYOUT_KEY) || '').split(' ')
layout = (Cookies.get(LAYOUT_KEY) || '').split(' ') $.arrayDelete(layout, '')
$.arrayDelete(layout, '')
if enable
if enable layout.push(name) if layout.indexOf(name) is -1
layout.push(name) if layout.indexOf(name) is -1 else
else $.arrayDelete(layout, name)
$.arrayDelete(layout, name)
if layout.length > 0
if layout.length > 0 @store.set LAYOUT_KEY, layout.join(' ')
Cookies.set LAYOUT_KEY, layout.join(' '), path: '/', expires: 1e8 else
else @store.del LAYOUT_KEY
Cookies.expire LAYOUT_KEY
catch
return return
hasLayout: (name) -> hasLayout: (name) ->
try layout = (@store.get(LAYOUT_KEY) || '').split(' ')
layout = (Cookies.get(LAYOUT_KEY) || '').split(' ') layout.indexOf(name) isnt -1
layout.indexOf(name) isnt -1
catch
false
setSize: (value) -> setSize: (value) ->
try @store.set SIZE_KEY, value
Cookies.set SIZE_KEY, value, path: '/', expires: 1e8
catch
return return
dump: ->
@store.dump()
reset: -> reset: ->
try Cookies.expire DOCS_KEY @store.reset()
try Cookies.expire DARK_KEY
try Cookies.expire LAYOUT_KEY
try Cookies.expire SIZE_KEY
try @store.del(SETTINGS_KEY)
return return

@ -22,7 +22,7 @@ class app.UpdateChecker
return return
checkDocs: -> checkDocs: ->
if app.settings.get('autoUpdate') unless app.settings.get('manualUpdate')
app.docs.updateInBackground() app.docs.updateInBackground()
else else
app.docs.checkForUpdates (i) => @onDocsUpdateReady() if i > 0 app.docs.checkForUpdates (i) => @onDocsUpdateReady() if i > 0

@ -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

@ -6,7 +6,7 @@ app.templates.offlinePage = (docs) -> """
<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> <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>
</div> </div>
<label class="_docs-label"> <label class="_docs-label">
<input type="checkbox" name="autoUpdate" value="1" #{if app.settings.get('autoUpdate') then 'checked' else ''}> <input type="checkbox" name="autoUpdate" value="1" #{if app.settings.get('manualUpdate') then '' else 'checked'}>
Check for and install updates automatically Check for and install updates automatically
</label> </label>
</div> </div>

@ -81,5 +81,5 @@ class app.views.OfflinePage extends app.View
onChange: (event) -> onChange: (event) ->
if event.target.name is 'autoUpdate' if event.target.name is 'autoUpdate'
app.settings.set 'autoUpdate', !!event.target.checked app.settings.set 'manualUpdate', !event.target.checked
return return

@ -46,10 +46,9 @@ class app.views.DocList extends app.View
return return
renderDisabledList: -> renderDisabledList: ->
if (hidden = app.settings.get 'hideDisabled') is true if app.settings.get('hideDisabled')
@removeDisabledList() @removeDisabledList()
else else
app.settings.set 'hideDisabled', false unless hidden is false
@appendDisabledList() @appendDisabledList()
return return

Loading…
Cancel
Save