appetizer-ui 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. data/.gitignore +1 -0
  2. data/appetizer-ui.gemspec +1 -1
  3. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/appetizerExtensions.spec.js +54 -0
  4. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/checkboxConventionBindings.spec.js +110 -0
  5. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/configurableBindingAttributes.spec.js +117 -0
  6. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/configureAllBindingAttributes.spec.js +139 -0
  7. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/customConvention.spec.js +53 -0
  8. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindConvention.spec.js +151 -0
  9. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindMultiple.spec.js +36 -0
  10. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindSubstitutions.spec.js +137 -0
  11. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfiguraAllBindingAttributes.spec.js +124 -0
  12. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfigurableBindingAttributes.spec.js +36 -0
  13. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/SpecHelper.js +4 -0
  14. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/sample.backbone.app.js +159 -0
  15. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/html5inputConventionBinding.spec.js +142 -0
  16. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/modelUnbinding.spec.js +73 -0
  17. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/noConflict.spec.js +36 -0
  18. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/radioButtonConventionBinding.spec.js +41 -0
  19. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/selectboxConventionBindings.spec.js +60 -0
  20. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/textareaConventionBinding.spec.js +29 -0
  21. data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/textboxConventionBinding.spec.js +66 -0
  22. data/lib/appetizer/ui/jasmine/js/jasmine-jquery-matchers.js +1 -1
  23. data/lib/appetizer/ui/jasmine/js/spec-runner.coffee +1 -0
  24. data/lib/appetizer/ui/vendor/js/backbone.modelbinding.js +68 -10
  25. metadata +45 -26
