jquery-rowtool
Version:
jQuery plugin for dynamically adding rows to a table based on a qty input.
9 lines • 2.6 kB
JavaScript
/*
* jquery-rowtool - v0.0.1
* jQuery plugin for dynamically adding rows to a table based on a qty input.
* http://vonex-labs.github.io/jquery-rowtool
*
* Made by Vonex Telecom (https://www.vonex.com.au)
* Under MIT License
*/
!function(a,b,c,d){"use strict";function e(b,c){this.element=b,this.settings=a.extend({},g,c),this._defaults=g,this._name=f,this.init()}var f="rowTool",g={qtyInput:null,limitQty:null,minQty:null,maxQty:null,hideOnNone:null,template:null,htmlTemplate:null,updateTemplate:null,groupName:null,inputBoxes:[],inputBoxReady:null};a.extend(e.prototype,{init:function(){null===this.settings.template&&a.error("You need to define a template for new rows."),this.setupHtmlTemplate(this,this.settings.template),null===this.settings.limitQty&&(this.settings.limitQty=this.willLimitQty(this)),this.setupQtyLimit(this)},setupHtmlTemplate:function(b,c){if(1===a(c).length){var d=a(a(c).html());b.settings.htmlTemplate=d}},willLimitQty:function(b){var c=a(b.settings.qtyInput).attr("min"),e=a(b.settings.qtyInput).attr("max");return(c!==d||e!==d)&&(b.settings.minQty=c,b.settings.maxQty=e,a(b.element).data("numberOfLines",a(b.element).find("tbody").find("tr").length),!0)},setupQtyLimit:function(b){b.settings.limitQty===!0&&a(b.settings.qtyInput).change(function(){var c=parseInt(a(this).val()),d=b.settings.minQty,e=b.settings.maxQty;c<d?(c=d,a(this).val(d)):c>e&&(c=e,a(this).val(e)),b.updateNumberOfLinesInTable(b,c)})},updateNumberOfLinesInTable:function(b,c){var d=a(b.element),e=d.data("numberOfLines");if(e<c)for(var f=b.settings.htmlTemplate.clone(),g=e+1;g<c+1;g++){var h=b.makeFromTemplate(b,f,g);d.find("tbody").append(h),null!==b.settings.updateTemplate&&(h=b.settings.updateTemplate.call(b.element,h))}else for(var i=c+1;i<e+1;i++)d.find('tbody tr[data-row-number="'+i+'"]').remove();d.data("numberOfLines",c)},makeFromTemplate:function(a,b,c){if(b=b.clone(),null!==a.settings.groupName){var d=a.settings.inputBoxes;b.attr("class","isdn"),b.attr("data-row-number",c);var e;null!==(e=a.settings.qtyRow)&&b.find(e).html(c);var f=a.settings.inputBoxReady,g="object"==typeof a.settings.inputBoxReady&&null!==a.settings.inputBoxReady;d.forEach(function(d,e){var h='name="'+a.settings.groupName+"[]["+d+']"',i=a.settings.groupName+"["+c+"]["+d+"]",j=b.find("input["+h+"]");b.find("input["+h+"]").attr("name",i),g&&d in f&&f[d]instanceof Function&&f[d].call(a.element,j)})}return b},setupTable:function(b){a(this.element).text(b)}}),a.fn[f]=function(b){return this.each(function(){a.data(this,"plugin_"+f)||a.data(this,"plugin_"+f,new e(this,b))})}}(jQuery,window,document);