appetizer-ui 0.3.0 → 0.4.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.
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.test_files = `git ls-files -- test/*`.split("\n")
11
11
  gem.name = "appetizer-ui"
12
12
  gem.require_paths = ["lib"]
13
- gem.version = "0.3.0"
13
+ gem.version = "0.4.0"
14
14
 
15
15
  gem.required_ruby_version = ">= 1.9.2"
16
16
 
@@ -22,6 +22,7 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency "sass", "~> 3.1"
23
23
  gem.add_dependency "sinatra", "~> 1.3"
24
24
  gem.add_dependency "sprockets", "~> 2.1"
25
+ gem.add_dependency "sprockets-sass", "~> 0.6"
25
26
  gem.add_dependency "uglifier", "~> 1.0"
26
27
  gem.add_dependency "yajl-ruby", "~> 1.0"
27
28
  gem.add_dependency "yui-compressor", "~> 0.9"
@@ -4,6 +4,7 @@
4
4
  #= require underscore.string
5
5
 
6
6
  #= require backbone
7
+ #= require backbone.modelbinding
7
8
 
8
9
  #= require appetizer/core
9
10
  #= require appetizer/model
@@ -5,6 +5,7 @@ require "sass"
5
5
  require "securerandom"
6
6
  require "sinatra/base"
7
7
  require "sprockets"
8
+ require "sprockets/sass"
8
9
  require "uglifier"
9
10
  require "yui/compressor"
10
11
 
