Update item detail page to new models
This commit is contained in:
@@ -24,10 +24,10 @@ module.exports = class ItemDisplay
|
|||||||
get: ->
|
get: ->
|
||||||
inventory = new Inventory
|
inventory = new Inventory
|
||||||
inventory.add @item
|
inventory.add @item
|
||||||
c.url.crafting inventoryText:inventory.unparse()
|
c.url.crafting inventoryText:inventory.toUrlString()
|
||||||
|
|
||||||
iconUrl:
|
iconUrl:
|
||||||
get: -> return c.url.itemIcon modId:@_item.mod.id, itemSlug:@slug
|
get: -> return c.url.itemIcon this
|
||||||
set: -> throw new Error "iconUrl cannot be assigned"
|
set: -> throw new Error "iconUrl cannot be assigned"
|
||||||
|
|
||||||
item:
|
item:
|
||||||
@@ -37,10 +37,18 @@ module.exports = class ItemDisplay
|
|||||||
if not item? then throw new Error "item is required"
|
if not item? then throw new Error "item is required"
|
||||||
@_item = item
|
@_item = item
|
||||||
|
|
||||||
|
itemSlug:
|
||||||
|
get: -> return _.slugify @name
|
||||||
|
set: -> throw new Error "slug cannot be assigned"
|
||||||
|
|
||||||
mod:
|
mod:
|
||||||
get: -> return @_item.mod
|
get: -> return @_item.mod
|
||||||
set: -> throw new Error "mod cannot be assigned"
|
set: -> throw new Error "mod cannot be assigned"
|
||||||
|
|
||||||
|
modId:
|
||||||
|
get: -> return @_item.mod.id
|
||||||
|
set: -> throw new Error "modId cannot be assigned"
|
||||||
|
|
||||||
modUrl:
|
modUrl:
|
||||||
get: -> return c.url.mod modId:@item.mod.id
|
get: -> return c.url.mod modId:@item.mod.id
|
||||||
set: -> throw new Error "modUrl cannot be assigned"
|
set: -> throw new Error "modUrl cannot be assigned"
|
||||||
@@ -49,10 +57,6 @@ module.exports = class ItemDisplay
|
|||||||
get: -> return @item.displayName
|
get: -> return @item.displayName
|
||||||
set: -> throw new Error "name cannot be assigned"
|
set: -> throw new Error "name cannot be assigned"
|
||||||
|
|
||||||
slug:
|
|
||||||
get: -> return _.slugify @name
|
|
||||||
set: -> throw new Error "slug cannot be assigned"
|
|
||||||
|
|
||||||
url:
|
url:
|
||||||
get: -> return c.url.item modId:@_item.mod.id, itemSlug:@slug
|
get: -> return c.url.item this
|
||||||
set: -> throw new Error "url cannot be assigned"
|
set: -> throw new Error "url cannot be assigned"
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ module.exports = class ItemPage extends Observable
|
|||||||
return @_findItemsWithMatchingRecipes (recipe)=>
|
return @_findItemsWithMatchingRecipes (recipe)=>
|
||||||
recipe.computeQuantityRequired @item
|
recipe.computeQuantityRequired @item
|
||||||
|
|
||||||
|
findRecipes: ->
|
||||||
|
return (recipe for recipeId, recipe of @item.recipes)
|
||||||
|
|
||||||
findSimilarItems: ->
|
findSimilarItems: ->
|
||||||
group = @mod.itemGroups[@item.groupName]
|
group = @mod.itemGroups[@item.groupName]
|
||||||
return unless group?
|
return unless group?
|
||||||
@@ -53,7 +56,7 @@ module.exports = class ItemPage extends Observable
|
|||||||
return null unless group.length > 0
|
return null unless group.length > 0
|
||||||
return group
|
return group
|
||||||
|
|
||||||
findToolForItem: ->
|
findToolForItems: ->
|
||||||
return @_findItemsWithMatchingRecipes (recipe)=>
|
return @_findItemsWithMatchingRecipes (recipe)=>
|
||||||
return recipe.tools[@item.id]?
|
return recipe.tools[@item.id]?
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
BaseController = require '../../base_controller'
|
BaseController = require '../../base_controller'
|
||||||
convertMarkdown = require 'marked'
|
convertMarkdown = require 'marked'
|
||||||
|
ItemDisplay = require "../../../models/site/item_display"
|
||||||
MarkdownImageListController = require './markdown_image_list/markdown_image_list_controller'
|
MarkdownImageListController = require './markdown_image_list/markdown_image_list_controller'
|
||||||
|
|
||||||
########################################################################################################################
|
########################################################################################################################
|
||||||
@@ -219,8 +220,8 @@ module.exports = class MarkdownSectionController extends BaseController
|
|||||||
result = match
|
result = match
|
||||||
item = @_modPack.findItemByName name
|
item = @_modPack.findItemByName name
|
||||||
if item?
|
if item?
|
||||||
display = @_modPack.findItemDisplay item.slug
|
display = new ItemDisplay item
|
||||||
result = "[#{name}](#{display.itemUrl})"
|
result = "[#{name}](#{display.url})"
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ module.exports = class StackController extends BaseController
|
|||||||
|
|
||||||
@_imageLoader.load display.iconUrl, @$image
|
@_imageLoader.load display.iconUrl, @$image
|
||||||
@$nameLink.html display.name
|
@$nameLink.html display.name
|
||||||
@$nameLink.attr 'href', display.itemUrl
|
@$nameLink.attr 'href', display.url
|
||||||
|
|
||||||
quantityText = if @model.quantity > 10000 then "#{@model.quantity / 1000}k" else "#{@model.quantity}"
|
quantityText = if @model.quantity > 10000 then "#{@model.quantity / 1000}k" else "#{@model.quantity}"
|
||||||
@$quantityField.val quantityText
|
@$quantityField.val quantityText
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
BaseController = require '../base_controller'
|
BaseController = require '../base_controller'
|
||||||
|
ItemDisplay = require "../../models/site/item_display"
|
||||||
ItemSelectorController = require '../common/item_selector/item_selector_controller'
|
ItemSelectorController = require '../common/item_selector/item_selector_controller'
|
||||||
UrlParams = require '../url_params'
|
UrlParams = require '../url_params'
|
||||||
|
|
||||||
@@ -52,14 +53,14 @@ module.exports = class HeaderController extends BaseController
|
|||||||
onSearch: (event, hint='')->
|
onSearch: (event, hint='')->
|
||||||
tracker.trackEvent c.tracking.category.search, 'launch'
|
tracker.trackEvent c.tracking.category.search, 'launch'
|
||||||
@_selector.launch hint
|
@_selector.launch hint
|
||||||
.then (itemSlug)=>
|
.then (item)=>
|
||||||
if not itemSlug?
|
if not item?
|
||||||
tracker.trackEvent c.tracking.category.search, 'cancel', itemSlug
|
tracker.trackEvent c.tracking.category.search, 'cancel', item.slug
|
||||||
return
|
return
|
||||||
|
|
||||||
tracker.trackEvent c.tracking.category.search, 'complete', itemSlug
|
tracker.trackEvent c.tracking.category.search, 'complete', item.slug
|
||||||
itemDisplay = @_modPack.findItemDisplay itemSlug
|
itemDisplay = new ItemDisplay item
|
||||||
@router.navigate itemDisplay.itemUrl, trigger:true
|
@router.navigate itemDisplay.url, trigger:true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
# BaseController Overrides #####################################################################
|
# BaseController Overrides #####################################################################
|
||||||
|
|||||||
@@ -45,8 +45,7 @@ module.exports = class ItemPageController extends PageController
|
|||||||
|
|
||||||
craftingPlanButtonClicked: ->
|
craftingPlanButtonClicked: ->
|
||||||
tracker.trackEvent c.tracking.category.craft, "view-crafting-plan", @model.item.slug
|
tracker.trackEvent c.tracking.category.craft, "view-crafting-plan", @model.item.slug
|
||||||
display = @_modPack.findItemDisplay @model.item.slug
|
@_router.navigate @model.itemDisplay.craftingUrl, trigger:true
|
||||||
@_router.navigate display.craftingUrl, trigger:true
|
|
||||||
return false
|
return false
|
||||||
|
|
||||||
# PageController Overrides #####################################################################
|
# PageController Overrides #####################################################################
|
||||||
@@ -54,8 +53,8 @@ module.exports = class ItemPageController extends PageController
|
|||||||
getBreadcrumbs: ->
|
getBreadcrumbs: ->
|
||||||
return [
|
return [
|
||||||
$("<a href='/browse'>Browse</a>")
|
$("<a href='/browse'>Browse</a>")
|
||||||
$("<a href='#{@model.display.modUrl}'>#{@model.display.modName}</a>")
|
$("<a href='#{@model.itemDisplay.modUrl}'>#{@model.itemDisplay.mod.displayName}</a>")
|
||||||
$("<b>#{display.name}</b>")
|
$("<b>#{@model.itemDisplay.name}</b>")
|
||||||
]
|
]
|
||||||
|
|
||||||
getExtraNav: ->
|
getExtraNav: ->
|
||||||
@@ -66,17 +65,11 @@ module.exports = class ItemPageController extends PageController
|
|||||||
return $("<a href='#{display.url}'>Random Item</a>")
|
return $("<a href='#{display.url}'>Random Item</a>")
|
||||||
|
|
||||||
getMetaDescription: ->
|
getMetaDescription: ->
|
||||||
return null unless @_itemSlug?
|
data = itemName:@model.item.displayName, modName:@model.item.mod.displayName
|
||||||
display = @_modPack.findItemDisplay @_itemSlug
|
return c.text.itemDescription data
|
||||||
return c.text.itemDescription display
|
|
||||||
|
|
||||||
getTitle: ->
|
getTitle: ->
|
||||||
return null unless @_itemSlug?
|
return "#{@model.item.displayName} from #{@model.item.mod.displayName}"
|
||||||
|
|
||||||
display = @_modPack.findItemDisplay @_itemSlug
|
|
||||||
return null unless display.itemName? and display.modName?
|
|
||||||
|
|
||||||
return "#{display.itemName} from #{display.modName}"
|
|
||||||
|
|
||||||
# BaseController Overrides #####################################################################
|
# BaseController Overrides #####################################################################
|
||||||
|
|
||||||
@@ -120,14 +113,11 @@ module.exports = class ItemPageController extends PageController
|
|||||||
super
|
super
|
||||||
|
|
||||||
refresh: ->
|
refresh: ->
|
||||||
@_resolveItemSlug()
|
|
||||||
|
|
||||||
if @model.item?
|
if @model.item?
|
||||||
display = @_modPack.findItemDisplay @model.item.slug
|
@_imageLoader.load @model.itemDisplay.iconUrl, @$aboutImage
|
||||||
@_imageLoader.load display.iconUrl, @$aboutImage
|
@$name.text @model.itemDisplay.name
|
||||||
@$name.text display.itemName
|
|
||||||
|
|
||||||
@_descriptionController.imageBase = c.url.itemImageDir display
|
@_descriptionController.imageBase = c.url.itemImageDir @model.itemDisplay
|
||||||
|
|
||||||
if @model.item.officialUrl?
|
if @model.item.officialUrl?
|
||||||
@$officialLink.attr 'href', @model.item.officialUrl
|
@$officialLink.attr 'href', @model.item.officialUrl
|
||||||
@@ -182,7 +172,7 @@ module.exports = class ItemPageController extends PageController
|
|||||||
if not @model.item?
|
if not @model.item?
|
||||||
return w.reject new Error 'must have an 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 =
|
attributes =
|
||||||
fileName: c.gitHub.file.itemDescription.fileName pathArgs
|
fileName: c.gitHub.file.itemDescription.fileName pathArgs
|
||||||
path: c.gitHub.file.itemDescription.path pathArgs
|
path: c.gitHub.file.itemDescription.path pathArgs
|
||||||
@@ -232,8 +222,8 @@ module.exports = class ItemPageController extends PageController
|
|||||||
@_descriptionController.resetToDefaultState()
|
@_descriptionController.resetToDefaultState()
|
||||||
|
|
||||||
_refreshMultiblock: ->
|
_refreshMultiblock: ->
|
||||||
if @model.item?.multiblock?
|
if @model.item.isMultiblock
|
||||||
@_multiblockController.model = @model.item.multiblock
|
@_multiblockController.model = @model.item.getMultiblockRecipe()
|
||||||
@show @$multiblockSection
|
@show @$multiblockSection
|
||||||
else
|
else
|
||||||
@hide @$multiblockSection
|
@hide @$multiblockSection
|
||||||
@@ -246,7 +236,7 @@ module.exports = class ItemPageController extends PageController
|
|||||||
if recipes?.length > 0
|
if recipes?.length > 0
|
||||||
@$recipesSectionTitle.html if recipes.length is 1 then 'Recipe' else 'Recipes'
|
@$recipesSectionTitle.html if recipes.length is 1 then 'Recipe' else 'Recipes'
|
||||||
|
|
||||||
for recipe in @model.findRecipes()
|
for recipe in recipes
|
||||||
controller = @_recipeControllers[index]
|
controller = @_recipeControllers[index]
|
||||||
if not controller?
|
if not controller?
|
||||||
controller = new RecipeDetailController
|
controller = new RecipeDetailController
|
||||||
@@ -269,26 +259,22 @@ module.exports = class ItemPageController extends PageController
|
|||||||
@_recipeControllers.pop().remove()
|
@_recipeControllers.pop().remove()
|
||||||
|
|
||||||
_refreshSimilarItems: ->
|
_refreshSimilarItems: ->
|
||||||
group = @model.item?.group
|
group = @model.item.group
|
||||||
if group? and group isnt Item.Group.Other
|
if group? and group isnt Item::DEFAULT_GROUP_NAME
|
||||||
@_similarItemsController.title = "Other #{group}"
|
@_similarItemsController.title = "Other #{group}"
|
||||||
@_similarItemsController.model = @model.findSimilarItems()
|
@_similarItemsController.model = @model.findSimilarItems()
|
||||||
else
|
else
|
||||||
@_similarItemsController.model = null
|
@_similarItemsController.model = null
|
||||||
|
|
||||||
_refreshSourceMod: ->
|
_refreshSourceMod: ->
|
||||||
mod = @model.item?.modVersion?.mod
|
mod = @model.item.mod
|
||||||
if mod?.name?.length > 0
|
@$sourceModLink.attr 'href', c.url.mod @model.itemDisplay
|
||||||
@$sourceModLink.attr 'href', c.url.mod modSlug:mod.slug
|
|
||||||
@$sourceModLink.text mod.name
|
@$sourceModLink.text mod.name
|
||||||
|
|
||||||
@show @$sourceModLink
|
@show @$sourceModLink
|
||||||
else
|
|
||||||
@hide @$sourceModLink
|
|
||||||
|
|
||||||
_refreshUsedAsToolToMake: ->
|
_refreshUsedAsToolToMake: ->
|
||||||
@_usedAsToolToMakeController.title = 'Used as Tool to Make'
|
@_usedAsToolToMakeController.title = 'Used as Tool to Make'
|
||||||
@_usedAsToolToMakeController.model = @model.findToolForRecipes()
|
@_usedAsToolToMakeController.model = @model.findToolForItems()
|
||||||
|
|
||||||
_refreshUsedToMake: ->
|
_refreshUsedToMake: ->
|
||||||
@_usedToMakeController.title = 'Used to Make'
|
@_usedToMakeController.title = 'Used to Make'
|
||||||
@@ -319,16 +305,3 @@ module.exports = class ItemPageController extends PageController
|
|||||||
|
|
||||||
while @_videoControllers.length > index
|
while @_videoControllers.length > index
|
||||||
@_videoControllers.pop().remove()
|
@_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'
|
BaseController = require '../../../base_controller'
|
||||||
|
ItemDisplay = require "../../../../models/site/item_display"
|
||||||
|
|
||||||
########################################################################################################################
|
########################################################################################################################
|
||||||
|
|
||||||
@@ -143,7 +144,7 @@ module.exports = class MultiblockController extends BaseController
|
|||||||
move = false
|
move = false
|
||||||
|
|
||||||
if stack?
|
if stack?
|
||||||
itemDisplay = @_modPack.findItemDisplay stack.itemSlug
|
itemDisplay = new ItemDisplay stack.item
|
||||||
|
|
||||||
if not $block?
|
if not $block?
|
||||||
$block = $("<img alt='#{itemDisplay.itemName}' class='block' />")
|
$block = $("<img alt='#{itemDisplay.itemName}' class='block' />")
|
||||||
|
|||||||
@@ -5,21 +5,22 @@
|
|||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
|
|
||||||
BaseController = require '../../base_controller'
|
BaseController = require "../../base_controller"
|
||||||
CraftingGridController = require '../../common/crafting_grid/crafting_grid_controller'
|
CraftingGridController = require "../../common/crafting_grid/crafting_grid_controller"
|
||||||
{Inventory} = require('crafting-guide-common').deprecated.game
|
{Inventory} = require("crafting-guide-common").models
|
||||||
InventoryController = require '../../common/inventory/inventory_controller'
|
InventoryController = require "../../common/inventory/inventory_controller"
|
||||||
{StringBuilder} = require('crafting-guide-common').util
|
ItemDisplay = require "../../../models/site/item_display"
|
||||||
|
{StringBuilder} = require("crafting-guide-common").util
|
||||||
|
|
||||||
########################################################################################################################
|
########################################################################################################################
|
||||||
|
|
||||||
module.exports = class RecipeDetailController extends BaseController
|
module.exports = class RecipeDetailController extends BaseController
|
||||||
|
|
||||||
constructor: (options={})->
|
constructor: (options={})->
|
||||||
if not options.imageLoader? then throw new Error 'options.imageLoader is required'
|
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.modPack? then throw new Error "options.modPack is required"
|
||||||
if not options.router? then throw new Error 'options.router is required'
|
if not options.router? then throw new Error "options.router is required"
|
||||||
options.templateName = 'item_page/recipe_detail'
|
options.templateName = "item_page/recipe_detail"
|
||||||
super options
|
super options
|
||||||
|
|
||||||
@_imageLoader = options.imageLoader
|
@_imageLoader = options.imageLoader
|
||||||
@@ -29,26 +30,26 @@ module.exports = class RecipeDetailController extends BaseController
|
|||||||
# BaseController Overrides #####################################################################
|
# BaseController Overrides #####################################################################
|
||||||
|
|
||||||
onDidRender: ->
|
onDidRender: ->
|
||||||
@gridController = @addChild CraftingGridController, '.view__crafting_grid',
|
@gridController = @addChild CraftingGridController, ".view__crafting_grid",
|
||||||
imageLoader: @_imageLoader
|
imageLoader: @_imageLoader
|
||||||
modPack: @_modPack
|
modPack: @_modPack
|
||||||
router: @_router
|
router: @_router
|
||||||
|
|
||||||
@inputController = @addChild InventoryController, '.input .view__inventory',
|
@inputController = @addChild InventoryController, ".input .view__inventory",
|
||||||
editable: false
|
editable: false
|
||||||
imageLoader: @_imageLoader
|
imageLoader: @_imageLoader
|
||||||
model: new Inventory
|
model: new Inventory
|
||||||
modPack: @_modPack
|
modPack: @_modPack
|
||||||
router: @_router
|
router: @_router
|
||||||
|
|
||||||
@outputController = @addChild InventoryController, '.output .view__inventory',
|
@outputController = @addChild InventoryController, ".output .view__inventory",
|
||||||
editable: false
|
editable: false
|
||||||
imageLoader: @_imageLoader
|
imageLoader: @_imageLoader
|
||||||
model: new Inventory
|
model: new Inventory
|
||||||
modPack: @_modPack
|
modPack: @_modPack
|
||||||
router: @_router
|
router: @_router
|
||||||
|
|
||||||
@$toolContainer = @$('.tool')
|
@$toolContainer = @$(".tool")
|
||||||
super
|
super
|
||||||
|
|
||||||
refresh: ->
|
refresh: ->
|
||||||
@@ -67,33 +68,33 @@ module.exports = class RecipeDetailController extends BaseController
|
|||||||
|
|
||||||
events: ->
|
events: ->
|
||||||
return _.extend super,
|
return _.extend super,
|
||||||
'click a': 'routeLinkClick'
|
"click a": "routeLinkClick"
|
||||||
|
|
||||||
# Private Methods ##############################################################################
|
# Private Methods ##############################################################################
|
||||||
|
|
||||||
_refreshInputs: ->
|
_refreshInputs: ->
|
||||||
inputs = @inputController.model
|
inputs = @inputController.model
|
||||||
inputs.clear()
|
inputs.clear()
|
||||||
|
return unless @model?
|
||||||
|
|
||||||
if @model?
|
for itemId, item of @model.inputs
|
||||||
for stack in @model.input
|
inputs.add item, @model.computeQuantityRequired item
|
||||||
inputs.add stack.itemSlug, @model.getQuantityRequired stack.itemSlug
|
|
||||||
|
|
||||||
|
|
||||||
_refreshOutputs: ->
|
_refreshOutputs: ->
|
||||||
outputs = @outputController.model
|
outputs = @outputController.model
|
||||||
outputs.clear()
|
outputs.clear()
|
||||||
|
return unless @model?
|
||||||
|
|
||||||
if @model?
|
outputs.add @model.output.item, @model.output.quantity
|
||||||
for stack in @model.output
|
for itemId, item of @model.extras
|
||||||
outputs.add stack.itemSlug, @model.getQuantityProduced stack.itemSlug
|
outputs.add item, @model.computeQuantityProduced item
|
||||||
|
|
||||||
_refreshTools: ->
|
_refreshTools: ->
|
||||||
@$toolContainer.empty()
|
@$toolContainer.empty()
|
||||||
return unless @model?
|
return unless @model?
|
||||||
|
|
||||||
builder = new StringBuilder
|
toolLinks = []
|
||||||
builder.loop @model.tools, delimiter:', ', onEach:(b, stack)=>
|
for itemId, item of @model.tools
|
||||||
display = @_modPack.findItemDisplay stack.itemSlug
|
display = new ItemDisplay item
|
||||||
b.push "<a href=\"#{display.itemUrl}\">#{display.itemName}</a>"
|
toolLinks.push "<a href=\"#{display.url}\">#{display.name}</a>"
|
||||||
@$toolContainer.html builder.toString()
|
@$toolContainer.html toolLinks.join ", "
|
||||||
|
|||||||
Reference in New Issue
Block a user