Add local storage for certain UI state

This commit is contained in:
Andrew Miner
2015-01-16 09:01:06 -08:00
parent 33b9214386
commit 03b46f3958
4 changed files with 66 additions and 0 deletions
+4
View File
@@ -115,7 +115,11 @@ module.exports = class ModPack extends BaseModel
loadModVersionData: (data)->
modVersion = @_parser.parse data
@modVersions.push modVersion
@trigger Event.add, modVersion, this
@modVersions.sort (a, b)-> a.compareTo b
@trigger Event.sort, this
modVersion.on Event.change, => @trigger Event.change, this
return modVersion
+51
View File
@@ -0,0 +1,51 @@
###
Crafting Guide - storage.coffee
Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
########################################################################################################################
module.exports = class Storage
constructor: (options={})->
options.storage ?= window.sessionStorage
@storage = options.storage
@_models = {}
# Public Methods ###############################################################################
register: (key, model, properties...)->
modelData = @_models[key]
if not modelData? then modelData = @_models[key] = model:model, properties:{}
makeStoreMethod = (k, m, p)=> return => @_store(k, m, p)
for property in properties
continue if modelData.properties[property]?
modelData.properties[property] = property
@_load key, model, property
model.on "change:#{property}", makeStoreMethod(key, model, property)
unregister: (key, property)->
modelData = @_models[key]
return unless modelData?
delete modelData.properties[key]
# Private Methods ##############################################################################
_load: (key, model, property)->
value = @storage.getItem "#{key}:#{property}"
value = JSON.parse(value) if value?
logger.verbose "loaded #{value} from #{key}:#{property}"
return unless value?
model[property] = value
_store: (key, model, property)->
value = JSON.stringify model[property]
@storage.setItem "#{key}:#{property}", value
logger.verbose "stored #{value} into #{key}:#{property}"