forked from renvrant/conditionize.js
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathjquery.conditionize2.min.js
1 lines (1 loc) · 2.73 KB
/
jquery.conditionize2.min.js
1
(function($){$.fn.conditionize=function(options){if(options&&options.hasOwnProperty("ifFalse")&&options.ifFalse===undefined){options.ifFalse=false}if(options&&options.hasOwnProperty("ifTrue")&&options.ifTrue===undefined){options.ifTrue=false}var settings=$.extend({updateOn:"change",onload:true,ifTrue:"show",ifFalse:"hide"},options);if(Array.isArray(settings.updateOn)){settings.updateOn=settings.updateOn.join(" ")}function prepareActions(e){if(!e||e==="ignore"){return[]}if(typeof e==="string"){e=[e]}if(typeof e==="function"){e=[e]}if(Array.isArray(e)&&e.every(function(e){return typeof e==="string"&&$.fn.conditionize.actions.hasOwnProperty(e.split(":")[0])||typeof e==="function"})){return e}throw new TypeError("Incorrect action type for ifTrue or ifFalse."+"ifTrue/ifFalse must be either a string with default action name,"+'i.e. one of "show", "hide", "clear", "trigger" or a function with '+"one argument ($section); or array consisting of them.")}settings.ifTrue=prepareActions(settings.ifTrue);settings.ifFalse=prepareActions(settings.ifFalse);var handler=function(e,i){var n;if(e){n=settings.ifTrue}else{n=settings.ifFalse}n.forEach(function(e){if(typeof e==="string"){if(e.substring(0,7)==="trigger"){if(e==="trigger"){$.fn.conditionize.actions.trigger(i,settings.updateOn)}else{$.fn.conditionize.actions.trigger(i,e.slice(8))}}else{$.fn.conditionize.actions[e](i)}}else{if(typeof e==="function"){e(i)}}})};return this.each(function(){var $section=$(this);var cond=$(this).data("condition");var allFields=[];cond=cond.replace($.fn.conditionize.re,function(e,i){var n=i.substring(0,1)==="#"?i:"[name='"+i+"']";if($(n).length){if(allFields.indexOf(n)===-1){allFields.push(n)}return'$.fn.conditionize.getValue("'+n+'")'}else{return i}});allFields.forEach(function(field){$(field).on(settings.updateOn,function(){handler(eval(cond),$section)})});if(settings.onload){if(document.readyState==="complete"){handler(eval(cond),$section)}else{$(window).on("load",function(){handler(eval(cond),$section)})}}})};$.extend($.fn.conditionize,{re:new RegExp("(#?[a-z0-9_\\[\\]-]+)"+"(?:(?=([^\"]*\"[^\"]*\")*[^\"]*$)(?=([^']*'[^']*')*[^']*$))","gi"),getValue:function(e){var i;if($(e).attr("type")==="radio"){i=$(e+":checked").val()}else{i=$(e).map(function(){if($(this).attr("type")==="checkbox"){return this.checked?this.value:false}else{return $(this).val()}}).get();if(i.length===1){i=i[0]}}return i},actions:{show:function(e){e.slideDown()},hide:function(e){e.slideUp()},clearFields:function(e){e.find("select, input").each(function(){if($(this).attr("type")==="radio"||$(this).attr("type")==="checkbox"){$(this).prop("checked",false)}else{$(this).val("")}$(this).trigger("change")})},trigger:function(i,e){e=e.replace(","," ");e.split(" ").forEach(function(e){i.trigger(e)})}}})})(jQuery);