-
Notifications
You must be signed in to change notification settings - Fork 6
/
addel.jquery.min.js
1 lines (1 loc) · 3.72 KB
/
addel.jquery.min.js
1
"use strict";var pluginName="addel";if("undefined"==typeof jQuery)throw new Error(pluginName+" requires jQuery");!function(t){var e=function(e,n){var i=this;this.$container=t(e),this.settings=t.extend(!0,{},t.fn[pluginName].defaults,n),this.settings.formElements="input, select, textarea",["hide","add"].forEach(function(t){i.settings[t]=i.$container.data(pluginName+"-"+t)||i.settings[t]}),["duration","easing"].forEach(function(t){i.settings.animation[t]=i.$container.data(pluginName+"-animation-"+t)||i.settings.animation[t]}),this.selectors={},t.each(this.settings.classes,function(t,e){i.selectors[t]="."+e+", [data-"+pluginName+"-"+t+"]"})};e.prototype={init:function(){this.settings.hide&&this.toggleTargetInputState(this.getLastTarget()).hide(),this.$container.on("click",this.selectors.add,{plugin:this},this.add).on("click",this.selectors["delete"],{plugin:this},this["delete"]).on(pluginName+":add",this.settings.events.add).on(pluginName+":added",this.settings.events.added).on(pluginName+":delete",this.settings.events["delete"]).on(pluginName+":deleted",this.settings.events.deleted)},add:function(e){var n=e.data.plugin,i=n.getLastTarget(),s=t(this).data(pluginName+"-add")||n.settings.add;if(n.triggerAddEvent(i).defaultPrevented)return!1;var a=t();0===n.getVisibleTargetsCount()&&(s--,n.toggleTargetVisibility(i),a=a.add(i)),a=a.add(n.addTarget(i,s)),n.focusOnTargetInput(a),n.triggerAddedEvent(i,a)},addTarget:function(e,n){var i=t();e.finish();for(var s=0;s<n;s++){var a=e.clone();i=i.add(a),a.insertAfter(e).hide().fadeIn(this.settings.animation).find(this.settings.formElements).val(null)}return i},"delete":function(e){var n=e.data.plugin,i=t(this).closest(n.selectors.target);return!n.triggerDeleteEvent(i).defaultPrevented&&(1===n.getVisibleTargetsCount()?(n.toggleTargetVisibility(i),n.focusOnAdd()):(n.focusOnDelete(i),n.deleteTarget(i)),void n.triggerDeletedEvent(i))},deleteTarget:function(e){e.addClass(this.settings.classes.deleting).fadeOut(this.settings.animation.duration,this.settings.animation.easing,function(){t(this).remove()})},toggleTargetVisibility:function(t){this.toggleTargetInputState(t).fadeToggle(this.settings.animation)},toggleTargetInputState:function(t){return t.find(this.settings.formElements).prop("disabled",function(t,e){return!e}),t},focusOnTargetInput:function(t){t.last().find(":input:enabled:visible:first").focus()},focusOnAdd:function(){this.$container.find(this.selectors.add).first().focus()},focusOnDelete:function(t){var e=t.prev(this.selectors.target).not("."+this.settings.classes.deleting),n=t.next(this.selectors.target).not("."+this.settings.classes.deleting),i=e.length?e:n;i.find(this.selectors["delete"]).focus()},getLastTarget:function(t){return this.$container.find(this.selectors.target).slice(-t||-1)},getVisibleTargetsCount:function(){return this.$container.find(this.selectors.target).filter(":visible").not("."+this.settings.classes.deleting).length},triggerAddEvent:function(e){var n=t.Event(pluginName+":add",{target:e});return this.$container.trigger(n),n},triggerAddedEvent:function(e,n){this.$container.trigger(t.Event(pluginName+":added",{target:e,added:n}))},triggerDeleteEvent:function(e){var n=t.Event(pluginName+":delete",{target:e});return this.$container.trigger(n),n},triggerDeletedEvent:function(e){this.$container.trigger(t.Event(pluginName+":deleted",{target:e}))}},t.fn[pluginName]=function(n){return this.each(function(){t.data(this,"plugin_"+pluginName)||t.data(this,"plugin_"+pluginName,new e(this,n)).init()})},t.fn[pluginName].defaults={hide:!1,add:1,classes:{target:pluginName+"-target",add:pluginName+"-add","delete":pluginName+"-delete",deleting:pluginName+"-deleting"},animation:{duration:0,easing:"swing"},events:{add:function(){},added:function(){},"delete":function(){},deleted:function(){}}}}(jQuery);