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 = $("#{itemDisplay.itemName}") 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 ", "