{"version":3,"sources":["plugins/template.js"],"names":["Template","$","NAME","DATA_KEY","JQUERY_NO_CONFLICT","fn","Default","templateTarget","templatePrefix","templateRow","templateAdd","templateRemove","templateRemoveFirst","element","config","_config","_element","self","document","off","on","e","preventDefault","_add","_remove","append","html","_rebuildName","$remove","closest","remove","eq","find","$target","$form","removeData","each","index","$row","$select","id","data","attr","select","$input","dependentProperty","attributes","i","name","match","hasClass","mask","date","numeric","token","upload","checkbox","$inputHidden","insertAfter","switch","switchery","radio","$textarea","editor","$span","validator","unobtrusive","parse","$this","extend","_jQueryInterface","call","ajaxStop","Constructor","noConflict","jQuery"],"mappings":"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","file":"template.js","sourcesContent":["const Template = (($) => {\r\n const NAME = 'template';\r\n const DATA_KEY = `bs.${NAME}`;\r\n const JQUERY_NO_CONFLICT = $.fn[NAME];\r\n\r\n\r\n const Default = {\r\n templateTarget: '', // jquery selector to append template mark up\r\n templatePrefix: '', // collection prefix name\r\n templateRow: 'tr', // jquery selector that indicate the row containing the template\r\n templateAdd: '', // jquery selector that trigger adding of a template\r\n templateRemove: '', // jquery selector that trigger removing of a template\r\n templateRemoveFirst: true // allow the removal of the first template\r\n };\r\n\r\n class Template {\r\n constructor(element, config) {\r\n this._config = config;\r\n this._element = element;\r\n\r\n const self = this;\r\n\r\n // register for click event on add and remove\r\n $(document).off('click', this._config.templateAdd).on('click', this._config.templateAdd, (e) => {\r\n e.preventDefault();\r\n this._add();\r\n }).off('click', this._config.templateRemove).on('click', this._config.templateRemove, function (e) {\r\n e.preventDefault();\r\n self._remove($(this));\r\n });\r\n\r\n }\r\n\r\n _add() {\r\n $(this._config.templateTarget).append($(this._element).html());\r\n this._rebuildName();\r\n }\r\n\r\n _remove($remove) {\r\n $remove.closest(this._config.templateRow).remove();\r\n\r\n // prevent user from removing the first row\r\n if (!this._config.templateRemoveFirst) {\r\n $(this._config.templateTarget + ' ' + this._config.templateRow).eq(0).find(this._config.templateRemove).remove();\r\n }\r\n\r\n this._rebuildName();\r\n }\r\n\r\n _rebuildName() {\r\n const\r\n self = this,\r\n $target = $(this._config.templateTarget),\r\n $form = $target.closest('form').removeData('unobtrusiveValidation validator');\r\n\r\n // re-build the template id and name via indexing\r\n $target.find(this._config.templateRow).each(function (index) {\r\n const $row = $(this);\r\n $row.find('select[data-template-name]').each(function () {\r\n const $select = $(this),\r\n id = `${self._config.templatePrefix}_${index}__${$select.data('template-name')}`;\r\n $select.attr('id', id).attr('aria-describedby', id).attr('name', `${self._config.templatePrefix}[${index}].${$select.data('template-name')}`).select();\r\n });\r\n\r\n $row.find('input[data-template-name]').each(function () {\r\n const $input = $(this),\r\n id = `${self._config.templatePrefix}_${index}__${$input.data('template-name')}`;\r\n $input.attr('id', id).attr('aria-describedby', id).attr('name', `${self._config.templatePrefix}[${index}].${$input.data('template-name')}`);\r\n\r\n //for dependent properties\r\n var dependentProperty = $input.data('template-dependentpropertyname');\r\n if (dependentProperty) {\r\n $.each($input[0].attributes, function (i, attr) {\r\n if (attr.name.match(/^.*dependentproperty$/)) {\r\n $input.attr(attr.name, `${self._config.templatePrefix}[${index}].${dependentProperty}`);\r\n }\r\n });\r\n }\r\n\r\n if ($input.hasClass('js-mask')) {\r\n $input.mask();\r\n } else if ($input.hasClass('js-date')) {\r\n $input.date();\r\n } else if ($input.hasClass('js-numeric')) {\r\n $input.numeric();\r\n } else if ($input.hasClass('js-token')) {\r\n $input.token();\r\n } else if ($input.hasClass('js-upload')) {\r\n $input.upload();\r\n } else {\r\n if ($input.hasClass('js-checkbox')) {\r\n $input.checkbox();\r\n // add hidden field for checkbox\r\n let $inputHidden = $(\"\");\r\n $inputHidden.attr('name', `${self._config.templatePrefix}[${index}].${$input.data('template-name')}`);\r\n $inputHidden.insertAfter($input);\r\n $input.checkbox();\r\n } else if ($input.hasClass('js-switch')) {\r\n $input.switch();\r\n } else if ($input.hasClass('js-switchery')) {\r\n $input.switchery();\r\n } else if ($input.hasClass('js-radio')) {\r\n $input.radio();\r\n }\r\n }\r\n });\r\n\r\n $row.find('textarea[data-template-name]').each(function () {\r\n const $textarea = $(this),\r\n id = `${self._config.templatePrefix}_${index}__${$textarea.data('template-name')}`;\r\n $textarea.attr('id', id).attr('aria-describedby', id).attr('name', `${self._config.templatePrefix}[${index}].${$textarea.data('template-name')}`);\r\n\r\n if ($textarea.hasClass('js-editor')) {\r\n $textarea.editor();\r\n }\r\n });\r\n\r\n $row.find('span[data-template-name]').each(function () {\r\n const $span = $(this);\r\n $span.attr('data-valmsg-for', `${self._config.templatePrefix}[${index}].${$span.data('template-name')}`);\r\n });\r\n });\r\n\r\n // re-build validators\r\n $.validator.unobtrusive.parse($form[0]);\r\n }\r\n\r\n dispose() {\r\n $.removeData(this._element, DATA_KEY);\r\n this._config = null;\r\n this._element = null;\r\n }\r\n\r\n static _jQueryInterface() {\r\n return this.each(function () {\r\n const $this = $(this);\r\n let data = $this.data(DATA_KEY);\r\n const config = $.extend({}, Default, $this.data());\r\n if (!data) {\r\n data = new Template(this, config);\r\n $this.data(DATA_KEY, data);\r\n }\r\n });\r\n }\r\n }\r\n\r\n $(() => Template._jQueryInterface.call($('script[data-template-target]')));\r\n $(document).ajaxStop(() => Template._jQueryInterface.call($('script[data-template-target]')));\r\n\r\n $.fn[NAME] = Template._jQueryInterface;\r\n $.fn[NAME].Constructor = Template;\r\n $.fn[NAME].noConflict = function () {\r\n $.fn[NAME] = JQUERY_NO_CONFLICT;\r\n return Template._jQueryInterface;\r\n }\r\n\r\n return Template;\r\n})(jQuery);"]}