1 line
2.8 KiB
JavaScript
Executable File

!function($){$.fn.dependentFields=function(options){var settings=$.extend({wrapperClass:"hidden-wrapper",showClass:"on",hideClass:"off",parentData:"data-parent",showValuesData:"data-show-values",inverseData:"data-inverse"},options),i;$(this).each(function(){var parentFieldClean=$(this).attr(settings.parentData).replace("[]",""),parentFieldFull=parentFieldClean,showValues=$(this).attr(settings.showValuesData),inverseData=$(this).attr(settings.inverseData),that=this;$('*[name="'+parentFieldClean+'[]"]').get(0)&&(parentFieldFull=parentFieldClean+"[]"),showValues=(showValues=showValues.replace("\\,","{comma}")).split(/,\s*/);for(var i=0;i<showValues.length;i++)showValues[i]=showValues[i].replace("{comma}",",");inverseData="true"==inverseData||inverseData>0,$(".lcswitch")[0]&&$("body").delegate(".lcswitch","lcs-statuschange",function(){$(this).trigger("change")}),$('*[name="'+parentFieldFull+'"]').on("change ifChanged changed.bs.select",function(){var isRadio=$(this).is(":radio"),isCheckbox=$(this).is(":checkbox"),value;if(!0!==inverseData){if(isRadio?value=$('input[name="'+parentFieldFull+'"]:checked').val():isCheckbox?(value=[],$('input[name="'+parentFieldFull+'"]:checked').each(function(){value.push($(this).val())}),value.length<1&&(value=void 0)):value=$(this).val(),"object"==typeof value&null!==value)for(i=value.length-1;i>=0;i--)$.inArray(value[i],showValues)>-1&&(value=value[i],i=-1)}else value=void 0,isRadio?$.inArray($('input[name="'+parentFieldFull+'"]:checked').val(),showValues)<0&&(value=$('input[name="'+parentFieldFull+'"]:checked').val()):isCheckbox?(value=[],$('input[name="'+parentFieldFull+'"]:checked').each(function(){$.inArray($(this).val(),showValues)<0&&value.push($(this).val())}),value.length<1&&(value=void 0)):$.inArray($(this).val(),showValues)<0&&(value=$(this).val()),"object"==typeof value&&(value=value[0]);$.inArray(value,showValues)>-1?!0!==inverseData&&($(that).removeClass(settings.hideClass).addClass(settings.showClass),$(that).children().not(".hidden-wrapper").prop("disabled",!1)):!0===inverseData&&void 0!==value?($(that).removeClass(settings.hideClass).addClass(settings.showClass),$(that).children().not(".hidden-wrapper").prop("disabled",!1)):($(that).removeClass(settings.showClass).addClass(settings.hideClass),$(that).children().not(".hidden-wrapper").prop("disabled",!0))});var arr=[],$current;$('*[name="'+parentFieldFull+'"]').each(function(){-1===$.inArray(parentFieldClean,arr)&&($(this).next(".iCheck-helper").length>0&&$(this).is(":checked")?($(this).trigger("ifChanged"),arr.push(parentFieldClean)):$(this).parent(".bootstrap-select").length>0&&""!==$(this).val()?($(this).trigger("changed.bs.select"),arr.push(parentFieldClean)):($(this).is(":checked")||""!==$(this).val()&&!$(this).is(":checkbox")&&!$(this).is(":radio"))&&($(this).trigger("change"),arr.push(parentFieldClean)))})})}}(jQuery);