{"version":3,"file":"crispy-formset-modal.min.js","sources":["../../../../js/src/icons.js","../../../../js/src/utils.js","../../../../js/src/formset.js","../../../../js/src/modal.js","../../../../js/src/modal-form.js","../../../../js/src/formset-modal.js","../../../../js/src/index.js"],"sourcesContent":["const bootstrapPencilIcon = `\n\n \n\n`;\n\nconst tailwindPencilIcon = `\n\n \n\n`;\n\nexport { bootstrapPencilIcon, tailwindPencilIcon };\n","import { bootstrapPencilIcon, tailwindPencilIcon } from \"./icons\";\n\nlet gettext = window.gettext;\nconst _has = Object.prototype.hasOwnProperty;\n/**\n * Checks if the object has the property passed as argument\n */\nexport function has(object, key) {\n return _has.call(object, key);\n}\n\nexport function uuidv4() {\n function randomHex() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n const part1 = randomHex() + randomHex();\n const part2 = randomHex();\n const part3 = ((parseInt(randomHex(), 16) & 0x0fff) | 0x4000).toString(16);\n const part4 = ((parseInt(randomHex(), 16) & 0x3fff) | 0x8000).toString(16);\n const part5 = randomHex() + randomHex() + randomHex();\n\n return `${part1}-${part2}-${part3}-${part4}-${part5}`;\n}\n\nexport function getTextValue(el) {\n let type = el.tagName.toLowerCase();\n let textValue = \"\";\n if (type === \"select\") {\n textValue = el.options[el.selectedIndex].innerText;\n } else {\n if (has(el, \"inputmask\")) {\n textValue = el.inputmask.undoValue;\n } else {\n if (el.getAttribute(\"type\") == \"date\") {\n if (el.value) {\n textValue = new Date(...el.value.split(\"-\")).toLocaleDateString();\n }\n } else {\n if (el.getAttribute(\"type\") == \"checkbox\") {\n textValue = el.checked ? \"on\" : \"off\";\n } else {\n textValue = el.value;\n }\n }\n }\n }\n return textValue;\n}\n\nexport function getNumberValue(value) {\n return Number(value);\n}\n\nexport function executeAllCalculatedFields() {\n if (window.hasOwnProperty(\"calculatedFields\")) {\n calculatedFields.forEach(function (obj) {\n obj.executeAll();\n });\n }\n}\n\nexport function hookCalculatedFields() {\n if (window.hasOwnProperty(\"calculatedFields\")) {\n window.calculatedFields.forEach(function (obj) {\n let el = obj.field;\n let id = el.getAttribute(\"id\");\n let column = document.querySelector(\"td[data-source='\" + id + \"']\");\n if (column) {\n if (!el.hasAttribute(\"data-event\")) {\n el.addEventListener(\"oncalculate\", function () {\n let content = getTextValue(el);\n // The column element is refetched since the table is recreated on each event\n let _column = document.querySelector(\n \"td[data-source='\" + id + \"']\"\n );\n if (_column) {\n _column.innerText = content;\n }\n });\n el.setAttribute(\"data-event\", true);\n }\n }\n });\n }\n}\n\nexport function removeChildren(a) {\n while (a.hasChildNodes()) {\n a.removeChild(a.lastChild);\n }\n}\n\nexport function injectStyles() {\n const css = `\n .cfm-selection-border {\n position: absolute;\n top: 0px;\n bottom: 0px;\n left: 0px;\n width: 0.150rem;\n background-color: rgb(220 53 69 / 1);\n }\n .cfm-modal-backdrop {\n position: fixed;\n inset: 0px;\n z-index: 100;\n background-color: rgb(31 41 55 / 1);\n opacity: 0;\n transition-property: opacity;\n transition-duration: 300ms;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n }\n .cfm-opacity-50 {\n opacity: 0.5;\n }\n .cfm-opacity-100 {\n opacity: 1;\n }\n .cfm-tr.selected{\n background-color: rgba(0, 0, 0, 0.08) !important;\n }\n .cfm .modal-body {\n max-height: calc(100vh - 150px);\n overflow-x: auto;\n }\n .cfm-cursor-pointer {\n cursor: pointer;\n }\n `;\n const style = document.createElement(\"style\");\n style.innerHTML = css;\n document.head.appendChild(style);\n}\n\nexport function getModalInstance(id, instances) {\n if (instances.some((modalInstance) => modalInstance.id === id)) {\n return instances.find((modalInstance) => modalInstance.id === id);\n }\n return false;\n}\n\nexport function ready(fn) {\n if (document.readyState !== \"loading\") {\n fn();\n } else {\n document.addEventListener(\"DOMContentLoaded\", fn);\n }\n}\n\nif (!window.django || !window.django.jsi18n_initialized) {\n gettext = (msg) => msg;\n}\n\nconst bootstrap4Classes = {\n hidden: \"d-none\",\n inlineFlex: \"d-inline-flex\",\n flex: \"d-flex\",\n relative: \"position-relative\",\n textRight: \"text-right\",\n textCenter: \"text-center\",\n alignMiddle: \"align-middle\",\n pointer: \"cfm-cursor-pointer\",\n editBtn: \"btn-open-row btn btn-sm btn-primary\",\n checkbox: \"checkbox\",\n td: \"cfm-td\",\n tr: \"cfm-tr\",\n selectionMark: \"cfm-selection-border\",\n p0: \"p-0\",\n opacity50: \"cfm-opacity-50\",\n opacity100: \"cfm-opacity-100\",\n backdrop: \"cfm-modal-backdrop\",\n justifyStart: \"justify-content-start\",\n justifyCenter: \"justify-content-center\",\n justifyEnd: \"justify-content-end\",\n itemsStart: \"align-items-start\",\n itemsCenter: \"align-items-center\",\n itemsEnd: \"align-items-end\",\n};\n\nconst bootstrap5Classes = {\n ...bootstrap4Classes,\n textRight: \"text-end\",\n};\n\nconst tailwindClasses = {\n hidden: \"hidden\",\n inlineFlex: \"inline-flex\",\n flex: \"flex\",\n relative: \"relative\",\n textRight: \"text-right\",\n textCenter: \"text-center\",\n alignMiddle: \"align-middle\",\n pointer: \"cursor-pointer\",\n editBtn:\n \"btn-open-row mx-auto p-1 border border-transparent rounded-full shadow-sm text-gray-500 bg-gray-100 hover:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-gray-500\",\n checkbox:\n \"w-4 rounded border-gray-300 focus:ring-indigo-500 text-indigo-600 h-4\",\n td: \"whitespace-nowrap px-3 py-3 text-sm text-gray-500\",\n tr: \"divide-x divide-gray-200 border-b\",\n selectionMark:\n \"absolute inset-y-0 left-0 w-0.5 bg-indigo-600 selection-border\",\n p0: \"p-0\",\n opacity50: \"opacity-50\",\n opacity100: \"opacity-100\",\n backdrop:\n \"transition-opacity ease-in-out duration-300 opacity-0 bg-gray-800 fixed inset-0 z-40\",\n justifyStart: \"justify-start\",\n justifyCenter: \"justify-center\",\n justifyEnd: \"justify-end\",\n itemsStart: \"items-start\",\n itemsCenter: \"items-center\",\n itemsEnd: \"items-end\",\n};\n\nconst bulmaClasses = {\n hidden: \"is-hidden\",\n inlineFlex: \"is-inline-flex\",\n flex: \"is-flex\",\n relative: \"is-relative\",\n textRight: \"has-text-right\",\n textCenter: \"has-text-center\",\n alignMiddle: \"is-vcentered\",\n pointer: \"cfm-cursor-pointer\",\n editBtn: \"btn-open-row button is-primary is-small\",\n checkbox: \"checkbox\",\n td: \"cfm-td\",\n tr: \"cfm-tr\",\n selectionMark: \"cfm-selection-border\",\n p0: \"p-0\",\n opacity50: \"cfm-opacity-50\",\n opacity100: \"cfm-opacity-100\",\n backdrop: \"cfm-modal-backdrop\",\n justifyStart: \"is-justify-content-start\",\n justifyCenter: \"is-justify-content-center\",\n justifyEnd: \"is-justify-content-end\",\n itemsStart: \"is-align-items-start\",\n itemsCenter: \"is-align-items-center\",\n itemsEnd: \"is-align-items-end\",\n};\n\n\nconst tailwindSizeClasses = {\n sm: \"max-w-lg\",\n md: \"max-w-4xl\",\n lg: \"max-w-5xl\",\n xl: \"max-w-6xl\",\n};\n\nconst bootstrap4SizeClasses = {\n sm: \"modal-sm\",\n md: \"modal-md\",\n lg: \"modal-lg\",\n xl: \"modal-xl\",\n};\n\nconst bootstrap5SizeClasses = bootstrap4SizeClasses;\n\nconst bulmaSizeClasses = {\n sm: \"modal-sm\",\n md: \"modal-md\",\n lg: \"modal-lg\",\n xl: \"modal-xl\",\n};\n\nconst templatePacks = {\n bootstrap4: {\n classes: bootstrap4Classes,\n sizes: bootstrap4SizeClasses,\n pencilIcon: bootstrapPencilIcon,\n },\n bootstrap5: {\n classes: bootstrap5Classes,\n sizes: bootstrap5SizeClasses,\n pencilIcon: bootstrapPencilIcon,\n },\n tailwind: {\n classes: tailwindClasses,\n sizes: tailwindSizeClasses,\n pencilIcon: tailwindPencilIcon,\n },\n bulma: {\n classes: bulmaClasses,\n sizes: bulmaSizeClasses,\n pencilIcon: bootstrapPencilIcon,\n },\n};\n\nexport { gettext, bootstrap4Classes, templatePacks };\n","/**\n* Django formset helper\n* Copyright (c) 2013, Ionata Web Solutions\n* All rights reserved.\n*\n* Redistribution and use in source and binary forms, with or without\n* modification, are permitted provided that the following conditions are met:\n*\n* Redistributions of source code must retain the above copyright notice, this\n* list of conditions and the following disclaimer.\n*\n* Redistributions in binary form must reproduce the above copyright notice, this\n* list of conditions and the following disclaimer in the documentation and/or\n* other materials provided with the distribution.\n*\n* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nimport { uuidv4 } from \"./utils\";\nimport $ from \"jquery\";\n\nexport const pluginName = 'formset';\n\n\nclass Formset {\n constructor(el, options) {\n var _this = this;\n\n //Defaults:\n this.opts = $.extend({}, Formset.defaults, options);\n\n this.$formset = $(el);\n this.$formset.attr(\"data-uuid\", uuidv4());\n this.$emptyForm = this.$formset.find(this.opts.emptyForm);\n this.$body = this.$formset.find(this.opts.body);\n this.$add = this.$formset.find(this.opts.add);\n\n this.formsetPrefix = $(el).data('formset-prefix');\n\n // Bind to the `Add form` button\n this.addForm = $.proxy(this, 'addForm');\n this.$add.click(this.addForm);\n\n // Bind receiver to `formAdded` and `formDeleted` events\n this.$formset.on('formAdded formDeleted', this.opts.form, $.proxy(this, 'checkMaxForms'));\n\n // Set up the existing forms\n this.$forms().each(function (i, form) {\n var $form = $(form);\n _this.bindForm($(this), i);\n });\n\n // Store a reference to this in the formset element\n this.$formset.data(pluginName, this);\n\n var extras = ['animateForms'];\n $.each(extras, function (i, extra) {\n if ((extra in _this.opts) && (_this.opts[extra])) {\n _this[extra]();\n }\n });\n }\n static getOrCreate(el, options) {\n var rev = $(el).data(pluginName);\n if (!rev) {\n rev = new Formset(el, options);\n }\n\n return rev;\n }\n addForm() {\n // Don't proceed if the number of maximum forms has been reached\n if (this.hasMaxForms()) {\n throw new Error(\"MAX_NUM_FORMS reached\");\n }\n\n var newIndex = this.totalFormCount();\n this.$managementForm('TOTAL_FORMS').val(newIndex + 1);\n\n var newFormHtml = this.$emptyForm.html()\n .replace(new RegExp('__prefix__', 'g'), newIndex)\n .replace(new RegExp('<\\\\\\\\/script>', 'g'), '');\n\n var $newFormFragment = $($.parseHTML(newFormHtml, this.$body.document, true));\n this.$body.append($newFormFragment);\n\n var $newForm = $newFormFragment.filter(this.opts.form);\n this.bindForm($newForm, newIndex);\n if (this.opts.newFormCallback) {\n this.opts.newFormCallback($newForm);\n }\n return $newForm;\n }\n /**\n * Attach any events needed to a new form\n */\n bindForm($form, index) {\n var prefix = this.formsetPrefix + '-' + index;\n $form.data(pluginName + '__formPrefix', prefix);\n\n var $delete = $form.find('[name=' + prefix + '-DELETE]');\n\n // Trigger `formAdded` / `formDeleted` events when delete checkbox value changes\n $delete.change(function (event) {\n if ($delete.is(':checked')) {\n $form.attr('data-formset-form-deleted', '');\n // Remove required property and pattern attribute to allow submit, back it up to data field\n $form.find(':required').data(pluginName + '-required-field', true).prop('required', false);\n $form.find('input[pattern]').each(function () {\n var pattern = $(this).attr('pattern');\n $(this).data(pluginName + '-field-pattern', pattern).removeAttr('pattern');\n });\n $form.trigger('formDeleted');\n } else {\n $form.removeAttr('data-formset-form-deleted');\n // Restore required property and pattern attributes from data field\n $form.find('*').filter(function () {\n return $(this).data(pluginName + '-required-field') === true;\n }).prop('required', true);\n $form.find('input').each(function () {\n var pattern = $(this).data(pluginName + '-field-pattern');\n if (pattern) {\n $(this).attr('pattern', pattern);\n }\n });\n $form.trigger('formAdded');\n }\n }).trigger('change');\n\n var $deleteButton = $form.find(this.opts.deleteButton);\n\n $deleteButton.bind('click', function () {\n $delete.attr('checked', true).change();\n });\n }\n $forms() {\n return this.$body.find(this.opts.form);\n }\n $managementForm(name) {\n return this.$formset.find('[name=' + this.formsetPrefix + '-' + name + ']');\n }\n totalFormCount() {\n return this.$forms().length;\n }\n deletedFormCount() {\n return this.$forms().filter('[data-formset-form-deleted]').length;\n }\n clear() {\n this.$forms().each(function (key, row) {\n $(row).find(':input').not(':button, :submit, :reset, :hidden, :checkbox, :radio').val('');\n });\n }\n deleteAll() {\n this.$forms().each(function (key, row) {\n $(row).find('[deletecheckbox]').prop(\"checked\", true).change();\n });\n }\n activeFormCount() {\n return this.totalFormCount() - this.deletedFormCount();\n }\n openRownum() {\n var rownum = this.$formset.find('tr.row-open').attr('data-rownum');\n return typeof rownum != undefined ? parseInt(rownum) : 0;\n }\n hasMaxForms() {\n var maxForms = parseInt(this.$managementForm('MAX_NUM_FORMS').val(), 10) || 1000;\n return this.activeFormCount() >= maxForms;\n }\n checkMaxForms() {\n if (this.hasMaxForms()) {\n this.$formset.addClass(this.opts.hasMaxFormsClass);\n this.$add.attr('disabled', 'disabled');\n } else {\n this.$formset.removeClass(this.opts.hasMaxFormsClass);\n this.$add.removeAttr('disabled');\n }\n }\n animateForms() {\n this.$formset.on('formAdded', this.opts.form, function () {\n var $form = $(this);\n $form.slideUp(0);\n $form.slideDown();\n }).on('formDeleted', this.opts.form, function () {\n var $form = $(this);\n $form.slideUp();\n });\n this.$forms().filter('[data-formset-form-deleted]').slideUp(0);\n }\n}\n\nFormset.defaults = {\n form: '[data-formset-form]',\n emptyForm: 'script[type=form-template][data-formset-empty-form]',\n body: '[data-formset-body]',\n add: '[data-formset-add]',\n deleteButton: '[data-formset-delete-button]',\n hasMaxFormsClass: 'has-max-forms',\n animateForms: false,\n newFormCallback: false\n};\n\nexport default Formset;\n","import { uuidv4, templatePacks } from \"./utils\";\n\nconst modalDefault = {\n placement: \"center\",\n size: \"md\",\n templatePack: null,\n onHide: () => {},\n onShow: () => {},\n onToggle: () => {},\n};\n\nclass Modal {\n constructor(targetEl = null, options = {}) {\n this._targetEl = targetEl;\n this._parentEl = targetEl.parentElement;\n this._options = {\n ...modalDefault,\n ...options,\n };\n this._isHidden = true;\n this._init();\n this._addEventListeners();\n }\n _init() {\n this._getPlacementClasses().map((c) => {\n this._targetEl.classList.add(c);\n });\n this._clearSize();\n this._getSizeClasses().map((c) => {\n this._targetEl.firstElementChild.classList.add(c);\n });\n }\n _createBackdrop(id) {\n if (this._isHidden) {\n const backdropEl = document.createElement(\"div\");\n backdropEl.setAttribute(\"data-ref-id\", id);\n backdropEl.setAttribute(\"modal-backdrop\", \"\");\n backdropEl.classList.add(...this._getClasses(\"backdrop\"));\n this._parentEl.append(backdropEl);\n backdropEl.offsetWidth;\n backdropEl.classList.add(...this._getClasses(\"opacity50\"));\n }\n }\n _destroyBackdropEl() {\n if (!this._isHidden) {\n let id = this._targetEl.getAttribute(\"data-ref-id\");\n document.querySelector(`[modal-backdrop][data-ref-id=\"${id}\"]`).remove();\n }\n }\n _getPlacementClasses() {\n let that = this;\n switch (this._options.placement) {\n // top\n case \"top-left\":\n return [\n that._getClasses(\"justifyStart\", false),\n that._getClasses(\"itemsStart\", false),\n ];\n case \"top-center\":\n return [\n that._getClasses(\"justifyCenter\", false),\n that._getClasses(\"itemsStart\", false),\n ];\n case \"top-right\":\n return [\n that._getClasses(\"justifyEnd\", false),\n that._getClasses(\"itemsStart\", false),\n ];\n\n // center\n case \"center-left\":\n return [\n that._getClasses(\"justifyStart\", false),\n that._getClasses(\"itemsCenter\", false),\n ];\n case \"center\":\n return [\n that._getClasses(\"justifyCenter\", false),\n that._getClasses(\"itemsCenter\", false),\n ];\n case \"center-right\":\n return [\n that._getClasses(\"justifyEnd\", false),\n that._getClasses(\"itemsCenter\", false),\n ];\n\n // bottom\n case \"bottom-left\":\n return [\n that._getClasses(\"justifyStart\", false),\n that._getClasses(\"itemsEnd\", false),\n ];\n case \"bottom-center\":\n return [\n that._getClasses(\"justifyCenter\", false),\n that._getClasses(\"itemsEnd\", false),\n ];\n case \"bottom-right\":\n return [\n that._getClasses(\"justifyEnd\", false),\n that._getClasses(\"itemsEnd\", false),\n ];\n\n default:\n return [\n that._getClasses(\"justifyCenter\", false),\n that._getClasses(\"itemsCenter\", false),\n ];\n }\n }\n _getSizeClasses() {\n return templatePacks[this._options.templatePack].sizes[\n this._options.size\n ].split(\" \");\n }\n _getClasses(name, str = false) {\n let names = templatePacks[this._options.templatePack].classes[name];\n return str ? names : names.split(\" \");\n }\n _clearSize() {\n const element = this._targetEl.firstElementChild;\n const obj = templatePacks[this._options.templatePack].sizes;\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n element.classList.remove(obj[key]);\n }\n }\n }\n _addEventListeners() {\n let that = this;\n this._targetEl.addEventListener(\"keyup\", function (e) {\n if (e.key === \"Escape\") {\n that.hide();\n }\n });\n }\n toggle() {\n if (this._isHidden) {\n this.show();\n } else {\n this.hide();\n }\n\n // callback function\n this._options.onToggle(this);\n }\n show() {\n const id = uuidv4();\n this._targetEl.classList.add(...this._getClasses(\"flex\"));\n this._targetEl.classList.remove(...this._getClasses(\"hidden\"));\n this._targetEl.setAttribute(\"aria-modal\", \"true\");\n this._targetEl.setAttribute(\"role\", \"dialog\");\n this._targetEl.removeAttribute(\"aria-hidden\");\n this._targetEl.setAttribute(\"data-ref-id\", id);\n this._createBackdrop(id);\n this._isHidden = false;\n\n document.body.classList.add(\"modal-open\");\n\n // callback function\n this._options.onShow(this);\n\n let firstEl = this._targetEl.querySelector(\n 'select, input:not([type=\"hidden\"]'\n );\n if (firstEl) {\n firstEl.setAttribute(\"tabindex\", \"0\");\n firstEl.focus();\n }\n this._targetEl.offsetWidth;\n this._targetEl.classList.add(...this._getClasses(\"opacity100\"));\n }\n hide() {\n this._targetEl.classList.add(...this._getClasses(\"hidden\"));\n this._targetEl.classList.remove(...this._getClasses(\"flex\"));\n this._targetEl.setAttribute(\"aria-hidden\", \"true\");\n this._targetEl.removeAttribute(\"aria-modal\");\n this._targetEl.removeAttribute(\"role\");\n this._destroyBackdropEl();\n this._isHidden = true;\n\n document.body.classList.remove(\"modal-open\");\n\n // callback function\n this._options.onHide(this);\n }\n}\n\nexport default Modal;\n","import Modal from \"./modal\";\nimport { gettext } from \"./utils\";\n\nconst modalFormOptions = {\n parent: null,\n modalId: null,\n onKeyUp: function () {},\n onClose: function () {},\n onOpen: function () {},\n};\n\nclass ModalForm {\n constructor(targetEl, options = {}) {\n this.targetEl = targetEl;\n this._options = {\n ...modalFormOptions,\n ...options,\n };\n this.modalId = this._options.modalId;\n this._modalEl = null;\n this._modalTitleEl = null;\n this._modalDeleteBt = null;\n this.modalInstance = false;\n this.rownum = null;\n this._init();\n this._addEvents();\n }\n _init() {\n this._modalEl = document.getElementById(this.modalId);\n this._modalTitleEl = this._modalEl.querySelector(\".modal-title\");\n this._modalDeleteBt = this._modalEl.querySelector(\".formset-delete\");\n this._createModal();\n }\n _addEvents() {\n let that = this;\n this._modalEl\n .querySelectorAll('[data-formset-modal-toggle=\"' + this.modalId + '\"]')\n .forEach(function (el) {\n el.addEventListener(\"click\", function () {\n that.close();\n });\n });\n }\n hasFieldError(fieldId) {\n let fieldWrapper = this.targetEl.querySelector(`#div_${fieldId}`);\n let hasError = false;\n let errorText = \"\";\n fieldWrapper.querySelectorAll(\".field-error\").forEach(function (el) {\n hasError = true;\n errorText = el.innerText;\n });\n return { error: hasError, text: errorText };\n }\n hasNonFieldError() {\n return this.targetEl.querySelector(\".non-field-errors\") != null;\n }\n _hiddeDefaultDeleteBt(el) {\n let parentEl = el.parentNode;\n parentEl.classList.add(\"d-none\");\n }\n _createModal() {\n let that = this;\n if (!this.modalInstance) {\n let deleteBt = this.targetEl.querySelector(\".formset-delete\");\n let modal = new Modal(this._modalEl, {\n placement: that._options.placement,\n size: that._options.size,\n templatePack: that._options.templatePack,\n onHide: function (modal) {\n that._onModalClose(modal);\n },\n onShow: function (modal) {\n that._onModalShow(modal);\n },\n });\n modal._targetEl.addEventListener(\"keyup\", function (e) {\n that._options.onKeyUp(e, that);\n });\n this.modalInstance = modal;\n this._hiddeDefaultDeleteBt(deleteBt);\n }\n }\n _onModalShow(modal) {\n this._options.onOpen(this);\n let openRowBt = this._options.parent.targetEl.querySelector(\n \".btn-open-row[data-formset-modal-toggle='\" + this.modalId + \"']\"\n );\n let tr = openRowBt.closest(\"tr\");\n this._modalTitleEl.innerText = gettext(\"Editing row #\") + this.rownum;\n tr.classList.add(\"row-open\");\n }\n _onModalClose(modal) {\n this._options.onClose(this);\n let openRowBt = this._options.parent.targetEl.querySelector(\n \".btn-open-row[data-formset-modal-toggle='\" + this.modalId + \"']\"\n );\n if (openRowBt) {\n let tr = openRowBt.closest(\"tr\");\n tr.classList.remove(\"row-open\");\n }\n }\n isDeleted() {\n return this.targetEl.hasAttribute(\"data-formset-form-deleted\");\n }\n isSelected() {\n return this.targetEl.hasAttribute(\"data-formset-form-selected\");\n }\n open() {\n this.modalInstance.show();\n }\n close() {\n this.modalInstance.hide();\n }\n}\n\nexport default ModalForm;\n","import $ from \"jquery\";\nimport ModalForm from \"./modal-form\";\nimport {\n executeAllCalculatedFields,\n getNumberValue,\n getTextValue,\n gettext,\n hookCalculatedFields,\n removeChildren,\n templatePacks,\n uuidv4,\n} from \"./utils\";\n\nconst variant = {\n tabular: \"tabular\",\n stacked: \"stacked\",\n modal: \"modal\",\n};\n\nconst formsetOptions = {\n editText: gettext(\"Edit\"),\n};\n\nclass FormsetModal {\n constructor(elementId) {\n this._id = elementId;\n this.targetEl = document.getElementById(this._id);\n this.variant = variant.tabular;\n this.$formset = null;\n this._options = {\n ...formsetOptions,\n };\n this._modalForms = [];\n this._deleteBt = null;\n this._table = null;\n this._tbody = null;\n this._tfoot = null;\n this._init();\n this._addEvents();\n }\n _init() {\n this.variant = this._getVariant();\n this.templatePack = this._getTemplatePack();\n this.modalSize = this._getModalSize();\n this.modalPlacement = this._getModalPlacement();\n // Create Formset Helper Instance\n this.$formset = $(`#${this._id}`);\n this.$formset.formset({\n animateForms: true,\n });\n if (this.variant === variant.modal || this.variant == variant.tabular) {\n this._table = this.targetEl.querySelector(\"table\");\n this._tbody = this._table.querySelector(\"tbody\");\n this._tfoot = this._table.querySelector(\"tfoot\");\n this._emptyState = this._tbody.innerHTML;\n }\n if (this.variant === variant.modal) {\n this._deleteBt = this.targetEl.querySelector(\".delete-selected\");\n this._checkInitials();\n this._configureSelectAllToggler();\n this._refresh();\n }\n }\n _getVariant() {\n return this.targetEl.getAttribute(\"data-formset-variant\");\n }\n _getTemplatePack() {\n return this.targetEl.getAttribute(\"data-template-pack\");\n }\n _getClasses(name) {\n return templatePacks[this.templatePack].classes[name].split(\" \");\n }\n _getPencilIcon(){\n return templatePacks[this.templatePack].pencilIcon;\n }\n _getModalSize() {\n return this.targetEl.getAttribute(\"data-modal-size\");\n }\n _getModalPlacement() {\n return this.targetEl.getAttribute(\"data-modal-placement\");\n }\n _getModalFormInstanceByRownum(rownum) {\n let instance = false;\n this._modalForms.forEach(function (obj) {\n if (obj.rownum === rownum && !obj.isDeleted()) {\n instance = obj;\n }\n });\n return instance;\n }\n _addEvents() {\n let that = this;\n this.$formset.on(\"formAdded\", function (e) {\n that._onFormsetAdded(e);\n });\n this.$formset.on(\"formDeleted\", function (e) {\n that._onFormsetDeleted(e);\n });\n }\n /**\n * Check if the page loaded form from the server to configure them.\n */\n _checkInitials() {\n let that = this;\n let modals = [];\n this.targetEl\n .querySelectorAll(\"[data-formset-modal-toggle]\")\n .forEach(function (el) {\n let targetEl = el.closest(\"[data-formset-form]\");\n let modalId = el.getAttribute(\"data-formset-modal-toggle\");\n if (!modals.includes(modalId)) {\n that._newModalForm(targetEl, modalId);\n }\n modals.push(modalId);\n });\n }\n _newModalForm(targetEl, modalId) {\n let that = this;\n let options = {\n parent: that,\n modalId: modalId,\n size: that.modalSize,\n placement: that.modalPlacement,\n templatePack: that.templatePack,\n onKeyUp: function (e, modalForm) {\n that._onModalFormKeyUp(e, modalForm);\n },\n onOpen: function (modalForm) {\n that._onModalFormOpen(modalForm);\n },\n onClose: function (modalForm) {\n that._onModalFormClose(modalForm);\n },\n };\n let modalForm = new ModalForm(targetEl, options);\n that._modalForms.push(modalForm);\n return modalForm;\n }\n _onFormsetAdded(e) {\n if (this.variant === variant.modal) {\n let id = uuidv4();\n $(this.targetEl).find(\"#__dialog_id__\").attr(\"id\", id);\n $(this.targetEl)\n .find('[data-formset-modal-toggle=\"__dialog_id__\"]')\n .attr(\"data-formset-modal-toggle\", id);\n let modalForm = this._newModalForm(e.target, id);\n modalForm.open();\n }\n if (window.hasOwnProperty(\"calculatedFields\")) {\n window.resetCalculatedFields();\n hookCalculatedFields();\n }\n }\n _onFormsetDeleted() {\n if (this.variant == variant.modal) {\n this._refresh();\n }\n executeAllCalculatedFields();\n }\n _onModalFormKeyUp(e, modalForm) {\n if (e.ctrlKey && (e.keyCode === 38 || e.keyCode === 40)) {\n e.preventDefault();\n let openRownum = modalForm.rownum;\n let $formset = this.$formset.formset(\"getOrCreate\");\n let activeFormCount = $formset.activeFormCount();\n if (e.keyCode == 38) {\n // Up\n if (openRownum > 1) {\n modalForm.close();\n let previewsModalForm = this._getModalFormInstanceByRownum(\n openRownum - 1\n );\n previewsModalForm.open();\n }\n }\n\n if (e.keyCode === 40) {\n // Down\n if (openRownum < activeFormCount) {\n modalForm.close();\n let nextsModalForm = this._getModalFormInstanceByRownum(\n openRownum + 1\n );\n nextsModalForm.open();\n }\n if (openRownum == activeFormCount) {\n modalForm.close();\n $formset.addForm();\n }\n }\n }\n }\n _onModalFormOpen(modalForm) {\n this._refresh();\n }\n _onModalFormClose(modalForm) {\n this._refresh();\n }\n _configureSelectAllToggler() {\n let that = this;\n let table = this._table;\n let toggler = this.targetEl.querySelector(\".select-all\");\n let deleteBt = this.targetEl.querySelector(\".delete-selected\");\n\n toggler.addEventListener(\"change\", function (e) {\n let checked = toggler.checked;\n let checkBoxes = table.querySelectorAll(\".select-row\");\n checkBoxes.forEach(function (checkbox) {\n let tr = checkbox.closest(\"tr\");\n let td = checkbox.closest(\"td\");\n let btnOpenRow = tr.querySelector(\"[data-formset-modal-toggle]\");\n let modalId = btnOpenRow.getAttribute(\"data-formset-modal-toggle\");\n let modalEl = document.getElementById(modalId);\n let formsetFormEl = modalEl.closest(\"[data-formset-form]\");\n checkbox.checked = checked;\n that._checker(tr, td, formsetFormEl, checkbox);\n });\n });\n\n deleteBt.addEventListener(\"click\", function (e) {\n let formset = that.targetEl;\n let selectedForms = formset.querySelectorAll(\n \"[data-formset-form-selected]\"\n );\n selectedForms.forEach(function (selectedForm) {\n let deleteCheckbox = selectedForm.querySelector(\".formset-delete\");\n deleteCheckbox.checked = true;\n deleteCheckbox.dispatchEvent(new Event(\"change\"));\n });\n });\n }\n _checkSelectAllState() {\n let table = this._table;\n let formset = this.targetEl;\n let deleteBt = formset.querySelector(\".delete-selected\");\n let showDeleteBt = false;\n let selectAllToggler = table.querySelector(\".select-all\");\n let recordCount = table.querySelectorAll(\"tbody tr\").length;\n let selected = table.querySelectorAll(\"tr.selected\").length;\n\n if (selected === recordCount && recordCount > 0) {\n selectAllToggler.checked = true;\n selectAllToggler.indeterminate = false;\n showDeleteBt = true;\n } else {\n if (selected != recordCount && selected > 0) {\n selectAllToggler.indeterminate = true;\n selectAllToggler.checked = false;\n showDeleteBt = true;\n }\n if (selected === 0) {\n selectAllToggler.checked = false;\n selectAllToggler.indeterminate = false;\n showDeleteBt = false;\n }\n }\n\n if (showDeleteBt) {\n deleteBt.classList.remove(...this._getClasses(\"hidden\"));\n deleteBt.classList.add(...this._getClasses(\"inlineFlex\"));\n } else {\n deleteBt.classList.remove(...this._getClasses(\"inlineFlex\"));\n deleteBt.classList.add(...this._getClasses(\"hidden\"));\n }\n }\n _checker(tr, td, formsetFormEl, checkbox) {\n // remove previous divSel if exists.\n let prevDivSel = td.querySelector(\".cfm-selection-border, .selection-border\");\n if (prevDivSel) {\n prevDivSel.remove();\n }\n if (checkbox.checked) {\n let divSel = document.createElement(\"div\");\n td.classList.add(...this._getClasses(\"relative\"));\n divSel.classList.add(...this._getClasses(\"selectionMark\"));\n td.prepend(divSel);\n formsetFormEl.setAttribute(\"data-formset-form-selected\", \"selected\");\n tr.classList.add(\"selected\");\n } else {\n checkbox.classList.remove(...this._getClasses(\"relative\"));\n tr.classList.remove(\"selected\");\n formsetFormEl.removeAttribute(\"data-formset-form-selected\");\n }\n this._checkSelectAllState();\n }\n _refresh() {\n let that = this;\n let fields = {};\n let fieldNames = [];\n let rows = [];\n\n this._table.querySelectorAll(\"[data-field-name]\").forEach(function (el) {\n fields[el.getAttribute(\"data-field-name\")] = {\n type: el.getAttribute(\"data-field-type\"),\n hasSummary: el.hasAttribute(\"data-field-summary\"),\n summary: 0,\n };\n });\n\n fieldNames = Object.keys(fields);\n\n this._modalForms.forEach(function (modalForm) {\n if (!modalForm.isDeleted()) {\n let row = {};\n modalForm.targetEl\n .querySelectorAll(\"input, select\")\n .forEach(function (el) {\n let match = el.name.match(\n /(?
\\w+)-(?\\w+)-(?\\w+)/\n );\n if (match) {\n let name = match.groups.name;\n if (fieldNames.includes(name)) {\n let content = getTextValue(el);\n row[name] = {\n value: content,\n sourceId: el.getAttribute(\"id\"),\n };\n row[\"modalForm\"] = modalForm;\n }\n }\n });\n rows.push(row);\n }\n });\n\n // Remove all rows\n removeChildren(this._tbody);\n\n if (rows.length === 0) {\n this._tbody.innerHTML = this._emptyState;\n }\n\n let rownum = 1;\n rows.forEach(function (row) {\n row.modalForm.rownum = rownum;\n // Table row\n let tr = document.createElement(\"tr\");\n tr.classList.add(...that._getClasses(\"tr\"));\n tr.setAttribute(\"data-rownum\", rownum);\n // Highlight row if there are non field errors\n if (row.modalForm.hasNonFieldError()) {\n tr[\"style\"] = \"border: 1px solid #ff4545\";\n }\n // Selection column\n let tdSel = document.createElement(\"td\");\n let selCheckbox = document.createElement(\"input\");\n selCheckbox.setAttribute(\"type\", \"checkbox\");\n selCheckbox.classList.add(...that._getClasses(\"checkbox\"));\n selCheckbox.classList.add(\"select-row\");\n tdSel.appendChild(selCheckbox);\n tdSel.classList.add(...that._getClasses(\"td\"))\n selCheckbox.addEventListener(\"change\", function (e) {\n that._checker(tr, tdSel, row.modalForm.targetEl, e.target);\n });\n tr.appendChild(tdSel);\n // Column for row number\n let tdNumber = document.createElement(\"td\");\n tdNumber.classList.add(...that._getClasses(\"td\"));\n tdNumber.classList.add(...that._getClasses(\"textRight\"));\n tdNumber.classList.add(...that._getClasses(\"pointer\"));\n tdNumber.innerText = rownum;\n tdNumber.addEventListener(\"click\", function () {\n row.modalForm.open();\n });\n tr.appendChild(tdNumber);\n // Mirror columns\n fieldNames.forEach(function (field) {\n let td = document.createElement(\"td\");\n let hasError = row.modalForm.hasFieldError(row[field].sourceId);\n td.classList.add(...that._getClasses(\"td\"));\n if (hasError.error) {\n td[\"style\"] = \"border: 1px solid #ff4545\";\n td[\"title\"] = hasError.text;\n }\n if (fields[field].type === \"bool\") {\n checked = row[field].value === \"on\" ? \"checked\" : \"\";\n td.innerHTML = ``;\n } else {\n td.innerText = row[field].value;\n }\n if (fields[field].type === \"numeric\") {\n td.classList.add(...that._getClasses(\"textRight\"));\n if (fields[field].hasSummary) {\n fields[field].summary =\n fields[field].summary + getNumberValue(row[field].value);\n }\n }\n if (fields[field].type === \"bool\" || fields[field].type == \"date\") {\n td.classList.add(...that._getClasses(\"textCenter\"));\n }\n td.setAttribute(\"data-source\", row[field].sourceId);\n tr.appendChild(td);\n });\n // Column for edit button\n let tdEdit = document.createElement(\"td\");\n tdEdit.classList.add(...that._getClasses(\"td\"));\n tdEdit.classList.add(...that._getClasses(\"textCenter\"));\n tdEdit.classList.add(...that._getClasses(\"p0\"));\n tdEdit.classList.add(...that._getClasses(\"alignMiddle\"));\n tdEdit.innerHTML = `\n `;\n let button = tdEdit.querySelector(\".btn-open-row\");\n\n button.addEventListener(\"click\", function (e) {\n row.modalForm.open();\n });\n\n tr.appendChild(tdEdit);\n that._tbody.appendChild(tr);\n\n if (row.modalForm.isSelected()) {\n selCheckbox.checked = true;\n that._checker(tr, tdSel, row.modalForm.targetEl, selCheckbox);\n }\n\n rownum++;\n });\n\n if (this._tfoot) {\n this._tfoot\n .querySelectorAll(\"[data-summary-column]\")\n .forEach(function (el) {\n let summary = fields[el.getAttribute(\"data-summary-column\")].summary;\n el.innerText = summary;\n });\n }\n\n this._checkSelectAllState();\n }\n}\n\nexport default FormsetModal;\n","import $ from \"jquery\";\nimport Formset, { pluginName } from \"./formset\";\nimport FormsetModal from \"./formset-modal\";\nimport Modal from \"./modal\";\nimport {\n executeAllCalculatedFields,\n getModalInstance,\n hookCalculatedFields,\n ready,\n injectStyles,\n} from \"./utils\";\n\nfunction configureFormsets() {\n let formsets = document.querySelectorAll(\".formset\");\n formsets.forEach(function (formsetEl) {\n new FormsetModal(formsetEl.getAttribute(\"id\"));\n });\n}\n\nfunction configureModals() {\n let modalInstances = [];\n document.querySelectorAll(\"[data-modal-toggle]\").forEach((el) => {\n const modalId = el.getAttribute(\"data-modal-toggle\");\n const modalEl = document.getElementById(modalId);\n const placement = modalEl.getAttribute(\"data-modal-placement\");\n\n if (modalEl) {\n if (\n !modalEl.hasAttribute(\"aria-hidden\") &&\n !modalEl.hasAttribute(\"aria-modal\")\n ) {\n modalEl.setAttribute(\"aria-hidden\", \"true\");\n }\n }\n\n let modal = null;\n if (getModalInstance(modalId, modalInstances)) {\n modal = getModalInstance(modalId, modalInstances);\n modal = modal.object;\n } else {\n modal = new Modal(modalEl, {\n placement: placement ? placement : Default.placement,\n });\n modalInstances.push({\n id: modalId,\n object: modal,\n });\n }\n\n if (\n modalEl.hasAttribute(\"data-modal-show\") &&\n modalEl.getAttribute(\"data-modal-show\") === \"true\"\n ) {\n modal.show();\n }\n\n el.addEventListener(\"click\", () => {\n modal.toggle();\n });\n });\n}\n\n$.fn[pluginName] = function () {\n var options, fn, args;\n // Create a new Formset for each element\n if (\n arguments.length === 0 ||\n (arguments.length === 1 && $.type(arguments[0]) != \"string\")\n ) {\n options = arguments[0];\n return this.each(function () {\n return Formset.getOrCreate(this, options);\n });\n }\n\n // Call a function on each Formset in the selector\n fn = arguments[0];\n args = $.makeArray(arguments).slice(1);\n\n if (fn in Formset) {\n // Call the Formset class method if it exists\n args.unshift(this);\n return Formset[fn].apply(Formset, args);\n } else {\n throw new Error(\"Unknown function call \" + fn + \" for $.fn.formset\");\n }\n};\n\n\nready(function () {\n injectStyles();\n configureModals();\n hookCalculatedFields();\n configureFormsets();\n executeAllCalculatedFields();\n});\n"],"names":["bootstrapPencilIcon","gettext","window","_has","Object","prototype","hasOwnProperty","uuidv4","randomHex","Math","floor","random","toString","substring","parseInt","getTextValue","el","textValue","object","key","tagName","toLowerCase","options","selectedIndex","innerText","call","inputmask","undoValue","getAttribute","value","Date","split","toLocaleDateString","checked","executeAllCalculatedFields","calculatedFields","forEach","obj","executeAll","hookCalculatedFields","field","id","document","querySelector","hasAttribute","addEventListener","content","_column","setAttribute","getModalInstance","instances","some","modalInstance","find","django","jsi18n_initialized","msg","bootstrap4Classes","hidden","inlineFlex","flex","relative","textRight","textCenter","alignMiddle","pointer","editBtn","checkbox","td","tr","selectionMark","p0","opacity50","opacity100","backdrop","justifyStart","justifyCenter","justifyEnd","itemsStart","itemsCenter","itemsEnd","bootstrap4SizeClasses","sm","md","lg","xl","templatePacks","bootstrap4","classes","sizes","pencilIcon","bootstrap5","tailwind","bulma","pluginName","Formset","constructor","_this","this","opts","$","extend","defaults","$formset","attr","$emptyForm","emptyForm","$body","body","$add","add","formsetPrefix","data","addForm","proxy","click","on","form","$forms","each","i","bindForm","extra","static","rev","hasMaxForms","Error","newIndex","totalFormCount","$managementForm","val","newFormHtml","html","replace","RegExp","$newFormFragment","parseHTML","append","$newForm","filter","newFormCallback","$form","index","prefix","$delete","change","event","is","prop","pattern","removeAttr","trigger","deleteButton","bind","name","length","deletedFormCount","clear","row","not","deleteAll","activeFormCount","openRownum","rownum","maxForms","checkMaxForms","addClass","hasMaxFormsClass","removeClass","animateForms","slideUp","slideDown","modalDefault","placement","size","templatePack","onHide","onShow","onToggle","Modal","targetEl","_targetEl","_parentEl","parentElement","_options","_isHidden","_init","_addEventListeners","_getPlacementClasses","map","c","classList","_clearSize","_getSizeClasses","firstElementChild","_createBackdrop","backdropEl","createElement","_getClasses","offsetWidth","_destroyBackdropEl","remove","that","str","names","element","e","hide","toggle","show","removeAttribute","firstEl","focus","modalFormOptions","parent","modalId","onKeyUp","onClose","onOpen","ModalForm","_modalEl","_modalTitleEl","_modalDeleteBt","_addEvents","getElementById","_createModal","querySelectorAll","close","hasFieldError","fieldId","fieldWrapper","hasError","errorText","error","text","hasNonFieldError","_hiddeDefaultDeleteBt","parentNode","deleteBt","modal","_onModalClose","_onModalShow","closest","openRowBt","isDeleted","isSelected","open","variant","formsetOptions","editText","FormsetModal","elementId","_id","_modalForms","_deleteBt","_table","_tbody","_tfoot","_getVariant","_getTemplatePack","modalSize","_getModalSize","modalPlacement","_getModalPlacement","formset","_emptyState","innerHTML","_checkInitials","_configureSelectAllToggler","_refresh","_getPencilIcon","_getModalFormInstanceByRownum","instance","_onFormsetAdded","_onFormsetDeleted","modals","includes","_newModalForm","push","modalForm","_onModalFormKeyUp","_onModalFormOpen","_onModalFormClose","target","resetCalculatedFields","ctrlKey","keyCode","preventDefault","table","toggler","formsetFormEl","_checker","selectedForm","deleteCheckbox","dispatchEvent","Event","_checkSelectAllState","showDeleteBt","selectAllToggler","recordCount","selected","indeterminate","prevDivSel","divSel","prepend","fields","fieldNames","rows","type","hasSummary","summary","keys","match","groups","sourceId","a","hasChildNodes","removeChild","lastChild","removeChildren","tdSel","selCheckbox","appendChild","tdNumber","join","Number","tdEdit","fn","args","arguments","getOrCreate","makeArray","slice","unshift","apply","style","head","modalInstances","modalEl","Default","formsetEl","readyState"],"mappings":"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"}