From 2aa65d5e34c5dbf3be25b04996d130e63676e504 Mon Sep 17 00:00:00 2001 From: Andrew Miner Date: Thu, 26 Feb 2015 20:04:41 -0800 Subject: [PATCH] Add "Used as Tool to Make" section on item detail --- Gruntfile.coffee | 2 + .../controllers/item_page_controller.coffee | 60 ++++++++++++------- src/scripts/models/item_page.coffee | 34 +++++++---- src/scripts/models/recipe.coffee | 5 ++ src/templates/item_page.jade | 1 + 5 files changed, 67 insertions(+), 35 deletions(-) diff --git a/Gruntfile.coffee b/Gruntfile.coffee index f76fbc978..b586b2b0a 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -170,3 +170,5 @@ module.exports = (grunt)-> grunt.registerTask 'build', [ 'copy', 'sass:main', 'jade', 'browserify', 'exorcise' ] grunt.registerTask 'dist', ['clean', 'build', 'sass:dist', 'rename:scripts', 'uglify'] + + grunt.registerTask 'full-watch', ['clean', 'build', 'watch'] diff --git a/src/scripts/controllers/item_page_controller.coffee b/src/scripts/controllers/item_page_controller.coffee index e4db556f1..326025035 100644 --- a/src/scripts/controllers/item_page_controller.coffee +++ b/src/scripts/controllers/item_page_controller.coffee @@ -30,31 +30,37 @@ module.exports = class ItemPageController extends BaseController super options - @_imageLoader = options.imageLoader + @imageLoader = options.imageLoader @_itemSlug = options.itemSlug - @_modPack = options.modPack + @modPack = options.modPack - @_modPack.on Event.change, => @tryRefresh() + @modPack.on Event.change, => @tryRefresh() # BaseController Overrides ##################################################################### onDidRender: -> - @_similarItemsController = @addChild ItemGroupController, '.similar .view__item_group', - imageLoader: @_imageLoader - modPack: @_modPack - @_usedToMakeController = @addChild ItemGroupController, '.usedToMake .view__item_group', - imageLoader: @_imageLoader - modPack: @_modPack + @_usedAsToolToMakeController = @addChild ItemGroupController, '.usedAsToolToMake .view__item_group', + imageLoader: @imageLoader + modPack: @modPack - @$byline = @$('.byline') - @$bylineLink = @$('.byline a') - @$craftingPlanLink = @$('a.craftingPlan') - @$name = @$('h1.name') - @$recipeContainer = @$('.recipes .panel') - @$recipesSection = @$('.recipes') - @$similarSection = @$('.similar') - @$titleImage = @$('.titleImage img') - @$usedToMakeSection = @$('.usedToMake') + @_similarItemsController = @addChild ItemGroupController, '.similar .view__item_group', + imageLoader: @imageLoader + modPack: @modPack + + @_usedToMakeController = @addChild ItemGroupController, '.usedToMake .view__item_group', + imageLoader: @imageLoader + modPack: @modPack + + @$usedAsToolToMakeSection = @$('.usedAsToolToMake') + @$byline = @$('.byline') + @$bylineLink = @$('.byline a') + @$craftingPlanLink = @$('a.craftingPlan') + @$name = @$('h1.name') + @$recipeContainer = @$('.recipes .panel') + @$recipesSection = @$('.recipes') + @$similarSection = @$('.similar') + @$titleImage = @$('.titleImage img') + @$usedToMakeSection = @$('.usedToMake') super refresh: -> @@ -62,10 +68,10 @@ module.exports = class ItemPageController extends BaseController @_resolveItemSlug() if @model.item? - display = @_modPack.findItemDisplay @model.item.slug + display = @modPack.findItemDisplay @model.item.slug @$craftingPlanLink.attr href:display.craftingUrl @$craftingPlanLink.fadeIn duration:Duration.fast - @_imageLoader.load display.iconUrl, @$titleImage + @imageLoader.load display.iconUrl, @$titleImage @$name.html display.itemName @$el.slideDown duration:Duration.normal @@ -75,6 +81,7 @@ module.exports = class ItemPageController extends BaseController @_refreshByline() @_refreshRecipes() @_refreshSimilarItems() + @_refreshUsedAsToolToMake() @_refreshUsedToMake() super @@ -88,6 +95,15 @@ module.exports = class ItemPageController extends BaseController # Private Methods ############################################################################## + _refreshUsedAsToolToMake: -> + @_usedAsToolToMakeController.title = 'Used as Tool to Make' + + @_usedAsToolToMakeController.model = @model.findToolForRecipes() + if @_usedAsToolToMakeController.model? + @$usedAsToolToMakeSection.slideDown duration:Duration.normal + else + @$usedAsToolToMakeSection.slideUp duration:Duration.normal + _refreshByline: -> mod = @model.item?.modVersion?.mod if mod?.name?.length > 0 @@ -117,7 +133,7 @@ module.exports = class ItemPageController extends BaseController for recipe in @model.findRecipes() controller = @_recipeControllers[index] if not controller? - controller = new FullRecipeController imageLoader:@_imageLoader, modPack:@_modPack, model:recipe + controller = new FullRecipeController imageLoader:@imageLoader, modPack:@modPack, model:recipe @_recipeControllers.push controller controller.render() @$recipeContainer.append controller.$el @@ -145,4 +161,4 @@ module.exports = class ItemPageController extends BaseController @$similarSection.slideUp duration:Duration.normal _resolveItemSlug: -> - @model.item = @_modPack.findItem @_itemSlug, includeDisabled:true + @model.item = @modPack.findItem @_itemSlug, includeDisabled:true diff --git a/src/scripts/models/item_page.coffee b/src/scripts/models/item_page.coffee index e0e1d4822..c6885b6fe 100644 --- a/src/scripts/models/item_page.coffee +++ b/src/scripts/models/item_page.coffee @@ -21,19 +21,7 @@ module.exports = class ItemPage extends BaseModel # Property Methods ############################################################################# findComponentInItems: -> - return null unless @item? - - result = {} - @modPack.eachMod (mod)=> - mod.eachRecipe (recipe)=> - if recipe.requires @item.slug - outputItem = @modPack.findItem recipe.itemSlug, includeDisabled:true - result[outputItem.slug] = outputItem - - result = _.values result - return null unless result.length > 0 - - return result.sort (a, b)-> a.compareTo b + return @_findRecipesMatching (recipe)=> recipe.requires @item.slug findSimilarItems: -> return null unless @item?.modVersion? @@ -47,3 +35,23 @@ module.exports = class ItemPage extends BaseModel findRecipes: -> return @modPack.findRecipes @item?.slug, [], alwaysFromOwningMod:true + + findToolForRecipes: -> + return @_findRecipesMatching (recipe)=> recipe.requiresTool @item.slug + + # Private Methods ############################################################################## + + _findRecipesMatching: (callback)-> + return null unless @item? + + result = {} + @modPack.eachMod (mod)=> + mod.eachRecipe (recipe)=> + if callback(recipe) + outputItem = @modPack.findItem recipe.itemSlug, includeDisabled:true + result[outputItem.slug] = outputItem + + result = _.values result + return null unless result.length > 0 + + return result.sort (a, b)-> a.compareTo b \ No newline at end of file diff --git a/src/scripts/models/recipe.coffee b/src/scripts/models/recipe.coffee index b46a29b6b..aa2a6ddac 100644 --- a/src/scripts/models/recipe.coffee +++ b/src/scripts/models/recipe.coffee @@ -115,6 +115,11 @@ module.exports = class Recipe extends BaseModel return true return false + requiresTool: (itemSlug)-> + for stack in @tools + if stack.itemSlug.matches itemSlug + return true + # Property Methods ############################################################################# getSlug: -> diff --git a/src/templates/item_page.jade b/src/templates/item_page.jade index 9600d70fe..2002dd9f3 100644 --- a/src/templates/item_page.jade +++ b/src/templates/item_page.jade @@ -20,5 +20,6 @@ .panel .usedToMake: .view__item_group + .usedAsToolToMake: .view__item_group .similar: .view__item_group .plan \ No newline at end of file