appetizer-ui 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/appetizer-ui.gemspec +1 -1
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/appetizerExtensions.spec.js +54 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/checkboxConventionBindings.spec.js +110 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/configurableBindingAttributes.spec.js +117 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/configureAllBindingAttributes.spec.js +139 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/customConvention.spec.js +53 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindConvention.spec.js +151 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindMultiple.spec.js +36 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/dataBindSubstitutions.spec.js +137 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfiguraAllBindingAttributes.spec.js +124 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/globalConfigurableBindingAttributes.spec.js +36 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/SpecHelper.js +4 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/helpers/sample.backbone.app.js +159 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/html5inputConventionBinding.spec.js +142 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/modelUnbinding.spec.js +73 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/noConflict.spec.js +36 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/radioButtonConventionBinding.spec.js +41 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/selectboxConventionBindings.spec.js +60 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/textareaConventionBinding.spec.js +29 -0
- data/lib/appetizer/ui/jasmine/js/backbone.modelbinding/textboxConventionBinding.spec.js +66 -0
- data/lib/appetizer/ui/jasmine/js/jasmine-jquery-matchers.js +1 -1
- data/lib/appetizer/ui/jasmine/js/spec-runner.coffee +1 -0
- data/lib/appetizer/ui/vendor/js/backbone.modelbinding.js +68 -10
- 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,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
|
-
|
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
|
-
|
36
|
-
|
41
|
+
if (value) {
|
42
|
+
if (_.isFunction(value))
|
43
|
+
value = value.apply(model)
|
37
44
|
} else {
|
38
|
-
|
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){
|
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
|
203
|
-
|
204
|
-
|
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.
|
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-
|
12
|
+
date: 2012-02-11 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: appetizer
|
16
|
-
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: *
|
24
|
+
version_requirements: *70341507624460
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: coffee-script
|
27
|
-
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: *
|
35
|
+
version_requirements: *70341507623380
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: eco
|
38
|
-
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: *
|
46
|
+
version_requirements: *70341507622620
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rack-contrib
|
49
|
-
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: *
|
57
|
+
version_requirements: *70341507621760
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rack-ssl
|
60
|
-
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: *
|
68
|
+
version_requirements: *70341507620920
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sass
|
71
|
-
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: *
|
79
|
+
version_requirements: *70341507620120
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sinatra
|
82
|
-
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: *
|
90
|
+
version_requirements: *70341507619240
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: sprockets
|
93
|
-
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: *
|
101
|
+
version_requirements: *70341507618520
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: sprockets-sass
|
104
|
-
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: *
|
112
|
+
version_requirements: *70341507617060
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: uglifier
|
115
|
-
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: *
|
123
|
+
version_requirements: *70341507616160
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: yajl-ruby
|
126
|
-
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: *
|
134
|
+
version_requirements: *70341507615220
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: yui-compressor
|
137
|
-
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: *
|
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
|