@@ -0,0 +1,41 @@
1
+ describe("radio button convention binding", function(){
2
+ beforeEach(function(){
3
+ this.model = new AModel({
4
+ graduated: "maybe",
5
+ us_citizen: false
6
+ });
7
+ this.view = new AView({model: this.model});
8
+ this.view.render();
9
+ });
10
+
11
+ it("bind view changes to the model's field, by convention of id", function(){
12
+ var el = $(this.view.el).find("#graduated_no");
13
+ el.attr("checked", "checked");
14
+ el.trigger('change');
15
+ expect(this.model.get('graduated')).toEqual("no");
16
+ });
17
+
18
+ it("bind model field changes to the form input, by convention of id", function(){
19
+ this.model.set({graduated: "yes"});
20
+ var el = this.view.$("#graduated_yes");
21
+ var selected = el.attr("checked");
22
+
23
+ expect(selected).toBeTruthy();
24
+ });
25
+
26
+ it("binds the model's value to the form field on render (graduated)", function(){
27
+ var el = this.view.$("input[type=radio][name=graduated]:checked");
28
+ var selected = el.val();
29
+
30
+ expect(selected).toBe("maybe");
31
+ });
32
+
33
+ it("binds the model's value to the form field on render (us_citizen)", function(){
34
+ var el = this.view.$("#us_citizen_false");
35
+ expect(el.is(':checked')).toBe(true);
36
+ });
37
+
38
+ it("binds the view's value to the model, when there is no value in the model", function(){
39
+ expect(this.model.get("another_radio")).toBeTruthy();
40
+ });
41
+ });
@@ -0,0 +1,60 @@
1
+ describe("select element convention binding", function(){
2
+ beforeEach(function(){
3
+ this.model = new AModel({
4
+ name: "Ashelia Bailey",
5
+ education: "graduate",
6
+ age_level: 0,
7
+ graduated: "maybe",
8
+ us_citizen: false,
9
+ drivers_license: true,
10
+ motorcycle_license: false,
11
+ bio: "my baby girl",
12
+ operating_system: "non existent value"
13
+ });
14
+ this.view = new AView({model: this.model});
15
+ this.view.render();
16
+ });
17
+
18
+ it("bind view changes to the model's field, by convention of id", function(){
19
+ var el = this.view.$("#education");
20
+ el.val("college");
21
+ el.trigger('change');
22
+
23
+ expect(this.model.get('education')).toEqual("college");
24
+ });
25
+
26
+ it("bind model field changes to the form input, by convention of id", function(){
27
+ this.model.set({education: "high school"});
28
+ var el = this.view.$("#education");
29
+ expect(el.val()).toEqual("high school");
30
+ });
31
+
32
+ it("binds the model's value to the form field on render (education)", function(){
33
+ var el = this.view.$("#education");
34
+ expect(el.val()).toEqual("graduate");
35
+ });
36
+
37
+ it("binds the model's value to the form field on render (age_level)", function(){
38
+ var el = this.view.$("#age_level");
39
+ expect(el.val()).toEqual("0");
40
+ });
41
+
42
+ it("applies the text of the selection to the model", function(){
43
+ var el = this.view.$("#education");
44
+ el.val("grade_school");
45
+ el.trigger('change');
46
+
47
+ expect(this.model.get('education_text')).toEqual("i dun learned at grade skool");
48
+ });
49
+
50
+ it("updates the model to the selected value when the model is set to a value that doesn't exist, on render", function(){
51
+ var el = this.view.$("#operating_system");
52
+ var elVal = el.val();
53
+
54
+ expect(this.model.get('operating_system')).toEqual(elVal);
55
+ });
56
+
57
+ it("binds the select box value to the model, when there is no model value, on render", function(){
58
+ expect(this.model.get("another_select")).toEqual("pre_selected");
59
+ });
60
+ });
@@ -0,0 +1,29 @@
1
+ describe("text area convention binding", function(){
2
+ beforeEach(function(){
3
+ this.model = new AModel({
4
+ bio: "my biography"
5
+ });
6
+ this.view = new AView({model: this.model});
7
+ this.view.render();
8
+ });
9
+
10
+ it("bind view changes to the model's field, by convention of id", function(){
11
+ var el = this.view.$("#bio");
12
+ el.val("my biography");
13
+ el.trigger('change');
14
+
15
+ expect(this.model.get('bio')).toEqual("my biography");
16
+ });
17
+
18
+ it("bind model field changes to the form input, by convention of id", function(){
19
+ this.model.set({bio: "a modified biogrpahy"});
20
+ var el = this.view.$("#bio");
21
+ expect(el.val()).toEqual("a modified biogrpahy");
22
+ });
23
+
24
+ it("binds the model's value to the form field on render", function(){
25
+ var el = this.view.$("#bio");
26
+ expect(el.val()).toEqual("my biography");
27
+ });
28
+
29
+ });
@@ -0,0 +1,66 @@
1
+ describe("textbox convention bindings", function(){
2
+ beforeEach(function(){
3
+ this.model = new AModel({
4
+ name: "Ashelia Bailey",
5
+ noType: 'there is no type'
6
+ });
7
+ this.view = new AView({model: this.model});
8
+ });
9
+
10
+ describe("text element binding", function(){
11
+ beforeEach(function(){
12
+ this.view.render();
13
+ this.el = this.view.$("#name");
14
+ });
15
+
16
+ it("bind view changes to the model's field, by convention of id", function(){
17
+ this.el.val("Derick Bailey");
18
+ this.el.trigger('change');
19
+
20
+ expect(this.model.get('name')).toEqual("Derick Bailey");
21
+ });
22
+
23
+ it("bind model field changes to the form input, by convention of id", function(){
24
+ this.model.set({name: "Ian Bailey"});
25
+ expect(this.el.val()).toEqual("Ian Bailey");
26
+ });
27
+
28
+ it("binds the model's value to the form field on render", function(){
29
+ expect(this.el.val()).toEqual("Ashelia Bailey");
30
+ });
31
+ });
32
+
33
+ describe("when the form field has a value but the model does not", function(){
34
+ beforeEach(function(){
35
+ this.view.render();
36
+ var el = this.view.$("#prefilled_name");
37
+ });
38
+
39
+ it("binds the form field's value to the model, on render", function(){
40
+ expect(this.model.get("prefilled_name")).toBe("a name");
41
+ });
42
+ });
43
+
44
+ describe("input with no type specified, binding", function(){
45
+ beforeEach(function(){
46
+ this.view.render();
47
+ this.el = this.view.$("#noType");
48
+ });
49
+
50
+ it("bind view changes to the model's field, by convention of id", function(){
51
+ this.el.val("something changed");
52
+ this.el.trigger('change');
53
+
54
+ expect(this.model.get('noType')).toEqual("something changed");
55
+ });
56
+
57
+ it("bind model field changes to the form input, by convention of id", function(){
58
+ this.model.set({noType: "Ian Bailey"});
59
+ expect(this.el.val()).toEqual("Ian Bailey");
60
+ });
61
+
62
+ it("binds the model's value to the form field on render", function(){
63
+ expect(this.el.val()).toEqual("there is no type");
64
+ });
65
+ });
66
+ });
@@ -1,7 +1,7 @@
1
1
 
2
2
  var sandbox = function() {
3
3
  if ($("#sandbox").length == 0)
4
- $("<div id=sandbox class=hide></div>").appendTo($("body"));
4
+ $("<div id=sandbox></div>").appendTo($("body"));
5
5
  return $("#sandbox");
6
6
  }
7
7
 
@@ -1,6 +1,7 @@
1
1
  #= require ./jasmine
2
2
  #= require ./jasmine-html
3
3
  #= require ./jasmine-jquery-matchers
4
+ #= require_tree ./backbone.modelbinding
4
5
 
