-
Notifications
You must be signed in to change notification settings - Fork 0
/
kloner.min.js
6 lines (6 loc) · 5.54 KB
/
kloner.min.js
1
2
3
4
5
6
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).kloner=t()}(this,function(){"use strict";
/*!
kloner v0.0.1 (https://kloner.js.org)
by Kodie Grantham (https://kodieg.com)
*/function u(e,t,s){t&&t.constructor===Object&&(s=t,t=null),e&&e.constructor===Object&&(s=e,e=null),s=Object.assign({},u.defaultOptions,s||{}),e&&(s.containerSelector=e),t&&(s.childSelector=t);var r=u.getInstances(s.containerSelector);if(r&&r.length)for(var n=0;n<r.length;n++)!function(r){var e={add:function(e,t){return u.add(r,e,t)},remove:function(e,t){return u.remove(r,e,t)}},t=Object.assign({},s,u.getAttributeOptions(r),e);if(t.template){e=document.createElement(null);e.innerHTML=t.template;var n=e.firstElementChild.cloneNode(!0);r.klonerTemplate=n,r.klonerTemplateIndex=0,e.remove()}else{n=r.querySelector(t.childSelector);if(!n)return console.warn("[kloner] No template found:",t.childSelector);e=n.cloneNode(!0);r.klonerTemplate=e,r.klonerTemplateIndex=Array.prototype.indexOf.call(r.children,n),n.matches("[data-kloner-template]")&&n.remove()}for(var l=r.querySelectorAll(t.childSelector),o=l.length,a=0;a<o;a++)u.replaceParameters(l[a],Object.assign({},t.parameters||{},{index:a,number:a+1}));if(r.kloner=t,r.klonerCount=o,u.initializeTriggers(r),t.start&&(e=t.start,!Array.isArray(e)&&Number.isInteger(parseInt(e))&&(e=Array(parseInt(e)-r.klonerCount||0).fill({})),Array.isArray(e))&&e.forEach(function(e){t.add(null,{parameters:e})}),t.min&&r.klonerCount<parseInt(t.min))for(var c=0;c<parseInt(t.min)-r.klonerCount;c++)t.add();if(t.max&&r.klonerCount>parseInt(t.max))for(var i=0;i<r.klonerCount-parseInt(t.max);i++)t.remove()}(r[n]);return!!r.length&&(1===r.length?r[0]:r)}return u.add=function(e,t,r){t&&t.constructor===Object&&(r=t,t=null),e&&e.constructor===Object&&(r=e,e=null),r=Object.assign({},u.defaultOptions,r||{}),e&&(r.containerSelector=e);var n,l,o,a,c,i=u.getInstances(r.containerSelector,!0);if(i&&i.length)for(var s=0;s<i.length;s++)n=i[s],c=a=o=l=void 0,a=Object.assign({},r,r.kloner,u.getAttributeOptions(n)),c=n.klonerCount,a.max&&c>=parseInt(a.max)||(o=n.querySelectorAll(a.childSelector),l=n.klonerTemplate.cloneNode(!0),u.replaceParameters(l,Object.assign({},a.parameters||{},{index:c,number:c+1})),a.beforeAdd&&!1===a.beforeAdd(n,l,a))||((o=null!=(c=null!=(c=t)?c:o.length)?c:n.klonerTemplateIndex)?o>=n.children.length?n.append(l):n.insertBefore(l,n.children[o]):n.prepend(l),n.klonerCount++,u.initializeTriggers(n),a.afterAdd&&a.afterAdd(n,l,a))},u.defaultOptions={afterAdd:null,afterRemove:null,beforeAdd:null,beforeRemove:null,childSelector:"[data-kloner-template], :scope > *",containerSelector:"[data-kloner], .kloner",max:null,min:0,parameters:null,start:0,template:null},u.getAttributeOptions=function(e){e=e||u.defaultOptions.containerSelector;var n,l,e=u.getInstances(e,!1,!0);return e?(n=Object.assign({},e.dataset),l=/kloner([A-Z].*)/,Object.keys(n).filter(function(e){return l.test(e)}).reduce(function(e,t){var r=t.match(l);return e[r[1][0].toLowerCase()+r[1].slice(1)]=n[t],e},{})):{}},u.getInstances=function(e,t,r){if("string"==typeof e?e=document.querySelectorAll(e):e instanceof HTMLElement&&(e=[e]),t){for(var n=[],l=0;l<e.length;l++)(o=e[l]).kloner?n.push(o):console.warn("Element doesn't appear to be a kloner instance:",o);return n}var o;return e.length&&r?e[0]:e},u.initializeTriggers=function(e){e=e||u.defaultOptions.containerSelector;var t=u.getInstances(e,!0);if(t&&t.length)for(var r=0;r<t.length;r++)!function(l){var o=l.querySelectorAll("[data-kloner-add]");if((o=l.id?Array.prototype.slice.call(o).concat(Array.prototype.slice.call(document.querySelectorAll('[data-kloner-add="'+l.id+'"]'))):o).length)for(var e=0;e<o.length;e++)!function(n){o[n].klonerTrigger||(o[n].addEventListener("click",function(e){var t,r=null;o[n].dataset.klonerAdd.length||(t=o[n].closest(l.kloner.childSelector))&&(r=Array.prototype.indexOf.call(l.children,t)),l.kloner.add(r,u.getAttributeOptions(o[n]))}),o[n].klonerTrigger=!0)}(e);var a=l.querySelectorAll("[data-kloner-remove]");if((a=l.id?Array.prototype.slice.call(a).concat(Array.prototype.slice.call(document.querySelectorAll('[data-kloner-remove="'+l.id+'"]'))):a).length)for(var t=0;t<a.length;t++)!function(n){a[n].klonerTrigger||(a[n].addEventListener("click",function(e){var t,r=null;a[n].dataset.klonerRemove.length||(t=a[n].closest(l.kloner.childSelector))&&(r=Array.prototype.indexOf.call(l.children,t)),l.kloner.remove(r,u.getAttributeOptions(a[n]))}),a[n].klonerTrigger=!0)}(t);var r=l.querySelectorAll("[data-kloner-count]");if((r=l.id?Array.prototype.slice.call(r).concat(Array.prototype.slice.call(document.querySelectorAll('[data-kloner-count="'+l.id+'"]'))):r).length)for(var n=0;n<r.length;n++)r[n].textContent=l.klonerCount}(t[r])},u.remove=function(e,t,r){t&&t.constructor===Object&&(r=t,t=null),e&&e.constructor===Object&&(r=e,e=null),r=Object.assign({},u.defaultOptions,r||{}),e&&(r.containerSelector=e);var n,l,o,a,c=u.getInstances(r.containerSelector,!0);if(c&&c.length)for(var i=0;i<c.length;i++)n=c[i],a=o=l=void 0,o=Object.assign({},r,r.kloner,u.getAttributeOptions(n)),(a=n.klonerCount)<=0||o.min&&a<=parseInt(o.min)||(a=(a=n.querySelectorAll(o.childSelector))[l=(a=a.length-1)<(l=null!=(l=t)?l:a)?a:l],o.beforeRemove&&!1===o.beforeRemove(n,a,o))||(a.remove(),n.klonerCount--,u.initializeTriggers(n),o.afterRemove&&o.afterRemove(n,a,o))},u.replaceParameters=function(e,r){e.innerHTML=e.innerHTML.replaceAll(/\{kloner-(\w+)\}/g,function(e,t){return null!=(t=r[t])?t:e})},u});
//# sourceMappingURL=kloner.min.js.map