diff --git a/app/js/app.js b/app/js/app.js index 6e670b60..2e456f17 100755 --- a/app/js/app.js +++ b/app/js/app.js @@ -242,7 +242,6 @@ var ExplorerApp = Backbone.View.extend({ // provide a demonstration in memory dataset function localDataset() { var dataset = Fixture.getDataset(); - dataset.queryState.addFacet('country'); return dataset; } diff --git a/css/multiview.css b/css/multiview.css index 4c661429..ccdb52e6 100644 --- a/css/multiview.css +++ b/css/multiview.css @@ -98,15 +98,39 @@ * Fields Widget *********************************************************/ +.recline-fields-view { + width: 200px; +} + +.recline-fields-view .fields-list { + padding: 0; +} + .recline-fields-view .fields-list .accordion-heading a, -.recline-fields-view .fields-list .accordion-heading h3 { +.recline-fields-view .fields-list .accordion-heading h4 { display: inline; } -.recline-fields-view .fields-list .accordion-heading h3 { +.recline-fields-view .fields-list .accordion-heading h4 { margin-left: 10px; } +.recline-fields-view .clear { + clear: both; +} + +.recline-fields-view .facet-items { + list-style-type: none; + margin-left: 0; +} + +.recline-fields-view .facet-item .term { + font-weight: bold; +} + +.recline-fields-view .facet-item .count { +} + /********************************************************** * Notifications *********************************************************/ diff --git a/src/model.js b/src/model.js index d84b5090..11eca39f 100644 --- a/src/model.js +++ b/src/model.js @@ -111,6 +111,31 @@ my.Dataset = Backbone.Model.extend({ return data; }, + // Get a summary for each field in the form of a `Facet`. + // + // @return null as this is async function. Provides deferred/promise interface. + getFieldsSummary: function() { + var self = this; + var query = new my.Query(); + query.set({size: 0}); + this.fields.each(function(field) { + query.addFacet(field.id); + }); + var dfd = $.Deferred(); + this.backend.query(this, query.toJSON()).done(function(queryResult) { + if (queryResult.facets) { + _.each(queryResult.facets, function(facetResult, facetId) { + facetResult.id = facetId; + var facet = new my.Facet(facetResult); + // TODO: probably want replace rather than reset (i.e. just replace the facet with this id) + self.fields.get(facetId).facets.reset(facet); + }); + } + dfd.resolve(queryResult); + }); + return dfd.promise(); + }, + // ### _backendFromString(backendString) // // See backend argument to initialize for details @@ -291,6 +316,7 @@ my.Field = Backbone.Model.extend({ if (!this.renderer) { this.renderer = this.defaultRenderers[this.get('type')]; } + this.facets = new my.FacetList(); }, defaultRenderers: { object: function(val, field, doc) { diff --git a/src/widget.fields.js b/src/widget.fields.js index a2568467..91ff4d16 100644 --- a/src/widget.fields.js +++ b/src/widget.fields.js @@ -22,24 +22,33 @@ this.recline.View = this.recline.View || {}; (function($, my) { my.Fields = Backbone.View.extend({ - className: 'recline-fields-view well', + className: 'recline-fields-view', template: ' \ -