5
6
  jasmineEnv = jasmine.getEnv()
6
7
  jasmineEnv.updateInterval = 1000
@@ -1,5 +1,7 @@
1
1
  // Backbone.ModelBinding v0.4.3
2
2
  // [jbarnette] Added getAttributeValue, allowing values to come from functions.
3
+ // [cmorse] Added mediate support
4
+ // [toots] Added foo.bar.baz syntax for bound attributes
3
5
  //
4
6
  // Copyright (C)2011 Derick Bailey, Muted Solutions, LLC
5
7
  // Distributed Under MIT Liscene
@@ -29,14 +31,36 @@ var modelbinding = (function(Backbone, _, $) {
29
31
  }
30
32
  };
31
33
 
32
- var getAttributeValue = function(model, name) {
34
+ // pop attribute name from model. It takes, in order
35
+ // of priority:
36
+ // model[name] if defined and not a function
37
+ // model[name]() if defined and a function
38
+ // model.get(name) otherwise
39
+ var popAttribute = function (model, name) {
33
40
  var value = model[name];
34
-
35
- if (value && _.isFunction(value)) {
36
- value = value.apply(model)
41
+ if (value) {
42
+ if (_.isFunction(value))
43
+ value = value.apply(model)
37
44
  } else {
38
- value = model.get(name);
45
+ if (model.get) {
46
+ value = model.get(name);
47
+ } else {
48
+ return undefined;
49
+ }
39
50
  }
51
+ return value;
52
+ }
53
+
54
+ var getAttributeValue = function(model, name) {
55
+ var value = model;
56
+
57
+ name = "" + name;
58
+
59
+ names = name.split(".");
60
+
61
+ _.each(names, function (name) {
62
+ value = popAttribute(value, name);
63
+ });
40
64
 
41
65
  return value;
42
66
  };
@@ -195,13 +219,35 @@ var modelbinding = (function(Backbone, _, $) {
195
219
  var elementType = _getElementType(element);
196
220
  var attribute_name = config.getBindingValue(element, elementType);
197
221
  if (!attribute_name) return;
222
+ var mediator = modelBinding.getMediator(element);
198
223
 
199
- var modelChange = function(changed_model, val){ element.val(val); };
224
+ var modelChange = function(changed_model, val) {
225
+ element.val(mediator.render(val));
226
+ };
227
+
228
+ var popData = function (options, name) {
229
+ var target;
230
+ if (target = options.model[name]) {
231
+ options.model = _.isFunction(target) ? target() : target
232
+ } else {
233
+ options.data[name] = options.model.get(name) || {};
234
+ options.data = options.data[name];
235
+ }
236
+ }
200
237
 
201
238
  var setModelValue = function(attr_name, value){
202
- var data = {};
203
- data[attr_name] = value;
204
- model.set(data);
239
+ var origData = {};
240
+ var options = { data: origData, model: model };
241
+
242
+ attr_names = attr_name.split(".");
243
+ attr_name = attr_names.pop();
244
+
245
+ _.each(attr_names, function (name) {
246
+ popData(options, name);
247
+ });
248
+
249
+ options.data[attr_name] = mediator.parse(value);
250
+ options.model.set(origData);
205
251
  };
206
252
 
207
253
  var elementChange = function(ev){
@@ -214,7 +260,7 @@ var modelbinding = (function(Backbone, _, $) {
214
260
  // set the default value on the form, from the model
215
261
  var attr_value = getAttributeValue(model, attribute_name);
216
262
  if (typeof attr_value !== "undefined" && attr_value !== null) {
217
- element.val(attr_value);
263
+ element.val(mediator.render(attr_value));
218
264
  } else {
219
265
  var elVal = element.val();
220
266
  if (elVal){
@@ -440,6 +486,7 @@ var modelbinding = (function(Backbone, _, $) {
440
486
  var setOnElement = function(element, attr, val){
441
487
  var valBefore = val;
442
488
  val = modelBinding.Configuration.getDataBindSubst(attr, val);
489
+ val = modelBinding.getMediator(element).render(val);
443
490
  switch(attr){
444
491
  case "html":
445
492
  element.html(val);
@@ -513,6 +560,7 @@ var modelbinding = (function(Backbone, _, $) {
513
560
  _.each(databindList, function(databind){
514
561
  var eventConfig = getEventConfiguration(element, databind);
515
562
  modelBinder.registerDataBinding(model, eventConfig.name, eventConfig.callback);
563
+
516
564
  // set default on data-bind element
517
565
  setOnElement(element, databind.elementAttr, getAttributeValue(model, databind.modelAttr));
518
566
  });
@@ -544,6 +592,16 @@ var modelbinding = (function(Backbone, _, $) {
544
592
  email: {selector: "input[type=email]", handler: StandardBinding}
545
593
  };
546
594
 
595
+ modelBinding.Mediators = {}
596
+
597
+ modelBinding.getMediator = function(element) {
598
+ var mediator = modelBinding.Mediators[$(element).attr("data-mediator")] || {};
599
+
600
+ mediator.parse = mediator.parse || function(t) { return t; }
601
+ mediator.render = mediator.render || function(t) { return t; }
602
+ return mediator;
603
+ }
604
+
547
605
  return modelBinding;
548
606
  });
549
607
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appetizer-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-27 00:00:00.000000000Z
12
+ date: 2012-02-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: appetizer
16
- requirement: &70317561442100 !ruby/object:Gem::Requirement
16
+ requirement: &70341507624460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70317561442100
24
+ version_requirements: *70341507624460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: coffee-script
27
- requirement: &70317561739000 !ruby/object:Gem::Requirement
27
+ requirement: &70341507623380 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '2.2'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70317561739000
35
+ version_requirements: *70341507623380
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: eco
38
- requirement: &70317561932360 !ruby/object:Gem::Requirement
38
+ requirement: &70341507622620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70317561932360
46
+ version_requirements: *70341507622620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack-contrib
49
- requirement: &70317565973760 !ruby/object:Gem::Requirement
49
+ requirement: &70341507621760 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.1'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70317565973760
57
+ version_requirements: *70341507621760
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rack-ssl
60
- requirement: &70317566240660 !ruby/object:Gem::Requirement
60
+ requirement: &70341507620920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '1.3'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70317566240660
68
+ version_requirements: *70341507620920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sass
71
- requirement: &70317566239800 !ruby/object:Gem::Requirement
71
+ requirement: &70341507620120 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '3.1'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70317566239800
79
+ version_requirements: *70341507620120
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sinatra
82
- requirement: &70317566239140 !ruby/object:Gem::Requirement
82
+ requirement: &70341507619240 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '1.3'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70317566239140
90
+ version_requirements: *70341507619240
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: sprockets
93
- requirement: &70317566238380 !ruby/object:Gem::Requirement
93
+ requirement: &70341507618520 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '2.1'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70317566238380
101
+ version_requirements: *70341507618520
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: sprockets-sass
104
- requirement: &70317566237600 !ruby/object:Gem::Requirement
104
+ requirement: &70341507617060 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0.6'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *70317566237600
112
+ version_requirements: *70341507617060
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: uglifier
115
- requirement: &70317566236760 !ruby/object:Gem::Requirement
115
+ requirement: &70341507616160 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '1.0'
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *70317566236760
123
+ version_requirements: *70341507616160
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: yajl-ruby
126
- requirement: &70317566235940 !ruby/object:Gem::Requirement
126
+ requirement: &70341507615220 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '1.0'
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *70317566235940
134
+ version_requirements: *70341507615220
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: yui-compressor
137
- requirement: &70317566235180 !ruby/object:Gem::Requirement
137
+ requirement: &70341507613700 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,7 +142,7 @@ dependencies:
142
142
  version: '0.9'
143
143
  type: :runtime
144
144
  prerelease: false
145
- version_requirements: *70317566235180
145
+ version_requirements: *70341507613700
146
146
  description: A painfully opinionated Appetizer extension for web apps.
147
147
  email:
148
148
  - tech@audiosocket.com
@@ -166,6 +166,25 @@ files:
166
166
  - lib/appetizer/ui/assets.rb
167
167
  - lib/appetizer/ui/assets/delivery.rb
168
168
  - lib/appetizer/ui/jasmine/css/jasmine.css
169
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/appetizerExtensions.spec.js
170
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/checkboxConventionBindings.spec.js
171
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/configurableBindingAttributes.spec.js
172
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/configureAllBindingAttributes.spec.js
173
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/customConvention.spec.js
174
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindConvention.spec.js
175
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindMultiple.spec.js
176
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindSubstitutions.spec.js
177
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfiguraAllBindingAttributes.spec.js
178
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfigurableBindingAttributes.spec.js
179
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/SpecHelper.js
180
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/sample.backbone.app.js
181
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/html5inputConventionBinding.spec.js
182
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/modelUnbinding.spec.js
183
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/noConflict.spec.js
184
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/radioButtonConventionBinding.spec.js
185
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/selectboxConventionBindings.spec.js
186
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/textareaConventionBinding.spec.js
187
+ - lib/appetizer/ui/jasmine/js/backbone.modelbinding/textboxConventionBinding.spec.js
169
188
  - lib/appetizer/ui/jasmine/js/jasmine-html.js
170
189
  - lib/appetizer/ui/jasmine/js/jasmine-jquery-matchers.js
171
190
  - lib/appetizer/ui/jasmine/js/jasmine.js