rails-backbone-forms 0.11.1 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rails/backbone/forms/version.rb +1 -1
- data/vendor/assets/javascripts/backbone-forms/adapters/backbone.bootstrap-modal.js +10 -50
- data/vendor/assets/javascripts/backbone-forms/adapters/backbone.bootstrap-modal.min.js +1 -1
- data/vendor/assets/javascripts/backbone-forms/backbone-forms.js +1788 -1768
- data/vendor/assets/javascripts/backbone-forms/editors/list.js +86 -46
- data/vendor/assets/javascripts/backbone-forms/editors/list.min.js +1 -1
- data/vendor/assets/javascripts/backbone-forms/templates/bootstrap.js +53 -78
- data/vendor/assets/javascripts/backbone-forms/templates/old.js +88 -0
- data/vendor/assets/stylesheets/backbone-forms/templates/{default.css → old.css} +0 -0
- metadata +3 -3
- data/vendor/assets/javascripts/backbone-forms/templates/default.js +0 -91
@@ -1,10 +1,7 @@
|
|
1
|
-
;(function() {
|
2
|
-
|
3
|
-
var Form = Backbone.Form,
|
4
|
-
editors = Form.editors;
|
1
|
+
;(function(Form) {
|
5
2
|
|
6
3
|
/**
|
7
|
-
*
|
4
|
+
* List editor
|
8
5
|
*
|
9
6
|
* An array editor. Creates a list of other editor items.
|
10
7
|
*
|
@@ -12,8 +9,8 @@
|
|
12
9
|
* @param {String} [options.schema.itemType] The editor type for each item in the list. Default: 'Text'
|
13
10
|
* @param {String} [options.schema.confirmDelete] Text to display in a delete confirmation dialog. If falsey, will not ask for confirmation.
|
14
11
|
*/
|
15
|
-
editors.List = editors.Base.extend({
|
16
|
-
|
12
|
+
Form.editors.List = Form.editors.Base.extend({
|
13
|
+
|
17
14
|
events: {
|
18
15
|
'click [data-action="add"]': function(event) {
|
19
16
|
event.preventDefault();
|
@@ -22,16 +19,16 @@
|
|
22
19
|
},
|
23
20
|
|
24
21
|
initialize: function(options) {
|
22
|
+
options = options || {};
|
23
|
+
|
24
|
+
var editors = Form.editors;
|
25
|
+
|
25
26
|
editors.Base.prototype.initialize.call(this, options);
|
26
27
|
|
27
28
|
var schema = this.schema;
|
28
29
|
if (!schema) throw "Missing required option 'schema'";
|
29
30
|
|
30
|
-
|
31
|
-
this.schema = _.extend({
|
32
|
-
listTemplate: 'list',
|
33
|
-
listItemTemplate: 'listItem'
|
34
|
-
}, schema);
|
31
|
+
this.template = options.template || this.constructor.template;
|
35
32
|
|
36
33
|
//Determine the editor to use
|
37
34
|
this.Editor = (function() {
|
@@ -55,12 +52,10 @@
|
|
55
52
|
value = this.value || [];
|
56
53
|
|
57
54
|
//Create main element
|
58
|
-
var $el =
|
59
|
-
items: '<b class="bbf-tmp"></b>'
|
60
|
-
}));
|
55
|
+
var $el = $($.trim(this.template()));
|
61
56
|
|
62
57
|
//Store a reference to the list (item container)
|
63
|
-
this.$list = $el.
|
58
|
+
this.$list = $el.is('[data-items]') ? $el : $el.find('[data-items]');
|
64
59
|
|
65
60
|
//Add existing items
|
66
61
|
if (value.length) {
|
@@ -89,11 +84,13 @@
|
|
89
84
|
* @param {Boolean} [userInitiated] If the item was added by the user clicking 'add'
|
90
85
|
*/
|
91
86
|
addItem: function(value, userInitiated) {
|
92
|
-
var self = this
|
87
|
+
var self = this,
|
88
|
+
editors = Form.editors;
|
93
89
|
|
94
90
|
//Create the item
|
95
91
|
var item = new editors.List.Item({
|
96
92
|
list: this,
|
93
|
+
form: this.form,
|
97
94
|
schema: this.schema,
|
98
95
|
value: value,
|
99
96
|
Editor: this.Editor,
|
@@ -218,7 +215,7 @@
|
|
218
215
|
remove: function() {
|
219
216
|
_.invoke(this.items, 'remove');
|
220
217
|
|
221
|
-
editors.Base.prototype.remove.call(this);
|
218
|
+
Form.editors.Base.prototype.remove.call(this);
|
222
219
|
},
|
223
220
|
|
224
221
|
/**
|
@@ -247,6 +244,16 @@
|
|
247
244
|
|
248
245
|
return fieldError;
|
249
246
|
}
|
247
|
+
}, {
|
248
|
+
|
249
|
+
//STATICS
|
250
|
+
template: _.template('\
|
251
|
+
<div>\
|
252
|
+
<div data-items></div>\
|
253
|
+
<button type="button" data-action="add">Add</button>\
|
254
|
+
</div>\
|
255
|
+
', null, Form.templateSettings)
|
256
|
+
|
250
257
|
});
|
251
258
|
|
252
259
|
|
@@ -259,7 +266,8 @@
|
|
259
266
|
* @param {Mixed} options.value Value
|
260
267
|
* @param {Object} options.schema Field schema
|
261
268
|
*/
|
262
|
-
editors.List.Item =
|
269
|
+
Form.editors.List.Item = Form.editors.Base.extend({
|
270
|
+
|
263
271
|
events: {
|
264
272
|
'click [data-action="remove"]': function(event) {
|
265
273
|
event.preventDefault();
|
@@ -277,8 +285,11 @@
|
|
277
285
|
this.list = options.list;
|
278
286
|
this.schema = options.schema || this.list.schema;
|
279
287
|
this.value = options.value;
|
280
|
-
this.Editor = options.Editor || editors.Text;
|
288
|
+
this.Editor = options.Editor || Form.editors.Text;
|
281
289
|
this.key = options.key;
|
290
|
+
this.template = options.template || this.schema.itemTemplate || this.constructor.template;
|
291
|
+
this.errorClassName = options.errorClassName || this.constructor.errorClassName;
|
292
|
+
this.form = options.form;
|
282
293
|
},
|
283
294
|
|
284
295
|
render: function() {
|
@@ -288,15 +299,14 @@
|
|
288
299
|
schema: this.schema,
|
289
300
|
value: this.value,
|
290
301
|
list: this.list,
|
291
|
-
item: this
|
302
|
+
item: this,
|
303
|
+
form: this.form
|
292
304
|
}).render();
|
293
305
|
|
294
306
|
//Create main element
|
295
|
-
var $el =
|
296
|
-
editor: '<b class="bbf-tmp"></b>'
|
297
|
-
}));
|
307
|
+
var $el = $($.trim(this.template()));
|
298
308
|
|
299
|
-
$el.find('
|
309
|
+
$el.find('[data-editor]').append(this.editor.el);
|
300
310
|
|
301
311
|
//Replace the entire element so there isn't a wrapper tag
|
302
312
|
this.setElement($el);
|
@@ -330,7 +340,7 @@
|
|
330
340
|
var value = this.getValue(),
|
331
341
|
formValues = this.list.form ? this.list.form.getValue() : {},
|
332
342
|
validators = this.schema.validators,
|
333
|
-
getValidator =
|
343
|
+
getValidator = this.getValidator;
|
334
344
|
|
335
345
|
if (!validators) return null;
|
336
346
|
|
@@ -357,7 +367,7 @@
|
|
357
367
|
* Show a validation error
|
358
368
|
*/
|
359
369
|
setError: function(err) {
|
360
|
-
this.$el.addClass(
|
370
|
+
this.$el.addClass(this.errorClassName);
|
361
371
|
this.$el.attr('title', err.message);
|
362
372
|
},
|
363
373
|
|
@@ -365,9 +375,21 @@
|
|
365
375
|
* Hide validation errors
|
366
376
|
*/
|
367
377
|
clearError: function() {
|
368
|
-
this.$el.removeClass(
|
378
|
+
this.$el.removeClass(this.errorClassName);
|
369
379
|
this.$el.attr('title', null);
|
370
380
|
}
|
381
|
+
}, {
|
382
|
+
|
383
|
+
//STATICS
|
384
|
+
template: _.template('\
|
385
|
+
<div>\
|
386
|
+
<span data-editor></span>\
|
387
|
+
<button type="button" data-action="remove">×</button>\
|
388
|
+
</div>\
|
389
|
+
', null, Form.templateSettings),
|
390
|
+
|
391
|
+
errorClassName: 'error'
|
392
|
+
|
371
393
|
});
|
372
394
|
|
373
395
|
|
@@ -375,23 +397,33 @@
|
|
375
397
|
* Base modal object editor for use with the List editor; used by Object
|
376
398
|
* and NestedModal list types
|
377
399
|
*/
|
378
|
-
editors.List.Modal = editors.Base.extend({
|
400
|
+
Form.editors.List.Modal = Form.editors.Base.extend({
|
401
|
+
|
379
402
|
events: {
|
380
403
|
'click': 'openEditor'
|
381
404
|
},
|
382
405
|
|
383
406
|
/**
|
384
407
|
* @param {Object} options
|
408
|
+
* @param {Form} options.form The main form
|
385
409
|
* @param {Function} [options.schema.itemToString] Function to transform the value for display in the list.
|
386
410
|
* @param {String} [options.schema.itemType] Editor type e.g. 'Text', 'Object'.
|
387
411
|
* @param {Object} [options.schema.subSchema] Schema for nested form,. Required when itemType is 'Object'
|
388
412
|
* @param {Function} [options.schema.model] Model constructor function. Required when itemType is 'NestedModel'
|
389
413
|
*/
|
390
414
|
initialize: function(options) {
|
391
|
-
|
415
|
+
options = options || {};
|
416
|
+
|
417
|
+
Form.editors.Base.prototype.initialize.call(this, options);
|
392
418
|
|
393
419
|
//Dependencies
|
394
|
-
if (!editors.List.Modal.ModalAdapter) throw 'A ModalAdapter is required';
|
420
|
+
if (!Form.editors.List.Modal.ModalAdapter) throw 'A ModalAdapter is required';
|
421
|
+
|
422
|
+
this.form = options.form;
|
423
|
+
if (!options.form) throw 'Missing required option: "form"';
|
424
|
+
|
425
|
+
//Template
|
426
|
+
this.template = options.template || this.constructor.template;
|
395
427
|
},
|
396
428
|
|
397
429
|
/**
|
@@ -423,11 +455,9 @@
|
|
423
455
|
* Renders the list item representation
|
424
456
|
*/
|
425
457
|
renderSummary: function() {
|
426
|
-
|
427
|
-
|
428
|
-
this.$el.html(template({
|
458
|
+
this.$el.html($.trim(this.template({
|
429
459
|
summary: this.getStringValue()
|
430
|
-
}));
|
460
|
+
})));
|
431
461
|
},
|
432
462
|
|
433
463
|
/**
|
@@ -438,12 +468,18 @@
|
|
438
468
|
* @return {String}
|
439
469
|
*/
|
440
470
|
itemToString: function(value) {
|
471
|
+
var createTitle = function(key) {
|
472
|
+
var context = { key: key };
|
473
|
+
|
474
|
+
return Form.Field.prototype.createTitle.call(context);
|
475
|
+
};
|
476
|
+
|
441
477
|
value = value || {};
|
442
478
|
|
443
479
|
//Pretty print the object keys and values
|
444
480
|
var parts = [];
|
445
481
|
_.each(this.nestedSchema, function(schema, key) {
|
446
|
-
var desc = schema.title ? schema.title :
|
482
|
+
var desc = schema.title ? schema.title : createTitle(key),
|
447
483
|
val = value[key];
|
448
484
|
|
449
485
|
if (_.isUndefined(val) || _.isNull(val)) val = '';
|
@@ -471,14 +507,15 @@
|
|
471
507
|
},
|
472
508
|
|
473
509
|
openEditor: function() {
|
474
|
-
var self = this
|
510
|
+
var self = this,
|
511
|
+
ModalForm = this.form.constructor;
|
475
512
|
|
476
|
-
var form = this.modalForm = new
|
513
|
+
var form = this.modalForm = new ModalForm({
|
477
514
|
schema: this.nestedSchema,
|
478
515
|
data: this.value
|
479
516
|
});
|
480
517
|
|
481
|
-
var modal = this.modal = new editors.List.Modal.ModalAdapter({
|
518
|
+
var modal = this.modal = new Form.editors.List.Modal.ModalAdapter({
|
482
519
|
content: form,
|
483
520
|
animate: true
|
484
521
|
});
|
@@ -553,6 +590,9 @@
|
|
553
590
|
}
|
554
591
|
}, {
|
555
592
|
//STATICS
|
593
|
+
template: _.template('\
|
594
|
+
<div><%= summary %></div>\
|
595
|
+
', null, Form.templateSettings),
|
556
596
|
|
557
597
|
//The modal adapter that creates and manages the modal dialog.
|
558
598
|
//Defaults to BootstrapModal (http://github.com/powmedia/backbone.bootstrap-modal)
|
@@ -563,10 +603,10 @@
|
|
563
603
|
isAsync: true
|
564
604
|
});
|
565
605
|
|
566
|
-
|
567
|
-
editors.List.Object = editors.List.Modal.extend({
|
606
|
+
|
607
|
+
Form.editors.List.Object = Form.editors.List.Modal.extend({
|
568
608
|
initialize: function () {
|
569
|
-
editors.List.Modal.prototype.initialize.apply(this, arguments);
|
609
|
+
Form.editors.List.Modal.prototype.initialize.apply(this, arguments);
|
570
610
|
|
571
611
|
var schema = this.schema;
|
572
612
|
|
@@ -577,9 +617,9 @@
|
|
577
617
|
});
|
578
618
|
|
579
619
|
|
580
|
-
editors.List.NestedModel = editors.List.Modal.extend({
|
620
|
+
Form.editors.List.NestedModel = Form.editors.List.Modal.extend({
|
581
621
|
initialize: function() {
|
582
|
-
editors.List.Modal.prototype.initialize.apply(this, arguments);
|
622
|
+
Form.editors.List.Modal.prototype.initialize.apply(this, arguments);
|
583
623
|
|
584
624
|
var schema = this.schema;
|
585
625
|
|
@@ -604,7 +644,7 @@
|
|
604
644
|
|
605
645
|
//Otherwise use the model
|
606
646
|
return new (schema.model)(value).toString();
|
607
|
-
}
|
647
|
+
}
|
608
648
|
});
|
609
649
|
|
610
|
-
})();
|
650
|
+
})(Backbone.Form);
|
@@ -1 +1 @@
|
|
1
|
-
(function(){
|
1
|
+
(function(e){e.editors.List=e.editors.Base.extend({events:{'click [data-action="add"]':function(e){e.preventDefault(),this.addItem(null,!0)}},initialize:function(t){t=t||{};var n=e.editors;n.Base.prototype.initialize.call(this,t);var r=this.schema;if(!r)throw"Missing required option 'schema'";this.template=t.template||this.constructor.template,this.Editor=function(){var e=r.itemType;return e?n.List[e]?n.List[e]:n[e]:n.Text}(),this.items=[]},render:function(){var e=this,t=this.value||[],n=$($.trim(this.template()));return this.$list=n.is("[data-items]")?n:n.find("[data-items]"),t.length?_.each(t,function(t){e.addItem(t)}):this.Editor.isAsync||this.addItem(),this.setElement(n),this.$el.attr("id",this.id),this.$el.attr("name",this.key),this.hasFocus&&this.trigger("blur",this),this},addItem:function(t,n){var r=this,i=e.editors,s=(new i.List.Item({list:this,form:this.form,schema:this.schema,value:t,Editor:this.Editor,key:this.key})).render(),o=function(){r.items.push(s),r.$list.append(s.el),s.editor.on("all",function(e){if(e==="change")return;var t=_.toArray(arguments);t[0]="item:"+e,t.splice(1,0,r),i.List.prototype.trigger.apply(this,t)},r),s.editor.on("change",function(){s.addEventTriggered||(s.addEventTriggered=!0,this.trigger("add",this,s.editor)),this.trigger("item:change",this,s.editor),this.trigger("change",this)},r),s.editor.on("focus",function(){if(this.hasFocus)return;this.trigger("focus",this)},r),s.editor.on("blur",function(){if(!this.hasFocus)return;var e=this;setTimeout(function(){if(_.find(e.items,function(e){return e.editor.hasFocus}))return;e.trigger("blur",e)},0)},r);if(n||t)s.addEventTriggered=!0;n&&(r.trigger("add",r,s.editor),r.trigger("change",r))};return this.Editor.isAsync?s.editor.on("readyToAdd",o,this):(o(),s.editor.focus()),s},removeItem:function(e){var t=this.schema.confirmDelete;if(t&&!confirm(t))return;var n=_.indexOf(this.items,e);this.items[n].remove(),this.items.splice(n,1),e.addEventTriggered&&(this.trigger("remove",this,e.editor),this.trigger("change",this)),!this.items.length&&!this.Editor.isAsync&&this.addItem()},getValue:function(){var e=_.map(this.items,function(e){return e.getValue()});return _.without(e,undefined,"")},setValue:function(e){this.value=e,this.render()},focus:function(){if(this.hasFocus)return;this.items[0]&&this.items[0].editor.focus()},blur:function(){if(!this.hasFocus)return;var e=_.find(this.items,function(e){return e.editor.hasFocus});e&&e.editor.blur()},remove:function(){_.invoke(this.items,"remove"),e.editors.Base.prototype.remove.call(this)},validate:function(){if(!this.validators)return null;var e=_.map(this.items,function(e){return e.validate()}),t=_.compact(e).length?!0:!1;if(!t)return null;var n={type:"list",message:"Some of the items in the list failed validation",errors:e};return n}},{template:_.template(' <div> <div data-items></div> <button type="button" data-action="add">Add</button> </div> ',null,e.templateSettings)}),e.editors.List.Item=e.editors.Base.extend({events:{'click [data-action="remove"]':function(e){e.preventDefault(),this.list.removeItem(this)},"keydown input[type=text]":function(e){if(e.keyCode!==13)return;e.preventDefault(),this.list.addItem(),this.list.$list.find("> li:last input").focus()}},initialize:function(t){this.list=t.list,this.schema=t.schema||this.list.schema,this.value=t.value,this.Editor=t.Editor||e.editors.Text,this.key=t.key,this.template=t.template||this.schema.itemTemplate||this.constructor.template,this.errorClassName=t.errorClassName||this.constructor.errorClassName,this.form=t.form},render:function(){this.editor=(new this.Editor({key:this.key,schema:this.schema,value:this.value,list:this.list,item:this,form:this.form})).render();var e=$($.trim(this.template()));return e.find("[data-editor]").append(this.editor.el),this.setElement(e),this},getValue:function(){return this.editor.getValue()},setValue:function(e){this.editor.setValue(e)},focus:function(){this.editor.focus()},blur:function(){this.editor.blur()},remove:function(){this.editor.remove(),Backbone.View.prototype.remove.call(this)},validate:function(){var e=this.getValue(),t=this.list.form?this.list.form.getValue():{},n=this.schema.validators,r=this.getValidator;if(!n)return null;var i=null;return _.every(n,function(n){return i=r(n)(e,t),i?!1:!0}),i?this.setError(i):this.clearError(),i?i:null},setError:function(e){this.$el.addClass(this.errorClassName),this.$el.attr("title",e.message)},clearError:function(){this.$el.removeClass(this.errorClassName),this.$el.attr("title",null)}},{template:_.template(' <div> <span data-editor></span> <button type="button" data-action="remove">×</button> </div> ',null,e.templateSettings),errorClassName:"error"}),e.editors.List.Modal=e.editors.Base.extend({events:{click:"openEditor"},initialize:function(t){t=t||{},e.editors.Base.prototype.initialize.call(this,t);if(!e.editors.List.Modal.ModalAdapter)throw"A ModalAdapter is required";this.form=t.form;if(!t.form)throw'Missing required option: "form"';this.template=t.template||this.constructor.template},render:function(){var e=this;return _.isEmpty(this.value)?this.openEditor():(this.renderSummary(),setTimeout(function(){e.trigger("readyToAdd")},0)),this.hasFocus&&this.trigger("blur",this),this},renderSummary:function(){this.$el.html($.trim(this.template({summary:this.getStringValue()})))},itemToString:function(t){var n=function(t){var n={key:t};return e.Field.prototype.createTitle.call(n)};t=t||{};var r=[];return _.each(this.nestedSchema,function(e,i){var s=e.title?e.title:n(i),o=t[i];if(_.isUndefined(o)||_.isNull(o))o="";r.push(s+": "+o)}),r.join("<br />")},getStringValue:function(){var e=this.schema,t=this.getValue();return _.isEmpty(t)?"[Empty]":e.itemToString?e.itemToString(t):this.itemToString(t)},openEditor:function(){var t=this,n=this.form.constructor,r=this.modalForm=new n({schema:this.nestedSchema,data:this.value}),i=this.modal=new e.editors.List.Modal.ModalAdapter({content:r,animate:!0});i.open(),this.trigger("open",this),this.trigger("focus",this),i.on("cancel",this.onModalClosed,this),i.on("ok",_.bind(this.onModalSubmitted,this))},onModalSubmitted:function(){var e=this.modal,t=this.modalForm,n=!this.value,r=t.validate();if(r)return e.preventClose();this.value=t.getValue(),this.renderSummary(),n&&this.trigger("readyToAdd"),this.trigger("change",this),this.onModalClosed()},onModalClosed:function(){this.modal=null,this.modalForm=null,this.trigger("close",this),this.trigger("blur",this)},getValue:function(){return this.value},setValue:function(e){this.value=e},focus:function(){if(this.hasFocus)return;this.openEditor()},blur:function(){if(!this.hasFocus)return;this.modal&&this.modal.trigger("cancel")}},{template:_.template(" <div><%= summary %></div> ",null,e.templateSettings),ModalAdapter:Backbone.BootstrapModal,isAsync:!0}),e.editors.List.Object=e.editors.List.Modal.extend({initialize:function(){e.editors.List.Modal.prototype.initialize.apply(this,arguments);var t=this.schema;if(!t.subSchema)throw'Missing required option "schema.subSchema"';this.nestedSchema=t.subSchema}}),e.editors.List.NestedModel=e.editors.List.Modal.extend({initialize:function(){e.editors.List.Modal.prototype.initialize.apply(this,arguments);var t=this.schema;if(!t.model)throw'Missing required option "schema.model"';var n=t.model.prototype.schema;this.nestedSchema=_.isFunction(n)?n():n},getStringValue:function(){var e=this.schema,t=this.getValue();return _.isEmpty(t)?null:e.itemToString?e.itemToString(t):(new e.model(t)).toString()}})})(Backbone.Form)
|
@@ -1,95 +1,70 @@
|
|
1
|
-
/**
|
2
|
-
* Include this file
|
3
|
-
* You only need to include templates you want to override.
|
1
|
+
/**
|
2
|
+
* Include this template file after backbone-forms.amd.js to override the default templates
|
4
3
|
*
|
5
|
-
*
|
6
|
-
* - Each template must have one 'parent' element tag.
|
7
|
-
* - "data-type" attributes are required.
|
8
|
-
* - The main placeholder tags such as the following are required: fieldsets, fields
|
4
|
+
* 'data-*' attributes control where elements are placed
|
9
5
|
*/
|
10
|
-
;(function() {
|
11
|
-
var Form = Backbone.Form;
|
6
|
+
;(function(Form) {
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Bootstrap templates for Backbone Forms
|
11
|
+
*/
|
12
|
+
Form.template = _.template('\
|
13
|
+
<form class="form-horizontal" data-fieldsets></form>\
|
14
|
+
');
|
17
15
|
|
18
|
-
//HTML
|
19
|
-
form: '\
|
20
|
-
<form class="form-horizontal">{{fieldsets}}</form>\
|
21
|
-
',
|
22
16
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
17
|
+
Form.Fieldset.template = _.template('\
|
18
|
+
<fieldset data-fields>\
|
19
|
+
<% if (legend) { %>\
|
20
|
+
<legend><%= legend %></legend>\
|
21
|
+
<% } %>\
|
22
|
+
</fieldset>\
|
23
|
+
');
|
29
24
|
|
30
|
-
field: '\
|
31
|
-
<div class="control-group field-{{key}}">\
|
32
|
-
<label class="control-label" for="{{id}}">{{title}}</label>\
|
33
|
-
<div class="controls">\
|
34
|
-
{{editor}}\
|
35
|
-
<div class="help-inline">{{error}}</div>\
|
36
|
-
<div class="help-block">{{help}}</div>\
|
37
|
-
</div>\
|
38
|
-
</div>\
|
39
|
-
',
|
40
25
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
<div class="help-
|
26
|
+
Form.Field.template = _.template('\
|
27
|
+
<div class="control-group field-<%= key %>">\
|
28
|
+
<label class="control-label" for="<%= editorId %>"><%= title %></label>\
|
29
|
+
<div class="controls">\
|
30
|
+
<span data-editor></span>\
|
31
|
+
<div class="help-inline" data-error></div>\
|
32
|
+
<div class="help-block"><%= help %></div>\
|
47
33
|
</div>\
|
48
|
-
|
34
|
+
</div>\
|
35
|
+
');
|
49
36
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
37
|
+
|
38
|
+
Form.NestedField.template = _.template('\
|
39
|
+
<div class="field-<%= key %>">\
|
40
|
+
<div title="<%= title %>" class="input-xlarge">\
|
41
|
+
<span data-editor></span>\
|
42
|
+
<div class="help-inline" data-error></div>\
|
54
43
|
</div>\
|
55
|
-
|
44
|
+
<div class="help-block"><%= help %></div>\
|
45
|
+
</div>\
|
46
|
+
');
|
56
47
|
|
57
|
-
listItem: '\
|
58
|
-
<li class="clearfix">\
|
59
|
-
<div class="pull-left">{{editor}}</div>\
|
60
|
-
<button type="button" class="btn bbf-del" data-action="remove">×</button>\
|
61
|
-
</li>\
|
62
|
-
',
|
63
48
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
',
|
49
|
+
Form.editors.List.template = _.template('\
|
50
|
+
<div class="bbf-list">\
|
51
|
+
<ul class="unstyled clearfix" data-items></ul>\
|
52
|
+
<button class="btn bbf-add" data-action="add">Add</button>\
|
53
|
+
</div>\
|
54
|
+
');
|
71
55
|
|
72
|
-
dateTime: '\
|
73
|
-
<div class="bbf-datetime">\
|
74
|
-
<p>{{date}}</p>\
|
75
|
-
<p>\
|
76
|
-
<select data-type="hour" style="width: 4em">{{hours}}</select>\
|
77
|
-
:\
|
78
|
-
<select data-type="min" style="width: 4em">{{mins}}</select>\
|
79
|
-
</p>\
|
80
|
-
</div>\
|
81
|
-
',
|
82
56
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
57
|
+
Form.editors.List.Item.template = _.template('\
|
58
|
+
<li class="clearfix">\
|
59
|
+
<div class="pull-left" data-editor></div>\
|
60
|
+
<button type="button" class="btn bbf-del" data-action="remove">×</button>\
|
61
|
+
</li>\
|
62
|
+
');
|
89
63
|
|
90
|
-
|
91
|
-
|
92
|
-
|
64
|
+
|
65
|
+
Form.editors.List.Object.template = Form.editors.List.NestedModel.template = _.template('\
|
66
|
+
<div class="bbf-list-modal"><%= summary %></div>\
|
67
|
+
');
|
93
68
|
|
94
69
|
|
95
|
-
})();
|
70
|
+
})(Backbone.Form);
|