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
67 true67 true
68 dataCallback: (data) ->68 dataCallback: (data) ->
69 try69 try
70 $.extend(data.user ||= {}, app.settings.settings)70 $.extend(data.user ||= {}, app.settings.dump())
71 data.user.lastIDBTransaction = app.lastIDBTransaction if app.lastIDBTransaction71 data.user.lastIDBTransaction = app.lastIDBTransaction if app.lastIDBTransaction
72 data72 data
73 .install()73 .install()
@@ -170,10 +170,10 @@ · 96 unmodified lines
170 170
171 showTip: (tip) ->171 showTip: (tip) ->
172 return if @isSingleDoc()172 return if @isSingleDoc()
173 tips = @settings.get('tips') || []173 tips = @settings.getTips()
174 if tips.indexOf(tip) is -1174 if tips.indexOf(tip) is -1
175 tips.push(tip)175 tips.push(tip)
176 @settings.set('tips', tips)176 @settings.setTips(tips)
177 new app.views.Tip(tip)177 new app.views.Tip(tip)
178 return178 return
179 179
assets/javascripts/app/settings.coffee+49−62
@@ -1,101 +1,88 @@
1class app.Settings1class app.Settings
2 SETTINGS_KEY = 'settings'
3 DOCS_KEY = 'docs'2 DOCS_KEY = 'docs'
4 DARK_KEY = 'dark'3 DARK_KEY = 'dark'
5 LAYOUT_KEY = 'layout'4 LAYOUT_KEY = 'layout'
6 SIZE_KEY = 'size'5 SIZE_KEY = 'size'
6 TIPS_KEY = 'tips'
7 7
8 @defaults:8 @defaults:
9 count: 09 count: 0
10 hideDisabled: false10 hideDisabled: false
11 hideIntro: false11 hideIntro: false
12 news: 012 news: 0
13 autoUpdate: true13 manualUpdate: false
14 schema: 114 schema: 1
15 15
16 constructor: (@store) ->16 constructor: (legacyStore) ->
17 @create() unless @settings = @store.get(SETTINGS_KEY)17 @store = new CookieStore
18 18 @importLegacyValues(legacyStore)
19 create: ->19
20 @settings = $.extend({}, @constructor.defaults)20 importLegacyValues: (legacyStore) ->
21 @applyLegacyValues @settings21 return unless settings = legacyStore.get('settings')
22 @save()22 for key, value of settings
23 return23 if key == 'autoUpdate'
24 24 key = 'manualUpdate'
25 applyLegacyValues: (settings) ->25 value = !value
26 for key, v of settings when (value = @store.get(key))?26 else if key == 'tips'
27 settings[key] = value27 value = value.join('/')
28 @store.del(key)28 @store.set(key, value)
29 legacyStore.del('settings')
29 return30 return
30 31
31 save: ->
32 @store.set SETTINGS_KEY, @settings
33
34 set: (key, value) ->32 set: (key, value) ->
35 @settings[key] = value33 @store.set(key, value)
36 @save()34 return
37 35
38 get: (key) ->36 get: (key) ->
39 @settings[key] ? @constructor.defaults[key]37 @store.get(key) ? @constructor.defaults[key]
40 38
41 hasDocs: ->39 hasDocs: ->
42 try !!Cookies.get DOCS_KEY40 try !!@store.get(DOCS_KEY)
43 41
44 getDocs: ->42 getDocs: ->
45 try43 @store.get(DOCS_KEY)?.split('/') or app.config.default_docs
46 Cookies.get(DOCS_KEY)?.split('/') or app.config.default_docs
47 catch
48 app.config.default_docs
49 44
50 setDocs: (docs) ->45 setDocs: (docs) ->
51 try46 @store.set DOCS_KEY, docs.join('/')
52 Cookies.set DOCS_KEY, docs.join('/'), path: '/', expires: 1e847 return
53 catch48
49 getTips: ->
50 @store.get(TIPS_KEY)?.split('/') or []
51
52 setTips: (tips) ->
53 @store.set TIPS_KEY, tips.join('/')
54 return54 return
55 55
56 setDark: (value) ->56 setDark: (value) ->
57 try57 @store.set DARK_KEY, !!value
58 if value
59 Cookies.set DARK_KEY, '1', path: '/', expires: 1e8
60 else
61 Cookies.expire DARK_KEY
62 catch
63 return58 return
64 59
65 setLayout: (name, enable) ->60 setLayout: (name, enable) ->
66 try61 layout = (@store.get(LAYOUT_KEY) || '').split(' ')
67 layout = (Cookies.get(LAYOUT_KEY) || '').split(' ')62 $.arrayDelete(layout, '')
68 $.arrayDelete(layout, '')63
69 64 if enable
70 if enable65 layout.push(name) if layout.indexOf(name) is -1
71 layout.push(name) if layout.indexOf(name) is -166 else
72 else67 $.arrayDelete(layout, name)
73 $.arrayDelete(layout, name)68
74 69 if layout.length > 0
75 if layout.length > 070 @store.set LAYOUT_KEY, layout.join(' ')
76 Cookies.set LAYOUT_KEY, layout.join(' '), path: '/', expires: 1e871 else
77 else72 @store.del LAYOUT_KEY
78 Cookies.expire LAYOUT_KEY
79 catch
80 return73 return
81 74
82 hasLayout: (name) ->75 hasLayout: (name) ->
83 try76 layout = (@store.get(LAYOUT_KEY) || '').split(' ')
84 layout = (Cookies.get(LAYOUT_KEY) || '').split(' ')77 layout.indexOf(name) isnt -1
85 layout.indexOf(name) isnt -1
86 catch
87 false
88 78
89 setSize: (value) ->79 setSize: (value) ->
90 try80 @store.set SIZE_KEY, value
91 Cookies.set SIZE_KEY, value, path: '/', expires: 1e8
92 catch
93 return81 return
94 82
83 dump: ->
84 @store.dump()
85
95 reset: ->86 reset: ->
96 try Cookies.expire DOCS_KEY87 @store.reset()
97 try Cookies.expire DARK_KEY
98 try Cookies.expire LAYOUT_KEY
99 try Cookies.expire SIZE_KEY
100 try @store.del(SETTINGS_KEY)
101 return88 return
assets/javascripts/app/update_checker.coffee+1−1
@@ -22,7 +22,7 @@ class app.UpdateChecker · 21 unmodified lines
22 return22 return
23 23
24 checkDocs: ->24 checkDocs: ->
25 if app.settings.get('autoUpdate')25 unless app.settings.get('manualUpdate')
26 app.docs.updateInBackground()26 app.docs.updateInBackground()
27 else27 else
28 app.docs.checkForUpdates (i) => @onDocsUpdateReady() if i > 028 app.docs.checkForUpdates (i) => @onDocsUpdateReady() if i > 0
assets/javascripts/lib/cookie_store.coffee+40−0
@@ -0,0 +1,40 @@
1class @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
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>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 </div>7 </div>
8 <label class="_docs-label">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 Check for and install updates automatically10 Check for and install updates automatically
11 </label>11 </label>
12 </div>12 </div>
assets/javascripts/views/content/offline_page.coffee+1−1
@@ -81,5 +81,5 @@ class app.views.OfflinePage extends app.View · 80 unmodified lines
81 81
82 onChange: (event) ->82 onChange: (event) ->
83 if event.target.name is 'autoUpdate'83 if event.target.name is 'autoUpdate'
84 app.settings.set 'autoUpdate', !!event.target.checked84 app.settings.set 'manualUpdate', !event.target.checked
85 return85 return
assets/javascripts/views/sidebar/doc_list.coffee+1−2
@@ -46,10 +46,9 @@ class app.views.DocList extends app.View · 45 unmodified lines
46 return46 return
47 47
48 renderDisabledList: ->48 renderDisabledList: ->
49 if (hidden = app.settings.get 'hideDisabled') is true49 if app.settings.get('hideDisabled')
50 @removeDisabledList()50 @removeDisabledList()
51 else51 else
52 app.settings.set 'hideDisabled', false unless hidden is false
53 @appendDisabledList()52 @appendDisabledList()
54 return53 return
55 54