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.
- 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
|