diff --git a/README.md b/README.md index 722b02a..44e6d69 100644 --- a/README.md +++ b/README.md @@ -45,48 +45,48 @@ Consider a normal search page with basic layout as shown in the figure below and ,isClickNScroll: false ,clickNScrollSelector : '' ,isAutoScroll : true - ,facetTemp : ['{{#facets}}
' - ,'

{{name}}

' - ,'
' - ,'' + ,facetTemp : [ + '{{#sortedFacets}}' + ,'
' + ,'

{{name}}

' + ,'
' + ,'
    ' + ,'{{#isRangeFacet type}}' + ,'{{#selected}}' + ,'
  • ' + ,'' + ,'
  • ' + ,'{{/selected}}' + ,'{{#unselected}}' + ,'
  • ' + ,'' + ,'
  • ' + ,'{{/unselected}}' + ,'{{else}}' + ,'{{#selected}}' + ,'
  • ' + ,'' + ,'
  • ' + ,'{{/selected}}' + ,'{{#unselected}}' + ,'
  • ' + ,'' + ,'
  • ' + ,'{{/unselected}}' + ,'{{/isRangeFacet}}' + ,'
' + ,'
' ,'
' - ,'
{{/facets}}' - ,'{{#rangefacets}}
{{name}}' - ,'
' - ,'
    ' - ,'{{#selected}}' - ,'
  • ' - ,'' - ,'
  • ' - ,'{{/selected}}' - ,'{{#unselected}}' - ,'
  • ' - ,'' - ,'
  • ' - ,'{{/unselected}}' - ,'
' - ,'
' - ,'
{{/rangefacets}}'].join('') + ,'{{/sortedFacets}}' + ].join('') ,facetContainerSelector : "#facets_container" ,facetCheckBoxSelector : "input[type='checkbox']" ,facetElementSelector : "label" diff --git a/test/search/facetPosition.spec.js b/test/search/facetPosition.spec.js new file mode 100644 index 0000000..a7a65cb --- /dev/null +++ b/test/search/facetPosition.spec.js @@ -0,0 +1,48 @@ +describe('Facets Position', function () { + + before(function(done){ + this.searchTest = fixture.load('mock/searchTestResponse.json'); + + //setup document to hold search results + document.body.innerHTML = __html__['index.html']; + + var searchConfig = jQuery.extend({}, window.config); + searchConfig.facetTemp = function(){}; + //initialize search + this.searchobj = new window.Unbxd.setSearch(searchConfig); + + //stub search ajax call with mock response + this.stub = sinon.stub(jQuery, 'ajax').yieldsTo('success', this.searchTest); + this.spyOnFacetTemp = sinon.spy(this.searchobj.options, 'facetTemp'); + done(); + }); + + after(function(){ + this.stub.restore(); + fixture.cleanup(); + }); + + beforeEach(function(){ + //reset filters applied + this.searchobj.clearFilters(true); + this.searchobj.callResults(this.searchobj.paintResultSet); + }); + + it('Facets should be sorted based on position', function(){ + var facetElement = jQuery(this.searchobj.options + .facetContainerSelector + ' label').first(), + sortedFacets, + isSorted = true; + //apply facet + facetElement.click(); + sortedFacets = this.spyOnFacetTemp.args[0][0].sortedFacets; + sortedFacets.forEach(function(facet, index){ + if(index < sortedFacets.length && + facet.position && sortedFacets[index + 1].position && + facet.position > sortedFacets[index + 1].position) { + isSorted = false; + } + }); + expect(isSorted).to.be.true; + }); + }); \ No newline at end of file diff --git a/unbxdSearch.js b/unbxdSearch.js index ccdfec1..d5f50c1 100644 --- a/unbxdSearch.js +++ b/unbxdSearch.js @@ -372,6 +372,14 @@ var unbxdSearchInit = function(jQuery, Handlebars){ return txt.trim().length > 0 ? txt : "   "; }); + Handlebars.registerHelper("isRangeFacet", function(type, options){ + if(type === "facet_ranges") { + return options.fn(this); + } else { + return options.inverse(this); + } + }); + Unbxd.setSearch.prototype.defaultOptions = { inputSelector : '#search_query' ,searchButtonSelector : '#search_button' @@ -1666,6 +1674,7 @@ var unbxdSearchInit = function(jQuery, Handlebars){ ,facetKeys = Object.keys(facets) ,textfacets = [] ,rangefacets = [] + ,sortedFacets = [] ,singlefacet = {} ,self = this ,facetVal = "" @@ -1692,14 +1701,17 @@ var unbxdSearchInit = function(jQuery, Handlebars){ for(var newI = 0; newI < sortable.length; newI++) { var x = sortable[newI][0]; + var displayName = facets[x].displayName ? + self.prepareFacetName(facets[x].displayName) : ''; // for(var x in facets) { singlefacet = { - name : self.prepareFacetName(x) + name : displayName || self.prepareFacetName(x) ,facet_name : x ,type : facets[x]['type'] ,selected : [] ,unselected : [] ,unordered : [] + ,position: facets[x].position }; if(singlefacet.type !== 'facet_ranges'){ @@ -1732,15 +1744,27 @@ var unbxdSearchInit = function(jQuery, Handlebars){ if((singlefacet.unordered.length) > 0) rangefacets.push(singlefacet); } + if(singlefacet.unordered && (singlefacet.unordered.length) > 0) { + sortedFacets.push(singlefacet); + } } if(this.getClass(this.options.facetTemp) == 'Function'){ - this.options.facetTemp.call(this,{facets: textfacets, rangefacets: rangefacets}); + this.options.facetTemp.call(this,{ + facets: textfacets, + rangefacets: rangefacets, + sortedFacets: sortedFacets + }); }else{ if(!this.compiledFacetTemp && this.options.facetTemp.length) this.compiledFacetTemp = Handlebars.compile(this.options.facetTemp); - this.options.facetContainerSelector.length && jQuery(this.options.facetContainerSelector).html(this.compiledFacetTemp({facets: textfacets, rangefacets: rangefacets})); + this.options.facetContainerSelector.length && + jQuery(this.options.facetContainerSelector).html(this.compiledFacetTemp({ + facets: textfacets, + rangefacets: rangefacets, + sortedFacets: sortedFacets + })); } this.paintSelectedFacets();