Update item detail page to new models

This commit is contained in:
Andrew Miner
2017-07-04 22:52:01 -07:00
parent 20119cf8e4
commit f6f736f8be
8 changed files with 75 additions and 91 deletions
@@ -45,8 +45,7 @@ module.exports = class ItemPageController extends PageController
craftingPlanButtonClicked: ->
tracker.trackEvent c.tracking.category.craft, "view-crafting-plan", @model.item.slug
display = @_modPack.findItemDisplay @model.item.slug
@_router.navigate display.craftingUrl, trigger:true
@_router.navigate @model.itemDisplay.craftingUrl, trigger:true
return false
# PageController Overrides #####################################################################
@@ -54,8 +53,8 @@ module.exports = class ItemPageController extends PageController
getBreadcrumbs: ->
return [
$("<a href='/browse'>Browse</a>")
$("<a href='#{@model.display.modUrl}'>#{@model.display.modName}</a>")
$("<b>#{display.name}</b>")
$("<a href='#{@model.itemDisplay.modUrl}'>#{@model.itemDisplay.mod.displayName}</a>")
$("<b>#{@model.itemDisplay.name}</b>")
]
getExtraNav: ->
@@ -66,17 +65,11 @@ module.exports = class ItemPageController extends PageController
return $("<a href='#{display.url}'>Random Item</a>")
getMetaDescription: ->
return null unless @_itemSlug?
display = @_modPack.findItemDisplay @_itemSlug
return c.text.itemDescription display
data = itemName:@model.item.displayName, modName:@model.item.mod.displayName
return c.text.itemDescription data
getTitle: ->
return null unless @_itemSlug?
display = @_modPack.findItemDisplay @_itemSlug
return null unless display.itemName? and display.modName?
return "#{display.itemName} from #{display.modName}"
return "#{@model.item.displayName} from #{@model.item.mod.displayName}"
# BaseController Overrides #####################################################################
@@ -120,14 +113,11 @@ module.exports = class ItemPageController extends PageController
super
refresh: ->
@_resolveItemSlug()
if @model.item?
display = @_modPack.findItemDisplay @model.item.slug
@_imageLoader.load display.iconUrl, @$aboutImage
@$name.text display.itemName
@_imageLoader.load @model.itemDisplay.iconUrl, @$aboutImage
@$name.text @model.itemDisplay.name
@_descriptionController.imageBase = c.url.itemImageDir display
@_descriptionController.imageBase = c.url.itemImageDir @model.itemDisplay
if @model.item.officialUrl?
@$officialLink.attr 'href', @model.item.officialUrl
@@ -182,7 +172,7 @@ module.exports = class ItemPageController extends PageController
if not @model.item?
return w.reject new Error 'must have an item'
pathArgs = modSlug:@_itemSlug.mod, itemSlug:@_itemSlug.item
pathArgs = modSlug:@model.item.mod.id, itemSlug:@model.itemDisplay.itemSlug
attributes =
fileName: c.gitHub.file.itemDescription.fileName pathArgs
path: c.gitHub.file.itemDescription.path pathArgs
@@ -232,8 +222,8 @@ module.exports = class ItemPageController extends PageController
@_descriptionController.resetToDefaultState()
_refreshMultiblock: ->
if @model.item?.multiblock?
@_multiblockController.model = @model.item.multiblock
if @model.item.isMultiblock
@_multiblockController.model = @model.item.getMultiblockRecipe()
@show @$multiblockSection
else
@hide @$multiblockSection
@@ -246,7 +236,7 @@ module.exports = class ItemPageController extends PageController
if recipes?.length > 0
@$recipesSectionTitle.html if recipes.length is 1 then 'Recipe' else 'Recipes'
for recipe in @model.findRecipes()
for recipe in recipes
controller = @_recipeControllers[index]
if not controller?
controller = new RecipeDetailController
@@ -269,26 +259,22 @@ module.exports = class ItemPageController extends PageController
@_recipeControllers.pop().remove()
_refreshSimilarItems: ->
group = @model.item?.group
if group? and group isnt Item.Group.Other
group = @model.item.group
if group? and group isnt Item::DEFAULT_GROUP_NAME
@_similarItemsController.title = "Other #{group}"
@_similarItemsController.model = @model.findSimilarItems()
else
@_similarItemsController.model = null
_refreshSourceMod: ->
mod = @model.item?.modVersion?.mod
if mod?.name?.length > 0
@$sourceModLink.attr 'href', c.url.mod modSlug:mod.slug
@$sourceModLink.text mod.name
@show @$sourceModLink
else
@hide @$sourceModLink
mod = @model.item.mod
@$sourceModLink.attr 'href', c.url.mod @model.itemDisplay
@$sourceModLink.text mod.name
@show @$sourceModLink
_refreshUsedAsToolToMake: ->
@_usedAsToolToMakeController.title = 'Used as Tool to Make'
@_usedAsToolToMakeController.model = @model.findToolForRecipes()
@_usedAsToolToMakeController.model = @model.findToolForItems()
_refreshUsedToMake: ->
@_usedToMakeController.title = 'Used to Make'
@@ -319,16 +305,3 @@ module.exports = class ItemPageController extends PageController
while @_videoControllers.length > index
@_videoControllers.pop().remove()
_resolveItemSlug: ->
return if @model.item?
item = @_modPack.findItem @_itemSlug, includeDisabled:true
if item?
if not ItemSlug.equal item.slug, @_itemSlug
@_router.navigate c.url.item(modSlug:item.slug.mod, itemSlug:item.slug.item), trigger:true
return
@model.item = item
item.fetch()
item.on c.event.sync, => @refresh()
@@ -6,6 +6,7 @@ All rights reserved.
###
BaseController = require '../../../base_controller'
ItemDisplay = require "../../../../models/site/item_display"
########################################################################################################################
@@ -143,7 +144,7 @@ module.exports = class MultiblockController extends BaseController
move = false
if stack?
itemDisplay = @_modPack.findItemDisplay stack.itemSlug
itemDisplay = new ItemDisplay stack.item
if not $block?
$block = $("<img alt='#{itemDisplay.itemName}' class='block' />")
@@ -5,21 +5,22 @@
# All rights reserved.
#
BaseController = require '../../base_controller'
CraftingGridController = require '../../common/crafting_grid/crafting_grid_controller'
{Inventory} = require('crafting-guide-common').deprecated.game
InventoryController = require '../../common/inventory/inventory_controller'
{StringBuilder} = require('crafting-guide-common').util
BaseController = require "../../base_controller"
CraftingGridController = require "../../common/crafting_grid/crafting_grid_controller"
{Inventory} = require("crafting-guide-common").models
InventoryController = require "../../common/inventory/inventory_controller"
ItemDisplay = require "../../../models/site/item_display"
{StringBuilder} = require("crafting-guide-common").util
########################################################################################################################
module.exports = class RecipeDetailController extends BaseController
constructor: (options={})->
if not options.imageLoader? then throw new Error 'options.imageLoader is required'
if not options.modPack? then throw new Error 'options.modPack is required'
if not options.router? then throw new Error 'options.router is required'
options.templateName = 'item_page/recipe_detail'
if not options.imageLoader? then throw new Error "options.imageLoader is required"
if not options.modPack? then throw new Error "options.modPack is required"
if not options.router? then throw new Error "options.router is required"
options.templateName = "item_page/recipe_detail"
super options
@_imageLoader = options.imageLoader
@@ -29,26 +30,26 @@ module.exports = class RecipeDetailController extends BaseController
# BaseController Overrides #####################################################################
onDidRender: ->
@gridController = @addChild CraftingGridController, '.view__crafting_grid',
@gridController = @addChild CraftingGridController, ".view__crafting_grid",
imageLoader: @_imageLoader
modPack: @_modPack
router: @_router
@inputController = @addChild InventoryController, '.input .view__inventory',
@inputController = @addChild InventoryController, ".input .view__inventory",
editable: false
imageLoader: @_imageLoader
model: new Inventory
modPack: @_modPack
router: @_router
@outputController = @addChild InventoryController, '.output .view__inventory',
@outputController = @addChild InventoryController, ".output .view__inventory",
editable: false
imageLoader: @_imageLoader
model: new Inventory
modPack: @_modPack
router: @_router
@$toolContainer = @$('.tool')
@$toolContainer = @$(".tool")
super
refresh: ->
@@ -67,33 +68,33 @@ module.exports = class RecipeDetailController extends BaseController
events: ->
return _.extend super,
'click a': 'routeLinkClick'
"click a": "routeLinkClick"
# Private Methods ##############################################################################
_refreshInputs: ->
inputs = @inputController.model
inputs.clear()
return unless @model?
if @model?
for stack in @model.input
inputs.add stack.itemSlug, @model.getQuantityRequired stack.itemSlug
for itemId, item of @model.inputs
inputs.add item, @model.computeQuantityRequired item
_refreshOutputs: ->
outputs = @outputController.model
outputs.clear()
return unless @model?
if @model?
for stack in @model.output
outputs.add stack.itemSlug, @model.getQuantityProduced stack.itemSlug
outputs.add @model.output.item, @model.output.quantity
for itemId, item of @model.extras
outputs.add item, @model.computeQuantityProduced item
_refreshTools: ->
@$toolContainer.empty()
return unless @model?
builder = new StringBuilder
builder.loop @model.tools, delimiter:', ', onEach:(b, stack)=>
display = @_modPack.findItemDisplay stack.itemSlug
b.push "<a href=\"#{display.itemUrl}\">#{display.itemName}</a>"
@$toolContainer.html builder.toString()
toolLinks = []
for itemId, item of @model.tools
display = new ItemDisplay item
toolLinks.push "<a href=\"#{display.url}\">#{display.name}</a>"
@$toolContainer.html toolLinks.join ", "