Added support for personal local storage (to not share settings over different users on same browser).

This commit is contained in:
Martin Edenhofer 2015-11-04 10:23:56 +01:00
parent e1c87d8cfa
commit 01678787f3
3 changed files with 22 additions and 18 deletions

View file

@ -500,10 +500,10 @@ class App.ControllerTable extends App.Controller
data[type][key] = {} data[type][key] = {}
data[type][key] = value data[type][key] = value
@log 'debug', @table_id, 'preferencesStore', data @log 'debug', @table_id, 'preferencesStore', data
App.LocalStorage.set(@preferencesStoreKey(), data) App.LocalStorage.set(@preferencesStoreKey(), data, @Session.get('id'))
preferencesGet: => preferencesGet: =>
data = App.LocalStorage.get(@preferencesStoreKey()) data = App.LocalStorage.get(@preferencesStoreKey(), @Session.get('id'))
return {} if !data return {} if !data
@log 'debug', @table_id, 'preferencesGet', data @log 'debug', @table_id, 'preferencesGet', data
data data

View file

@ -111,7 +111,7 @@ class Table extends App.Controller
for key, value of params for key, value of params
@[key] = value @[key] = value
@view_mode = localStorage.getItem( "mode:#{@view}" ) || 's' @view_mode = App.LocalStorage.get("mode:#{@view}", @Session.get('id')) || 's'
@log 'notice', 'view:', @view, @view_mode @log 'notice', 'view:', @view, @view_mode
return if !@view return if !@view
@ -370,7 +370,7 @@ class Table extends App.Controller
viewmode: (e) => viewmode: (e) =>
e.preventDefault() e.preventDefault()
@view_mode = $(e.target).data('mode') @view_mode = $(e.target).data('mode')
localStorage.setItem( "mode:#{@view}", @view_mode ) App.LocalStorage.set("mode:#{@view}", @view_mode, @Session.get('id'))
@fetch() @fetch()
#@render() #@render()

View file

@ -1,20 +1,20 @@
class App.LocalStorage class App.LocalStorage
_instance = undefined # Must be declared here to force the closure on the class _instance = undefined # Must be declared here to force the closure on the class
@set: (key, value) -> @set: (key, value, user_id) ->
if _instance == undefined if _instance == undefined
_instance ?= new _storeSingleton _instance ?= new _storeSingleton
_instance.set(key, value) _instance.set(key, value, user_id)
@get: (args) -> @get: (key, user_id) ->
if _instance == undefined if _instance == undefined
_instance ?= new _storeSingleton _instance ?= new _storeSingleton
_instance.get(args) _instance.get(key, user_id)
@delete: (args) -> @delete: (key, user_id) ->
if _instance == undefined if _instance == undefined
_instance ?= new _storeSingleton _instance ?= new _storeSingleton
_instance.delete(args) _instance.delete(key)
@clear: -> @clear: ->
if _instance == undefined if _instance == undefined
@ -31,22 +31,28 @@ class _storeSingleton
constructor: -> constructor: ->
# write to local storage # write to local storage
set: (key, value) -> set: (key, value, user_id) ->
try try
if user_id
key = "personal::#{user_id}::#{key}"
localStorage.setItem(key, JSON.stringify(value)) localStorage.setItem(key, JSON.stringify(value))
catch e catch e
if e is QUOTA_EXCEEDED_ERR if e is QUOTA_EXCEEDED_ERR
# do something nice to notify your users # do something nice to notify your users
App.Log.error 'App.LocalStore', 'Local storage quote exceeded!' App.Log.error 'App.LocalStorage', 'Local storage quote exceeded!'
# get item # get item
get: (key) -> get: (key, user_id) ->
if user_id
key = "personal::#{user_id}::#{key}"
value = localStorage.getItem(key) value = localStorage.getItem(key)
return if !value return if !value
JSON.parse(value) JSON.parse(value)
# delete item # delete item
delete: (key) -> delete: (key, user_id) ->
if user_id
key = "personal::#{user_id}::#{key}"
localStorage.removeItem(key) localStorage.removeItem(key)
# clear local storage # clear local storage
@ -55,6 +61,4 @@ class _storeSingleton
# return list of all keys # return list of all keys
list: -> list: ->
for key of window.localStorage window.localStorage
list.push key
list