define(['jquery','underscore','mage/template','priceUtils','priceBox','jquery-ui-modules/widget'],function($,_,mageTemplate,utils){'use strict';var globalOptions={productId:null,priceHolderSelector:'.price-box',optionsSelector:'.product-custom-option',optionConfig:{},optionHandlers:{},optionTemplate:'<%= data.label %>'+'<% if (data.finalPrice.value > 0) { %>'+' +<%- data.finalPrice.formatted %>'+'<% } else if (data.finalPrice.value < 0) { %>'+' <%- data.finalPrice.formatted %>'+'<% } %>',controlContainer:'dd'};function defaultGetOptionValue(element,optionsConfig){var changes={},optionValue=element.val(),optionId=utils.findOptionId(element[0]),optionName=element.prop('name'),optionType=element.prop('type'),optionConfig=optionsConfig[optionId],optionHash=optionName;switch(optionType){case'text':case'textarea':changes[optionHash]=optionValue?optionConfig.prices:{};break;case'radio':if(element.is(':checked')){changes[optionHash]=optionConfig[optionValue]&&optionConfig[optionValue].prices||{};} break;case'select-one':changes[optionHash]=optionConfig[optionValue]&&optionConfig[optionValue].prices||{};break;case'select-multiple':_.each(optionConfig,function(row,optionValueCode){optionHash=optionName+'##'+optionValueCode;changes[optionHash]=_.contains(optionValue,optionValueCode)?row.prices:{};});break;case'checkbox':optionHash=optionName+'##'+optionValue;changes[optionHash]=element.is(':checked')?optionConfig[optionValue].prices:{};break;case'file':changes[optionHash]=optionValue||element.prop('disabled')?optionConfig.prices:{};break;} return changes;} $.widget('mage.priceOptions',{options:globalOptions,_init:function initPriceBundle(){$(this.options.optionsSelector,this.element).trigger('change');},_create:function createPriceOptions(){var form=this.element,options=$(this.options.optionsSelector,form),priceBox=$(this.options.priceHolderSelector,$(this.options.optionsSelector).element);if(priceBox.data('magePriceBox')&&priceBox.priceBox('option')&&priceBox.priceBox('option').priceConfig){if(priceBox.priceBox('option').priceConfig.optionTemplate){this._setOption('optionTemplate',priceBox.priceBox('option').priceConfig.optionTemplate);} this._setOption('priceFormat',priceBox.priceBox('option').priceConfig.priceFormat);} this._applyOptionNodeFix(options);options.on('change',this._onOptionChanged.bind(this));},_onOptionChanged:function onOptionChanged(event){var changes,option=$(event.target),handler=this.options.optionHandlers[option.data('role')];option.data('optionContainer',option.closest(this.options.controlContainer));if(handler&&handler instanceof Function){changes=handler(option,this.options.optionConfig,this);}else{changes=defaultGetOptionValue(option,this.options.optionConfig);} $(this.options.priceHolderSelector).trigger('updatePrice',changes);},_applyOptionNodeFix:function applyOptionNodeFix(options){var config=this.options,format=config.priceFormat,template=config.optionTemplate;template=mageTemplate(template);options.filter('select').each(function(index,element){var $element=$(element),optionId=utils.findOptionId($element),optionConfig=config.optionConfig&&config.optionConfig[optionId];$element.find('option').each(function(idx,option){var $option,optionValue,toTemplate,prices;$option=$(option);optionValue=$option.val();if(!optionValue&&optionValue!==0){return;} toTemplate={data:{label:optionConfig[optionValue]&&optionConfig[optionValue].name}};prices=optionConfig[optionValue]?optionConfig[optionValue].prices:null;if(prices){_.each(prices,function(price,type){var value=+price.amount;value+=_.reduce(price.adjustments,function(sum,x){return sum+x;},0);toTemplate.data[type]={value:value,formatted:utils.formatPriceLocale(value,format)};});$option.text(template(toTemplate));}});});},_setOptions:function setOptions(options){$.extend(true,this.options,options);this._super(options);return this;}});return $.mage.priceOptions;});