History

Store settings in cookies instead of localStorage

Thibaut Courouble committed 10 years ago

Commit 4b269511 parent d0802987 files · +96 −70Browse files

Unified · Split

7 files
  1. assets/javascripts/app/app.coffee +3 −3
  2. assets/javascripts/app/settings.coffee +49 −62
  3. assets/javascripts/app/update_checker.coffee +1 −1
  4. assets/javascripts/lib/cookie_store.coffee +40 −0
  5. assets/javascripts/templates/pages/offline_tmpl.coffee +1 −1
  6. assets/javascripts/views/content/offline_page.coffee +1 −1
  7. assets/javascripts/views/sidebar/doc_list.coffee +1 −2
assets/javascripts/app/app.coffee+3−3
@@ -67,7 +67,7 @@ · 66 unmodified lines
6767 true
6868 dataCallback: (data) ->
6969 try
70− $.extend(data.user ||= {}, app.settings.settings)
70+ $.extend(data.user ||= {}, app.settings.dump())
7171 data.user.lastIDBTransaction = app.lastIDBTransaction if app.lastIDBTransaction
7272 data
7373 .install()
@@ -170,10 +170,10 @@ · 96 unmodified lines
170170
171171 showTip: (tip) ->
172172 return if @isSingleDoc()
173− tips = @settings.get('tips') || []
173+ tips = @settings.getTips()
174174 if tips.indexOf(tip) is -1
175175 tips.push(tip)
176− @settings.set('tips', tips)
176+ @settings.setTips(tips)
177177 new app.views.Tip(tip)
178178 return
179179
assets/javascripts/app/settings.coffee+49−62
@@ -1,101 +1,88 @@
11 class app.Settings
2− SETTINGS_KEY = 'settings'
32 DOCS_KEY = 'docs'
43 DARK_KEY = 'dark'
54 LAYOUT_KEY = 'layout'
65 SIZE_KEY = 'size'
6+ TIPS_KEY = 'tips'
77
88 @defaults:
99 count: 0
1010 hideDisabled: false
1111 hideIntro: false
1212 news: 0
13− autoUpdate: true
13+ manualUpdate: false
1414 schema: 1
1515
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')
2930 return
3031
31− save: ->
32− @store.set SETTINGS_KEY, @settings
33−
3432 set: (key, value) ->
35− @settings[key] = value
36− @save()
33+ @store.set(key, value)
34+ return
3735
3836 get: (key) ->
39− @settings[key] ? @constructor.defaults[key]
37+ @store.get(key) ? @constructor.defaults[key]
4038
4139 hasDocs: ->
42− try !!Cookies.get DOCS_KEY
40+ try !!@store.get(DOCS_KEY)
4341
4442 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
4944
5045 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('/')
5454 return
5555
5656 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
6358 return
6459
6560 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
8073 return
8174
8275 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
8878
8979 setSize: (value) ->
90− try
91− Cookies.set SIZE_KEY, value, path: '/', expires: 1e8
92− catch
80+ @store.set SIZE_KEY, value
9381 return
9482
83+ dump: ->
84+ @store.dump()
85+
9586 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()
10188 return
assets/javascripts/app/update_checker.coffee+1−1
@@ -22,7 +22,7 @@ class app.UpdateChecker · 21 unmodified lines
2222 return
2323
2424 checkDocs: ->
25− if app.settings.get('autoUpdate')
25+ unless app.settings.get('manualUpdate')
2626 app.docs.updateInBackground()
2727 else
2828 app.docs.checkForUpdates (i) => @onDocsUpdateReady() if i > 0
assets/javascripts/lib/cookie_store.coffee+40−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
assets/javascripts/templates/pages/offline_tmpl.coffee+1−1
@@ -6,7 +6,7 @@ app.templates.offlinePage = (docs) -> """ · 5 unmodified lines
66 <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>
77 </div>
88 <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'}>
1010 Check for and install updates automatically
1111 </label>
1212 </div>
assets/javascripts/views/content/offline_page.coffee+1−1
@@ -81,5 +81,5 @@ class app.views.OfflinePage extends app.View · 80 unmodified lines
8181
8282 onChange: (event) ->
8383 if event.target.name is 'autoUpdate'
84− app.settings.set 'autoUpdate', !!event.target.checked
84+ app.settings.set 'manualUpdate', !event.target.checked
8585 return
assets/javascripts/views/sidebar/doc_list.coffee+1−2
@@ -46,10 +46,9 @@ class app.views.DocList extends app.View · 45 unmodified lines
4646 return
4747
4848 renderDisabledList: ->
49− if (hidden = app.settings.get 'hideDisabled') is true
49+ if app.settings.get('hideDisabled')
5050 @removeDisabledList()
5151 else
52− app.settings.set 'hideDisabled', false unless hidden is false
5352 @appendDisabledList()
5453 return
5554