{"version":3,"sources":["ecom.productlist.js"],"names":["e4","productlist","debug","hasLoaded","jProductList","jQuery","init","length","require","js","settings","handlebars","registerHelpers","registerTemplates","registerPartials","event","util","registerEvents","bindEvents","history","filters","on","setSort","target","preventDefault","navigateToProductPage","currentTarget","lazyload","loadNextItems","window","debounce","toggleMarkupPlacement","debounceDelay","resize","ecom","cleanUrl","clearState","builded","jsonData","showLoadMoreButtonOrAutoLoad","ajax","objAjaxSettings","strUrlParam","undefined","getParamsFromForm","jqXHR","extend","method","dataType","url","getFeedUrl","cache","data","fail","textStatus","errorThrown","html","always","loading","resolveWait","setParams","removeClass","strCustomUrl","find","serialize","hasMorePages","moduleSettings","pageCount","isLastPage","currentPage","isAutoLazyload","productCount","autoLoadCount","showLoadMoreButton","hideLoadMoreButton","arrObservables","last","toArray","observer","bind","onLastItemIntersection","observerOptions","domElm","off","when","getPageNumberByProductItemIndex","then","intPageNumber","setState","PageNum","location","href","arrObservableSkeletons","jLastItem","isSupported","objProductlistSettings","filter","setSkeletonItemHeight","onSkeletonIntersection","isInViewport","prop","addClass","intCurrentPageNum","getPageNumber","lazyloadProducts","appendItems","objEntry","objObserver","isIntersecting","unobserve","each","products","intIndex","objProduct","append","partial","productlistProductPartial","listItemHtml","trigger","inserted","setPageNumber","pageNum","bindAutoLoadOrShowLoadMoreButton","jEntryTarget","is","parseInt","replaceSkeletonItems","intPagenum","jSkeletonItem","getSkeletonItem","parent","replaceWith","isNextPageFull","isShowInterval","buttonShowInterval","pageSize","intFirstItemHeight","first","outerHeight","css","height","loadListAndFilters","applyFilters","removeFilter","document","resetAll","resetGroup","which","val","search","clearInput","refresh","collapse","jThis","jFilterGroupAllOptionInput","closest","intFilterGroupAppliedOptionCount","strKey","strValue","jFilters","strFiltersHtml","trim","jFiltersModalBody","strFiltersModalBodyHtml","isNaN","intPageSize","intProductItemIndex","index","Math","ceil","arrSelectSortValue","split","setScrollTop","intScrollTop","jWindow","jFirstItem","getScrollTop","scrollTop","scrollToAnchor","nudge","animate","header","hide","offset","top","params","state","objParams","isEmptyObject","updateParams","stateObj","getParams","boolCleanUrl","replaceState","pathname","arrUpdatedUrlParams","strUrlParams","i","arrKeyValue","join","push","Object","keys","forEach","key","jInput","fnCallback","beforeSend","done","build","buildFilters","buildList","tmpl","productlistProducts","jSort","productlistFilters","productlistSort","filtersAppliedCount"],"mappings":"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","file":"ecom.productlist.js","sourcesContent":["e4.productlist = {\r\n debug: false,\r\n hasLoaded: false,\r\n jProductList: jQuery( '.js-e-productlist' ),\r\n init: function () {\r\n if ( e4.productlist.jProductList.length === 1 ) {\r\n e4.require.js( e4.settings.require.handlebars, function () {\r\n e4.handlebars.registerHelpers( 'compare' );\r\n e4.handlebars.registerTemplates( '#js-e-handlebars-tmpl-productlist-filters #js-e-handlebars-tmpl-productlist-products #js-e-handlebars-tmpl-productlist-sort' );\r\n e4.handlebars.registerPartials( '#js-e-handlebars-tmpl-productlist-product-partial' );\r\n e4.productlist.event = e4.util.registerEvents( 'build builded inserted', 'productlist' );\r\n e4.productlist.bindEvents();\r\n e4.productlist.history.init();\r\n e4.productlist.filters.init();\r\n } );\r\n }\r\n },\r\n bindEvents: function () {\r\n e4.productlist.jProductList.on( 'change', '.js-e-productlist-sort-select', function ( event ) {\r\n e4.productlist.setSort( event.target );\r\n } );\r\n e4.productlist.jProductList.on( 'click', '.js-e-productlist-item a[href]', function ( event ) {\r\n event.preventDefault();\r\n e4.productlist.navigateToProductPage( event.currentTarget );\r\n } );\r\n e4.productlist.jProductList.on( 'click', '.js-e-productlist-load-more-products-btn', function ( event ) {\r\n event.preventDefault();\r\n e4.productlist.lazyload.loadNextItems();\r\n } );\r\n\r\n jQuery( window )\r\n .on( 'resize', e4.util.debounce( e4.productlist.filters.toggleMarkupPlacement, e4.settings.debounceDelay.resize ) )\r\n .on( 'beforeunload', function () {\r\n if ( e4.settings.ecom.filters.cleanUrl === true ) {\r\n e4.productlist.history.clearState();\r\n }\r\n } );\r\n\r\n e4.productlist.jProductList.on( e4.productlist.event.builded, function ( event, jsonData ) {\r\n e4.productlist.showLoadMoreButtonOrAutoLoad( jsonData );\r\n if ( e4.productlist.hasLoaded === false ) {\r\n e4.productlist.hasLoaded = true;\r\n e4.productlist.lazyload.init();\r\n }\r\n } );\r\n\r\n\r\n },\r\n ajax: function ( objAjaxSettings, strUrlParam ) {\r\n if ( strUrlParam === undefined ) {\r\n strUrlParam = e4.productlist.getParamsFromForm();\r\n }\r\n\r\n var jqXHR = jQuery.ajax( jQuery.extend( {\r\n method: 'GET',\r\n dataType: 'json',\r\n url: e4.productlist.getFeedUrl(),\r\n cache: false,\r\n data: strUrlParam,\r\n }, objAjaxSettings ) );\r\n\r\n jqXHR.fail( function ( jqXHR, textStatus, errorThrown ) {\r\n jQuery( '#js-e-productlist-products' ).html( '

' + errorThrown + '

' );\r\n } );\r\n jqXHR.always( function () {\r\n e4.loading.resolveWait( '.js-e-productlist' );\r\n e4.productlist.history.setParams( strUrlParam );\r\n jQuery( '.js-e-productlist-loading-overlay' ).removeClass( 'is-loading' );\r\n } );\r\n return jqXHR;\r\n },\r\n getFeedUrl: function () {\r\n // Get custom filters data-feed url if any, to support alternative feeds.\r\n var strCustomUrl = e4.productlist.jProductList.find( '.js-e-productlist-form' ).data( 'action' );\r\n return strCustomUrl !== '' ? strCustomUrl : e4.settings.ecom.filters.url;\r\n },\r\n getParamsFromForm: function () {\r\n return e4.productlist.jProductList.find( '.js-e-productlist-form' ).serialize();\r\n },\r\n showLoadMoreButtonOrAutoLoad: function ( jsonData ) {\r\n // Callback for the builded event\r\n var hasMorePages = jsonData.moduleSettings.pageCount > 1,\r\n isLastPage = e4.productlist.lazyload.currentPage === jsonData.moduleSettings.pageCount,\r\n isAutoLazyload = jsonData.moduleSettings.productCount < e4.settings.ecom.lazyload.autoLoadCount;\r\n\r\n if ( hasMorePages === true && isLastPage === false && isAutoLazyload === false ) {\r\n // Show load-more btn if we have more pages and the setting for auto-lazyload is not achieved by the total count of products\r\n e4.productlist.lazyload.showLoadMoreButton();\r\n }\r\n else {\r\n // Hide load-more button if it is the last page (or the setting for auto-lazyload is achieved by the total count of products)\r\n e4.productlist.lazyload.hideLoadMoreButton();\r\n if ( isAutoLazyload === true ) {\r\n var arrObservables = jQuery( '#js-e-productlist-products' ).find( '.js-e-productlist-item' ).last().toArray();\r\n e4.util.observer.bind( arrObservables, e4.productlist.lazyload.onLastItemIntersection, e4.settings.ecom.lazyload.observerOptions );\r\n }\r\n }\r\n },\r\n navigateToProductPage: function ( domElm ) {\r\n jQuery( window ).off( 'beforeunload' );\r\n jQuery.when( e4.productlist.getPageNumberByProductItemIndex( domElm ) ).then( function ( intPageNumber ) {\r\n e4.productlist.history.setState( { PageNum: intPageNumber } );\r\n location.href = domElm.href;\r\n } );\r\n },\r\n lazyload: {\r\n init: function () {\r\n // Get settings from data-attr and set global variables to use in the global scope\r\n if ( e4.util.observer.isSupported === true ) {\r\n var objProductlistSettings = e4.productlist.jProductList.data();\r\n e4.productlist.lazyload.currentPage = objProductlistSettings.currentPage;\r\n e4.productlist.lazyload.pageCount = objProductlistSettings.pageCount;\r\n\r\n var arrObservableSkeletons = jQuery( '.js-e-productlist-skeleton-item' ).filter( '.is-observable' ).toArray(),\r\n jLastItem = jQuery( '#js-e-productlist-products' ).find( '.js-e-productlist-item' ).last(),\r\n isLastPage = e4.productlist.lazyload.currentPage === e4.productlist.lazyload.pageCount;\r\n\r\n if ( arrObservableSkeletons.length > 0 ) {\r\n e4.productlist.lazyload.setSkeletonItemHeight();\r\n e4.util.observer.bind( arrObservableSkeletons, e4.productlist.lazyload.onSkeletonIntersection, e4.settings.ecom.lazyload.observerOptions );\r\n if ( isLastPage === false ) {\r\n // Load the next page automatically if the last product-item is visible in the viewport\r\n if ( e4.util.isInViewport( jLastItem ) === true ) {\r\n e4.productlist.lazyload.loadNextItems();\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n e4.util.debug(\r\n [\r\n 'IntersectionObserver not available',\r\n 'switching to pagination'],\r\n e4.productlist.debug );\r\n jQuery( '.js-e-productlist-pagination' ).prop( 'hidden', false );\r\n e4.productlist.jProductList.addClass( 'has-pagination' );\r\n }\r\n\r\n\r\n },\r\n loadNextItems: function () {\r\n // Manually load next batch on click load-more btn or if last server-loaded productitem is in viewport\r\n var intCurrentPageNum = e4.productlist.getPageNumber();\r\n e4.productlist.lazyload.hideLoadMoreButton();\r\n e4.productlist.lazyloadProducts( ( intCurrentPageNum + 1 ), e4.productlist.lazyload.appendItems );\r\n },\r\n onLastItemIntersection: function ( objEntry, objObserver ) {\r\n if ( objEntry.isIntersecting === true ) {\r\n var intPageNumber = e4.productlist.getPageNumber();\r\n intPageNumber++;\r\n objObserver.unobserve( objEntry.target );\r\n e4.productlist.lazyloadProducts( intPageNumber, e4.productlist.lazyload.appendItems );\r\n }\r\n },\r\n appendItems: function ( jsonData ) {\r\n // append each product in fetched json to end of productlist with partial\r\n jQuery.each( jsonData.products, function ( intIndex, objProduct ) {\r\n jQuery( '#js-e-productlist-products' ).append( e4.handlebars.partial.productlistProductPartial( objProduct.listItemHtml ) );\r\n e4.productlist.jProductList.trigger( e4.productlist.event.inserted, objProduct );\r\n } );\r\n e4.productlist.setPageNumber( jsonData.moduleSettings.pageNum );\r\n e4.productlist.lazyload.bindAutoLoadOrShowLoadMoreButton( jsonData );\r\n },\r\n onSkeletonIntersection: function ( objEntry, objObserver ) {\r\n if ( objEntry.isIntersecting === true ) {\r\n var jEntryTarget = jQuery( objEntry.target ),\r\n intPageNumber = e4.productlist.getPageNumber();\r\n if ( jEntryTarget.is( '.is-observable' ) === true ) {\r\n intPageNumber = parseInt( jEntryTarget.data( 'page' ) );\r\n }\r\n objObserver.unobserve( objEntry.target );\r\n e4.productlist.lazyloadProducts( intPageNumber, e4.productlist.lazyload.replaceSkeletonItems );\r\n }\r\n },\r\n replaceSkeletonItems: function ( jsonData ) {\r\n // replace each matching skeleton item (by pagenum and index) with matching product in fetched json with partial\r\n jQuery.each( jsonData.products, function ( intIndex, objProduct ) {\r\n var intPagenum = jsonData.moduleSettings.pageNum,\r\n jSkeletonItem = e4.productlist.lazyload.getSkeletonItem( intPagenum, intIndex );\r\n if ( jSkeletonItem !== undefined ) {\r\n jSkeletonItem.parent().replaceWith( e4.handlebars.partial.productlistProductPartial( objProduct.listItemHtml ) );\r\n e4.productlist.jProductList.trigger( e4.productlist.event.inserted, objProduct );\r\n }\r\n } );\r\n },\r\n bindAutoLoadOrShowLoadMoreButton: function ( jsonData ) {\r\n if ( jsonData.moduleSettings.pageNum < jsonData.moduleSettings.pageCount ) {\r\n var isShowInterval = jsonData.moduleSettings.pageNum % e4.settings.ecom.lazyload.buttonShowInterval === 0,\r\n isNextPageFull = jsonData.moduleSettings.productCount - ( jsonData.moduleSettings.pageSize * jsonData.moduleSettings.pageNum ) > jsonData.moduleSettings.pageSize,\r\n isAutoLazyload = jsonData.moduleSettings.productCount < e4.settings.ecom.lazyload.autoLoadCount;\r\n if ( isShowInterval === true && isNextPageFull === true && isAutoLazyload === false ) {\r\n // if current pageNum matches the setting for the load-more button show interval (by modulus)\r\n // and the next page is calculated to be a full pagesize\r\n // and the setting for auto-lazyload is not achieved by the total count of products\r\n e4.productlist.lazyload.showLoadMoreButton();\r\n }\r\n else {\r\n var arrObservables = jQuery( '#js-e-productlist-products' ).find( '.js-e-productlist-item' ).last().toArray();\r\n e4.util.observer.bind( arrObservables, e4.productlist.lazyload.onLastItemIntersection, e4.settings.ecom.lazyload.observerOptions );\r\n }\r\n }\r\n else {\r\n e4.productlist.lazyload.hideLoadMoreButton();\r\n }\r\n },\r\n showLoadMoreButton: function () {\r\n jQuery( '.js-e-productlist-load-more-products-btn' ).removeClass( 'd-none' );\r\n },\r\n hideLoadMoreButton: function () {\r\n jQuery( '.js-e-productlist-load-more-products-btn' ).addClass( 'd-none' );\r\n },\r\n getSkeletonItem: function ( intPageNumber, intIndex ) {\r\n return jQuery( '#js-e-productlist-products' ).find( '.js-e-productlist-skeleton-item[data-page=\"' + intPageNumber + '\"][data-index=\"' + intIndex + '\"]' );\r\n },\r\n setSkeletonItemHeight: function () {\r\n // Get and set the height of the skeleton items.\r\n var intFirstItemHeight = jQuery( '#js-e-productlist-products' ).find( '.js-e-productlist-item' ).first().outerHeight();\r\n jQuery( '.js-e-productlist-skeleton-item' ).css( { height: intFirstItemHeight } );\r\n }\r\n },\r\n filters: {\r\n init: function () {\r\n e4.productlist.filters.bindEvents();\r\n },\r\n bindEvents: function () {\r\n e4.productlist.jProductList.find( '.js-e-productlist-form' ).on( 'submit', function ( event ) {\r\n event.preventDefault();\r\n e4.productlist.loadListAndFilters();\r\n } );\r\n e4.productlist.jProductList.on( 'change', '.js-e-productlist-filter', function ( event ) {\r\n e4.productlist.filters.applyFilters( event.target );\r\n } );\r\n e4.productlist.jProductList.on( 'click', '.js-e-productlist-filters-remove', function ( event ) {\r\n event.preventDefault();\r\n e4.productlist.filters.removeFilter( event.currentTarget );\r\n } );\r\n jQuery( document ).on( 'click', '.js-e-productlist-filters-clear-all', function ( event ) {\r\n event.preventDefault();\r\n e4.productlist.filters.resetAll();\r\n } );\r\n e4.productlist.jProductList.on( 'change', '.js-e-productlist-filters-option-reset-group', function ( event ) {\r\n event.preventDefault();\r\n if ( jQuery( event.target ).is( ':checked' ) === true ) {\r\n e4.productlist.filters.resetGroup( event.target );\r\n }\r\n else {\r\n jQuery( event.target ).prop( 'checked', true );\r\n }\r\n } );\r\n // Search.\r\n e4.productlist.jProductList.on( 'keyup', '.js-e-search-input', function ( event ) {\r\n if ( event.which === 13 ) {\r\n e4.productlist.filters.applyFilters( event.target );\r\n }\r\n } );\r\n e4.productlist.jProductList.on( 'click', '.js-e-productlist-filters-search-clear', function ( event ) {\r\n event.preventDefault();\r\n e4.productlist.jProductList.find( '.js-e-search-input' ).val( '' );\r\n e4.productlist.filters.applyFilters( event.target );\r\n } );\r\n e4.productlist.jProductList.on( 'click', '.js-e-search-clear', function ( event ) {\r\n e4.search.clearInput( event.target );\r\n } );\r\n\r\n\r\n },\r\n refresh: function () {\r\n e4.productlist.filters.collapse.init();\r\n },\r\n applyFilters: function ( domElm ) {\r\n var jThis = jQuery( domElm ),\r\n jFilterGroupAllOptionInput = jThis.closest( '.js-e-productlist-filters-group' ).find( '.js-e-productlist-filters-option-reset-group' ),\r\n intFilterGroupAppliedOptionCount = jThis.closest( '.js-e-productlist-filters-group' ).find( '.js-e-productlist-filter' ).filter( ':checked' ).length;\r\n if ( jFilterGroupAllOptionInput.length > 0 ) {\r\n // Un-check the \"all-option\" in current group if any other options is checked and vice versa.\r\n if ( intFilterGroupAppliedOptionCount > 0 ) {\r\n jFilterGroupAllOptionInput.prop( 'checked', false );\r\n }\r\n else {\r\n jFilterGroupAllOptionInput.prop( 'checked', true );\r\n\r\n }\r\n }\r\n e4.productlist.setPageNumber( 1 );\r\n e4.productlist.loadListAndFilters();\r\n },\r\n removeFilter: function ( domElm ) {\r\n var strKey = jQuery( domElm ).data( 'key' ),\r\n strValue = jQuery( domElm ).data( 'value' );\r\n e4.productlist.jProductList.find( '.js-e-productlist-filter[name=\"' + strKey + '\"][value=\"' + strValue + '\"]' ).prop( 'checked', false );\r\n e4.productlist.setPageNumber( 1 );\r\n e4.productlist.loadListAndFilters();\r\n },\r\n resetGroup: function ( domElm ) {\r\n jQuery( domElm ).closest( '.js-e-productlist-filters-group' ).find( '.js-e-productlist-filter' ).prop( 'checked', false );\r\n e4.productlist.setPageNumber( 1 );\r\n e4.productlist.loadListAndFilters();\r\n },\r\n resetAll: function () {\r\n e4.productlist.jProductList.find( '.js-e-productlist-filter' ).prop( 'checked', false );\r\n e4.productlist.jProductList.find( '.js-e-search-input' ).val( '' );\r\n e4.productlist.setPageNumber( 1 );\r\n e4.productlist.loadListAndFilters();\r\n },\r\n toggleMarkupPlacement: function () {\r\n var jFilters = jQuery( '#js-e-productlist-filters' ),\r\n strFiltersHtml = jQuery.trim( jFilters.html() ),\r\n jFiltersModalBody = jQuery( '#js-e-productlist-filters-modal' ).find( '#js-e-productlist-filters-modal-body' ),\r\n strFiltersModalBodyHtml = jQuery.trim( jFiltersModalBody.html() );\r\n if ( jFilters.is( ':visible' ) === true ) {\r\n if ( strFiltersHtml === '' ) {\r\n jFilters.html( strFiltersModalBodyHtml );\r\n jFiltersModalBody.html( '' );\r\n }\r\n }\r\n else {\r\n if ( strFiltersModalBodyHtml === '' ) {\r\n jFiltersModalBody.html( strFiltersHtml );\r\n jFilters.html( '' );\r\n }\r\n }\r\n }\r\n },\r\n setPageNumber: function ( intPageNumber ) {\r\n e4.productlist.jProductList.find( 'input[name=\"PageNum\"]' ).val( intPageNumber );\r\n },\r\n getPageNumber: function () {\r\n var intPageNumber = parseInt( e4.productlist.jProductList.find( 'input[name=\"PageNum\"]' ).val() );\r\n if ( isNaN( intPageNumber ) === true ) {\r\n intPageNumber = 1;\r\n }\r\n return intPageNumber;\r\n },\r\n getPageNumberByProductItemIndex: function ( domElm ) {\r\n var intPageSize = parseInt( e4.productlist.jProductList.data( 'pageSize' ) ),\r\n intProductItemIndex = ( jQuery( domElm ).closest( '.js-e-productlist-item' ).parent().index() + 1 ),\r\n intPageNumber = Math.ceil( intProductItemIndex / intPageSize );\r\n return intPageNumber;\r\n },\r\n setSort: function ( domElm ) {\r\n var arrSelectSortValue = jQuery( domElm ).val().split( ' ' );\r\n if ( arrSelectSortValue.length === 2 ) {\r\n e4.productlist.jProductList.find( 'input[name=\"Sort\"]' ).val( arrSelectSortValue[ 0 ] + ' ' + arrSelectSortValue[ 1 ] );\r\n e4.productlist.jProductList.find( 'input[name=\"SortBy\"]' ).val( arrSelectSortValue[ 0 ] );\r\n e4.productlist.jProductList.find( 'input[name=\"SortOrder\"]' ).val( arrSelectSortValue[ 1 ] );\r\n }\r\n else {\r\n e4.productlist.jProductList.find( 'input[name=\"SortBy\"], input[name=\"SortOrder\"]' ).val( '' );\r\n }\r\n e4.productlist.setPageNumber( 1 );\r\n e4.productlist.loadListAndFilters();\r\n },\r\n setScrollTop: function ( intScrollTop ) {\r\n // If no value is passed with arguments, we set default scroll position to product list root node position.\r\n if ( intScrollTop === undefined ) {\r\n intScrollTop = e4.productlist.getScrollTop();\r\n var jWindow = jQuery( window ),\r\n jFirstItem = e4.productlist.jProductList.find( '.js-e-productlist-item' ).first();\r\n if ( intScrollTop < jWindow.scrollTop() && jFirstItem.length === 1 && e4.util.isInViewport( jFirstItem ) === false ) {\r\n intScrollTop -= jWindow.height() / 100 * e4.settings.scrollToAnchor.nudge;\r\n e4.scrollToAnchor.animate( intScrollTop, e4.header.hide );\r\n }\r\n }\r\n // If a value is passed with arguments, we are restoring af history state with a scroll position saved when clicking a product.\r\n else {\r\n jQuery( 'html,body' ).scrollTop( intScrollTop );\r\n }\r\n },\r\n getScrollTop: function () {\r\n return Math.ceil( e4.productlist.jProductList.offset().top );\r\n },\r\n history: { // TODO rename det er det styrende namespace som loader listen første gang og navnet konflikter hårdt med det native js api 'history'\r\n params: null,\r\n init: function () {\r\n\r\n if ( history.state !== null && history.state.params !== '' ) {\r\n e4.productlist.loadListAndFilters( history.state.scrollTop, history.state.params );\r\n }\r\n else {\r\n var intPageNumber = e4.productlist.getPageNumber();\r\n if ( intPageNumber > 1 ) {\r\n var jFirstItem = e4.productlist.jProductList.find( '.js-e-productlist-item' ).first(),\r\n intScrollTop = intPageNumber > 1 ? jFirstItem.offset().top : 0;\r\n e4.productlist.loadListAndFilters( intScrollTop );\r\n }\r\n else {\r\n e4.productlist.loadListAndFilters();\r\n }\r\n\r\n }\r\n },\r\n setState: function ( objParams ) {\r\n objParams = objParams || {};\r\n\r\n if ( jQuery.isEmptyObject( objParams ) === false ) {\r\n e4.productlist.history.updateParams( objParams );\r\n }\r\n\r\n var stateObj = {\r\n params: e4.productlist.history.getParams(),\r\n scrollTop: jQuery( window ).scrollTop()\r\n },\r\n boolCleanUrl = e4.settings.ecom.filters.cleanUrl;\r\n\r\n if ( objParams.PageNum !== undefined ) {\r\n boolCleanUrl = false;\r\n }\r\n\r\n history.replaceState( stateObj, null, location.pathname + ( boolCleanUrl ? '' : '?' + e4.productlist.history.getParams() ) );\r\n },\r\n clearState: function () {\r\n history.replaceState( null, null, null );\r\n },\r\n setParams: function ( strUrlParam ) {\r\n e4.productlist.history.params = strUrlParam;\r\n },\r\n getParams: function () {\r\n return e4.productlist.history.params;\r\n },\r\n updateParams: function ( objParams ) {\r\n var strUrlParams = e4.productlist.history.getParams(),\r\n arrUpdatedUrlParams = [];\r\n if ( strUrlParams === '' ) {\r\n strUrlParams = e4.productlist.getParamsFromForm();\r\n }\r\n strUrlParams = strUrlParams.split( '&' );\r\n\r\n if ( objParams !== undefined ) {\r\n for ( var i = 0; i < strUrlParams.length; i++ ) {\r\n var arrKeyValue = strUrlParams[ i ].split( '=' );\r\n if ( objParams[ arrKeyValue[ 0 ] ] ) {\r\n arrKeyValue[ 1 ] = objParams[ arrKeyValue[ 0 ] ];\r\n }\r\n strUrlParams[ i ] = arrKeyValue.join( '=' );\r\n arrUpdatedUrlParams.push( strUrlParams[ i ] );\r\n }\r\n\r\n Object.keys( objParams ).forEach( function ( key ) {\r\n var jInput = jQuery( 'input[name=\"' + key + '\"]' );\r\n if ( jInput.length > 0 ) {\r\n jInput.val( objParams[ key ] );\r\n }\r\n } );\r\n\r\n strUrlParams = arrUpdatedUrlParams.join( '&' );\r\n e4.productlist.history.setParams( strUrlParams );\r\n }\r\n }\r\n },\r\n lazyloadProducts: function ( intPageNumber, fnCallback ) {\r\n e4.productlist.setPageNumber( intPageNumber );\r\n e4.productlist.ajax({\r\n beforeSend: function(){\r\n jQuery( '.js-e-productlist-lazy-loading-block' ).removeClass( 'd-none' );\r\n }\r\n }).done( function ( jsonData ) {\r\n jQuery( '.js-e-productlist-lazy-loading-block' ).addClass( 'd-none' );\r\n if ( typeof fnCallback === 'function' ) {\r\n fnCallback( jsonData );\r\n }\r\n } );\r\n },\r\n loadListAndFilters: function ( intScrollTop, strUrlParam ) {\r\n e4.productlist.ajax( {\r\n beforeSend: function () {\r\n if ( e4.productlist.hasLoaded === true ) {\r\n jQuery( '.js-e-productlist-loading-overlay' ).addClass( 'is-loading' );\r\n }\r\n }\r\n }, strUrlParam ).done( function ( jsonData ) {\r\n e4.productlist.jProductList.trigger( e4.productlist.event.build );\r\n e4.productlist.history.setState();\r\n e4.productlist.buildFilters( jsonData );\r\n e4.productlist.buildList( jsonData );\r\n e4.productlist.setScrollTop( intScrollTop );\r\n e4.productlist.jProductList.trigger( e4.productlist.event.builded, jsonData );\r\n } );\r\n },\r\n buildList: function ( jsonData ) {\r\n jQuery( '.js-e-productlist-product-count' ).html( jsonData.moduleSettings.productCount );\r\n if ( e4.productlist.hasLoaded === true ) {\r\n jQuery( '#js-e-productlist-products' ).html( e4.handlebars.tmpl.productlistProducts( jsonData ) );\r\n }\r\n },\r\n buildFilters: function ( jsonData ) {\r\n var jFilters = jQuery( '#js-e-productlist-filters' ),\r\n jFiltersModalBody = jQuery( '#js-e-productlist-filters-modal' ).find( '#js-e-productlist-filters-modal-body' ),\r\n jSort = jQuery( '.js-e-productlist-sort' );\r\n if ( jFilters.length === 1 ) {\r\n var strFiltersHtml = e4.handlebars.tmpl.productlistFilters( jsonData );\r\n if ( jFilters.is( ':visible' ) === true ) {\r\n jFilters.html( strFiltersHtml );\r\n jFiltersModalBody.html( '' );\r\n }\r\n else {\r\n jFiltersModalBody.html( strFiltersHtml );\r\n jFilters.html( '' );\r\n }\r\n }\r\n if ( jSort.length > 0 ) {\r\n jSort.html( e4.handlebars.tmpl.productlistSort( jsonData ) );\r\n }\r\n jQuery( '.js-e-productlist-filters-applied-count' ).html( jsonData.filtersAppliedCount === 0 ? '' : jsonData.filtersAppliedCount );\r\n }\r\n};\r\n\r\n"]}