Initial implementation of item page (disabled)
This commit is contained in:
@@ -12,6 +12,7 @@ views = require '../views'
|
||||
module.exports = class BaseController extends Backbone.View
|
||||
|
||||
constructor: (options={})->
|
||||
@tryRefresh = _.debounce @_tryRefresh, 100
|
||||
Object.defineProperty this, 'model', get:@getModel, set:@setModel
|
||||
|
||||
@_model = null
|
||||
@@ -23,8 +24,6 @@ module.exports = class BaseController extends Backbone.View
|
||||
@_loadTemplate options.templateName
|
||||
super options
|
||||
|
||||
@_tryRefresh = _.debounce @_tryRefresh, 100
|
||||
|
||||
# Public Methods ###############################################################################
|
||||
|
||||
addChild: (Controller, atSelector, options={})->
|
||||
@@ -47,15 +46,15 @@ module.exports = class BaseController extends Backbone.View
|
||||
# Event Methods ################################################################################
|
||||
|
||||
onDidModelChange: ->
|
||||
@_tryRefresh()
|
||||
@tryRefresh()
|
||||
|
||||
onDidModelSync: ->
|
||||
@_tryRefresh()
|
||||
@tryRefresh()
|
||||
|
||||
onWillRender: -> # do nothing
|
||||
|
||||
onDidRender: ->
|
||||
@_tryRefresh()
|
||||
@tryRefresh()
|
||||
|
||||
onWillShow: -> # do nothing
|
||||
|
||||
@@ -79,7 +78,7 @@ module.exports = class BaseController extends Backbone.View
|
||||
return unless @onWillChangeModel @_model, newModel
|
||||
|
||||
@_model = newModel
|
||||
@_tryRefresh()
|
||||
@tryRefresh()
|
||||
|
||||
# Backbone.View Overrides ######################################################################
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{Url} = require '../constants'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
@@ -31,9 +30,9 @@ module.exports = class ItemController extends BaseController
|
||||
refresh: ->
|
||||
display = @_modPack.findItemDisplay @model.slug
|
||||
|
||||
@$icon.attr 'src', Url.itemIcon display
|
||||
@$icon.attr 'src', display.iconUrl
|
||||
@$name.html display.itemName
|
||||
@$nameLink.attr 'href', Url.item display
|
||||
@$nameLink.attr 'href', display.itemUrl
|
||||
|
||||
# Backbone.View Overrides ######################################################################
|
||||
|
||||
|
||||
@@ -16,17 +16,26 @@ 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'
|
||||
if not options.modPack? then throw new Error 'options.modPack is required'
|
||||
options.title ?= ''
|
||||
options.templateName = 'item_group'
|
||||
super options
|
||||
|
||||
@modVersion = options.modVersion
|
||||
@_modPack = options.modPack
|
||||
@_itemControllers = []
|
||||
@_modPack = options.modPack
|
||||
@_title = options.title
|
||||
|
||||
@modVersion.on Event.change, => @refresh()
|
||||
Object.defineProperties this,
|
||||
title: {get:@getTitle, set:@setTitle}
|
||||
|
||||
# Property Methods #############################################################################
|
||||
|
||||
getTitle: ->
|
||||
return @_title
|
||||
|
||||
setTitle: (title)->
|
||||
@_title = title
|
||||
@tryRefresh()
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
@@ -36,7 +45,7 @@ module.exports = class ItemGroupController extends BaseController
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
@$title.html if @model is Item.Group.Other then 'Items' else @model
|
||||
@$title.html @_title
|
||||
@_refreshItems()
|
||||
super
|
||||
|
||||
@@ -55,15 +64,16 @@ module.exports = class ItemGroupController extends BaseController
|
||||
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
|
||||
if @model?
|
||||
for item in @model
|
||||
controller = @_itemControllers[controllerIndex]
|
||||
if not controller?
|
||||
_.delay ((i)=> return => @_createItemController i)(item), delay
|
||||
delay += @_delayStep
|
||||
else
|
||||
controller.model = item
|
||||
controller.refresh()
|
||||
controllerIndex += 1
|
||||
|
||||
while @_itemControllers.length > controllerIndex
|
||||
controller = @_itemControllers.pop()
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
###
|
||||
Crafting Guide - item_page_controller.coffee
|
||||
|
||||
Copyright (c) 2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
BaseController = require './base_controller'
|
||||
{Duration} = require '../constants'
|
||||
{Event} = require '../constants'
|
||||
ImageLoader = require './image_loader'
|
||||
ItemGroupController = require './item_group_controller'
|
||||
ItemPage = require '../models/item_page'
|
||||
{Url} = require '../constants'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class ItemPageController extends BaseController
|
||||
|
||||
constructor: (options={})->
|
||||
if not options.modPack? then throw new Error 'options.modPack is required'
|
||||
if not options.itemSlug? then throw new Error 'options.itemSlug is required'
|
||||
|
||||
options.imageLoader ?= new ImageLoader defaultUrl:'/images/unknown.png'
|
||||
options.model ?= new ItemPage modPack:options.modPack
|
||||
options.templateName ?= 'item_page'
|
||||
|
||||
super options
|
||||
|
||||
@_imageLoader = options.imageLoader
|
||||
@_itemSlug = options.itemSlug
|
||||
@_modPack = options.modPack
|
||||
|
||||
@_modPack.on Event.change, => @_resolveItemSlug()
|
||||
@_resolveItemSlug()
|
||||
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onDidRender: ->
|
||||
@_similarItemsController = @addChild ItemGroupController, '.similar .view__item_group', modPack:@_modPack
|
||||
@_usedInMakingController = @addChild ItemGroupController, '.usedInMaking .view__item_group', modPack:@_modPack
|
||||
|
||||
@$byline = @$('.byline')
|
||||
@$bylineLink = @$('.byline a')
|
||||
@$usedInMakingContainer = @$('.usedInMaking')
|
||||
@$name = @$('h1.name')
|
||||
@$recipeContainer = @$('.recipe')
|
||||
@$similarContainer = @$('.similar')
|
||||
@$titleImage = @$('.titleImage img')
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
display = @_modPack.findItemDisplay @model.item?.slug
|
||||
if display?
|
||||
@_imageLoader.load display.iconUrl, @$titleImage
|
||||
@$name.html display.itemName
|
||||
else
|
||||
@$titleImage.removeAttr 'src'
|
||||
@$name.html ''
|
||||
|
||||
@_refreshByline()
|
||||
@_refreshSimilarItems()
|
||||
@_refreshComponentIn()
|
||||
|
||||
super
|
||||
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
_refreshByline: ->
|
||||
mod = @model.item?.modVersion?.mod
|
||||
if mod?.name?.length > 0
|
||||
@$bylineLink.attr 'href', Url.mod modSlug:mod.slug
|
||||
@$bylineLink.html mod.name
|
||||
@$byline.fadeIn duration:Duration.fast
|
||||
else
|
||||
@$byline.fadeOut duration:Duration.fast
|
||||
|
||||
_refreshComponentIn: ->
|
||||
@_usedInMakingController.title = 'Used in Making'
|
||||
|
||||
@_usedInMakingController.model = @model.findComponentInItems()
|
||||
if @_usedInMakingController.model?
|
||||
@$usedInMakingContainer.fadeIn duration:Duration.fast
|
||||
else
|
||||
@$usedInMakingContainer.fadeOut duration:Duration.fast
|
||||
|
||||
_refreshSimilarItems: ->
|
||||
group = @model.item?.group
|
||||
@_similarItemsController.title = if group? then "Other #{group}" else 'Similar Items'
|
||||
|
||||
@_similarItemsController.model = @model.findSimilarItems()
|
||||
if @_similarItemsController.model?
|
||||
@$similarContainer.fadeIn duration:Duration.fast
|
||||
else
|
||||
@$similarContainer.fadeOut duration:Duration.fast
|
||||
|
||||
_resolveItemSlug: ->
|
||||
@model.item = @_modPack.findItem @_itemSlug, includeDisabled:true
|
||||
|
||||
@@ -33,7 +33,7 @@ module.exports = class ModController extends BaseController
|
||||
# BaseController Overrides #####################################################################
|
||||
|
||||
onDidRender: ->
|
||||
@$version = @$('.version')
|
||||
@$version = @$('select')
|
||||
@$nameLink = @$('.name a')
|
||||
@$nameText = @$('.name p')
|
||||
@$description = @$('.description p')
|
||||
@@ -69,5 +69,5 @@ module.exports = class ModController extends BaseController
|
||||
|
||||
events: ->
|
||||
return _.extend super,
|
||||
'change .version': 'onVersionChanged'
|
||||
'change select': 'onVersionChanged'
|
||||
'click a': 'routeLinkClick'
|
||||
|
||||
@@ -9,6 +9,7 @@ BaseController = require './base_controller'
|
||||
{Duration} = require '../constants'
|
||||
Mod = require '../models/mod'
|
||||
ModPack = require '../models/mod_pack'
|
||||
Item = require '../models/item'
|
||||
ItemGroupController = require './item_group_controller'
|
||||
{Text} = require '../constants'
|
||||
{Url} = require '../constants'
|
||||
@@ -84,25 +85,28 @@ module.exports = class ModPageController extends BaseController
|
||||
|
||||
modVersion = @model.activeModVersion
|
||||
modVersion ?= @model.getModVersion Mod.Version.Latest
|
||||
modVersion.fetch()
|
||||
modVersion.fetch() if modVersion?
|
||||
|
||||
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++
|
||||
if modVersion?
|
||||
modVersion.eachGroup (group)=>
|
||||
controller = @_groupControllers[groupIndex]
|
||||
items = modVersion.allItemsInGroup group
|
||||
if not controller?
|
||||
title = if group is Item.Group.Other then 'Items' else group
|
||||
controller = new ItemGroupController model:items, modPack:@_modPack, title:title
|
||||
controller.render()
|
||||
@$groupContainer.append controller.$el
|
||||
@_groupControllers[groupIndex] = controller
|
||||
else
|
||||
controller.modVersion = modVersion
|
||||
controller.model = items
|
||||
controller.refresh()
|
||||
groupIndex++
|
||||
|
||||
while @_groupControllers.length > groupIndex + 1
|
||||
controller = @_groupControllers.pop()
|
||||
|
||||
Reference in New Issue
Block a user