@@ -0,0 +1,562 @@
1
+ // Backbone.ModelBinding v0.4.3
2
+ // [jbarnette] Added getAttributeValue, allowing values to come from functions.
3
+ //
4
+ // Copyright (C)2011 Derick Bailey, Muted Solutions, LLC
5
+ // Distributed Under MIT Liscene
6
+ //
7
+ // Documentation and Full Licence Availabe at:
8
+ // http://github.com/derickbailey/backbone.modelbinding
9
+
10
+ // ----------------------------
11
+ // Backbone.ModelBinding
12
+ // ----------------------------
13
+
14
+ ;(function(root){
15
+
16
+ var modelbinding = (function(Backbone, _, $) {
17
+ var modelBinding = {
18
+ version: "0.4.3",
19
+
20
+ bind: function(view, options){
21
+ view.modelBinder = new ModelBinder(view, options);
22
+ view.modelBinder.bind();
23
+ },
24
+
25
+ unbind: function(view){
26
+ if (view.modelBinder){
27
+ view.modelBinder.unbind()
28
+ }
29
+ }
30
+ };
31
+
32
+ var getAttributeValue = function(model, name) {
33
+ var value = model[name];
34
+
35
+ if (value && _.isFunction(value)) {
36
+ value = value.apply(model)
37
+ } else {
38
+ value = model.get(name);
39
+ }
40
+
41
+ return value;
42
+ };
43
+
44
+ var ModelBinder = function(view, options){
45
+ this.config = new modelBinding.Configuration(options);
46
+ this.modelBindings = [];
47
+ this.elementBindings = [];
48
+
49
+ this.bind = function(){
50
+ var conventions = modelBinding.Conventions;
51
+ for (var conventionName in conventions){
52
+ if (conventions.hasOwnProperty(conventionName)){
53
+ var conventionElement = conventions[conventionName];
54
+ var handler = conventionElement.handler;
55
+ var conventionSelector = conventionElement.selector;
56
+ handler.bind.call(this, conventionSelector, view, view.model, this.config);
57
+ }
58
+ }
59
+ };
60
+
61
+ this.unbind = function(){
62
+ // unbind the html element bindings
63
+ _.each(this.elementBindings, function(binding){
64
+ binding.element.unbind(binding.eventName, binding.callback);
65
+ });
66
+
67
+ // unbind the model bindings
68
+ _.each(this.modelBindings, function(binding){
69
+ binding.model.unbind(binding.eventName, binding.callback);
70
+ });
71
+ };
72
+
73
+ this.registerModelBinding = function(model, attrName, callback){
74
+ // bind the model changes to the form elements
75
+ var eventName = "change:" + attrName;
76
+ model.bind(eventName, callback);
77
+ this.modelBindings.push({model: model, eventName: eventName, callback: callback});
78
+ };
79
+
80
+ this.registerDataBinding = function(model, eventName, callback){
81
+ // bind the model changes to the elements
82
+
83
+ model.bind(eventName, callback);
84
+ this.modelBindings.push({model: model, eventName: eventName, callback: callback});
85
+ };
86
+
87
+ this.registerElementBinding = function(element, callback){
88
+ // bind the form changes to the model
89
+ element.bind("change", callback);
90
+ this.elementBindings.push({element: element, eventName: "change", callback: callback});
91
+ };
92
+ };
93
+
94
+ // ----------------------------
95
+ // Model Binding Configuration
96
+ // ----------------------------
97
+ modelBinding.Configuration = function(options){
98
+ this.bindingAttrConfig = {};
99
+
100
+ _.extend(this.bindingAttrConfig,
101
+ modelBinding.Configuration.bindindAttrConfig,
102
+ options
103
+ );
104
+
105
+ if (this.bindingAttrConfig.all){
106
+ var attr = this.bindingAttrConfig.all;
107
+ delete this.bindingAttrConfig.all;
108
+ for (var inputType in this.bindingAttrConfig){
109
+ if (this.bindingAttrConfig.hasOwnProperty(inputType)){
110
+ this.bindingAttrConfig[inputType] = attr;
111
+ }
112
+ }
113
+ }
114
+
115
+ this.getBindingAttr = function(type){
116
+ return this.bindingAttrConfig[type];
117
+ };
118
+
119
+ this.getBindingValue = function(element, type){
120
+ var bindingAttr = this.getBindingAttr(type);
121
+ return element.attr(bindingAttr);
122
+ };
123
+
124
+ };
125
+
126
+ modelBinding.Configuration.bindindAttrConfig = {
127
+ text: "id",
128
+ textarea: "id",
129
+ password: "id",
130
+ radio: "name",
131
+ checkbox: "id",
132
+ select: "id",
133
+ number: "id",
134
+ range: "id",
135
+ tel: "id",
136
+ search: "id",
137
+ url: "id",
138
+ email: "id"
139
+ };
140
+
141
+ modelBinding.Configuration.store = function(){
142
+ modelBinding.Configuration.originalConfig = _.clone(modelBinding.Configuration.bindindAttrConfig);
143
+ };
144
+
145
+ modelBinding.Configuration.restore = function(){
146
+ modelBinding.Configuration.bindindAttrConfig = modelBinding.Configuration.originalConfig;
147
+ };
148
+
149
+ modelBinding.Configuration.configureBindingAttributes = function(options){
150
+ if (options.all){
151
+ this.configureAllBindingAttributes(options.all);
152
+ delete options.all;
153
+ }
154
+ _.extend(modelBinding.Configuration.bindindAttrConfig, options);
155
+ };
156
+
157
+ modelBinding.Configuration.configureAllBindingAttributes = function(attribute){
158
+ var config = modelBinding.Configuration.bindindAttrConfig;
159
+ config.text = attribute;
160
+ config.textarea = attribute;
161
+ config.password = attribute;
162
+ config.radio = attribute;
163
+ config.checkbox = attribute;
164
+ config.select = attribute;
165
+ config.number = attribute;
166
+ config.range = attribute;
167
+ config.tel = attribute;
168
+ config.search = attribute;
169
+ config.url = attribute;
170
+ config.email = attribute;
171
+ };
172
+
173
+ // ----------------------------
174
+ // Text, Textarea, and Password Bi-Directional Binding Methods
175
+ // ----------------------------
176
+ var StandardBinding = (function(Backbone){
177
+ var methods = {};
178
+
179
+ var _getElementType = function(element) {
180
+ var type = element[0].tagName.toLowerCase();
181
+ if (type == "input"){
182
+ type = element.attr("type");
183
+ if (type == undefined || type == ''){
184
+ type = 'text';
185
+ }
186
+ }
187
+ return type;
188
+ };
189
+
190
+ methods.bind = function(selector, view, model, config){
191
+ var modelBinder = this;
192
+
193
+ view.$(selector).each(function(index){
194
+ var element = view.$(this);
195
+ var elementType = _getElementType(element);
196
+ var attribute_name = config.getBindingValue(element, elementType);
197
+
198
+ var modelChange = function(changed_model, val){ element.val(val); };
199
+
200
+ var setModelValue = function(attr_name, value){
201
+ var data = {};
202
+ data[attr_name] = value;
203
+ model.set(data);
204
+ };
205
+
206
+ var elementChange = function(ev){
207
+ setModelValue(attribute_name, view.$(ev.target).val());
208
+ };
209
+
210
+ modelBinder.registerModelBinding(model, attribute_name, modelChange);
211
+ modelBinder.registerElementBinding(element, elementChange);
212
+
213
+ // set the default value on the form, from the model
214
+ var attr_value = getAttributeValue(model, attribute_name);
215
+ if (typeof attr_value !== "undefined" && attr_value !== null) {
216
+ element.val(attr_value);
217
+ } else {
218
+ var elVal = element.val();
219
+ if (elVal){
220
+ setModelValue(attribute_name, elVal);
221
+ }
222
+ }
223
+ });
224
+ };
225
+
226
+ return methods;
227
+ })(Backbone);
228
+
229
+ // ----------------------------
230
+ // Select Box Bi-Directional Binding Methods
231
+ // ----------------------------
232
+ var SelectBoxBinding = (function(Backbone){
233
+ var methods = {};
234
+
235
+ methods.bind = function(selector, view, model, config){
236
+ var modelBinder = this;
237
+
238
+ view.$(selector).each(function(index){
239
+ var element = view.$(this);
240
+ var attribute_name = config.getBindingValue(element, 'select');
241
+
242
+ var modelChange = function(changed_model, val){ element.val(val); };
243
+
244
+ var setModelValue = function(attr, val, text){
245
+ var data = {};
246
+ data[attr] = val;
247
+ data[attr + "_text"] = text;
248
+ model.set(data);
249
+ };
250
+
251
+ var elementChange = function(ev){
252
+ var targetEl = view.$(ev.target);
253
+ var value = targetEl.val();
254
+ var text = targetEl.find(":selected").text();
255
+ setModelValue(attribute_name, value, text);
256
+ };
257
+
258
+ modelBinder.registerModelBinding(model, attribute_name, modelChange);
259
+ modelBinder.registerElementBinding(element, elementChange);
260
+
261
+ // set the default value on the form, from the model
262
+ var attr_value = getAttributeValue(model, attribute_name);
263
+ if (typeof attr_value !== "undefined" && attr_value !== null) {
264
+ element.val(attr_value);
265
+ }
266
+
267
+ // set the model to the form's value if there is no model value
268
+ if (element.val() != attr_value) {
269
+ var value = element.val();
270
+ var text = element.find(":selected").text();
271
+ setModelValue(attribute_name, value, text);
272
+ }
273
+ });
274
+ };
275
+
276
+ return methods;
277
+ })(Backbone);
278
+
279
+ // ----------------------------
280
+ // Radio Button Group Bi-Directional Binding Methods
281
+ // ----------------------------
282
+ var RadioGroupBinding = (function(Backbone){
283
+ var methods = {};
284
+
285
+ methods.bind = function(selector, view, model, config){
286
+ var modelBinder = this;
287
+
288
+ var foundElements = [];
289
+ view.$(selector).each(function(index){
290
+ var element = view.$(this);
291
+
292
+ var group_name = config.getBindingValue(element, 'radio');
293
+ if (!foundElements[group_name]) {
294
+ foundElements[group_name] = true;
295
+ var bindingAttr = config.getBindingAttr('radio');
296
+
297
+ var modelChange = function(model, val){
298
+ var value_selector = "input[type=radio][" + bindingAttr + "=" + group_name + "][value='" + val + "']";
299
+ view.$(value_selector).attr("checked", "checked");
300
+ };
301
+ modelBinder.registerModelBinding(model, group_name, modelChange);
302
+
303
+ var setModelValue = function(attr, val){
304
+ var data = {};
305
+ data[attr] = val;
306
+ model.set(data);
307
+ };
308
+
309
+ // bind the form changes to the model
310
+ var elementChange = function(ev){
311
+ var element = view.$(ev.currentTarget);
312
+ if (element.is(":checked")){
313
+ setModelValue(group_name, element.val());
314
+ }
315
+ };
316
+
317
+ var group_selector = "input[type=radio][" + bindingAttr + "=" + group_name + "]";
318
+ view.$(group_selector).each(function(){
319
+ var groupEl = $(this);
320
+ modelBinder.registerElementBinding(groupEl, elementChange);
321
+ });
322
+
323
+ var attr_value = getAttributeValue(model, group_name);
324
+ if (typeof attr_value !== "undefined" && attr_value !== null) {
325
+ // set the default value on the form, from the model
326
+ var value_selector = "input[type=radio][" + bindingAttr + "=" + group_name + "][value='" + attr_value + "']";
327
+ view.$(value_selector).attr("checked", "checked");
328
+ } else {
329
+ // set the model to the currently selected radio button
330
+ var value_selector = "input[type=radio][" + bindingAttr + "=" + group_name + "]:checked";
331
+ var value = view.$(value_selector).val();
332
+ setModelValue(group_name, value);
333
+ }
334
+ }
335
+ });
336
+ };
337
+
338
+ return methods;
339
+ })(Backbone);
340
+
341
+ // ----------------------------
342
+ // Checkbox Bi-Directional Binding Methods
343
+ // ----------------------------
344
+ var CheckboxBinding = (function(Backbone){
345
+ var methods = {};
346
+
347
+ methods.bind = function(selector, view, model, config){
348
+ var modelBinder = this;
349
+
350
+ view.$(selector).each(function(index){
351
+ var element = view.$(this);
352
+ var bindingAttr = config.getBindingAttr('checkbox');
353
+ var attribute_name = config.getBindingValue(element, 'checkbox');
354
+
355
+ var modelChange = function(model, val){
356
+ if (val){
357
+ element.attr("checked", "checked");
358
+ }
359
+ else{
360
+ element.removeAttr("checked");
361
+ }
362
+ };
363
+
364
+ var setModelValue = function(attr_name, value){
365
+ var data = {};
366
+ data[attr_name] = value;
367
+ model.set(data);
368
+ };
369
+
370
+ var elementChange = function(ev){
371
+ var changedElement = view.$(ev.target);
372
+ var checked = changedElement.is(":checked")? true : false;
373
+ setModelValue(attribute_name, checked);
374
+ };
375
+
376
+ modelBinder.registerModelBinding(model, attribute_name, modelChange);
377
+ modelBinder.registerElementBinding(element, elementChange);
378
+
379
+ var attr_exists = model.attributes.hasOwnProperty(attribute_name);
380
+ if (attr_exists) {
381
+ // set the default value on the form, from the model
382
+ var attr_value = getAttributeValue(model, attribute_name);
383
+ if (typeof attr_value !== "undefined" && attr_value !== null && attr_value != false) {
384
+ element.attr("checked", "checked");
385
+ }
386
+ else{
387
+ element.removeAttr("checked");
388
+ }
389
+ } else {
390
+ // bind the form's value to the model
391
+ var checked = element.is(":checked")? true : false;
392
+ setModelValue(attribute_name, checked);
393
+ }
394
+ });
395
+ };
396
+
397
+ return methods;
398
+ })(Backbone);
399
+
400
+ // ----------------------------
401
+ // Data-Bind Binding Methods
402
+ // ----------------------------
403
+ var DataBindBinding = (function(Backbone, _, $){
404
+ var dataBindSubstConfig = {
405
+ "default": ""
406
+ };
407
+
408
+ modelBinding.Configuration.dataBindSubst = function(config){
409
+ this.storeDataBindSubstConfig();
410
+ _.extend(dataBindSubstConfig, config);
411
+ };
412
+
413
+ modelBinding.Configuration.storeDataBindSubstConfig = function(){
414
+ modelBinding.Configuration._dataBindSubstConfig = _.clone(dataBindSubstConfig);
415
+ };
416
+
417
+ modelBinding.Configuration.restoreDataBindSubstConfig = function(){
418
+ if (modelBinding.Configuration._dataBindSubstConfig){
419
+ dataBindSubstConfig = modelBinding.Configuration._dataBindSubstConfig;
420
+ delete modelBinding.Configuration._dataBindSubstConfig;
421
+ }
422
+ };
423
+
424
+ modelBinding.Configuration.getDataBindSubst = function(elementType, value){
425
+ var returnValue = value;
426
+ if (value === undefined){
427
+ if (dataBindSubstConfig.hasOwnProperty(elementType)){
428
+ returnValue = dataBindSubstConfig[elementType];
429
+ } else {
430
+ returnValue = dataBindSubstConfig["default"];
431
+ }
432
+ }
433
+ return returnValue;
434
+ };
435
+
436
+ var setOnElement = function(element, attr, val){
437
+ var valBefore = val;
438
+ val = modelBinding.Configuration.getDataBindSubst(attr, val);
439
+ switch(attr){
440
+ case "html":
441
+ element.html(val);
442
+ break;
443
+ case "text":
444
+ element.text(val);
445
+ break;
446
+ case "enabled":
447
+ element.attr("disabled", !val);
448
+ break;
449
+ case "displayed":
450
+ element[val? "show" : "hide"]();
451
+ break;
452
+ case "hidden":
453
+ element[val? "hide" : "show"]();
454
+ break;
455
+ default:
456
+ element.attr(attr, val);
457
+ }
458
+ };
459
+
460
+ var splitBindingAttr = function(element)
461
+ {
462
+ var dataBindConfigList = [];
463
+ var dataBindAttributeName = modelBinding.Conventions.databind.selector.replace(/^(.*\[)([^\]]*)(].*)/g, '$2');
464
+ var databindList = element.attr(dataBindAttributeName).split(";");
465
+ _.each(databindList, function(attrbind){
466
+ var databind = $.trim(attrbind).split(" ");
467
+
468
+ // make the default special case "text" if none specified
469
+ if( databind.length == 1 ) databind.unshift("text");
470
+
471
+ dataBindConfigList.push({
472
+ elementAttr: databind[0],
473
+ modelAttr: databind[1]
474
+ });
475
+ });
476
+ return dataBindConfigList;
477
+ };
478
+
479
+ var getEventConfiguration = function(element, databind){
480
+ var config = {};
481
+ var eventName = databind.modelAttr;
482
+ var index = eventName.indexOf("event:");
483
+
484
+ if (index == 0) {
485
+ // "event:foo" binding
486
+ config.name = eventName.substr(6);
487
+ config.callback = function(val){
488
+ setOnElement(element, databind.elementAttr, val);
489
+ };
490
+ } else {
491
+ // standard model attribute binding
492
+ config.name = "change:" + eventName;
493
+ config.callback = function(model, val){
494
+ setOnElement(element, databind.elementAttr, val);
495
+ };
496
+ }
497
+
498
+ return config;
499
+ }
500
+ var methods = {};
501
+
502
+ methods.bind = function(selector, view, model, config){
503
+ var modelBinder = this;
504
+
505
+ view.$(selector).each(function(index){
506
+ var element = view.$(this);
507
+ var databindList = splitBindingAttr(element);
508
+
509
+ _.each(databindList, function(databind){
510
+ var eventConfig = getEventConfiguration(element, databind);
511
+ modelBinder.registerDataBinding(model, eventConfig.name, eventConfig.callback);
512
+ // set default on data-bind element
513
+ setOnElement(element, databind.elementAttr, getAttributeValue(model, databind.modelAttr));
514
+ });
515
+
516
+ });
517
+ };
518
+
519
+ return methods;
520
+ })(Backbone, _, $);
521
+
522
+
523
+ // ----------------------------
524
+ // Binding Conventions
525
+ // ----------------------------
526
+ modelBinding.Conventions = {
527
+ text: {selector: "input:text", handler: StandardBinding},
528
+ textarea: {selector: "textarea", handler: StandardBinding},
529
+ password: {selector: "input:password", handler: StandardBinding},
530
+ radio: {selector: "input:radio", handler: RadioGroupBinding},
531
+ checkbox: {selector: "input:checkbox", handler: CheckboxBinding},
532
+ select: {selector: "select", handler: SelectBoxBinding},
533
+ databind: { selector: "*[data-bind]", handler: DataBindBinding},
534
+ // HTML5 input
535
+ number: {selector: "input[type=number]", handler: StandardBinding},
536
+ range: {selector: "input[type=range]", handler: StandardBinding},
537
+ tel: {selector: "input[type=tel]", handler: StandardBinding},
538
+ search: {selector: "input[type=search]", handler: StandardBinding},
539
+ url: {selector: "input[type=url]", handler: StandardBinding},
540
+ email: {selector: "input[type=email]", handler: StandardBinding}
541
+ };
542
+
543
+ return modelBinding;
544
+ });
545
+
546
+ // Backbone.Modelbinding AMD wrapper with namespace fallback
547
+ if (typeof define === 'function' && define.amd) {
548
+ // AMD support
549
+ define([
550
+ 'backbone', // use Backbone 0.5.3-optamd3 branch (https://github.com/jrburke/backbone/tree/optamd3)
551
+ 'underscore', // AMD supported
552
+ 'jquery' // AMD supported
553
+ ], function (Backbone, _, jQuery) {
554
+ return modelbinding(Backbone, _, jQuery);
555
+ });
556
+ } else {
557
+ // No AMD, use Backbone namespace
558
+ root.Backbone = Backbone || {};
559
+ root.Backbone.ModelBinding = modelbinding(Backbone, _, jQuery);
560
+ }
561
+
562
+ })(this);
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.3.0
4
+ version: 0.4.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-10 00:00:00.000000000Z
12
+ date: 2012-01-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: appetizer
16
- requirement: &70355474646500 !ruby/object:Gem::Requirement
16
+ requirement: &70341860019700 !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: *70355474646500
24
+ version_requirements: *70341860019700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: coffee-script
27
- requirement: &70355474645960 !ruby/object:Gem::Requirement
27
+ requirement: &70341860018680 !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: *70355474645960
35
+ version_requirements: *70341860018680
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: eco
38
- requirement: &70355474636360 !ruby/object:Gem::Requirement
38
+ requirement: &70341860017860 !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: *70355474636360
46
+ version_requirements: *70341860017860
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack-contrib
49
- requirement: &70355474635400 !ruby/object:Gem::Requirement
49
+ requirement: &70341860016980 !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: *70355474635400
57
+ version_requirements: *70341860016980
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rack-ssl
60
- requirement: &70355474634520 !ruby/object:Gem::Requirement
60
+ requirement: &70341860016160 !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: *70355474634520
68
+ version_requirements: *70341860016160
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sass
71
- requirement: &70355474633540 !ruby/object:Gem::Requirement
71
+ requirement: &70341860015300 !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: *70355474633540
79
+ version_requirements: *70341860015300
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sinatra
82
- requirement: &70355474632920 !ruby/object:Gem::Requirement
82
+ requirement: &70341860014480 !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: *70355474632920
90
+ version_requirements: *70341860014480
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: sprockets
93
- requirement: &70355474632060 !ruby/object:Gem::Requirement
93
+ requirement: &70341860013560 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,21 @@ dependencies:
98
98
  version: '2.1'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70355474632060
