Skip to content

Commit 4218a07

Browse files
committed
default filters and initPageLoad
1 parent 6abf467 commit 4218a07

File tree

1 file changed

+99
-33
lines changed

1 file changed

+99
-33
lines changed

unbxdSearch.js

Lines changed: 99 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,8 @@ var unbxdSearchInit = function(jQuery, Handlebars){
285285
inputSelector : '#search_query'
286286
,searchButtonSelector : '#search_button'
287287
,type : "search"
288-
,getCategoryId: ""
288+
,getCategoryId: ""
289+
,initPageLoad: true
289290
,spellCheck : '' //
290291
,spellCheckTemp : '<h3>Did you mean : {{suggestion}}</h3>'
291292
,searchQueryDisplay : ''
@@ -427,6 +428,8 @@ var unbxdSearchInit = function(jQuery, Handlebars){
427428
,rows : 0
428429
}
429430
}
431+
,defaultParams: {
432+
}
430433
,isHistory : !!(window.history && history.pushState)
431434
,popped : false //there is an edge case in Mozilla that fires popstate initially
432435
,initialURL : ''
@@ -449,22 +452,23 @@ var unbxdSearchInit = function(jQuery, Handlebars){
449452

450453
if(this.params.categoryId.length > 0){
451454
if(typeof this.options.setDefaultFilters == "function")
452-
this.options.setDefaultFilters.call(this);
455+
this.setDefaultParams(this.params);
453456

454457
this.setPage(1)
455458
.setPageSize(this.options.pageSize);
456459

457460
this.callResults(this.paintResultSet);
458461
}else if(this.options.type == "search" && this.input.value.trim().length){
459-
if(typeof this.options.setDefaultFilters == "function")
460-
this.options.setDefaultFilters.call(this);
462+
if(typeof this.options.setDefaultFilters == "function")
463+
this.setDefaultParams(this.params);
461464

462-
this.params.query = this.$input.val().trim();
465+
this.params.query = this.$input.val().trim();
463466

467+
if(this.options.initPageLoad)
464468
jQuery(this.options.searchResultContainer).html('');
465469

466-
this.setPage(1)
467-
.setPageSize(this.options.pageSize);
470+
this.setPage(1)
471+
.setPageSize(this.options.pageSize);
468472

469473
this.callResults(this.paintResultSet);
470474
}else{
@@ -484,11 +488,17 @@ var unbxdSearchInit = function(jQuery, Handlebars){
484488
finalParams = this._processURL(urlqueryparams);
485489
}
486490

491+
if(!this.options.initPageLoad
492+
&& finalParams.extra.hasOwnProperty('page')
493+
&& finalParams.extra.page > 1)
494+
finalParams.extra.page = finalParams.extra.page - 1;
495+
496+
487497
if(this.options.type == "search"){
488498
this.params = finalParams;
489499

490500
if(typeof this.options.setDefaultFilters == "function")
491-
this.options.setDefaultFilters.call(this);
501+
this.setDefaultParams(this.params);
492502

493503

494504
if(!("query" in this.params) || (this.params.query + "").trim().length == 0)
@@ -498,7 +508,8 @@ var unbxdSearchInit = function(jQuery, Handlebars){
498508

499509
this.$input.val(this.params.query != "*" ? this.params.query : "");
500510

501-
jQuery(this.options.searchResultContainer).html('');
511+
if(this.options.initPageLoad)
512+
jQuery(this.options.searchResultContainer).html('');
502513

503514
this.setPage("page" in finalParams.extra ? finalParams.extra.page : 1)
504515
.setPageSize("rows" in finalParams.extra ? finalParams.extra.rows : this.options.pageSize);
@@ -510,7 +521,7 @@ var unbxdSearchInit = function(jQuery, Handlebars){
510521
this.params = finalParams;
511522

512523
if(typeof this.options.setDefaultFilters == "function")
513-
this.options.setDefaultFilters.call(this);
524+
this.setDefaultParams(this.params);
514525

515526
this.setPage("page" in finalParams.extra ? finalParams.extra.page : 1)
516527
.setPageSize("rows" in finalParams.extra ? finalParams.extra.rows : this.options.pageSize);
@@ -534,10 +545,11 @@ var unbxdSearchInit = function(jQuery, Handlebars){
534545

535546
self.params.query = self.options.sanitizeQueryString.call(self, self.input.value);
536547

548+
if(self.options.initPageLoad)
537549
jQuery(self.options.searchResultContainer).html('');
538550

539551
if(typeof self.options.setDefaultFilters == "function")
540-
self.options.setDefaultFilters.call(self);
552+
self.setDefaultParams(self.params);
541553

542554
self.setPage(1)
543555
.setPageSize(self.options.pageSize)
@@ -554,10 +566,11 @@ var unbxdSearchInit = function(jQuery, Handlebars){
554566

555567
self.params.query = self.options.sanitizeQueryString.call(self, this.value );
556568

569+
if(self.options.initPageLoad)
557570
jQuery(self.options.searchResultContainer).html('');
558571

559572
if(typeof self.options.setDefaultFilters == "function")
560-
self.options.setDefaultFilters.call(self);
573+
self.setDefaultParams(self.params);
561574

562575
self.clearFilters(true).setPage(1)
563576
.setPageSize(self.options.pageSize)
@@ -575,6 +588,7 @@ var unbxdSearchInit = function(jQuery, Handlebars){
575588

576589
self.params.query = self.options.sanitizeQueryString.call(self, self.input.value);
577590

591+
if(self.options.initPageLoad)
578592
jQuery(self.options.searchResultContainer).html('');
579593

580594
self.clearFilters(true).setPage(1)
@@ -909,30 +923,54 @@ var unbxdSearchInit = function(jQuery, Handlebars){
909923
for(var x in this.params.filters){
910924
if(this.params.filters.hasOwnProperty(x)){
911925
var a = [];
926+
var b = [];
912927
for(var y in this.params.filters[x]){
913-
if(this.params.filters[x].hasOwnProperty(y)){
928+
if(this.defaultParams.hasOwnProperty('filters')
929+
&& this.defaultParams.filters.hasOwnProperty(x)
930+
&& this.defaultParams.filters[x].hasOwnProperty(y)
931+
&& this.params.filters[x].hasOwnProperty(y)){
932+
b.push((x+':\"'+ encodeURIComponent(y.replace(/\"/g, "\\\"")) +'\"').replace(/\"{2,}/g, '"'));
933+
} else if(this.params.filters[x].hasOwnProperty(y)){
914934
a.push((x+':\"'+ encodeURIComponent(y.replace(/\"/g, "\\\"")) +'\"').replace(/\"{2,}/g, '"'));
915935
}
916936
}
917937

918-
url += '&filter='+a.join(' OR ');
938+
if(a.length > 0)
939+
url += '&filter='+a.join(' OR ') + b.join(' OR ');
940+
else if(b.length > 0)
941+
nonhistoryPath += '&filter='+b.join(' OR ');
919942
}
920943
}
921944

922945
for(var x in this.params.ranges){
923946
var a = [];
947+
var b = [];
924948
for(var y in this.params.ranges[x]){
925-
if(this.params.ranges[x].hasOwnProperty(y)){
949+
if(this.defaultParams.hasOwnProperty('ranges')
950+
&& this.defaultParams.ranges.hasOwnProperty(x)
951+
&& this.defaultParams.ranges[x].hasOwnProperty(y)
952+
&& this.params.ranges[x].hasOwnProperty(y)){
953+
b.push(x + ':[' + this.params.ranges[x][y].lb + " TO " + this.params.ranges[x][y].ub + ']');
954+
}else if(this.params.ranges[x].hasOwnProperty(y)){
926955
a.push(x + ':[' + this.params.ranges[x][y].lb + " TO " + this.params.ranges[x][y].ub + ']');
927956
}
928957
}
929958

930-
url += '&filter='+a.join(' OR ');
959+
if(a.length > 0)
960+
url += '&filter='+a.join(' OR ') + b.join(' OR ');
961+
else if(b.length > 0)
962+
nonhistoryPath += '&filter='+b.join(' OR ');
931963
}
932964

933965
var a = [];
966+
var b = [];
934967
for(var field in this.params.sort){
935-
if (this.params.sort.hasOwnProperty(field)) {
968+
if(this.defaultParams.hasOwnProperty('sort')
969+
&& this.defaultParams.sort.hasOwnProperty(field)
970+
&& this.params.sort.hasOwnProperty(field)){
971+
var dir = this.params.sort[field] || 'desc';
972+
b.push(field + " " + dir);
973+
} else if (this.params.sort.hasOwnProperty(field)) {
936974
var dir = this.params.sort[field] || 'desc';
937975
a.push(field + " " + dir);
938976
}
@@ -941,6 +979,9 @@ var unbxdSearchInit = function(jQuery, Handlebars){
941979
if(a.length)
942980
url += '&sort='+a.join(',');
943981

982+
if(b.length)
983+
nonhistoryPath += '&sort='+b.join(',');
984+
944985

945986
for(var key in this.params.extra){
946987
if (this.params.extra.hasOwnProperty(key) && key != 'page') {
@@ -954,6 +995,8 @@ var unbxdSearchInit = function(jQuery, Handlebars){
954995
nonhistoryPath += '&' + key + '=' + encodeURIComponent(value);
955996
} else if(!this.isUsingPagination() && key === 'rows'){
956997
nonhistoryPath += '&' + key + '=' + encodeURIComponent(value);
998+
} else if(this.defaultParams.hasOwnProperty('extra') && this.defaultParams.extra.hasOwnProperty(key)){
999+
nonhistoryPath += '&' + key + '=' + encodeURIComponent(value);
9571000
} else
9581001
url += '&' + key + '=' + encodeURIComponent(value);
9591002
}
@@ -1023,12 +1066,14 @@ var unbxdSearchInit = function(jQuery, Handlebars){
10231066
});
10241067
}
10251068
,reset: function(){
1026-
this.totalNumberOfProducts = 0;
1027-
this.currentNumberOfProducts = 0;
1028-
jQuery(this.options.spellCheck).hide();
1029-
jQuery(this.options.searchQueryDisplay).empty();
1069+
this.totalNumberOfProducts = 0;
1070+
this.currentNumberOfProducts = 0;
1071+
jQuery(this.options.spellCheck).hide();
1072+
jQuery(this.options.searchQueryDisplay).empty();
1073+
if(this.options.initPageLoad)
10301074
jQuery(this.options.searchResultContainer).empty();
1031-
jQuery(this.options.facetContainerSelector).empty();
1075+
1076+
jQuery(this.options.facetContainerSelector).empty();
10321077

10331078
this.options.selectedFacetHolderSelector && jQuery(this.options.selectedFacetHolderSelector).hide();
10341079

@@ -1052,6 +1097,12 @@ var unbxdSearchInit = function(jQuery, Handlebars){
10521097

10531098
return this;
10541099
}
1100+
,setDefaultParams: function(params){
1101+
this.options.setDefaultFilters.call(this);
1102+
1103+
if(Object.keys(this.defaultParams).length === 0)
1104+
this.defaultParams = jQuery.extend(true, {}, this.params);
1105+
}
10551106
,_processURL: function(url){
10561107
var obj = typeof url == "string" ? this.getQueryParams(url) : url
10571108
,params = {
@@ -1153,6 +1204,9 @@ var unbxdSearchInit = function(jQuery, Handlebars){
11531204

11541205
if(obj.hasOwnProperty('didYouMean')){
11551206
if(obj.response.numberOfProducts == 0 ) { //> this.options.pageSize){
1207+
if(this.params.extra.page > 1)
1208+
this.params.extra.page = this.params.extra.page - 1;
1209+
11561210
this.params.query = obj.didYouMean[0].suggestion;
11571211

11581212
if(!this.compiledSpellCheckTemp)
@@ -1175,24 +1229,28 @@ var unbxdSearchInit = function(jQuery, Handlebars){
11751229
}
11761230
}else{
11771231
jQuery(this.options.spellCheck).hide();
1178-
jQuery(this.options.searchResultContainer).empty();
1232+
if(this.options.initPageLoad)
1233+
jQuery(this.options.searchResultContainer).empty();
11791234
this.paintProductPage(obj);
11801235
facetsAlso && this.paintFacets(obj);
11811236
}
11821237
}
11831238
,paintOnlyResultSet : function(obj){
1239+
if(this.options.initPageLoad)
11841240
jQuery(this.options.searchResultContainer).empty();
1185-
this.paintProductPage(obj);
1241+
this.paintProductPage(obj);
11861242
}
11871243
,paintAfterSpellCheck : function(obj){
1244+
if(this.options.initPageLoad)
11881245
jQuery(this.options.searchResultContainer).empty();
1189-
this.paintProductPage(obj);
1190-
this.paintFacets(obj);
1246+
this.paintProductPage(obj);
1247+
this.paintFacets(obj);
11911248
}
11921249
,paintAfterFacetChange : function(obj){
1250+
if(this.options.initPageLoad)
11931251
jQuery(this.options.searchResultContainer).empty();
1194-
this.paintProductPage(obj);
1195-
this.paintSelectedFacets();
1252+
this.paintProductPage(obj);
1253+
this.paintSelectedFacets();
11961254
}
11971255
,paintProductPage : function(obj){
11981256
if("error" in obj)
@@ -1343,17 +1401,20 @@ var unbxdSearchInit = function(jQuery, Handlebars){
13431401
if(this.options.bannerSelector.length === 0 )
13441402
return;
13451403
var banner = obj.banner;
1404+
var bannersToDraw = [];
13461405

13471406
if(!this.compiledBannerTemp)
13481407
this.compiledBannerTemp = Handlebars.compile(this.options.bannerTemp);
13491408

1350-
var bannersToDraw = banner.banners.slice(0, this.options.bannerCount)
1351-
.reduce(function(prev, curr){
1352-
return prev.concat(prev, this.compiledBannerTemp({
1409+
bannersToDraw = banner.banners.slice(0, this.options.bannerCount)
1410+
.reduce(function(prev, curr){
1411+
return prev.concat(this.compiledBannerTemp(
1412+
{
13531413
landingUrl: curr.landingUrl,
13541414
imageUrl: curr.imageUrl
1355-
}))
1356-
}.bind(this), []);
1415+
}
1416+
));
1417+
}.bind(this), []);
13571418

13581419
jQuery(this.options.bannerSelector).html(bannersToDraw.join(''));
13591420

@@ -1430,6 +1491,11 @@ var unbxdSearchInit = function(jQuery, Handlebars){
14301491

14311492
this.paintSelectedFacets();
14321493

1494+
if (!this.options.initPageLoad && this.params.extra.page > 1){
1495+
this.params.extra.page = this.params.extra.page - 1;
1496+
}
1497+
this.options.initPageLoad = true;
1498+
14331499
if (typeof this.options.onFacetLoad == "function") {
14341500
this.options.onFacetLoad.call(this, obj);
14351501
}

0 commit comments

Comments
 (0)