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.load.finished = 'load:finished' # controller
|
||||||
Event.remove = 'remove' # collection, item...
|
Event.remove = 'remove' # collection, item...
|
||||||
Event.route = 'route'
|
Event.route = 'route'
|
||||||
|
Event.sort = 'sort'
|
||||||
|
|
||||||
exports.Url = Url = {}
|
exports.Url = Url = {}
|
||||||
Url.itemIcon = _.template "/data/<%= modSlug %>/images/<%= itemSlug %>.png"
|
Url.itemIcon = _.template "/data/<%= modSlug %>/images/<%= itemSlug %>.png"
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ All rights reserved.
|
|||||||
|
|
||||||
BaseController = require './base_controller'
|
BaseController = require './base_controller'
|
||||||
CraftingTableController = require './crafting_table_controller'
|
CraftingTableController = require './crafting_table_controller'
|
||||||
|
{Event} = require '../constants'
|
||||||
ImageLoader = require './image_loader'
|
ImageLoader = require './image_loader'
|
||||||
InventoryController = require './inventory_controller'
|
InventoryController = require './inventory_controller'
|
||||||
ItemPage = require '../models/item_page'
|
ItemPage = require '../models/item_page'
|
||||||
ModPackController = require './mod_pack_controller'
|
ModPackController = require './mod_pack_controller'
|
||||||
NameFinder = require '../models/name_finder'
|
NameFinder = require '../models/name_finder'
|
||||||
|
Storage = require '../models/storage'
|
||||||
|
|
||||||
########################################################################################################################
|
########################################################################################################################
|
||||||
|
|
||||||
@@ -20,10 +22,12 @@ module.exports = class ItemPageController extends BaseController
|
|||||||
constructor: (options={})->
|
constructor: (options={})->
|
||||||
options.model ?= new ItemPage
|
options.model ?= new ItemPage
|
||||||
options.imageLoader ?= new ImageLoader defaultUrl:'/images/unknown.png'
|
options.imageLoader ?= new ImageLoader defaultUrl:'/images/unknown.png'
|
||||||
|
options.storage ?= new Storage storage:window.localStorage
|
||||||
options.templateName = 'item_page'
|
options.templateName = 'item_page'
|
||||||
super options
|
super options
|
||||||
|
|
||||||
@imageLoader = options.imageLoader
|
@imageLoader = options.imageLoader
|
||||||
|
@storage = options.storage
|
||||||
|
|
||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
@@ -32,6 +36,12 @@ module.exports = class ItemPageController extends BaseController
|
|||||||
|
|
||||||
# BaseController Overrides #####################################################################
|
# 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: ->
|
onDidRender: ->
|
||||||
@wantController = @addChild InventoryController, '.want',
|
@wantController = @addChild InventoryController, '.want',
|
||||||
editable: true
|
editable: true
|
||||||
|
|||||||
@@ -115,7 +115,11 @@ module.exports = class ModPack extends BaseModel
|
|||||||
loadModVersionData: (data)->
|
loadModVersionData: (data)->
|
||||||
modVersion = @_parser.parse data
|
modVersion = @_parser.parse data
|
||||||
@modVersions.push modVersion
|
@modVersions.push modVersion
|
||||||
|
@trigger Event.add, modVersion, this
|
||||||
|
|
||||||
@modVersions.sort (a, b)-> a.compareTo b
|
@modVersions.sort (a, b)-> a.compareTo b
|
||||||
|
@trigger Event.sort, this
|
||||||
|
|
||||||
modVersion.on Event.change, => @trigger Event.change, this
|
modVersion.on Event.change, => @trigger Event.change, this
|
||||||
|
|
||||||
return modVersion
|
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