Add auto-complete drop-down for crafting selection

This commit is contained in:
Andrew Miner
2014-12-26 14:02:27 -08:00
parent 0d2e175410
commit 03d8f84a0d
5 changed files with 50 additions and 5 deletions
+5 -3
View File
@@ -46,19 +46,21 @@ module.exports = (grunt)->
files: [expand:true, cwd:'./src/fonts', src:'**/*.ttf', dest:'./dist/fonts'] files: [expand:true, cwd:'./src/fonts', src:'**/*.ttf', dest:'./dist/fonts']
images: images:
files: [expand:true, cwd:'./src/images/', src:['**/*.png', '**/*.jpg'], dest:'./dist/images'] files: [expand:true, cwd:'./src/images/', src:['**/*.png', '**/*.jpg'], dest:'./dist/images']
mocha_styles:
files:
'./dist/css/mocha.css': ['./node_modules/mocha/mocha.css']
scripts: scripts:
files: files:
'./dist/js/backbone.js': ['./node_modules/backbone/backbone.js'] './dist/js/backbone.js': ['./node_modules/backbone/backbone.js']
'./dist/js/chai.js': ['./node_modules/chai/chai.js'] './dist/js/chai.js': ['./node_modules/chai/chai.js']
'./dist/js/jade.js': ['./node_modules/jade/runtime.js'] './dist/js/jade.js': ['./node_modules/jade/runtime.js']
'./dist/js/jquery.js': ['./node_modules/jquery/dist/jquery.js'] './dist/js/jquery.js': ['./node_modules/jquery/dist/jquery.js']
'./dist/js/jquery-ui.js': ['./lib/jquery-ui/jquery-ui.js']
'./dist/js/mocha.js': ['./node_modules/mocha/mocha.js'] './dist/js/mocha.js': ['./node_modules/mocha/mocha.js']
'./dist/js/underscore.js': ['./node_modules/backbone/node_modules/underscore/underscore.js'] './dist/js/underscore.js': ['./node_modules/backbone/node_modules/underscore/underscore.js']
styles: styles:
files: [expand:true, cwd:'./src/css', src:'**/*.scss', dest:'./dist/src/css'] files: [expand:true, cwd:'./src/css', src:'**/*.scss', dest:'./dist/src/css']
style_extras:
files:
'./dist/css/jquery-ui.css': ['./lib/jquery-ui/jquery-ui.min.css']
'./dist/css/mocha.css': ['./node_modules/mocha/mocha.css']
jade: jade:
pages: pages:
-1
View File
@@ -29,7 +29,6 @@
"dependencies": { "dependencies": {
"backbone": "^1.1.2", "backbone": "^1.1.2",
"chai": "^1.10.0", "chai": "^1.10.0",
"d3": "^3.5.2",
"jade": "^1.8.2", "jade": "^1.8.2",
"jquery": "^2.1.3", "jquery": "^2.1.3",
"mocha": "^2.0.1", "mocha": "^2.0.1",
+4
View File
@@ -7,9 +7,13 @@
extends ./layouts/basic extends ./layouts/basic
append styles
link(rel="stylesheet", type="text/css", href="/css/jquery-ui.css")
block content block content
.page .page
append scripts append scripts
script(src="/js/jquery-ui.js")
script(src="/js/main.js") script(src="/js/main.js")
include ./includes/_google_analytics.jade include ./includes/_google_analytics.jade
@@ -5,7 +5,8 @@
# All rights reserved. # All rights reserved.
### ###
BaseController = require './base_controller' BaseController = require './base_controller'
{Event} = require '../constants'
InventoryParser = require '../models/inventory_parser' InventoryParser = require '../models/inventory_parser'
######################################################################################################################## ########################################################################################################################
@@ -19,8 +20,14 @@ module.exports = class CraftingTableController extends BaseController
@_parser = new InventoryParser @_parser = new InventoryParser
@model.catalog.on Event.change, => @onCatalogChanged()
# Event Methods ################################################################################ # Event Methods ################################################################################
onCatalogChanged: ->
return unless @rendered
@_updateNameAutocomplete()
onHaveFieldChanged: -> onHaveFieldChanged: ->
return unless @rendered return unless @rendered
@@ -38,6 +45,10 @@ module.exports = class CraftingTableController extends BaseController
@model.name = @$nameField.val() @model.name = @$nameField.val()
@model.craft() @model.craft()
onNameFieldFocused: ->
return unless @rendered
@$nameField.autocomplete 'search'
onQuantityFieldChanged: -> onQuantityFieldChanged: ->
return unless @rendered return unless @rendered
@model.quantity = parseInt @$quantityField.find(":selected").val() @model.quantity = parseInt @$quantityField.find(":selected").val()
@@ -57,6 +68,8 @@ module.exports = class CraftingTableController extends BaseController
super super
@_updateNameAutocomplete()
@onHaveFieldChanged() @onHaveFieldChanged()
@onIncludingToolsFieldChanged() @onIncludingToolsFieldChanged()
@onQuantityFieldChanged() @onQuantityFieldChanged()
@@ -83,6 +96,20 @@ module.exports = class CraftingTableController extends BaseController
events: events:
'input textarea[name="have"]': 'onHaveFieldChanged' 'input textarea[name="have"]': 'onHaveFieldChanged'
'focus input[name="name"]': 'onNameFieldFocused'
'input input[name="name"]': 'onNameFieldChanged' 'input input[name="name"]': 'onNameFieldChanged'
'input select[name="quantity"]': 'onQuantityFieldChanged' 'input select[name="quantity"]': 'onQuantityFieldChanged'
'change input[name="including_tools"]': 'onIncludingToolsFieldChanged' 'change input[name="including_tools"]': 'onIncludingToolsFieldChanged'
# Private Methods ##############################################################################
_updateNameAutocomplete: ->
onChanged = => @onNameFieldChanged()
@$nameField.autocomplete
source: @model.catalog.getRecipeNames()
delay: 0
minLength: 0
change: onChanged
close: onChanged
select: onChanged
+13
View File
@@ -29,6 +29,19 @@ module.exports = class RecipeCatalog extends BaseModel
return result return result
getRecipeNames: ->
nameHash = {}
for book in @books
for recipe in book.recipes
nameHash[recipe.name] = "#{recipe.name} (from #{book.modName} #{book.modVersion})"
names = (k for k, v of nameHash).sort()
result = []
for name in names
result.push value:name, label:nameHash[name]
return result
loadBook: (url)-> loadBook: (url)->
w.promise (resolve, reject)=> w.promise (resolve, reject)=>
@trigger Event.load.started, this, url @trigger Event.load.started, this, url