101
+ version_requirements: *70341860013560
102
+ - !ruby/object:Gem::Dependency
103
+ name: sprockets-sass
104
+ requirement: &70341860012740 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '0.6'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *70341860012740
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: uglifier
104
- requirement: &70355474630720 !ruby/object:Gem::Requirement
115
+ requirement: &70341860011920 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ~>
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: '1.0'
110
121
  type: :runtime
111
122
  prerelease: false
112
- version_requirements: *70355474630720
123
+ version_requirements: *70341860011920
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: yajl-ruby
115
- requirement: &70355474618200 !ruby/object:Gem::Requirement
126
+ requirement: &70341860010480 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ~>
@@ -120,10 +131,10 @@ dependencies:
120
131
  version: '1.0'
121
132
  type: :runtime
122
133
  prerelease: false
123
- version_requirements: *70355474618200
134
+ version_requirements: *70341860010480
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: yui-compressor
126
- requirement: &70355474616500 !ruby/object:Gem::Requirement
137
+ requirement: &70341860009860 !ruby/object:Gem::Requirement
127
138
  none: false
128
139
  requirements:
129
140
  - - ~>
@@ -131,7 +142,7 @@ dependencies:
131
142
  version: '0.9'
132
143
  type: :runtime
133
144
  prerelease: false
134
- version_requirements: *70355474616500
145
+ version_requirements: *70341860009860
135
146
  description: A painfully opinionated Appetizer extension for web apps.
136
147
  email:
137
148
  - tech@audiosocket.com
@@ -163,6 +174,7 @@ files:
163
174
  - lib/appetizer/ui/rake.rb
164
175
  - lib/appetizer/ui/spec.rb
165
176
  - lib/appetizer/ui/vendor/js/backbone.js
177
+ - lib/appetizer/ui/vendor/js/backbone.modelbinding.js
166
178
  - lib/appetizer/ui/vendor/js/jquery.js
167
179
  - lib/appetizer/ui/vendor/js/json2.js
168
180
  - lib/appetizer/ui/vendor/js/underscore.js