Store settings in cookies instead of localStorage

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

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

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

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

@ -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>
</div>
<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
</label>
</div>

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

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

Loading…
Cancel
Save