Add local storage for certain UI state
This commit is contained in:
@@ -34,6 +34,7 @@ Event.load.failed = 'load:failed' # controller, error message
|
||||
Event.load.finished = 'load:finished' # controller
|
||||
Event.remove = 'remove' # collection, item...
|
||||
Event.route = 'route'
|
||||
Event.sort = 'sort'
|
||||
|
||||
exports.Url = Url = {}
|
||||
Url.itemIcon = _.template "/data/<%= modSlug %>/images/<%= itemSlug %>.png"
|
||||
|
||||
@@ -7,11 +7,13 @@ All rights reserved.
|
||||
|
||||
BaseController = require './base_controller'
|
||||
CraftingTableController = require './crafting_table_controller'
|
||||
{Event} = require '../constants'
|
||||
ImageLoader = require './image_loader'
|
||||
InventoryController = require './inventory_controller'
|
||||
ItemPage = require '../models/item_page'
|
||||
ModPackController = require './mod_pack_controller'
|
||||
NameFinder = require '../models/name_finder'
|
||||
Storage = require '../models/storage'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
@@ -20,10 +22,12 @@ module.exports = class ItemPageController extends BaseController
|
||||
constructor: (options={})->
|
||||
options.model ?= new ItemPage
|
||||
options.imageLoader ?= new ImageLoader defaultUrl:'/images/unknown.png'
|
||||
options.storage ?= new Storage storage:window.localStorage
|
||||
options.templateName = 'item_page'
|
||||
super options
|
||||
|
||||
@imageLoader = options.imageLoader
|
||||
@storage = options.storage
|
||||
|
||||
# Event Methods ################################################################################
|
||||
|
||||
@@ -32,6 +36,12 @@ module.exports = class ItemPageController extends BaseController
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onWillRender: ->
|
||||
@storage.register 'crafting-plan', @model.plan, 'includingTools'
|
||||
@model.modPack.on Event.add, (modVersion)=>
|
||||
@storage.register "mod-version:#{modVersion.slug}", modVersion, 'enabled'
|
||||
super
|
||||
|
||||
onDidRender: ->
|
||||
@wantController = @addChild InventoryController, '.want',
|
||||
editable: true
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}"
|
||||
Reference in New Issue
Block a user