/*jshint multistr:true *//*jshint multistr:true */Editor — to change type (and possibly format) Editor for show/hide …
Box to boot transform editor …
this.recline = this.recline || {};
this.recline.View = this.recline.View || {};
(function($, my) {
"use strict";
my.Fields = Backbone.View.extend({
className: 'recline-fields-view',
template: ' \
<div class="panel-group fields-list well"> \
<h3>Fields <a href="#" class="js-show-hide">+</a></h3> \
{{#fields}} \
<div class="panel panel-default field"> \
<div class="panel-heading"> \
<i class="glyphicon glyphicon-file"></i> \
<h4> \
{{label}} \
<small> \
{{type}} \
<a class="accordion-toggle" data-toggle="collapse" href="#collapse{{id}}"> » </a> \
</small> \
</h4> \
</div> \
<div id="collapse{{id}}" class="panel-collapse collapse"> \
<div class="panel-body"> \
{{#facets}} \
<div class="facet-summary" data-facet="{{id}}"> \
<ul class="facet-items"> \
{{#terms}} \
<li class="facet-item"><span class="term">{{term}}</span> <span class="count">[{{count}}]</span></li> \
{{/terms}} \
</ul> \
</div> \
{{/facets}} \
<div class="clear"></div> \
</div> \
</div> \
</div> \
{{/fields}} \
</div> \
',
initialize: function(model) {
var self = this;
_.bindAll(this, 'render');TODO: this is quite restrictive in terms of when it is re-run e.g. a change in type will not trigger a re-run atm. being more liberal (e.g. binding to all) can lead to being called a lot (e.g. for change:width)
this.listenTo(this.model.fields, 'reset', function(action) {
self.model.fields.each(function(field) {
field.facets.unbind('all', self.render);
field.facets.bind('all', self.render);
});fields can get reset or changed in which case we need to recalculate
self.model.getFieldsSummary();
self.render();
});
this.$el.find('.collapse').collapse();
this.render();
},
render: function() {
var self = this;
var tmplData = {
fields: []
};
this.model.fields.each(function(field) {
var out = field.toJSON();
out.facets = field.facets.toJSON();
tmplData.fields.push(out);
});
var templated = Mustache.render(this.template, tmplData);
this.$el.html(templated);
}
});
})(jQuery, recline.View);