{"version":3,"sources":["webpack:///./app/javascript/controllers/cloudinary-file-upload_controller.js"],"names":["require","$","cloudinary","config","cloud_name","window","cloudinary_cloud_name","secure","undefined","fn","cloudinary_fileupload","this","bindFormEvents","bindUploadEvents","formTarget","addEventListener","e","_allRequiredFilesPresent","preventDefault","bind","on","data","fileInput","currentTarget","file","result","extension","format","public_id","split","pop","fileName","original_filename","_hideInvalidFileFeedback","link","_createFileLink","url","_updateAttachments","_addFileNameInput","sendButtonTarget","disabled","parentNode","getElementsByClassName","classList","add","remove","linkContainer","document","createElement","setAttribute","innerText","textContent","appendChild","attachments","getAttribute","lastElementChild","removeChild","input","name","dataset","cloudinaryFieldName","requiredFilesPresent","requiredFileTargets","forEach","target","getElementsByName","cloudinaryField","length","push","_showInvalidFileFeedback","every","Boolean","getElementsByTagName","Controller","targets"],"mappings":"yuCAAAA,EAAQ,KACRA,EAAQ,K,kXAYJC,EAAEC,WAAWC,OAAO,CAClBC,WAAYC,OAAOC,sBACnBC,QAAQ,SAGyBC,IAA/BP,EAAEQ,GAAGC,uBACPT,EAAE,0CAA0CS,wBAG9CC,KAAKC,iBACLD,KAAKE,qB,uCAILF,KAAKG,WAAWC,iBAAiB,SAAU,SAAUC,GAC9CL,KAAKM,4BACRD,EAAEE,kBAEJC,KAAKR,S,yCAIPV,EAAE,0BAA0BmB,GAAG,iBAAkB,SAASJ,EAAGK,GAC3D,IAAIC,EAAYN,EAAEO,cAEdC,EAAOH,EAAKI,OACZC,EAAYF,EAAKG,OAASH,EAAKG,OAASH,EAAKI,UAAUC,MAAM,KAAKC,MAClEC,EAAQ,UAAMP,EAAKQ,kBAAX,YAAgCN,GAE5Cf,KAAKsB,yBAAyBX,GAE9B,IAAIY,EAAOvB,KAAKwB,gBAAgBX,EAAKY,IAAKL,GAC1CpB,KAAK0B,mBAAmBf,EAAWY,GACnCvB,KAAK2B,kBAAkBhB,EAAWS,GAElCpB,KAAK4B,iBAAiBC,UAAW,GACjCrB,KAAKR,OAEPV,EAAE,0BAA0BmB,GAAG,iBAAkB,SAAUJ,GACzDA,EAAEO,cAAckB,WAAWC,uBAAuB,oBAAoB,GAAGC,UAAUC,IAAI,UACvF5B,EAAEO,cAAckB,WAAWC,uBAAuB,wBAAwB,GAAGC,UAAUE,OAAO,UAC9FlC,KAAK4B,iBAAiBC,UAAW,GACjCrB,KAAKR,OAEPV,EAAE,0BAA0BmB,GAAG,iBAAkB,SAAUJ,GACzDA,EAAEO,cAAckB,WAAWC,uBAAuB,oBAAoB,GAAGC,UAAUE,OAAO,WAC1F1B,KAAKR,OAEPV,EAAE,0BAA0BmB,GAAG,mBAAoB,SAAUJ,GAC3DA,EAAEO,cAAckB,WAAWC,uBAAuB,wBAAwB,GAAGC,UAAUC,IAAI,WAC3FzB,KAAKR,S,sCAGQyB,EAAKL,GACpB,IAAIe,EAAgBC,SAASC,cAAc,OACvCd,EAAOa,SAASC,cAAc,KAQlC,OANAd,EAAKe,aAAa,OAAQb,GAC1BF,EAAKe,aAAa,SAAU,UAC5Bf,EAAKgB,UAAYnB,EACjBG,EAAKiB,YAAcpB,EACnBe,EAAcM,YAAYlB,GAEnBY,I,yCAGWxB,EAAWY,GAC7B,IAAImB,EAAc/B,EAAUmB,WAAWC,uBAAuB,kBAAkB,GAEhF,GAA2C,OAAvCpB,EAAUgC,aAAa,YACzBD,EAAYD,YAAYlB,OACnB,CACL,KAAOmB,EAAYE,kBACjBF,EAAYG,YAAYH,EAAYE,kBAGtCF,EAAYD,YAAYlB,M,wCAITZ,EAAWS,GAC5B,IAAI0B,EAAQV,SAASC,cAAc,SAC/BU,EAAOpC,EAAUqC,QAAQC,oBAE7BH,EAAMR,aAAa,OAAQ,UAC3BQ,EAAMR,aAAa,OAAQS,GAC3BD,EAAMR,aAAa,QAASlB,GAE5BpB,KAAKG,WAAWsC,YAAYK,K,iDAI5B,IAAII,EAAuB,GAW3B,OATAlD,KAAKmD,oBAAoBC,QAAQ,SAAUC,GACiC,IAAtEjB,SAASkB,kBAAkBD,EAAOL,QAAQO,iBAAiBC,QAC7DN,EAAqBO,MAAK,GAC1BzD,KAAK0D,yBAAyBL,IAE9BrD,KAAKsB,yBAAyB+B,IAEhC7C,KAAKR,OAEAkD,EAAqBS,MAAMC,W,+CAGVd,GACxBA,EAAMhB,WAAW+B,qBAAqB,SAAS,GAAG7B,UAAUC,IAAI,qB,+CAGxCa,GACxBA,EAAMhB,WAAW+B,qBAAqB,SAAS,GAAG7B,UAAUE,OAAO,wB,8BAvH1C4B,K,EACpBC,QAAU,CACf,OACA,aACA,iB","file":"js/25-f9e9ef8beac195a34cb8.chunk.js","sourcesContent":["require('cloudinary-jquery-file-upload');\nrequire('blueimp-file-upload');\n\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [\n \"form\",\n \"sendButton\",\n \"requiredFile\"\n ]\n\n connect() {\n $.cloudinary.config({\n cloud_name: window.cloudinary_cloud_name,\n secure: true\n });\n\n if ($.fn.cloudinary_fileupload !== undefined) {\n $(\"input.cloudinary-fileupload[type=file]\").cloudinary_fileupload();\n }\n\n this.bindFormEvents();\n this.bindUploadEvents();\n }\n\n bindFormEvents () {\n this.formTarget.addEventListener('submit', function (e) {\n if (!this._allRequiredFilesPresent()) {\n e.preventDefault()\n }\n }.bind(this))\n }\n\n bindUploadEvents() {\n $('.cloudinary-fileupload').on('fileuploaddone', function(e, data) {\n let fileInput = e.currentTarget\n\n let file = data.result;\n let extension = file.format ? file.format : file.public_id.split(\".\").pop()\n let fileName = `${file.original_filename}.${extension}`;\n\n this._hideInvalidFileFeedback(fileInput)\n\n let link = this._createFileLink(file.url, fileName)\n this._updateAttachments(fileInput, link)\n this._addFileNameInput(fileInput, fileName)\n\n this.sendButtonTarget.disabled = false\n }.bind(this));\n\n $('.cloudinary-fileupload').on('fileuploadsend', function (e) {\n e.currentTarget.parentNode.getElementsByClassName(\"js-error-message\")[0].classList.add(\"d-none\")\n e.currentTarget.parentNode.getElementsByClassName(\"js-loading-indicator\")[0].classList.remove(\"d-none\")\n this.sendButtonTarget.disabled = true\n }.bind(this));\n\n $('.cloudinary-fileupload').on('fileuploadfail', function (e) {\n e.currentTarget.parentNode.getElementsByClassName(\"js-error-message\")[0].classList.remove(\"d-none\")\n }.bind(this));\n\n $('.cloudinary-fileupload').on('cloudinaryalways', function (e) {\n e.currentTarget.parentNode.getElementsByClassName(\"js-loading-indicator\")[0].classList.add(\"d-none\")\n }.bind(this));\n }\n\n _createFileLink (url, fileName) {\n let linkContainer = document.createElement(\"div\");\n let link = document.createElement(\"a\");\n\n link.setAttribute(\"href\", url)\n link.setAttribute(\"target\", \"_blank\")\n link.innerText = fileName\n link.textContent = fileName\n linkContainer.appendChild(link)\n\n return linkContainer;\n }\n\n _updateAttachments (fileInput, link) {\n let attachments = fileInput.parentNode.getElementsByClassName(\"js-attachments\")[0]\n\n if (fileInput.getAttribute(\"multiple\") !== null) {\n attachments.appendChild(link);\n } else {\n while (attachments.lastElementChild) {\n attachments.removeChild(attachments.lastElementChild);\n }\n\n attachments.appendChild(link);\n }\n }\n\n _addFileNameInput (fileInput, fileName) {\n let input = document.createElement(\"input\");\n let name = fileInput.dataset.cloudinaryFieldName\n\n input.setAttribute(\"type\", \"hidden\");\n input.setAttribute(\"name\", name);\n input.setAttribute(\"value\", fileName);\n\n this.formTarget.appendChild(input)\n }\n\n _allRequiredFilesPresent () {\n let requiredFilesPresent = []\n\n this.requiredFileTargets.forEach(function (target) {\n if (document.getElementsByName(target.dataset.cloudinaryField).length === 0) {\n requiredFilesPresent.push(false)\n this._showInvalidFileFeedback(target)\n } else {\n this._hideInvalidFileFeedback(target)\n }\n }.bind(this))\n\n return requiredFilesPresent.every(Boolean)\n }\n\n _showInvalidFileFeedback (input) {\n input.parentNode.getElementsByTagName(\"label\")[0].classList.add(\"is-invalid-file\")\n }\n\n _hideInvalidFileFeedback (input) {\n input.parentNode.getElementsByTagName(\"label\")[0].classList.remove(\"is-invalid-file\")\n }\n}\n"],"sourceRoot":""}