diff --git a/src/client/models/site/item_display.coffee b/src/client/models/site/item_display.coffee
index ac789c463..afa5a61db 100644
--- a/src/client/models/site/item_display.coffee
+++ b/src/client/models/site/item_display.coffee
@@ -24,10 +24,10 @@ module.exports = class ItemDisplay
get: ->
inventory = new Inventory
inventory.add @item
- c.url.crafting inventoryText:inventory.unparse()
+ c.url.crafting inventoryText:inventory.toUrlString()
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"
item:
@@ -37,10 +37,18 @@ module.exports = class ItemDisplay
if not item? then throw new Error "item is required"
@_item = item
+ itemSlug:
+ get: -> return _.slugify @name
+ set: -> throw new Error "slug cannot be assigned"
+
mod:
get: -> return @_item.mod
set: -> throw new Error "mod cannot be assigned"
+ modId:
+ get: -> return @_item.mod.id
+ set: -> throw new Error "modId cannot be assigned"
+
modUrl:
get: -> return c.url.mod modId:@item.mod.id
set: -> throw new Error "modUrl cannot be assigned"
@@ -49,10 +57,6 @@ module.exports = class ItemDisplay
get: -> return @item.displayName
set: -> throw new Error "name cannot be assigned"
- slug:
- get: -> return _.slugify @name
- set: -> throw new Error "slug cannot be assigned"
-
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"
diff --git a/src/client/models/site/item_page.coffee b/src/client/models/site/item_page.coffee
index f7caffe7e..5bbd62b9f 100644
--- a/src/client/models/site/item_page.coffee
+++ b/src/client/models/site/item_page.coffee
@@ -46,6 +46,9 @@ module.exports = class ItemPage extends Observable
return @_findItemsWithMatchingRecipes (recipe)=>
recipe.computeQuantityRequired @item
+ findRecipes: ->
+ return (recipe for recipeId, recipe of @item.recipes)
+
findSimilarItems: ->
group = @mod.itemGroups[@item.groupName]
return unless group?
@@ -53,7 +56,7 @@ module.exports = class ItemPage extends Observable
return null unless group.length > 0
return group
- findToolForItem: ->
+ findToolForItems: ->
return @_findItemsWithMatchingRecipes (recipe)=>
return recipe.tools[@item.id]?
diff --git a/src/client/site/common/markdown_section/markdown_section_controller.coffee b/src/client/site/common/markdown_section/markdown_section_controller.coffee
index fe758d45b..5bfe2ac0c 100644
--- a/src/client/site/common/markdown_section/markdown_section_controller.coffee
+++ b/src/client/site/common/markdown_section/markdown_section_controller.coffee
@@ -7,6 +7,7 @@
BaseController = require '../../base_controller'
convertMarkdown = require 'marked'
+ItemDisplay = require "../../../models/site/item_display"
MarkdownImageListController = require './markdown_image_list/markdown_image_list_controller'
########################################################################################################################
@@ -219,8 +220,8 @@ module.exports = class MarkdownSectionController extends BaseController
result = match
item = @_modPack.findItemByName name
if item?
- display = @_modPack.findItemDisplay item.slug
- result = "[#{name}](#{display.itemUrl})"
+ display = new ItemDisplay item
+ result = "[#{name}](#{display.url})"
return result
diff --git a/src/client/site/common/stack/stack_controller.coffee b/src/client/site/common/stack/stack_controller.coffee
index 7c8825877..4026c6ede 100644
--- a/src/client/site/common/stack/stack_controller.coffee
+++ b/src/client/site/common/stack/stack_controller.coffee
@@ -122,7 +122,7 @@ module.exports = class StackController extends BaseController
@_imageLoader.load display.iconUrl, @$image
@$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}"
@$quantityField.val quantityText
diff --git a/src/client/site/header/header_controller.coffee b/src/client/site/header/header_controller.coffee
index d00f9cf8c..107cdffa2 100644
--- a/src/client/site/header/header_controller.coffee
+++ b/src/client/site/header/header_controller.coffee
@@ -6,6 +6,7 @@
#
BaseController = require '../base_controller'
+ItemDisplay = require "../../models/site/item_display"
ItemSelectorController = require '../common/item_selector/item_selector_controller'
UrlParams = require '../url_params'
@@ -52,14 +53,14 @@ module.exports = class HeaderController extends BaseController
onSearch: (event, hint='')->
tracker.trackEvent c.tracking.category.search, 'launch'
@_selector.launch hint
- .then (itemSlug)=>
- if not itemSlug?
- tracker.trackEvent c.tracking.category.search, 'cancel', itemSlug
+ .then (item)=>
+ if not item?
+ tracker.trackEvent c.tracking.category.search, 'cancel', item.slug
return
- tracker.trackEvent c.tracking.category.search, 'complete', itemSlug
- itemDisplay = @_modPack.findItemDisplay itemSlug
- @router.navigate itemDisplay.itemUrl, trigger:true
+ tracker.trackEvent c.tracking.category.search, 'complete', item.slug
+ itemDisplay = new ItemDisplay item
+ @router.navigate itemDisplay.url, trigger:true
return false
# BaseController Overrides #####################################################################
diff --git a/src/client/site/item_page/item_page_controller.coffee b/src/client/site/item_page/item_page_controller.coffee
index 13cb067d9..8cbce16a3 100644
--- a/src/client/site/item_page/item_page_controller.coffee
+++ b/src/client/site/item_page/item_page_controller.coffee
@@ -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 [
$("Browse")
- $("#{@model.display.modName}")
- $("#{display.name}")
+ $("#{@model.itemDisplay.mod.displayName}")
+ $("#{@model.itemDisplay.name}")
]
getExtraNav: ->
@@ -66,17 +65,11 @@ module.exports = class ItemPageController extends PageController
return $("Random Item")
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()
diff --git a/src/client/site/item_page/multiblock_viewer/multiblock/multiblock_controller.coffee b/src/client/site/item_page/multiblock_viewer/multiblock/multiblock_controller.coffee
index 914e230fb..5829784bc 100644
--- a/src/client/site/item_page/multiblock_viewer/multiblock/multiblock_controller.coffee
+++ b/src/client/site/item_page/multiblock_viewer/multiblock/multiblock_controller.coffee
@@ -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 = $("
")
diff --git a/src/client/site/item_page/recipe_detail/recipe_detail_controller.coffee b/src/client/site/item_page/recipe_detail/recipe_detail_controller.coffee
index bcf81d47e..3be268ebd 100644
--- a/src/client/site/item_page/recipe_detail/recipe_detail_controller.coffee
+++ b/src/client/site/item_page/recipe_detail/recipe_detail_controller.coffee
@@ -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 "#{display.itemName}"
- @$toolContainer.html builder.toString()
+ toolLinks = []
+ for itemId, item of @model.tools
+ display = new ItemDisplay item
+ toolLinks.push "#{display.name}"
+ @$toolContainer.html toolLinks.join ", "