{"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","location","search","processUrlParams","jqXHR","extend","method","dataType","url","getFeedUrl","cache","data","fail","textStatus","errorThrown","html","always","loading","resolveWait","setParams","removeClass","strReturnValue","products","strCustomUrl","looksLikeUrl","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","href","arrObservableSkeletons","jLastItem","isSupported","objProductlistSettings","filter","setSkeletonItemHeight","onSkeletonIntersection","console","log","isInViewport","prop","addClass","intCurrentPageNum","getPageNumber","lazyloadProducts","appendItems","objEntry","objObserver","isIntersecting","unobserve","each","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","jFilters","jFiltersModal","jThis","jParent","closest","intFilterGroupAppliedOptionCount","applyFilters","text","removeFilter","document","resetAll","resetGroup","which","val","clearInput","strValue","value","toLowerCase","jOptions","index","domOption","jOption","indexOf","input","refresh","collapse","jFilterGroupAllOptionInput","arrRanges","split","parseFloat","strKey","strFiltersHtml","trim","jFiltersModalBody","strFiltersModalBodyHtml","isNaN","intPageSize","intProductItemIndex","Math","ceil","arrSelectSortValue","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","userAddedUrlArr","substring","fnCallback","beforeSend","done","build","buildFilters","buildList","tmpl","productlistProducts","juuls","setViewMode","jFiltersBrandModal","jSort","productlistFilters","brandJson","objFilter","param","productlistFiltersBrand","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 splitAndGetIndexValue' );\r\n e4.handlebars.registerTemplates( '#js-e-handlebars-tmpl-productlist-filters #js-e-handlebars-tmpl-productlist-products #js-e-handlebars-tmpl-productlist-sort #js-e-handlebars-tmpl-productlist-filters-brand' );\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 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 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 ajax: function ( objAjaxSettings, strUrlParam ) {\r\n if ( strUrlParam === undefined ) {\r\n strUrlParam = e4.productlist.getParamsFromForm();\r\n }\r\n if ( location.search.length > 1 && e4.productlist.hasLoaded === false ) {\r\n strUrlParam = e4.productlist.history.processUrlParams( strUrlParam );\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 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 strReturnValue = e4.settings.ecom.products.url,\r\n strCustomUrl = e4.productlist.jProductList.data( 'products-url' );\r\n if ( e4.util.looksLikeUrl( strCustomUrl ) === true ) {\r\n strReturnValue = strCustomUrl;\r\n }\r\n return strReturnValue;\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\r\n // 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\r\n // 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 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 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 console.log('isLastPage', isLastPage);\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 '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 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\r\n // 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 var jFilters = jQuery( '#js-e-productlist-filters' ),\r\n jFiltersModal = jQuery( '#js-e-productlist-filters-modal' ),\r\n jThis = jQuery( event.target ),\r\n jParent = jThis.closest( '.js-e-productlist-filters-group' ),\r\n intFilterGroupAppliedOptionCount = jParent.find( '.js-e-productlist-filter' ).filter( ':checked' ).length;\r\n if ( jThis.is( '.is-filter-group' ) === false ) {\r\n e4.productlist.filters.applyFilters( event.target );\r\n }\r\n else {\r\n if ( intFilterGroupAppliedOptionCount > 0 ) {\r\n jParent.find( '.js-e-productlist-filters-option-reset-group ' ).prop( 'checked', false );\r\n }\r\n else {\r\n jParent.find( '.js-e-productlist-filters-option-reset-group ' ).prop( 'checked', true );\r\n }\r\n if ( jFilters.is( ':visible' ) === true ) {\r\n jParent.find( '.js-e-productlist-filter-apply-selection-count' ).text( '(' + intFilterGroupAppliedOptionCount + ')' );\r\n }\r\n else {\r\n jFiltersModal.find( '.js-e-productlist-filter-apply-selection-count' ).text( '(' + intFilterGroupAppliedOptionCount + ')' );\r\n }\r\n }\r\n } );\r\n e4.productlist.jProductList.on( 'click', '.js-e-productlist-filter-apply-group', 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 e4.productlist.jProductList.on('input', '.js-e-productlist-brands-search', e4.util.debounce(function(event){\r\n\r\n var strValue = event.target.value.toLowerCase(),\r\n jOptions = jQuery('.js-e-productlist-filters-brand-container').find('.js-e-productlist-filters-option');\r\n if(strValue.length > 0){\r\n jOptions.each(function(index, domOption){\r\n var jOption = jQuery(domOption),\r\n strSearchValue = jOption.data('searchValue').toLowerCase();\r\n if(strSearchValue.indexOf(strValue) > -1){\r\n jOption.removeClass('d-none');\r\n } else{\r\n jOption.addClass('d-none');\r\n }\r\n });\r\n } else{\r\n jOptions.removeClass('d-none');\r\n }\r\n }, e4.settings.debounceDelay.input));\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 if ( jQuery( domElm ).is( '.is-price-range' ) === true ) {\r\n var arrRanges = domElm.value.split( '-' );\r\n jQuery( '.js-e-productlist-filters-range-min' ).val( parseFloat( arrRanges[ 0 ] ) );\r\n jQuery( '.js-e-productlist-filters-range-max' ).val( parseFloat( arrRanges[ 1 ] ) );\r\n }\r\n }\r\n else {\r\n jFilterGroupAllOptionInput.prop( 'checked', true );\r\n if ( jQuery( domElm ).is( '.is-price-range' ) === true ) {\r\n jQuery( '.js-e-productlist-filters-range-min' ).val( '' );\r\n jQuery( '.js-e-productlist-filters-range-max' ).val( '' );\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 if ( strValue === '[any]' ) {\r\n e4.productlist.jProductList.find( '.js-e-productlist-filter[name=\"' + strKey + '\"]' ).prop( 'checked', false );\r\n }\r\n else {\r\n e4.productlist.jProductList.find( '.js-e-productlist-filter[name=\"' + strKey + '\"][value=\"' + strValue + '\"]' ).prop( 'checked', false );\r\n }\r\n if ( jQuery( domElm ).is( '.is-price-range' ) === true ) {\r\n jQuery( '.js-e-productlist-filters-range-min' ).val( '' );\r\n jQuery( '.js-e-productlist-filters-range-max' ).val( '' );\r\n }\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 if ( jQuery( domElm ).is( '.is-price-range' ) === true ) {\r\n jQuery( '.js-e-productlist-filters-range-min' ).val( '' );\r\n jQuery( '.js-e-productlist-filters-range-max' ).val( '' );\r\n }\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 jQuery( '.js-e-productlist-filters-range-min' ).val( '' );\r\n jQuery( '.js-e-productlist-filters-range-max' ).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\r\n // 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\r\n // js api 'history'\r\n params: null,\r\n init: function () {\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 setState: function ( objParams ) {\r\n objParams = objParams || {};\r\n if ( jQuery.isEmptyObject( objParams ) === false ) {\r\n e4.productlist.history.updateParams( objParams );\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 if ( objParams.PageNum !== undefined ) {\r\n boolCleanUrl = false;\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 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 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 strUrlParams = arrUpdatedUrlParams.join( '&' );\r\n e4.productlist.history.setParams( strUrlParams );\r\n }\r\n },\r\n processUrlParams: function ( strUrlParam ) {\r\n var userAddedUrlParams = location.search.substring( 1 ),\r\n userAddedUrlArr = userAddedUrlParams.split( '&' );\r\n for ( var i = 0; i < userAddedUrlArr.length; i++ ) {\r\n if ( strUrlParam.indexOf( userAddedUrlArr[ i ] ) === -1 ) {\r\n strUrlParam += '&' + userAddedUrlArr[ i ];\r\n }\r\n }\r\n return strUrlParam;\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 juuls.ecom.productlist.setViewMode();\r\n }\r\n },\r\n buildFilters: function ( jsonData ) {\r\n var jFilters = jQuery( '#js-e-productlist-filters' ),\r\n jFiltersBrandModal = jQuery( '#js-e-productlist-filters-brand-modal-body' ),\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\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 var brandJson = jsonData.filters.filter( function ( objFilter ) {\r\n return objFilter.param === 'Brand';\r\n } );\r\n\r\n if ( brandJson.length === 1 ) {\r\n jFiltersBrandModal.html( e4.handlebars.tmpl.productlistFiltersBrand( brandJson[ 0 ] ) );\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"]}