diff --git a/demos/search/app.js b/demos/search/app.js new file mode 100644 index 00000000..4e25c8b2 --- /dev/null +++ b/demos/search/app.js @@ -0,0 +1,111 @@ +jQuery(function($) { + window.dataExplorer = null; + window.explorerDiv = $('.search-here'); + + // var url = 'http://openspending.org/api/search'; + // var url = 'http://localhost:9200/tmp/sfpd-last-month'; + var dataset = new recline.Model.Dataset({ + records: simpleData + }); + createSearch(dataset); +}); + +var createSearch = function(dataset, state) { + // remove existing data explorer view + var $el = $('
'); + $el.appendTo(window.explorerDiv); + var template = ' \ + {{#records}} \ +
\ +

\ + {{title}} \ +

\ +

{{description}} \ +

\ + {{/records}} \ + '; + + window.dataExplorer = new SearchView({ + el: $el, + model: dataset, + template: template + }); + + dataset.queryState.set({ + size: 10 + }, + {silent: true} + ); + dataset.queryState.addFacet('author'); + dataset.query(); +} + +// Simple Search View +// +// Pulls together various Recline UI components and the central Dataset and Query (state) object +// +// Plus support for customization e.g. of item template +var SearchView = Backbone.View.extend({ + initialize: function(options) { + this.el = $(this.el); + _.bindAll(this, 'render'); + this.recordTemplate = options.template || this.defaultTemplate; + this.model.records.bind('reset', this.render); + this.templateResults = options.template; + }, + + template: ' \ +
\ +
\ +
\ +
\ + \ +
\ + {{{results}}} \ +
\ +
\ +
\ + ', + + render: function() { + var results = Mustache.render(this.templateResults, { + records: this.model.records.toJSON() + }); + var html = Mustache.render(this.template, { + results: results + }); + this.el.html(html); + + var view = new recline.View.FacetViewer({ + model: this.model + }); + view.render(); + this.el.find('.sidebar').append(view.el); + + var pager = new recline.View.Pager({ + model: this.model.queryState + }); + this.el.find('.pager-here').append(pager.el); + + var queryEditor = new recline.View.QueryEditor({ + model: this.model.queryState + }); + this.el.find('.query-here').append(queryEditor.el); + } +}); + +var simpleData = [ + { + title: 'War and Peace', + description: 'The epic tale ...', + author: 'Tolstoy', + price: 7.99 + }, + { + title: 'Anna Karenina', + description: 'How things go wrong in love and ultimately lead to suicide. This is why you should not have affairs, girls!', + author: 'Tolstoy', + price: 8.50 + } +]; + diff --git a/demos/search/index.html b/demos/search/index.html new file mode 100644 index 00000000..25de448b --- /dev/null +++ b/demos/search/index.html @@ -0,0 +1,82 @@ +--- +layout: container +title: Demos - Search +recline-deps: true +root: ../../ +--- + + + + + +
+

This demo shows how Recline can be used to build a search app (source JS). The default version uses local example data but you can also connect directly to a SOLR or ElasticSearch endpoint for example.

+
+ +
+ +
+ + +