define(['jquery','jquery-ui-modules/widget'],function($){'use strict';$.widget('mage.productListToolbarForm',{options:{modeControl:'[data-role="mode-switcher"]',gridTypeControl:'[data-role="grid-type-switcher"]',directionControl:'[data-role="direction-switcher"]',orderControl:'[data-role="sorter"]',limitControl:'[data-role="limiter"]',mode:'product_list_mode',gridType:'product_grid_type',direction:'product_list_dir',order:'product_list_order',limit:'product_list_limit',page:'p',modeDefault:'grid',directionDefault:'asc',orderDefault:'position',limitDefault:'9',url:'',formKey:'',post:false},replaceState:false,_create:function(){this._bind($(this.options.modeControl),this.options.mode,this.options.modeDefault);this._bind($(this.options.directionControl),this.options.direction,this.options.directionDefault);this._bind($(this.options.orderControl).filter('select'),this.options.order,this.options.orderDefault);this._bind($(this.options.orderControl).not('select'),this.options.order,this.options.orderDefault);this._bind($(this.options.limitControl),this.options.limit,this.options.limitDefault);this._bindGridTypeSwitcher();},_bind:function(element,paramName,defaultValue){if(element.is('select')){element.on('change',{paramName:paramName,'default':defaultValue},$.proxy(this._processSelect,this));}else{element.on('click',{paramName:paramName,'default':defaultValue},$.proxy(this._processLink,this));}},_bindGridTypeSwitcher:function(){let gridTypeControls=$(this.options.gridTypeControl);if(gridTypeControls.length){gridTypeControls.on('click',function(e){e.preventDefault();let elem=$(e.currentTarget),value=elem.data('value');gridTypeControls.removeClass('active');elem.addClass('active');$('[data-role=products-page-wrapper]').attr('data-grid-type',value) this.replaceState=true;this.changeUrl(this.options.gridType,value,'');this.replaceState=false;$('[data-role=products-page-wrapper]').find('.slick-slider').slick('refresh');$(window).trigger('resize');}.bind(this));}},_processLink:function(event){event.preventDefault();let element=$(event.currentTarget);if(element.is(this.options.orderControl)){this.changeUrlWithDirection(event.data.paramName,element.data('value'),event.data.default,this.options.direction,element.data('direction'),this.options.directionDefault);}else{this.changeUrl(event.data.paramName,element.data('value'),event.data.default);}},_processSelect:function(event){let element=$(event.currentTarget);let dataDirection=false;if(element.is(this.options.orderControl)){dataDirection=element.find("option:selected").data('direction');} if(dataDirection){this.changeUrlWithDirection(event.data.paramName,event.currentTarget.options[event.currentTarget.selectedIndex].value,event.data.default,this.options.direction,dataDirection,this.options.directionDefault);}else{this.changeUrl(event.data.paramName,event.currentTarget.options[event.currentTarget.selectedIndex].value,event.data.default);}},getUrlParams:function(){var decode=window.decodeURIComponent,urlPaths=this.options.url.split('?'),urlParams=urlPaths[1]?urlPaths[1].split('&'):[],params={},parameters,i;for(i=0;i1&¶mName===this.options.limit){newPage=Math.floor(this.getCurrentLimit()*(currentPage-1)/ paramValue)+1;if(newPage>1){paramData[this.options.page]=newPage;}else{delete paramData[this.options.page];}} paramData[paramName]=paramValue;if(this.options.post){form=document.createElement('form');params=[this.options.mode,this.options.direction,this.options.order,this.options.limit];for(key in paramData){if(params.indexOf(key)!==-1){input=document.createElement('input');input.name=key;input.value=paramData[key];form.appendChild(input);delete paramData[key];}} formKey=document.createElement('input');formKey.name='form_key';formKey.value=this.options.formKey;form.appendChild(formKey);paramData=$.param(paramData);baseUrl+=paramData.length?'?'+paramData:'';form.action=baseUrl;form.method='POST';document.body.appendChild(form);form.submit();}else{if(paramValue==defaultValue){delete paramData[paramName];} paramData=$.param(paramData);if(this.replaceState){this.options.url=baseUrl+(paramData.length?'?'+paramData:'');window.history.replaceState('','',this.options.url);}else{location.href=baseUrl+(paramData.length?'?'+paramData:'');}}},changeUrlWithDirection:function(paramName,paramValue,defaultValue,directionParam,directionValue,defaultDirectionValue){var urlPaths=this.options.url.split('?'),baseUrl=urlPaths[0],paramData=this.getUrlParams(),currentPage=this.getCurrentPage(),form,params,key,input,formKey,newPage;if(currentPage>1&¶mName===this.options.limit){newPage=Math.floor(this.getCurrentLimit()*(currentPage-1)/ paramValue)+1;if(newPage>1){paramData[this.options.page]=newPage;}else{delete paramData[this.options.page];}} paramData[paramName]=paramValue;paramData[directionParam]=directionValue;if(this.options.post){form=document.createElement('form');params=[this.options.mode,this.options.direction,this.options.order,this.options.limit];for(key in paramData){if(params.indexOf(key)!==-1){input=document.createElement('input');input.name=key;input.value=paramData[key];form.appendChild(input);delete paramData[key];}} formKey=document.createElement('input');formKey.name='form_key';formKey.value=this.options.formKey;form.appendChild(formKey);paramData=$.param(paramData);baseUrl+=paramData.length?'?'+paramData:'';form.action=baseUrl;form.method='POST';document.body.appendChild(form);form.submit();}else{if(paramValue==defaultValue){delete paramData[paramName];} paramData=$.param(paramData);if(this.replaceState){this.options.url=baseUrl+(paramData.length?'?'+paramData:'');window.history.replaceState('','',this.options.url);}else{location.href=baseUrl+(paramData.length?'?'+paramData:'');}}}});return $.mage.productListToolbarForm;});