From a3723dd667d611217b6159c6dbc9ce7e34f39762 Mon Sep 17 00:00:00 2001 From: Andrew Miner Date: Sat, 27 Dec 2014 19:15:20 -0800 Subject: [PATCH] Recognize CraftingGuide 1.0 query parameters --- Gruntfile.coffee | 2 + scripts/server | 4 +- src/data/vanilla.json | 2 +- src/scripts/constants.coffee | 31 +++++++----- .../crafting_table_controller.coffee | 50 +++++++++++++++---- src/scripts/models/recipe_catalog.coffee | 6 +-- 6 files changed, 64 insertions(+), 31 deletions(-) diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 3b28b19bc..b607b0059 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -46,6 +46,8 @@ module.exports = (grunt)-> files: [expand:true, cwd:'./src/fonts', src:'**/*.ttf', dest:'./dist/fonts'] images: files: [expand:true, cwd:'./src/images/', src:['**/*.png', '**/*.jpg'], dest:'./dist/images'] + jquery_ui_images: + files: [expand:true, cwd:'./lib/jquery-ui/images', src:['*.png'], dest:'./dist/css/images'] scripts: files: './dist/js/backbone.js': ['./node_modules/backbone/backbone.js'] diff --git a/scripts/server b/scripts/server index def829f47..793625dbd 100755 --- a/scripts/server +++ b/scripts/server @@ -1,6 +1,4 @@ #!/bin/bash -pushd dist &>/dev/null -python -m SimpleHTTPServer -popd &>/dev/null +http-server dist -p 8000 -c-1 --cors diff --git a/src/data/vanilla.json b/src/data/vanilla.json index f991ffe62..3210794c2 100644 --- a/src/data/vanilla.json +++ b/src/data/vanilla.json @@ -2,7 +2,7 @@ "version": 1, "mod_name": "Minecraft", "mod_version": "1.6.4", - "description": "Crafting recipes from vanilla Minecraft (in progress)", + "description": "Crafting recipes from vanilla Minecraft", "recipes": [ { "output": [[4, "Arrow"]], diff --git a/src/scripts/constants.coffee b/src/scripts/constants.coffee index cf6501139..7957715de 100644 --- a/src/scripts/constants.coffee +++ b/src/scripts/constants.coffee @@ -5,16 +5,22 @@ # All rights reserved. ### +exports.DefaultBookUrls = DefaultBookUrls = [ + '/data/vanilla.json' + '/data/applied_energetics.json' + '/data/buildcraft.json' + '/data/gravisuite.json' + '/data/industrial_craft.json' + '/data/more_blocks.json' + '/data/thermal_expansion.json' +] + exports.Duration = Duration = {} Duration.snap = 100 Duration.fast = Duration.snap * 2 Duration.normal = Duration.fast * 2 Duration.slow = Duration.normal * 2 -exports.Opacity = Opacity = {} -Opacity.hidden = 1e-6 -Opacity.shown = 1 - exports.Event = Event = {} Event.add = 'add' # collection, item... Event.change = 'change' # model @@ -25,12 +31,11 @@ Event.load.failed = 'load:failed' # controller, error message Event.load.finished = 'load:finished' # controller Event.remove = 'remove' # collection, item... -exports.DefaultBookUrls = DefaultBookUrls = [ - '/data/vanilla.json' - '/data/applied_energetics.json' - '/data/buildcraft.json' - '/data/gravisuite.json' - '/data/industrial_craft.json' - '/data/more_blocks.json' - '/data/thermal_expansion.json' -] +exports.Opacity = Opacity = {} +Opacity.hidden = 1e-6 +Opacity.shown = 1 + +exports.UrlParam = UrlParam = {} +UrlParam.quantity = 'count' +UrlParam.recipe = 'recipeName' +UrlParam.includingTools = 'tools' diff --git a/src/scripts/controllers/crafting_table_controller.coffee b/src/scripts/controllers/crafting_table_controller.coffee index f21e1b943..76fea1aa4 100644 --- a/src/scripts/controllers/crafting_table_controller.coffee +++ b/src/scripts/controllers/crafting_table_controller.coffee @@ -8,6 +8,8 @@ BaseController = require './base_controller' {Event} = require '../constants' InventoryParser = require '../models/inventory_parser' +url = require 'url' +{UrlParam} = require '../constants' ######################################################################################################################## @@ -27,23 +29,24 @@ module.exports = class CraftingTableController extends BaseController onCatalogChanged: -> return unless @rendered @_updateNameAutocomplete() + @_parseUrlParameters() onHaveFieldChanged: -> return unless @rendered @model.have.clear() @_parser.parse @$haveField.val(), @model.have - @model.craft() + @_craft() onIncludingToolsFieldChanged: -> return unless @rendered @model.includingTools = @$('input[name="including_tools"]:checked').length > 0 - @model.craft() + @_craft() onNameFieldChanged: -> return unless @rendered @model.name = @$nameField.val() - @model.craft() + @_craft() onNameFieldFocused: -> return unless @rendered @@ -52,7 +55,7 @@ module.exports = class CraftingTableController extends BaseController onQuantityFieldChanged: -> return unless @rendered @model.quantity = parseInt @$quantityField.find(":selected").val() - @model.craft() + @_craft() # BaseController Overrides ##################################################################### @@ -69,13 +72,7 @@ module.exports = class CraftingTableController extends BaseController super @_updateNameAutocomplete() - - @onHaveFieldChanged() - @onIncludingToolsFieldChanged() - @onQuantityFieldChanged() - - # do last so others are no-op until all is set - @onNameFieldChanged() + @_parseUrlParameters() refresh: -> @$needList.empty() @@ -103,6 +100,37 @@ module.exports = class CraftingTableController extends BaseController # Private Methods ############################################################################## + _craft: -> + @model.craft() + + _parseUrlParameters: -> + params = url.parse(window.location.href, true).query + + if params[UrlParam.includingTools]? + param = params[UrlParam.includingTools] + if param in ['true', 'yes'] + @$includingToolsField.attr 'checked', 'checked' + else if param in ['false', 'no'] + @$includingToolsField.removeAttr 'checked' + else + console.log "invalid including tools value in URL param: #{params[UrlParam.includingTools]}" + @onIncludingToolsFieldChanged() + + if params[UrlParam.quantity]? + @$quantityField.val parseInt params[UrlParam.quantity] + if @$quantityField.find(':selected').length is 0 + console.log "invalid quantity in URL param: #{params[UrlParam.quantity]}" + @onQuantityFieldChanged() + + # Do this check last to avoid recalculting the recipe multiple times + if params[UrlParam.recipe]? + recipeName = params[UrlParam.recipe] + if @model.catalog.findRecipes(recipeName).length > 0 + @$nameField.val recipeName + else + console.log "invalid recipe name in URL param: #{params[UrlParam.recipe]}" + @onNameFieldChanged() + _updateNameAutocomplete: -> onChanged = => @onNameFieldChanged() diff --git a/src/scripts/models/recipe_catalog.coffee b/src/scripts/models/recipe_catalog.coffee index 7275a6b60..369490cd4 100644 --- a/src/scripts/models/recipe_catalog.coffee +++ b/src/scripts/models/recipe_catalog.coffee @@ -5,9 +5,9 @@ # All rights reserved. ### -BaseModel = require './base_model' -{Event} = require '../constants' -RecipeBookParser = require './recipe_book_parser' +BaseModel = require './base_model' +{Event} = require '../constants' +RecipeBookParser = require './recipe_book_parser' ########################################################################################################################