Allow items to be grouped on mod detail pages
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
###
|
||||
Crafting Guide - item_group_controller.coffee
|
||||
|
||||
Copyright (c) 2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{Duration} = require '../constants'
|
||||
{Event} = require '../constants'
|
||||
Item = require '../models/item'
|
||||
ItemController = require './item_controller'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class ItemGroupController extends BaseController
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.model? then throw new Error 'options.model is required'
|
||||
if not options.modPack? then throw new Error 'options.modPack is required'
|
||||
if not options.modVersion? then throw new Error 'options.modVersion is required'
|
||||
options.templateName = 'item_group'
|
||||
super options
|
||||
|
||||
@modVersion = options.modVersion
|
||||
@_modPack = options.modPack
|
||||
@_itemControllers = []
|
||||
|
||||
@modVersion.on Event.change, => @refresh()
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onDidRender: ->
|
||||
@$title = @$('h2')
|
||||
@$items = @$('.panel')
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
@$title.html if @model is Item.Group.Other then 'Items' else @model
|
||||
@_refreshItems()
|
||||
super
|
||||
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
_createItemController: (item)->
|
||||
controller = new ItemController model:item, modPack:@_modPack
|
||||
controller.$el.hide()
|
||||
controller.render()
|
||||
|
||||
@_itemControllers.push controller
|
||||
@$items.append controller.$el
|
||||
controller.$el.slideDown duration:Duration.fast
|
||||
|
||||
_refreshItems: ->
|
||||
controllerIndex = 0
|
||||
delay = 0
|
||||
|
||||
@modVersion.eachItemInGroup @model, (item)=>
|
||||
controller = @_itemControllers[controllerIndex]
|
||||
if not controller?
|
||||
_.delay (=> @_createItemController item), delay
|
||||
delay += @_delayStep
|
||||
else
|
||||
controller.model = item
|
||||
controller.refresh()
|
||||
controllerIndex += 1
|
||||
|
||||
while @_itemControllers.length > controllerIndex
|
||||
controller = @_itemControllers.pop()
|
||||
controller.$el.slideUp duration:Duration.fast, complete:-> @remove()
|
||||
@@ -5,12 +5,12 @@ Copyright (c) 2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{Duration} = require '../constants'
|
||||
Mod = require '../models/mod'
|
||||
ModPack = require '../models/mod_pack'
|
||||
ItemController = require './item_controller'
|
||||
{Url} = require '../constants'
|
||||
BaseController = require './base_controller'
|
||||
{Duration} = require '../constants'
|
||||
Mod = require '../models/mod'
|
||||
ModPack = require '../models/mod_pack'
|
||||
ItemGroupController = require './item_group_controller'
|
||||
{Url} = require '../constants'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
@@ -24,7 +24,7 @@ module.exports = class ModPageController extends BaseController
|
||||
|
||||
@_delayStep = options.delayStep
|
||||
@_effectiveModVersion = null
|
||||
@_itemControllers = []
|
||||
@_groupControllers = []
|
||||
@_modPack = options.modPack
|
||||
|
||||
Object.defineProperties this,
|
||||
@@ -48,7 +48,7 @@ module.exports = class ModPageController extends BaseController
|
||||
@$documentationLink = @$('.documentation')
|
||||
@$downloadLink = @$('.download')
|
||||
@$homePageLink = @$('.homePage')
|
||||
@$items = @$('.items .panel')
|
||||
@$groupContainer = @$('.itemGroups')
|
||||
@$titleImage = @$('.titleImage img')
|
||||
@$versionSelector = @$('select.version')
|
||||
|
||||
@@ -64,7 +64,7 @@ module.exports = class ModPageController extends BaseController
|
||||
@_refreshLink @$documentationLink, @model.documentationUrl
|
||||
@_refreshLink @$downloadLink, @model.downloadUrl
|
||||
|
||||
@_refreshItems()
|
||||
@_refreshItemGroups()
|
||||
@_refreshVersions()
|
||||
super
|
||||
|
||||
@@ -75,15 +75,6 @@ module.exports = class ModPageController extends BaseController
|
||||
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
_createItemController: (item)->
|
||||
controller = new ItemController model:item, modPack:@_modPack
|
||||
controller.$el.hide()
|
||||
controller.render()
|
||||
|
||||
@_itemControllers.push controller
|
||||
@$items.append controller.$el
|
||||
controller.$el.fadeIn duration:Duration.fast
|
||||
|
||||
_getEffectiveModVersion: ->
|
||||
return @_effectiveModVersion if @_effectiveModVersion?
|
||||
return null unless @model?
|
||||
@@ -94,6 +85,26 @@ module.exports = class ModPageController extends BaseController
|
||||
|
||||
return modVersion
|
||||
|
||||
_refreshItemGroups: ->
|
||||
groupIndex = 0
|
||||
modVersion = @effectiveModVersion
|
||||
modVersion.eachGroup (group)=>
|
||||
controller = @_groupControllers[groupIndex]
|
||||
if not controller?
|
||||
controller = new ItemGroupController model:group, modVersion:modVersion, modPack:@_modPack
|
||||
controller.render()
|
||||
@$groupContainer.append controller.$el
|
||||
@_groupControllers[groupIndex] = controller
|
||||
else
|
||||
controller.modVersion = modVersion
|
||||
controller.model = group
|
||||
controller.refresh()
|
||||
groupIndex++
|
||||
|
||||
while @_groupControllers.length > groupIndex + 1
|
||||
controller = @_groupControllers.pop()
|
||||
controller.$el.slideUp duration:Duration.fast, -> @remove()
|
||||
|
||||
_refreshLink: ($link, url)->
|
||||
if url?
|
||||
$link.fadeIn duration:Duration.fast
|
||||
@@ -101,28 +112,6 @@ module.exports = class ModPageController extends BaseController
|
||||
else
|
||||
$link.fadeOut duration:Duration.fast
|
||||
|
||||
_refreshItems: ->
|
||||
controllerIndex = 0
|
||||
delay = 0
|
||||
|
||||
effectiveModVersion = @effectiveModVersion
|
||||
if effectiveModVersion?
|
||||
@$items.show duration:Duration.fast
|
||||
effectiveModVersion.eachItem (item)=>
|
||||
controller = @_itemControllers[controllerIndex]
|
||||
if not controller?
|
||||
_.delay (=> @_createItemController item), delay
|
||||
delay += @_delayStep
|
||||
else
|
||||
controller.model = item
|
||||
controllerIndex += 1
|
||||
else
|
||||
@$items.hide duration:Duration.fast
|
||||
|
||||
while @_itemControllers.length > controllerIndex
|
||||
controller = @_itemControllers.pop()
|
||||
controller.$el.slideUp duration:Duration.fast, complete:-> @remove()
|
||||
|
||||
_refreshVersions: ->
|
||||
@$versionSelector.empty()
|
||||
return unless @model?
|
||||
|
||||
Reference in New Issue
Block a user