addsearch-search-ui
Version:
JavaScript library to develop Search UIs for the web
2 lines • 160 kB
JavaScript
/*! addsearch-search-ui 0.7.10 */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.AddSearchUI=t():e.AddSearchUI=t()}(this,(function(){return function(){var e={497:function(e,t,n){"use strict";e.exports=n(90).default,e.exports.AUTOCOMPLETE_TYPE=n(980).AUTOCOMPLETE_TYPE,e.exports.FILTER_TYPE=n(209).FILTER_TYPE,e.exports.SORTBY_TYPE=n(778).SORTBY_TYPE,e.exports.LOAD_MORE_TYPE=n(50).LOAD_MORE_TYPE,e.exports.RECOMMENDATION_TYPE=n(931).RECOMMENDATION_TYPE},640:function(e,t,n){"use strict";n.d(t,{AJ:function(){return S},Cn:function(){return k},ES:function(){return O},JD:function(){return m},NF:function(){return g},NY:function(){return h},PK:function(){return _},PU:function(){return y},QU:function(){return A},R8:function(){return a},SQ:function(){return p},T$:function(){return o},VP:function(){return d},WT:function(){return E},eP:function(){return b},fp:function(){return u},gK:function(){return P},ms:function(){return c},og:function(){return f},px:function(){return R},qN:function(){return v},t4:function(){return r},v1:function(){return w},vA:function(){return l},xl:function(){return i},zS:function(){return s}});var r="AUTOCOMPLETE_FETCH_START",i="AUTOCOMPLETE_SUGGESTIONS_RESULTS",a="AUTOCOMPLETE_CUSTOM_FIELDS_RESULTS",s="AUTOCOMPLETE_SUGGESTIONS_CLEAR",o="AUTOCOMPLETE_CUSTOM_FIELDS_CLEAR",c="AUTOCOMPLETE_SEARCH_RESULTS",l="AUTOCOMPLETE_SEARCH_CLEAR",u="AUTOCOMPLETE_SHOW",h="AUTOCOMPLETE_HIDE",f="AUTOCOMPLETE_HIDE_AND_DROP_RENDERING",p="HIDE_AUTOMATICALLY",d="KEYBOARD_EVENT",g="ARROW_UP",v="ARROW_DOWN",m="SET_ACTIVE_SUGGESTION",y="suggestions",S="custom_fields";function b(e,t){return t&&""!==t?function(n){n(x(y)),e.suggestions(t,(function(e){return n(function(e,t){return{type:i,keyword:e,results:t}}(t,e))}))}:{type:s}}function k(e,t,n){return t&&""!==t?function(r){r(x(S)),e.autocomplete(n,t,(function(e){return r({type:a,results:e})}))}:{type:o}}function E(e,t,n,r){return n&&""!==n?function(i){i(x(t)),e.search(n,(function(e){return i(function(e,t,n,r){return{type:c,keyword:e,results:t,jsonKey:n,appendResults:r}}(n,e,t,r))}))}:{type:l}}function x(e){return{type:r,jsonKey:e}}function _(){return{type:u}}function O(){return{type:h}}function P(){return{type:f}}function w(e){return{type:d,direction:e}}function A(e,t){return{type:m,index:e,setSuggestionToSearchField:t}}function R(e){return{type:p,hideAutomatically:e}}},234:function(e,t,n){"use strict";n.d(t,{S1:function(){return a},lW:function(){return s},o6:function(){return r},zt:function(){return i}});var r="SET_FIELD_STATS",i="CLEAR_FIELD_STATS";function a(e){return{type:r,fieldStats:e}}function s(){return{type:i}}},651:function(e,t,n){"use strict";n.d(t,{D5:function(){return m},D_:function(){return y},MO:function(){return l},Pu:function(){return d},RP:function(){return E},U7:function(){return s},WF:function(){return o},Wk:function(){return p},Xk:function(){return f},Y$:function(){return b},ZJ:function(){return a},_h:function(){return h},az:function(){return x},cT:function(){return g},dN:function(){return i},eU:function(){return k},fk:function(){return u},fr:function(){return c},m4:function(){return r},nw:function(){return v},w$:function(){return S},x_:function(){return _}});var r="TOGGLE_FILTER",i="SET_RANGE_FILTER",a="REGISTER_FILTER",s="SET_ACTIVE_FILTERS",o="SET_ACTIVE_FACETS",c="SET_ACTIVE_RANGE_FACETS",l="TOGGLE_FACET_FILTER",u="TOGGLE_HIERARCHICAL_FACET_FILTER",h="TOGGLE_RANGE_FACET_FILTER",f="CLEAR_SELECTED_FILTERS_AND_FACETS",p="CLEAR_SELECTED_RANGE_FACETS";function d(e){return{type:a,filterObj:e}}function g(e,t,n){return{type:r,filterName:e,value:t,refreshSearch:n}}function v(e,t,n){return{type:i,field:e,from:t,to:n}}function m(e){return{type:s,json:e}}function y(e){return{type:o,json:e}}function S(e){return{type:c,json:e}}function b(e,t,n){return{type:l,field:e,value:t,refreshSearch:n}}function k(e,t,n,r,i){return{type:u,field:e,container:t,confFields:n,value:r,refreshSearch:i}}function E(e,t,n,r,i){return{type:h,field:e,values:t,key:n,refreshSearch:r,byActiveFilterComponent:i}}function x(e,t){return{type:p,refreshSearch:e,setHistory:t}}function _(e,t){return{type:f,refreshSearch:e,byActiveFilterComponent:t}}},484:function(e,t,n){"use strict";n.d(t,{q:function(){return i},r:function(){return r}});var r="KEYWORD";function i(e,t,n,i){return{type:r,value:e,skipAutocomplete:t,searchFieldContainerId:n||null,setSearchFieldValue:i||!1}}},268:function(e,t,n){"use strict";n.d(t,{R:function(){return i},Y:function(){return a}});var r=n(266),i="SET_PAGE";function a(e,t,n,a){!1===n||e.getSettings().paging.page===t&&1!==t||(0,r.JB)(r.rS.PAGE,t+"",null,a);var s=e.getSettings().paging;return e.setPaging(t,s.pageSize,s.sortBy,s.sortOrder),{type:i,page:t}}},880:function(e,t,n){"use strict";n.d(t,{E5:function(){return o},bD:function(){return a},l8:function(){return s},r5:function(){return i}});n(90),n(266);var r=n(292),i="FETCH_RECO_FBT",a="CLEAR_RECOMMENDATION";function s(e,t){return function(n){if(t.type===r.Q)e.recommendations(t,(function(e){var r;n((r=t.container,{type:i,container:r,recommendType:"frequently-bought-together",results:e}))}))}}function o(){return{type:a}}},762:function(e,t,n){"use strict";n.d(t,{BL:function(){return f},EV:function(){return l},L5:function(){return c},Ug:function(){return d},WE:function(){return g},Zs:function(){return h},fP:function(){return u},tj:function(){return o},yC:function(){return p}});var r=n(90),i=n(266),a=n(410);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}var o="START",c="SET_SEARCH_RESULTS_PAGE_URL",l="SEARCH_FETCH_START",u="SEARCH_RESULTS",h="CLEAR_SEARCH_RESULTS";function f(){return{type:o}}function p(e,t,n,o,c,f,p,d,g){return(0,i.JB)(i.rS.SEARCH,t,c,f),t&&""!==t?function(i){i({type:l}),e.search(t,(function(l){if((g||p)&&l&&l.hits&&l.hits.length){var h=(g||p).replace("custom_fields.",""),f=function(e,t,n){return t.find((function(t){if(!t.custom_fields||!t.custom_fields[n])return!1;if("string"==typeof t.custom_fields[n])return e.toLowerCase()===t.custom_fields[n].toLowerCase();if("object"===s(t.custom_fields[n])&&t.custom_fields[n].length){var r=t.custom_fields[n].map((function(e){return e.toLowerCase()})),i=e.toLowerCase();return r.indexOf(i)>-1}return!1}))}(t,l.hits,h);if(f&&!c)return void window.location.replace(f.url)}i(function(e,t,n,i,s,o){if(/top-delay-\d*$/.test(i)){var c=parseInt(i.replace("top-delay-",""),10);window.setTimeout((function(){window.scrollTo(0,0)}),c)}else"top"===i&&window.scrollTo(0,0);if(t&&-1===t.indexOf(r.o)){var l=n?n.total_hits:0,h=n?n.processing_time_ms:0;(0,a.WW)(e,t,l,h)}return{type:u,keyword:t,results:n,appendResults:s,requestBy:o}}(e,t,l,n,o,d))}))}:{type:h}}function d(e){return"top"===e&&window.scrollTo(0,0),{type:h}}function g(e){return{type:c,url:e}}},932:function(e,t,n){"use strict";n.d(t,{SM:function(){return a},cR:function(){return s},j0:function(){return i},s8:function(){return r}});var r="SEGMENTED_SEARCH_START",i="SEGMENTED_SEARCH_RESULTS",a="CLEAR_SEGMENTED_SEARCH_RESULTS";function s(e,t,n){return n&&""!==n?function(a){a(function(e){return{type:r,jsonKey:e}}(t)),e.search(n,(function(e){return a(function(e,t,n){return{type:i,jsonKey:e,keyword:t,results:n}}(t,n,e))}))}:{type:a}}},306:function(e,t,n){"use strict";n.d(t,{MR:function(){return s},jo:function(){return a},mh:function(){return i}});var r=n(266),i="SORTBY",a="desc";function s(e,t,n,a){a&&(0,r.JB)(r.rS.SORTBY,JSON.stringify({field:t,order:n}),null,a);var s=e.getSettings().paging;return e.setPaging(1,s.pageSize,t,n),{type:i,field:t,order:n}}},980:function(e,t,n){"use strict";n.d(t,{AUTOCOMPLETE_TYPE:function(){return g},Z:function(){return d}});var r=n(177),i=n.n(r),a=n(640),s=n(762),o=n(484),c=n(445),l=n(47),u=n(410),h=n(266),f=n(514);function p(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var d=function(){function e(t,n,r){var s=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.conf=r,this.lastOnmouseOver=null,!1===this.conf.hideAutomatically&&this.reduxStore.dispatch((0,a.px)(!1));var o=this.conf.categorySelectionFunction||f._P;i().registerHelper("selectSearchResultCategory",(function(e){return o(e,s.conf.categoryAliases)})),(0,l.g)(r.containerId)&&((0,c.D)(this.reduxStore,"autocomplete",(function(e){return s.autocompleteResultsChanged(e)})),(0,c.D)(this.reduxStore,"keyword",(function(e){return s.keywordChanged(e)}))),r.infiniteScrollElement&&this.conf.infiniteScrollElement.addEventListener("scroll",(function(){return s.onScroll()})),r.sources&&r.sources.length&&r.sources.forEach((function(e){e.client&&e.client.setCollectAnalytics(!1)}))}var t,n,r;return t=e,n=[{key:"autocompleteResultsChanged",value:function(e){0===e.pendingRequests.length&&(e.keyword&&""!==e.keyword&&this.sendSearchAnalytics(e),this.render(e))}},{key:"sendSearchAnalytics",value:function(e){var t=this,n=[];this.conf.sources.forEach((function(r){if(r.type===g.SEARCH&&r.collectSearchAnalytics){var i=r.client||t.client,a=e.searchResultsStats[r.jsonKey]?e.searchResultsStats[r.jsonKey].total_hits:0;n.push({client:i,numberOfResults:a})}})),(0,u.hb)(e.keyword,n)}},{key:"keywordChanged",value:function(e){var t=this,n=!1===e.skipAutocomplete?e.value:null;""===n&&this.reduxStore.dispatch((0,a.gK)()),this.conf.sources.forEach((function(e){var r=e.client||t.client;if(e.type===g.SUGGESTIONS)t.reduxStore.dispatch((0,a.eP)(r,n));else if(e.type===g.CUSTOM_FIELDS)t.reduxStore.dispatch((0,a.Cn)(r,n,e.field));else if(e.type===g.SEARCH){var i=r.getSettings().paging;r.setPaging(1,i.pageSize,i.sortBy,i.sortOrder),t.reduxStore.dispatch((0,a.WT)(r,e.jsonKey,n))}}))}},{key:"loadMore",value:function(e){var t=this;this.conf.sources.forEach((function(n){var r=n.client;r&&n.type===g.SEARCH&&(r.nextPage(),t.reduxStore.dispatch((0,a.WT)(r,n.jsonKey,e,!0)))}))}},{key:"render",value:function(e){var t=this;if(e.dropRendering&&this.renderedHtml)return document.getElementById(this.conf.containerId).innerHTML="",void(this.renderedHtml="");if(0===e.pendingRequests.length&&!e.dropRendering){if(!1===e.visible)return document.getElementById(this.conf.containerId).innerHTML="",void(this.renderedHtml="");var n=e.suggestions,r=e.customFields,a=e.searchResults,s={activeSuggestionIndex:e.activeSuggestionIndex,suggestions:n,customFields:r,searchResults:a},o=i().compile(this.conf.template||'\n <div class="addsearch-autocomplete">\n {{#gt suggestions.length 0}}\n <ul class="suggestions">\n {{#each ../suggestions}}\n <li data-keyword="{{value}}" data-index="{{@index}}" {{#equals ../../activeSuggestionIndex @index}}class="active"{{/equals}}>\n {{value}}\n </li>\n {{/each}}\n </ul>\n {{/gt}}\n {{#gt customFields.length 0}}\n <ul class="suggestions">\n {{#each ../customFields}}\n <li data-keyword="{{value}}" data-index="{{@index}}" {{#equals ../../activeSuggestionIndex @index}}class="active"{{/equals}}>\n {{value}}\n </li>\n {{/each}}\n </ul>\n {{/gt}}\n </div>\n')(s);if(this.renderedHtml!==o){var c=document.getElementById(this.conf.containerId);c.innerHTML=o,this.renderedHtml=o;for(var l=c.querySelector(".suggestions")?c.querySelectorAll(".suggestions > li"):[],h=c.querySelectorAll(".suggestions"),f=0;f<l.length;f++)l[f].onmousedown=function(e){return t.suggestionMouseDown(e)},h.length<=1&&(l[f].onmouseenter=function(e){return t.suggestionMouseEnter(e)});if(a[Object.keys(a)[0]]){var p=c.querySelectorAll("[data-analytics-click]"),d=null;this.conf.sources.forEach((function(e){e.type===g.SEARCH&&(d||(d=e.client))})),d||(d=this.client),(0,u.Qc)(d,p,{hits:a[Object.keys(a)[0]]})}this.conf.infiniteScrollElement&&!e.appendResults&&(this.conf.infiniteScrollElement.scrollTop=0),this.conf.onShow&&this.conf.onShow(c)}}}},{key:"suggestionMouseDown",value:function(e){var t=e.target.getAttribute("data-keyword"),n=this.reduxStore;n.dispatch((0,o.q)(t,!0,null,!0));var r=n.getState().search.searchResultsPageUrl;r?(0,h.Rl)(r,t):n.dispatch((0,s.yC)(this.client,t,null,null,null,n))}},{key:"suggestionMouseEnter",value:function(e){var t=parseInt(e.target.getAttribute("data-index"),10);null!==t&&t!==this.lastOnmouseOver&&(this.lastOnmouseOver=t,this.reduxStore.dispatch((0,a.QU)(t,!1)))}},{key:"onScroll",value:function(){if(0===this.reduxStore.getState().autocomplete.pendingRequests.length){var e=this.conf.infiniteScrollElement;if(e.scrollHeight>0&&Math.ceil(e.offsetHeight+e.scrollTop)>=e.scrollHeight){var t=this.reduxStore.getState().keyword.value;this.loadMore(t)}}}}],n&&p(t.prototype,n),r&&p(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),g={SEARCH:"SEARCH",SUGGESTIONS:"SUGGESTIONS",CUSTOM_FIELDS:"CUSTOM_FIELDS"}},209:function(e,t,n){"use strict";n.d(t,{FILTER_TYPE:function(){return f},Z:function(){return h}});var r=n(177),i=n.n(r),a=n(445),s=n(651),o=n(306),c=n(47);function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var u="nofilter",h=function(){function e(t,n,r){var i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.conf=r,this.activeFilter=null,(0,c.g)(r.containerId)&&(this.reduxStore.dispatch((0,s.Pu)(this.conf)),(0,a.D)(this.reduxStore,"filters",(function(e){return i.render(e)})),this.conf.type===f.RANGE&&(0,a.D)(this.reduxStore,"search",(function(e){return i.searchResultsChanged(e)})))}var t,n,r;return t=e,n=[{key:"searchResultsChanged",value:function(e){!e.loading&&e.results.fieldStats&&e.results.fieldStats[this.conf.field]&&this.render(this.reduxStore.getState().filters)}},{key:"render",value:function(e){var t=this,n=Object.assign({},this.conf);this.activeFilter=null;var r=!1;for(var a in n.options)e.activeFilters[a]?(n.options[a].active=!0,this.activeFilter=a,r=!0):n.options[a].active=!1;!r&&n.options&&n.options[u]&&(n.options[u].active=!0);var o=null;if(this.conf.type===f.TABS)o='\n <div class="addsearch-filters-tabs">\n <div class="tabs">\n {{#each options}}\n <button data-filter="{{@key}}" {{#if active}}class="active"{{/if}}>{{label}}</button>\n {{/each}}\n </div>\n </div>\n';else if(this.conf.type===f.TAGS)o='\n <div class="addsearch-filters-tags">\n {{#each options}}\n <button data-filter="{{@key}}" {{#if active}}class="active"{{/if}}>{{label}}</button>\n {{/each}}\n </div>\n';else if(this.conf.type===f.CHECKBOX_GROUP)o='\n <div class="addsearch-filters-checkboxgroup">\n {{#each options}}\n <label>\n <input type="checkbox" data-filter="{{@key}}" {{#if active}}checked{{/if}}>{{label}}\n </label>\n {{/each}}\n </div>\n';else if(this.conf.type===f.RADIO_GROUP)o='\n <div class="addsearch-filters-radiogroup">\n {{#each options}}\n <label>\n <input type="radio" name={{../containerId}} value="{{@key}}" {{#if active}}checked{{/if}}>{{label}}\n </label>\n {{/each}}\n </div>\n';else if(this.conf.type===f.SELECT_LIST)o='\n <div class="addsearch-filters-selectlist">\n <select>\n {{#each options}}\n <option value="{{@key}}" {{#if active}}selected{{/if}}>{{label}}</option>\n {{/each}}\n </select>\n </div>\n';else if(this.conf.type===f.RANGE){e.activeRangeFilters[this.conf.field]&&(n.from=e.activeRangeFilters[this.conf.field].gte,n.to=e.activeRangeFilters[this.conf.field].lte);var l=this.reduxStore.getState().search.results;if(l&&l.fieldStats&&l.fieldStats[this.conf.field]){var h=l.fieldStats[this.conf.field],p=h.min,d=h.max;n.fromPlaceholder="Infinity"===p?"":p,n.toPlaceholder="-Infinity"===d?"":d}o='\n <div class="addsearch-filters-range">\n <label>{{label}}</label>\n <input type="text" name="from" value="{{from}}" placeholder="{{fromPlaceholder}}"> - <input type="text" name="to" value="{{to}}" placeholder="{{toPlaceholder}}">\n {{#or from to}}<button>×</button>{{/or}}\n </div>\n'}var g=i().compile(this.conf.template||o)(n);if(this.renderedHtml!==g){var v=document.getElementById(this.conf.containerId);if(v.innerHTML=g,this.renderedHtml=g,this.conf.type===f.SELECT_LIST)v.querySelector("select").addEventListener("change",(function(e){return t.singleActiveChangeEvent(e.target.value)}));else if(this.conf.type===f.TABS)for(var m=v.querySelectorAll("[data-filter]"),y=0;y<m.length;y++)m[y].addEventListener("click",(function(e){return t.singleActiveChangeEvent(e.target.getAttribute("data-filter"))}));else if(this.conf.type===f.RADIO_GROUP)for(var S=v.querySelectorAll("input"),b=0;b<S.length;b++)S[b].addEventListener("click",(function(e){return t.singleActiveChangeEvent(e.target.value)}));else this.conf.type===f.RANGE?this.attachRangeFilterEvents(v):(0,c.$)(v,"data-filter","click",(function(e){t.reduxStore.dispatch((0,s.cT)(e,1))}))}}},{key:"singleActiveChangeEvent",value:function(e){var t=e===u,n=this.reduxStore;e!==this.activeFilter&&(this.conf.setSorting&&n.dispatch((0,o.MR)(this.client,this.conf.setSorting.field,this.conf.setSorting.order,this.reduxStore)),!0===this.conf.clearOtherFilters?n.dispatch((0,s.x_)(t)):this.activeFilter&&n.dispatch((0,s.cT)(this.activeFilter,1,t)),t?this.activeFilter=null:(this.activeFilter=e,n.dispatch((0,s.cT)(e,1,!0))))}},{key:"attachRangeFilterEvents",value:function(e){for(var t=this,n=e.querySelectorAll("input"),r=0;r<n.length;r++)n[r].addEventListener("change",(function(n){t.conf.validator&&!new RegExp(t.conf.validator).test(n.target.value)?n.target.setAttribute("data-valid","false"):(n.target.setAttribute("data-valid","true"),t.rangeChangeEvent(t.conf.field,e.querySelector('input[name="from"]').value,e.querySelector('input[name="to"]').value))}));var i=e.querySelector("button");i&&i.addEventListener("click",(function(e){return t.reduxStore.dispatch((0,s.nw)(t.conf.field,null,null))}))}},{key:"rangeChangeEvent",value:function(e,t,n){var r=""!==t?t:null,i=""!==n?n:null;this.reduxStore.dispatch((0,s.nw)(e,r,i))}}],n&&l(t.prototype,n),r&&l(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),f={CHECKBOX_GROUP:"CHECKBOX_GROUP",RADIO_GROUP:"RADIO_GROUP",SELECT_LIST:"SELECT_LIST",RANGE:"RANGE",TABS:"TABS",TAGS:"TAGS"}},50:function(e,t,n){"use strict";n.d(t,{LOAD_MORE_TYPE:function(){return h},Z:function(){return u}});var r=n(177),i=n.n(r),a=n(268),s=n(762),o=n(445),c=n(47);function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var u=function(){function e(t,n,r){var i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.conf=r,(0,c.g)(r.containerId)&&(0,o.D)(this.reduxStore,"search",(function(e){return i.render(e)})),r.type===h.INFINITE_SCROLL&&this.conf.infiniteScrollElement.addEventListener("scroll",(function(){return i.onScroll()}))}var t,n,r;return t=e,(n=[{key:"render",value:function(e){var t=this,n=e.results.page||1,r=this.client.getSettings().paging.pageSize,a=e.results.total_hits||0,s=Math.ceil(a/r),o={type:this.conf.type,hasMorePages:n<s,isLoading:e.loading,totalHits:a},c=i().compile(this.conf.template||'\n <div class="addsearch-loadmore">\n {{#if isLoading}}\n {{#gt totalHits 0}}\n <span>Loading more..</span>\n {{/gt}}\n {{else if hasMorePages}}\n {{#equals type "BUTTON"}}\n <button>Load more</button>\n {{/equals}}\n {{#equals type "INFINITE_SCROLL"}}\n <span class="loadmore-infinite-scroll"></span>\n {{/equals}}\n {{/if}}\n </div>\n')(o);if(this.renderedHtml!==c){var l=document.getElementById(this.conf.containerId);if(l.innerHTML=c,this.renderedHtml=c,this.conf.type===h.BUTTON){var u=l.querySelector("button");u&&(u.onclick=function(e){return t.loadMore()})}else this.conf.type===h.INFINITE_SCROLL&&this.conf.infiniteScrollElement.tagName&&1===e.results.page&&!e.loading&&(this.conf.infiniteScrollElement.scrollTop=0)}}},{key:"loadMore",value:function(){var e=(this.reduxStore.getState().pagination.page||1)+1;this.reduxStore.dispatch((0,a.Y)(this.client,e,!1,this.reduxStore));var t=this.reduxStore.getState().keyword.value;this.reduxStore.dispatch((0,s.yC)(this.client,t,null,!0,null,this.reduxStore,null,"component.loadMore"))}},{key:"onScroll",value:function(){var e=this.reduxStore.getState().search.loading,t=document.querySelector("#"+this.conf.containerId+" .loadmore-infinite-scroll");if(!e&&t)if(this.conf.infiniteScrollElement.tagName){var n=this.conf.infiniteScrollElement;Math.ceil(n.offsetHeight+n.scrollTop)>=n.scrollHeight&&this.loadMore()}else{var r=window.innerHeight,i=t.getBoundingClientRect().top;i>0&&i<r&&this.loadMore()}}}])&&l(t.prototype,n),r&&l(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),h={BUTTON:"BUTTON",INFINITE_SCROLL:"INFINITE_SCROLL"}},931:function(e,t,n){"use strict";n.d(t,{RECOMMENDATION_TYPE:function(){return i},Z:function(){return r.Z}});var r=n(292),i={FREQUENTLY_BOUGHT_TOGETHER:"FREQUENTLY_BOUGHT_TOGETHER"}},292:function(e,t,n){"use strict";n.d(t,{Q:function(){return l},Z:function(){return u}});var r=n(177),i=n.n(r),a=n(445),s=n(47),o=n(880);function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var l="FREQUENTLY_BOUGHT_TOGETHER",u=function(){function e(t,n,r,i){var o=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.conf=r,this.reduxStore=n,i.push(r),(0,s.g)(r.containerId)&&(0,a.D)(this.reduxStore,"recommendation",(function(e){e.container===r.containerId&&o.render(e)}))}var t,n,r;return t=e,(n=[{key:"render",value:function(e){var t=e.results||{},n=this.conf.template||'\n <div class="addsearch-recommendations">\n {{#each hits}}\n <div class="hit">\n <div class="hit-top"> \n <span class="main-image" style="background-image: url(data:image/jpeg;base64,{{images.main_b64}})">\n <a href="{{url}}">\n <img src="{{images.main}}" alt="{{title}}" />\n </a> \n </span> \n <h3>\n <a href="{{url}}">{{title}}</a>\n </h3>\n </div>\n <div class="hit-bottom">\n <div class="highlight-content">\n {{{highlight}}}\n </div> \n \n </div>\n </div>\n {{/each}}\n </div>\n',r=i().compile(n)(t);this.renderedHtml!==r&&(document.getElementById(this.conf.containerId).innerHTML=r,this.renderedHtml=r,this.reduxStore.dispatch((0,o.E5)()))}}])&&c(t.prototype,n),r&&c(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}()},778:function(e,t,n){"use strict";n.d(t,{SORTBY_TYPE:function(){return f},Z:function(){return h}});var r=n(177),i=n.n(r),a=n(306),s=n(762),o=n(268),c=n(445),l=n(47);function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var h=function(){function e(t,n,r){var i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.conf=r,this.reduxStore=n,(0,l.g)(r.containerId)&&(0,c.D)(this.reduxStore,"sortby",(function(e){return i.render(e)}))}var t,n,r;return t=e,(n=[{key:"onChangeSelect",value:function(e){var t=e.options[e.selectedIndex],n=t.getAttribute("data-field"),r=t.getAttribute("data-order");this.dispatchAndRefresh(n,r)}},{key:"onChangeRadio",value:function(e){var t=e.target.getAttribute("data-field"),n=e.target.getAttribute("data-order");this.dispatchAndRefresh(t,n)}},{key:"dispatchAndRefresh",value:function(e,t){var n=e.split(","),r=t.split(",");this.reduxStore.dispatch((0,a.MR)(this.client,n,r,this.reduxStore)),this.reduxStore.dispatch((0,o.Y)(this.client,1,null,this.reduxStore));var i=this.reduxStore.getState().keyword.value;this.reduxStore.dispatch((0,s.yC)(this.client,i,null,null,null,this.reduxStore,null,"component.sortby"))}},{key:"render",value:function(e){var t=this,n=e.field,r=e.order,a=null;a=this.conf.template?this.conf.template:this.conf.type===f.RADIO_GROUP?'\n <div class="addsearch-sortby-radiogroup">\n {{#each options}}\n <label>\n <input type="radio" name={{../containerId}} data-field={{sortBy}} data-order={{order}} value="" {{#if active}}checked{{/if}}>{{label}}\n </label>\n {{/each}}\n </div>\n':'\n <div class="addsearch-sortby"> \n <select>\n {{#each options}}\n <option data-field={{sortBy}} data-order={{order}} {{#if active}}selected="selected"{{/if}}>{{label}}</option>\n {{/each}}\n </select>\n </div>\n';var s=Object.assign({},this.conf);s.options.forEach((function(e){e.sortBy===n&&e.order===r?e.active=!0:e.active=!1}));var o=i().compile(a)(s);if(this.renderedHtml!==o){var c=document.getElementById(this.conf.containerId);if(c.innerHTML=o,this.renderedHtml=o,this.conf.type===f.RADIO_GROUP)for(var l=c.querySelectorAll("input"),u=0;u<l.length;u++)l[u].onclick=function(e){return t.onChangeRadio(e)};else if(c.querySelector("select").onchange=function(e){return t.onChangeSelect(e.target)},e)for(var h=c.getElementsByTagName("option"),p=0;p<h.length;p++)if(h[p].getAttribute("data-field")===n&&h[p].getAttribute("data-order")===r){c.querySelector("select").value=h[p].text;break}}}}])&&u(t.prototype,n),r&&u(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),f={SELECT_LIST:"SELECT_LIST",RADIO_GROUP:"RADIO_GROUP"}},90:function(e,t,n){"use strict";n.d(t,{B:function(){return le},o:function(){return ce},default:function(){return ue}});var r=n(91),i=n.n(r),a=n(177),s=n.n(a),o=n(651),c=n(47),l=n(445);function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var h="FILTER",f="RANGE_FILTER",p="FACET",d="RANGE_FACET",g="HIERARCHICAL_FACET",v=function(){function e(t,n,r){var i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.conf=r,this.reduxStore=n,(0,c.g)(r.containerId)&&(0,l.D)(this.reduxStore,"filters",(function(e){return i.render(e)}))}var t,n,r;return t=e,(n=[{key:"getFilterLabel",value:function(e,t){for(var n=0;n<t.length;n++)if(t[n][e])return t[n][e].label}},{key:"emptyIfNull",value:function(e){return null==e?"":e}},{key:"render",value:function(e){var t=this,n=[];for(var r in e.activeFilters)n.push({type:h,name:r,value:e.activeFilters[r],label:this.getFilterLabel(r,e.allAvailableFilters)});for(var i in e.activeRangeFilters){var a=e.activeRangeFilters[i];n.push({type:f,name:i,label:this.getFilterLabel(i,e.allAvailableFilters)+": "+this.emptyIfNull(a.gte)+"-"+this.emptyIfNull(a.lte)})}for(var c in e.activeFacets)if("category"===c||0===c.indexOf("custom_fields."))for(var l in e.activeFacets[c])n.push({name:c,type:p,value:l,label:l.replace(/^[0-9]+[x]{1}/,"")});for(var u in e.activeHierarchicalFacets)for(var v in e.activeHierarchicalFacets[u])for(var m in e.activeHierarchicalFacets[u][v])n.push({name:v,type:g,container:u,value:m,label:m});for(var y in e.activeRangeFacets)for(var S in e.activeRangeFacets[y])n.push({name:y,type:d,value:S,label:S,rangeMin:e.activeRangeFacets[y][S].gte,rangeMax:e.activeRangeFacets[y][S].lt});var b={active:n,clearAll:!1!==this.conf.clearAll},k=s().compile(this.conf.template||'\n <div class="addsearch-active-filters"> \n {{#each active}}\n <div class="item">\n <span>{{label}}</span>\n <button data-type="{{type}}" data-name="{{name}}" data-value="{{value}}" \n {{#if rangeMin}}data-range-min="{{rangeMin}}"{{/if}} \n {{#if rangeMax}}data-range-max="{{rangeMax}}"{{/if}} \n {{#if container}}data-container="{{container}}"{{/if}} \n {{#if confFields}}data-conf-fields="{{confFields}}"{{/if}} >×</button>\n </div>\n {{/each}}\n {{#if clearAll}}\n {{#gt active.length 1}}\n <div class="item"><button data-clearall="true">Clear all</button></div>\n {{/gt}}\n {{/if}}\n </div>\n')(b);if(this.renderedHtml!==k){var E=document.getElementById(this.conf.containerId);E.innerHTML=k,this.renderedHtml=k;for(var x=E.querySelectorAll("[data-type]"),_=0;_<x.length;_++)x[_].addEventListener("click",(function(e){return t.handleFilterClick(e)}));var O=E.querySelector("[data-clearall]");O&&O.addEventListener("click",(function(e){return t.reduxStore.dispatch((0,o.x_)(!0,!0))}))}}},{key:"handleFilterClick",value:function(e){var t=e.target.getAttribute("data-type"),n=e.target.getAttribute("data-name"),r=e.target.getAttribute("data-value"),i=e.target.getAttribute("data-container"),a=e.target.getAttribute("data-conf-fields")?e.target.getAttribute("data-conf-fields").split(","):[],s=e.target.getAttribute("data-range-min"),c=e.target.getAttribute("data-range-max");if(t===h)this.reduxStore.dispatch((0,o.cT)(n,r,!0));else if(t===f)this.reduxStore.dispatch((0,o.nw)(n,null,null));else if(t===p)this.reduxStore.dispatch((0,o.Y$)(n,r));else if(t===g)this.reduxStore.dispatch((0,o.eU)(n,i,a,r,!0));else if(t===d){var l={min:s,max:c};this.reduxStore.dispatch((0,o.RP)(n,l,r,!0,!0))}}}])&&u(t.prototype,n),r&&u(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),m=n(980),y=n(762),S=n(268),b=n(266),k=n(932);function E(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e,t,n){var r={and:[]};t&&r.and.push(t);var i={};for(var a in e.allAvailableFilters.forEach((function(t){var n={or:[]};for(var a in t)e.activeFilters[a]&&!i[a]&&(n.or.push(t[a].filter),i[a]=!0);n.or.length>0&&r.and.push(n)})),e.activeRangeFilters)r.and.push({range:x({},a,Object.assign({},e.activeRangeFilters[a]))});for(var s in e.activeFacets){var o={or:[]};for(var c in e.activeFacets[s])if(s!==n){var l={};l[s]=c,o.or.push(l)}o.or.length>0&&r.and.push(o)}for(var u in e.activeHierarchicalFacets){var h={or:[]};for(var f in e.activeHierarchicalFacets[u])for(var p in e.activeHierarchicalFacets[u][f])if(!n||-1===n.indexOf(f)){var d={};d[f]=p,h.or.push(d)}h.or.length>0&&r.and.push(h)}for(var g in e.activeRangeFacets){var v={or:[]};for(var m in e.activeRangeFacets[g])if(g!==n){var y={range:x({},g,e.activeRangeFacets[g][m])};v.or.push(y)}v.or.length>0&&r.and.push(v)}return r.and.length>0?r:{}}var O=function(){function e(t,n,r,i,a,s){var o=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.createFilterObjectFunction=r,this.onFilterChange=i,this.segmentedSearchClients=s,(0,l.D)(this.reduxStore,"filters",(function(e){return o.onFilterStateChange(e,a)}))}var t,n,r;return t=e,(n=[{key:"onFilterStateChange",value:function(e,t){if(e.refreshSearch){(0,b.JB)(b.rS.FILTERS,(0,b.kb)(e.activeFilters),null,this.reduxStore),(0,b.JB)(b.rS.FACETS,(0,b.kb)(e.activeFacets),null,this.reduxStore),(0,b.JB)(b.rS.RANGE_FACETS,(0,b.kb)(e.activeRangeFacets),null,this.reduxStore);var n=this.createFilterObjectFunction(e,t);this.client.setFilterObject(n);var r=this.reduxStore.getState().keyword.value;for(var i in this.reduxStore.dispatch((0,S.Y)(this.client,1,null,this.reduxStore)),this.reduxStore.dispatch((0,y.yC)(this.client,r,null,null,null,this.reduxStore,null,e.targetFacetGroup)),this.segmentedSearchClients){var a=this.createFilterObjectFunction(e,this.segmentedSearchClients[i].originalFilters);this.segmentedSearchClients[i].client.setFilterObject(a),this.reduxStore.dispatch((0,k.cR)(this.segmentedSearchClients[i].client,i,r))}}else if(e.setHistory){var s=this.createFilterObjectFunction(e,t);this.client.setFilterObject(s),(0,b.JB)(b.rS.RANGE_FACETS,(0,b.kb)(e.activeRangeFacets),null,this.reduxStore)}this.onFilterChange&&this.onFilterChange(e.activeFilters)}}])&&E(t.prototype,n),r&&E(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function P(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var w=function(){function e(t,n,r,i){var a=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.conf=r;var s=["component.loadMore","component.pagination","component.sortby"];(0,c.g)(r.containerId)&&(0,l.D)(this.reduxStore,"search",(function(e){var n,r=a.reduxStore.getState().filters.activeFacets;if(!(e.loading||s.indexOf(e.callBy)>-1))if((n=r[a.conf.field])&&0!==Object.keys(n).length&&a.conf.advancedSticky){var o=_(a.reduxStore.getState().filters,i,a.conf.field);e.callBy!==a.conf.field&&t.fetchCustomApi(a.conf.field,o,(function(e){a.render(e,!0)}))}else a.render(e)}))}var t,n,r;return t=e,n=[{key:"setFilter",value:function(e){this.reduxStore.dispatch((0,o.Y$)(this.conf.field,e,!0))}},{key:"render",value:function(e,t){var n=this;if(!e.loading){var r=this.conf.field,i=t?e:e.results,a=[];i&&i.facets&&i.facets[r]&&(a=i.facets[r]);var o=this.getActiveFacets(r);!0!==this.conf.sticky||this.conf.advancedSticky||(this.keyword===e.keyword&&this.stickyFacets&&0!==o.length?a=this.stickyFacets:(this.keyword=e.keyword,this.stickyFacets=a)),this.conf.facetsFilter&&(a=this.conf.facetsFilter(a));var c={conf:this.conf,facets:a},l=s().compile(this.conf.template||'\n <div class="addsearch-facets">\n <ul>\n {{#each facets}}\n <li data-facet="{{value}}">\n <label>\n <input type="checkbox" value="{{value}}" /><span>{{value}}</span> <em>({{count}})</em>\n </label>\n </li>\n {{/each}}\n </ul>\n </div>\n')(c);if(this.renderedHtml!==l||o!==this.renderedActiveFacets){this.renderedActiveFacets=o;var u=document.getElementById(this.conf.containerId);u.innerHTML=l,this.renderedHtml=l;for(var h=u.getElementsByTagName("input"),f=0;f<h.length;f++){var p=h[f];p.checked=-1!==o.indexOf(p.value),p.onchange=function(e){n.setFilter(e.target.value,e.target.checked)}}}}}},{key:"getActiveFacets",value:function(e){var t=[],n=this.reduxStore.getState().filters.activeFacets;if(n[e])for(var r in n[e])t.push(r);return t}}],n&&P(t.prototype,n),r&&P(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),A='\n <li>\n <div class="adds-facet-wrap {{#if (validateOpenState value)}}shrink{{/if}}" data-facet="{{value}}">\n <div class="adds-facet-container">\n <span class="addsearch-facet-group-expansion-arrow {{#unless children}}adds-visibility-hidden{{/unless}}"></span>\n <label title="{{displayValue}}({{count}})">\n <input type="checkbox" value="{{value}}" data-field="{{field}}" />\n <span>{{displayValue}}</span> <em>({{count}})</em>\n </label>\n </div>\n {{#if children}}\n <ul class="addsearch-facet-child-container">\n {{#each children}}\n {{> subHierarchicalFacetsTemplate this }}\n {{/each}}\n </ul>\n {{/if}}\n </div>\n </li>\n';function R(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var C=function(){function e(t,n,r,i){var a=this;function o(e,t){var n=!0;return e?(t.forEach((function(t){var r;(r=e[t])&&0!==Object.keys(r).length&&(n=!1)})),n):n}!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.conf=r;var u=["component.loadMore","component.pagination","component.sortby"];s().registerPartial("subHierarchicalFacetsTemplate",this.conf.template_subHierarchicalFacetsTemplate||A),s().registerHelper("validateOpenState",(function(e){return-1===n.getState().filters.openedHierarchicalFacetGroups.indexOf(e)})),(0,c.g)(r.containerId)&&(0,l.D)(this.reduxStore,"search",(function(e){var n=a.reduxStore.getState().filters.activeHierarchicalFacets[a.conf.containerId];if(!(e.loading||u.indexOf(e.callBy)>-1))if(o(n,a.conf.fields)||!e.results.hits.length)a.render(e);else{var r=_(a.reduxStore.getState().filters,i,a.conf.fields);if(-1===a.conf.fields.indexOf(e.callBy))t.fetchCustomApi(a.conf.field,r,(function(e){a.render(e,!0)}));else{var s=document.getElementById(a.conf.containerId);a._updateCheckBoxes(s,a.getActiveFacets(a.conf.fields,a.conf.containerId),!1,a.reduxStore.getState().filters.indeterminateHierarchicalFacets)}}}))}var t,n,r;return t=e,n=[{key:"setFilter",value:function(e,t){this.reduxStore.dispatch((0,o.eU)(t,this.conf.containerId,this.conf.fields,e,!0))}},{key:"render",value:function(e,t){var n=this;if(!e.loading){var r=this.conf.fields,i=t?e:e.results,a=[];i&&i.hierarchicalFacets&&i.hierarchicalFacets[r[0]]&&(a=(a=i.hierarchicalFacets[r[0]]).map((function(e){return e.field=e.field.replace("hierarchical_facet.",""),e})));var o=this.getActiveFacets(r,this.conf.containerId);this.conf.facetsFilter&&(a=this.conf.facetsFilter(a));var c={conf:this.conf,facets:a},l=s().compile(this.conf.template||'\n <ul class="addsearch-hierarchical-facets">\n {{#each facets}}\n {{> subHierarchicalFacetsTemplate this }}\n {{/each}}\n </div>\n')(c);if(this.renderedHtml!==l||o!==this.renderedActiveFacets){this.renderedActiveFacets=o;var u=document.getElementById(this.conf.containerId);u.innerHTML=l,this.renderedHtml=l,this._updateCheckBoxes(u,o,!0,this.reduxStore.getState().filters.indeterminateHierarchicalFacets);for(var h=u.getElementsByClassName("addsearch-facet-group-expansion-arrow"),f=function(e){h[e].addEventListener("click",(function(){h[e].parentNode.parentNode.classList.toggle("shrink"),n._toggleFacetGroupOpenState(h[e].parentNode.parentNode.getAttribute("data-facet"))}))},p=0;p<h.length;p++)f(p)}}}},{key:"getActiveFacets",value:function(e,t){var n=[],r=this.reduxStore.getState().filters.activeHierarchicalFacets;return e.forEach((function(e){if(r[t]&&r[t][e])for(var i in r[t][e])n.push(i)})),n}},{key:"_toggleFacetGroupOpenState",value:function(e){var t=this.reduxStore.getState().filters.openedHierarchicalFacetGroups,n=t.indexOf(e);-1===n?t.push(e):t.splice(n,1)}},{key:"_updateCheckBoxes",value:function(e,t,n,r){for(var i=this,a=e.getElementsByTagName("input"),s=0;s<a.length;s++){var o=a[s];o.checked=-1!==t.indexOf(o.value),o.indeterminate=r.indexOf(o.value)>-1,n&&(o.onchange=function(e){i.setFilter(e.target.value,e.target.getAttribute("data-field"))})}}}],n&&R(t.prototype,n),r&&R(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),I=n(234);function F(e){var t=Math.ceil(Math.log10(e+1)),n=Math.pow(10,t-1);return Math.ceil(e/n)*n}var T=n(669);function L(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var N=function(){function e(t,n,r){var i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.conf=r,this.maxNumberOfRangeBuckets=this.conf.maxNumberOfRangeBuckets||5,this.ranges=[];var a=["component.loadMore","component.pagination","component.sortby"];function s(){var e=n.getState().filters.activeRangeFacets[r.field];return!!e&&!(0,T.x)(e)}function o(e,t,n){for(var r=function(e){var t=Math.ceil(Math.log10(e+1));if(1===t)return 0;var n=Math.pow(10,t-1);return Math.floor(e/n)*n}(e),i=F(t),a=[],s=r,o=F((i-r)/n),c=0;c<n;c++)a.push({from:s,to:s+o}),s+=o;return a}(0,c.g)(r.containerId)&&((0,l.D)(this.reduxStore,"search",(function(e){var t=s();if(!(!e.started||e.loading||e.callBy===i.conf.field&&t||a.indexOf(e.callBy)>-1))if(e.results.hits&&e.results.hits.length)if(t){var n=_(i.reduxStore.getState().filters,i.reduxStore.getState().configuration.baseFilters,i.conf.field);i.client.fetchCustomApi(i.conf.field,n,(function(e){i.reduxStore.dispatch((0,I.S1)(e.fieldStats))}))}else i.reduxStore.dispatch((0,I.S1)(e.results.fieldStats));else i.render()})),(0,l.D)(this.reduxStore,"fieldstats",(function(e){var t=e.fieldStats[i.conf.field];if(t){s()?i.ranges=function(e){var t=[];for(var n in e)t.push({from:e[n].gte,to:e[n].lt});return t}(i.reduxStore.getState().filters.activeRangeFacets[i.conf.field]):i.ranges=o(t.min,t.max,i.maxNumberOfRangeBuckets);var n={field:i.conf.field,ranges:i.ranges},r=_(i.reduxStore.getState().filters,i.reduxStore.getState().configuration.baseFilters,i.conf.field);i.client.fetchRangeFacets(n,r,(function(e){i.render(e)}))}})))}var t,n,r;return t=e,(n=[{key:"setRangeFilter",value:function(e,t,n){var r={min:t,max:n};this.reduxStore.dispatch((0,o.RP)(this.conf.field,r,e,!0))}},{key:"render",value:function(e){this.reduxStore.dispatch((0,I.lW)());var t=document.getElementById(this.conf.containerId);if(e){var n={conf:this.conf,rangeFacets:e.rangeFacets[this.conf.field]},r=s().compile(this.conf.template||'\n <div class="addsearch-facets">\n <ul>\n {{#each rangeFacets}}\n <li data-facet="{{value}}" {{#unless count}}style="display: none"{{/unless}}>\n <label>\n <input type="checkbox" value="{{key}}" \n data-value-min="{{from}}" \n data-value-max="{{to}}" />\n <span>{{from}}-{{to}}</span> <em>({{count}})</em>\n </label>\n </li>\n {{/each}}\n </ul>\n </div>\n')(n);t.innerHTML=r}else t.innerHTML="";this.handleCheckboxStates(!0)}},{key:"handleCheckboxStates",value:function(e){for(var t=this,n=document.getElementById(this.conf.containerId),r=this.getActiveRangeFacets(this.conf.field),i=n.getElementsByTagName("input"),a=0;a<i.length;a++){var s=i[a];s.checked=-1!==r.indexOf(s.value),e&&(s.onchange=function(e){t.setRangeFilter(e.target.value,e.target.getAttribute("data-value-min"),e.target.getAttribute("data-value-max"))})}}},{key:"getActiveRangeFacets",value:function(e){var t=[],n=this.reduxStore.getState().filters.activeRangeFacets;if(n[e])for(var r in n[e])t.push(r);return t}}])&&L(t.prototype,n),r&&L(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),j=n(209),H=n(50);function M(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var B=function(){function e(t,n,r){var i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.conf=r,this.reduxStore=n,(0,c.g)(r.containerId)&&(0,l.D)(this.reduxStore,"search",(function(){return i.render()}))}var t,n,r;return t=e,(n=[{key:"render",value:function(){var e=this,t=this.reduxStore.getState(),n=t.search.results.page||1,r=this.client.getSettings().paging.pageSize,i=t.search.results.total_hits||0,a=Math.ceil(i/r),o=function(e,t){if(!t||t<2||!e||e>t)return null;for(var n=[],r=0;r<t;r++)n.push(r+1);if(t<=9)return n;if(t>9&&e<7)return n.slice(0,9);if(t>9&&e>=t-3)return n.slice(t-9);var i=n.indexOf(e);return i-4>=0&&i+5<=n.length?n.slice(i-4,i+5):null}(n,a),c={currentPage:n,lastPage:o?o[o.length-1]:0,totalPages:a,pages:o},l=s().compile(this.conf.template||'\n <div class="addsearch-pagination">\n {{#gt currentPage 1}}\n <button data-page="previous" aria-label="Previous page">❮</button>\n {{/gt}}\n {{#each pages}}\n <button data-page="{{this}}" aria-label="Go to results page {{this}}" {{#equals ../currentPage this}}data-active="true" aria-current="true"{{/equals}}>\n {{this}}\n </button>\n {{/each}}\n {{#lt currentPage lastPage}}\n <button data-page="next" aria-label="Next page">❯</button>\n {{/lt}}\n </div>\n')(c);if(this.renderedHtml!==l){var u=document.getElementById(this.conf.containerId);u.innerHTML=l,this.renderedHtml=l;for(var h=u.getElementsByTagName("button"),f=0;f<h.length;f++)h[f].onclick=function(t){return e.handleOnclick(t)}}}},{key:"handleOnclick",value:function(e){var t=e.target,n=null;n="previous"===t.getAttribute("data-page")?this.reduxStore.getState().pagination.page-1:"next"===t.getAttribute("data-page")?(this.reduxStore.getState().pagination.page||1)+1:parseInt(t.getAttribute("data-page"),10),this.reduxStore.dispatch((0,S.Y)(this.client,n,null,this.reduxStore));var r=this.reduxStore.getState().keyword.value,i=this.conf.onResultsScrollTo||"top";this.reduxStore.dispatch((0,y.yC)(this.client,r,i,null,null,this.reduxStore,null,"component.pagination"))}}])&&M(t.prototype,n),r&&M(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),D=n(640),U=n(484);function q(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var G=40,$=38,K=13,V=8,Y=46,W=function(){function e(t,n,r,i,a){var s=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,this.reduxStore=n,this.conf=r,this.matchAllQuery=i,this.firstRenderDone=!1,this.firstSelectorBindDone=!1,this.onSearch=a,r.selectorToBind?(this.bindContainer(),(0,l.D)(this.reduxStore,"keyword",(function(e){e.setSearchFieldValue&&(s.boundField.value=e.value)})),(0,l.D)(this.reduxStore,"autocomplete",(function(e){return s.onAutocompleteUpdateBoundField(e)}))):(0,c.g)(r.containerId)&&((0,l.D)(this.reduxStore,"keyword",(function(e){e.searchFieldContainerId!==s.conf.containerId&&null!==e.searchFieldContainerId||s.render(e.value)})),(0,l.D)(this.reduxStore,"autocomplete",(function(e){return s.onAutocompleteUpdate(e)})))}var t,n,r;return t=e,n=[{key:"onAutocompleteUpdate",value:function(e){if((e.suggestions.length>0||e.customFields.length>0)&&e.setSuggestionToSearchField)if(null!==e.activeSuggestionIndex&&e.setSuggestionToSearchField){var t=(e.suggestions[e.activeSuggestionIndex]||e.customFields[e.activeSuggestionIndex]).value;this.render(t)}else null===e.activeSuggestionIndex&&this.render(this.reduxStore.getState().keyword.value)}},{key:"onAutocompleteUpdateBoundField",value:function(e){if(e.setSuggestionToSearchField)if(null!==e.activeSuggestionIndex){var t=e.suggestions[e.activeSuggestionIndex]||e.customFields[e.activeSuggestionIndex];if(!t)return;var n=t.value;this.boundField.value=n}else this.boundField.value=this.reduxStore.getState().keyword.value}},{key:"executeSearch",value:function(e,t,n){n||this.reduxStore.dispatch((0,D.gK)());var r=t;""===r&&this.matchAllQuery&&(r=le),0!==r.indexOf(ce)&&this.reduxStore.dispatch((0,S.Y)(e,1,null,this.reduxStore)),this.reduxStore.dispatch((0,o.az)(!1,!0)),this.onSearch(r,!1,n,this.conf.fieldForInstantRedirect,this.reduxStore.getState().configuration.fieldForInstantRedirect)}},{key:"redirectOrSearch",value:function(e){var t=this.reduxStore.getState().search.searchResultsPageUrl;t&&!0!==this.conf.ignoreSearchResultsPageUrl&&e&&e.length>0?(0,b.Rl)(t,e):this.executeSearch(this.client,e,!1)}},{key:"addEventListenersToField",value:function(e){var t=this;e.oninput=function(e){return t.oninput(e)},e.onkeypress=function(e){return t.onkeypress(e)},e.onkeyup=function(e){return t.onkeyup(e)},e.onfocus=function(e){return t.onfocus(e)},e.onblur=function(e){return setTimeout((function(){return t.onblur()}),200)}}},{key:"handleAutoFocus",value:function(e){!1!==this.conf.autofocus&&!1===this.firstRenderDone&&(e.focus(),this.firstRenderDone=!0)}},{key:"handleSubmitKeyword",value:function(e){var t=this.reduxStore;""===e&&this.matchAllQuery&&(e=le),t.dispatch((0,U.q)(e,!0,null,!1)),t.dispatch((0,D.ES)()),this.redirectOrSearch(e)}},{key:"render",value:function(e){var t=this,n=document.getElementById(this.conf.containerId);n.querySelector("input")?null!==e&&e!==le&&n.querySelector("input").value!==e&&(n.querySelector("input").value=e):(n.innerHTML=s().compile(this.conf.template||'\n <div class="addsearch-searchfield-container">\n <form class="addsearch-searchfield" autocomplete="off" action="?" role="search">\n <div class="search-field-wrapper"> \n <input type="search" placeholder="{{placeholder}}" aria-label="Search field" class="{{#not icon false}}icon{{/not}}" />\n </div>\n {{#if button}}\n <button type="button" aria-label="Search button" >{{button}}</button>\n {{/if}}\n </form>\n </div>\n')(this.conf),this.field=n.querySelector("input"),e!==le&&(this.field.value=e),this.addEventListenersToField(this.field),n.querySelector("button")&&(n.querySelector("button").onclick=function(){var e=t.field.value;t.handleSubmitKeyword(e)}),n.querySelector("form")&&(n.querySelector("form").onsubmit=function(e){return e.preventDefault()}),this.handleAutoFocus(this.field))}},{key:"bindContainer",value:function(){var e=this;if(this.boundField=document.querySelector(this.conf.selectorToBind),this.addEventListenersToField(this.boundField),this.conf.buttonSelector&&document.querySelector(this.conf.buttonSelector)){var t=document.querySelector(this.conf.buttonSelector);"submit"===t.type&&(t.type="button"),t.onclick=function(){var t=e.boundField.value;e.handleSubmitKeyword(t)}}this.boundField.form&&(this.boundField.form.onsubmit=function(e){e.preventDefault()}),this.handleAutoFocus(this.boundField)}},{key:"oninput",value:function(e){var t=this.reduxStore,n=e.target.value;""===n&&this.matchAllQuery&&(n=le),e.keyCode!==V&&e.keyCode!==Y||t.dispatch((0,D.QU)(null,!1));var r=!0===this.conf.ignoreAutocomplete;t.dispatch((0,U.q)(n,r,this.conf.containerId)),!0===this.conf.searchAsYouType&&this.executeSearch(this.client,n,!0)}},{key:"onkeyup",value:function(e){var t=this.reduxStore;e.keyCode===G?t.dispatch((0,D.v1)(D.qN)):e.keyCode===$&&t.dispatch((0,D.v1)(D.NF))}},{key:"onkeypress",value:function(e){if(e.keyCode===K){var t=e.target.value;this.handleSubmitKeyword(t)}}},{k