{"version":3,"file":"main.js","mappings":"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","sources":["webpack://aldryn-forms/./aldryn_forms/static/aldryn_forms/js/src/form.js","webpack://aldryn-forms/./aldryn_forms/static/aldryn_forms/js/src/main.js"],"sourcesContent":["/* global gettext */\n\n// Prevent a situation when the translation is not implemented.\nif (typeof gettext !== \"function\") {\n window.gettext = text => text\n}\n\nfunction populate(text, obj) {\n // Map values to the text. E.g. \"Text %(value)s.\"\n for (const [key, value] of Object.entries(obj)) {\n const pattern = new RegExp(`%\\\\(${key}\\\\)s`, 'g')\n text = text.replace(pattern, value)\n }\n return text\n}\n\n\nexport function handleFormRequiredCheckbox(event) {\n // The event.target is a checkbox - this is the result of selector: .form-required input[type=checkbox]\n const form = event.target.closest(\"form\")\n if (form) {\n // Remove error messages if there are any.\n for (const element of form.querySelectorAll(\".aldryn-forms-required-msg, .aldryn-forms-submit-msg\")) {\n element.parentNode.removeChild(element)\n }\n // Enable submit button.\n for (const button of form.querySelectorAll('[type=submit]')) {\n button.disabled = false\n button.readOnly = false\n }\n }\n}\n\nexport function disableButtonSubmit(event, display_message) {\n // Disable button submit to prevent user click more than once.\n event.target.blur()\n for (const button of event.target.querySelectorAll('[type=submit]')) {\n button.disabled = true\n button.readOnly = true\n if (display_message) {\n button.insertAdjacentHTML(\n 'afterend',\n '
'\n + gettext(\"Please wait. Submitting form...\")\n + '
')\n }\n }\n}\n\nexport function handleRequiredFields(event) {\n // Handle required fields.\n let requiredFieldsFulfilled = true\n for (const checkboxset of this.getElementsByClassName(\"form-required\")) {\n const chosen = checkboxset.querySelectorAll(\"input[type=checkbox]:checked\").length\n if (chosen < parseInt(checkboxset.dataset.required_min)) {\n requiredFieldsFulfilled = false\n checkboxset.insertAdjacentHTML(\n 'afterend',\n '
'\n + populate(gettext(\"You have to choose at least %(value)s options (chosen %(chosen)s).\"), {\n value: checkboxset.dataset.required_min, chosen: chosen})\n + '
')\n }\n }\n // Do not submit the form if any required fields are missing.\n if (requiredFieldsFulfilled) {\n // Display a message to inform the user that the form has been submitted.\n for (const button of this.querySelectorAll('[type=submit]')) {\n button.insertAdjacentHTML(\n 'afterend',\n '
'\n + gettext(\"Please wait. Submitting form...\")\n + '
')\n }\n } else {\n // Some required value is not set.\n event.preventDefault()\n for (const button of this.querySelectorAll('[type=submit]')) {\n button.insertAdjacentHTML(\n 'afterend', '
'\n + gettext(\"Correct the errors first, please.\") + '
')\n }\n }\n}\n\n\nfunction handleChangeFilesList(nodeInputFile) {\n const listFileNames = nodeInputFile.parentNode.querySelector('ul.upload-file-names')\n if (listFileNames === null) {\n return\n }\n listFileNames.innerHTML = ''\n unblockSubmit(nodeInputFile)\n\n const accept = nodeInputFile.accept.length ? nodeInputFile.accept.split(',') : []\n let extensions = [],\n mimetypes = [],\n maim_mimes = [],\n is_valid = true\n\n let files_size_summary = null\n if (nodeInputFile.dataset.max_size !== null) {\n files_size_summary = 0\n for (let i = 0; i < nodeInputFile.files.length; i++) {\n files_size_summary += nodeInputFile.files[i].size\n }\n }\n if (nodeInputFile.dataset.max_size !== null && files_size_summary > nodeInputFile.dataset.max_size) {\n is_valid = false\n const msg = document.createElement(\"li\")\n msg.classList.add(\"text-danger\")\n msg.appendChild(document.createTextNode(gettext('The total file size has exceeded the specified limit.')))\n listFileNames.appendChild(msg)\n }\n\n if (nodeInputFile.accept.length) {\n for (let i = 0; i < accept.length; i++) {\n if (accept[i][0] === '.') {\n extensions.push(accept[i])\n } else {\n const mtypes = accept[i].split('/')\n if (mtypes[1] === '*') {\n maim_mimes.push(mtypes[0])\n } else {\n mimetypes.push(accept[i])\n }\n }\n }\n }\n\n for (let i = 0; i < nodeInputFile.files.length; i++) {\n const item = document.createElement(\"li\")\n const file_name = nodeInputFile.files[i].name\n const name = document.createElement(\"span\")\n name.appendChild(document.createTextNode(file_name + \" \"))\n item.appendChild(name)\n let errors = []\n if (i >= nodeInputFile.dataset.max_files) {\n errors.push(gettext('This file exceeds the uploaded files limit.'))\n }\n\n let is_expected_type = accept.length ? false : true\n\n if (!is_expected_type && extensions) {\n const ext = file_name.toLowerCase().match(/\\.\\w+$/)\n if (ext !== null && extensions.includes(ext[0])) {\n is_expected_type = true\n }\n }\n if (!is_expected_type && mimetypes) {\n if (mimetypes.includes(nodeInputFile.files[i].type)) {\n is_expected_type = true\n }\n }\n if (!is_expected_type && maim_mimes) {\n const mt = nodeInputFile.files[i].type.split('/')\n if (maim_mimes.includes(mt[0])) {\n is_expected_type = true\n }\n }\n\n if (!is_expected_type) {\n errors.push(gettext('The file type is not among the accpeted types.'))\n }\n\n if (errors.length) {\n is_valid = false\n name.title = errors.join(\" \")\n name.classList.add(\"fail-upload\")\n const icon = document.createElement(\"img\")\n icon.src = '/static/admin/img/icon-alert.svg'\n icon.width = 16\n icon.height = 16\n name.insertBefore(icon, name.firstChild);\n }\n listFileNames.appendChild(item)\n }\n\n if (!is_valid) {\n blockSubmit(nodeInputFile)\n }\n}\n\n\nfunction unblockSubmit(nodeInput) {\n const form = nodeInput.closest(\"form\")\n for (const button of form.querySelectorAll('[type=submit]')) {\n button.disabled = false\n }\n for (const element of form.getElementsByClassName('aldryn-forms-submit-msg')) {\n element.remove()\n }\n}\n\n\nfunction blockSubmit(nodeInput) {\n const form = nodeInput.closest(\"form\")\n for (const button of form.querySelectorAll('[type=submit]')) {\n button.disabled = true\n button.insertAdjacentHTML(\n 'afterend', '
'\n + gettext(\"Correct the errors first, please.\") + '
')\n }\n}\n\n\nexport function enableFieldUploadDragAndDrop() {\n for (const input of document.querySelectorAll('input[type=file]')) {\n if (input.dataset.enable_js !== undefined) {\n //
\n const uploadFileFrame = document.createElement(\"div\")\n uploadFileFrame.classList.add(\"upload-file-frame\")\n input.parentNode.insertBefore(uploadFileFrame, input)\n input.parentElement.removeChild(input)\n uploadFileFrame.appendChild(input)\n // \n const listFileNames = document.createElement(\"ul\")\n listFileNames.classList.add(\"upload-file-names\")\n uploadFileFrame.appendChild(listFileNames)\n input.addEventListener('change', (event) => handleChangeFilesList(event.target), false)\n handleChangeFilesList(input)\n }\n }\n}\n","import {\n enableFieldUploadDragAndDrop,\n disableButtonSubmit,\n handleRequiredFields,\n handleFormRequiredCheckbox,\n} from './form'\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // Disable button submit to prevent user click more than once.\n // Do not submit the form if any required fields are missing.\n for (const form of document.getElementsByTagName(\"form\")) {\n if (form.getAttribute(\"novalidate\")) {\n // Skip forms with class skip-disable-submit.\n if (!form.classList.contains(\"skip-disable-submit\")) {\n form.addEventListener('submit', (event) => disableButtonSubmit(event, true))\n }\n } else {\n // Skip forms with class skip-disable-submit.\n if (!form.classList.contains(\"skip-disable-submit\")) {\n form.addEventListener('submit', (event) => disableButtonSubmit(event, false))\n }\n if (!form.getAttribute(\"novalidate-checkbox-groups\")) {\n // Enable submit button if required were set.\n form.addEventListener('submit', handleRequiredFields)\n for (const element of form.querySelectorAll(\".form-required input[type=checkbox]\")) {\n element.addEventListener('click', handleFormRequiredCheckbox)\n }\n }\n }\n }\n enableFieldUploadDragAndDrop()\n})\n"],"names":["populate","text","obj","key","value","Object","entries","pattern","RegExp","replace","handleFormRequiredCheckbox","event","form","target","closest","element","querySelectorAll","parentNode","removeChild","button","disabled","readOnly","disableButtonSubmit","display_message","blur","insertAdjacentHTML","gettext","handleRequiredFields","requiredFieldsFulfilled","checkboxset","this","getElementsByClassName","chosen","length","parseInt","dataset","required_min","preventDefault","handleChangeFilesList","nodeInputFile","listFileNames","querySelector","innerHTML","nodeInput","remove","unblockSubmit","accept","split","extensions","mimetypes","maim_mimes","is_valid","files_size_summary","max_size","i","files","size","msg","document","createElement","classList","add","appendChild","createTextNode","push","mtypes","item","file_name","name","errors","max_files","is_expected_type","ext","toLowerCase","match","includes","type","mt","title","join","icon","src","width","height","insertBefore","firstChild","blockSubmit","window","addEventListener","getElementsByTagName","getAttribute","contains","input","undefined","enable_js","uploadFileFrame","parentElement","enableFieldUploadDragAndDrop"],"sourceRoot":""}