Files
website/src/client/storage.coffee
T
2017-05-02 19:19:35 -07:00

63 lines
2.0 KiB
CoffeeScript

#
# Crafting Guide - storage.coffee
#
# Copyright © 2014-2017 by Redwood Labs
# All rights reserved.
#
########################################################################################################################
module.exports = class Storage
constructor: (options={})->
options.storage ?= window.sessionStorage
@storage = options.storage
@_models = {}
# Public Methods ###############################################################################
load: (key)->
value = @storage.getItem key
logger.verbose -> "loaded #{value} from #{key}"
return value
store: (key, value)->
@storage.setItem key, value
logger.verbose -> "stored #{value} into #{key}"
register: (key, model, property, defaultValue=null)->
modelData = @_models[key]
if not modelData? then modelData = @_models[key] = model:model, properties:{}
makeStoreMethod = (k, m, p)=> return => @_storeProperty(k, m, p)
return if modelData.properties[property]?
modelData.properties[property] = property
@_loadProperty key, model, property, defaultValue
model.on "change:#{property}", makeStoreMethod(key, model, property)
unregister: (key, property)->
modelData = @_models[key]
return unless modelData?
delete modelData.properties[key]
# Private Methods ##############################################################################
_loadProperty: (key, model, property, defaultValue=null)->
loadedValue = @load "#{key}:#{property}"
if loadedValue?
value = JSON.parse loadedValue
else
value = defaultValue
return unless value?
model[property] = value
if value? and not loadedValue?
@_storeProperty key, model, property
_storeProperty: (key, model, property)->
value = JSON.stringify model[property]
@store "#{key}:#{property}", value