diff --git a/package.json b/package.json index 793b2fd..293f2de 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "uglify-js": "^3.0.9" }, "dependencies": { - "coffee-script": "~1.7.1", + "coffeescript": "^2", "commander": "^2.9.0", "jison": "^0.4.17", "jison-lex": "^0.3.4", diff --git a/script/coverage b/script/coverage index bb83d06..3ad1b24 100755 --- a/script/coverage +++ b/script/coverage @@ -3,7 +3,7 @@ set -e node_modules/.bin/istanbul cover \ node_modules/.bin/_mocha -- \ - --compilers coffee:coffee-script \ - --require coffee-script/register \ + --compilers coffee:coffeescript \ + --require coffeescript/register \ --reporter spec \ --require test/helper.coffee diff --git a/script/test b/script/test index cbf401e..f6327fa 100755 --- a/script/test +++ b/script/test @@ -5,8 +5,8 @@ script/prepublish node_modules/.bin/mocha \ --expose-gc \ - --compilers coffee:coffee-script \ + --compilers coffee:coffeescript \ --reporter spec \ - --require 'coffee-script/register' \ + --require 'coffeescript/register' \ --require test/helper.coffee \ "$@" diff --git a/source/cli.coffee b/source/cli.coffee index 18995b8..7f0c828 100644 --- a/source/cli.coffee +++ b/source/cli.coffee @@ -2,7 +2,7 @@ fs = require "fs" stdin = require "stdin" compile = require '../dist/compiler' wrench = require "wrench" -CoffeeScript = require "coffee-script" +CoffeeScript = require "coffeescript" md5 = require 'md5' cli = require("commander") diff --git a/source/register.coffee b/source/register.coffee index b525979..f358c9d 100644 --- a/source/register.coffee +++ b/source/register.coffee @@ -1,4 +1,4 @@ -CoffeeScript = require "coffee-script" +CoffeeScript = require "coffeescript" {compile} = require "jadelet/dist/main" fs = require "fs" diff --git a/source/runtime.coffee b/source/runtime.coffee index c040e2a..feb397b 100644 --- a/source/runtime.coffee +++ b/source/runtime.coffee @@ -108,12 +108,11 @@ specialBindings = empty(element) element._options = values - # TODO: Handle key: value... style options - values.map (value, index) -> + makeOption = (value, key) -> option = createElement("option") option._value = value if isObject value - optionValue = value?.value or index + optionValue = value?.value or key else optionValue = value.toString() @@ -127,9 +126,16 @@ specialBindings = return element.appendChild option - element.selectedIndex = index if value is element._value - + index = value?.index or key + element.selectedIndex = index if (value?.value or value) is element._value return option + + if Object::toString.call(values) is '[object Object]' + values = Object.keys(values).map (key, index) -> + makeOption {name: values[key], value: key, index}, key + return values + else + values.map (value, index) -> makeOption value, index return return diff --git a/test/compiler.coffee b/test/compiler.coffee index 0f8f8af..308fa06 100644 --- a/test/compiler.coffee +++ b/test/compiler.coffee @@ -1,6 +1,6 @@ assert = require('assert') fs = require('fs') -CoffeeScript = require "coffee-script" +CoffeeScript = require "coffeescript" jadeletCompiler = require('../dist/compiler') diff --git a/test/helper.coffee b/test/helper.coffee index 077b1f5..3c85c27 100644 --- a/test/helper.coffee +++ b/test/helper.coffee @@ -1,6 +1,6 @@ extend = Object.assign -CoffeeScript = require "coffee-script" +CoffeeScript = require "coffeescript" compile = require "../dist/compiler" Runtime = require "../dist/runtime" diff --git a/test/select.coffee b/test/select.coffee index 1b185a1..09e998e 100644 --- a/test/select.coffee +++ b/test/select.coffee @@ -220,4 +220,65 @@ describe "SELECT", -> assert.equal select._value, model.value describe "with an object for options", -> - it "should have an option for each key" + template = makeTemplate """ + select(@value @options) + """ + + it "should have an option for each key", -> + options = Observable + nap: "Napoleon" + bar: "Barrack" + + model = + options: options + value: "bar" + + select = template model + assert.equal select.value, "bar" + + it "should add options added to the observable object", -> + options = Observable + nap: "Napoleon" + bar: "Barrack" + + model = + options: options + value: "bar" + + select = template(model) + + assert.equal select.querySelectorAll("option").length, 2 + options Object.assign {}, options(), {test: "Test"} + assert.equal select.querySelectorAll("option").length, 3 + + it "should remove options removed from the observable object", -> + options = Observable + nap: "Napoleon" + bar: "Barrack" + + model = + options: options + value: "bar" + + select = template(model) + + assert.equal select.querySelectorAll("option").length, 2 + delete options().bar + options Object.assign {}, options() + assert.equal select.querySelectorAll("option").length, 1 + + it "should observe the value as the value of the value options", -> + options = Observable + nap: Observable "Napoleon" + bar: Observable "Barrack" + + model = + options: options + value: "bar" + + select = template model + optionElements = select.querySelectorAll("option") + + assert.equal optionElements[1].textContent, "Barrack" + options().bar "YOLO" + assert.equal optionElements[1].textContent, "YOLO"