/* * This file is part of the TYPO3 CMS project. * * It is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License, either version 2 * of the License, or any later version. * * For the full copyright and license information, please read the * LICENSE.txt file that was distributed with this source code. * * The TYPO3 project - inspiring people to share! */ import L from"@typo3/core/document-service.js";import{SeverityEnum as c}from"@typo3/backend/enum/severity.js";import{MessageUtility as w}from"@typo3/backend/utility/message-utility.js";import S from"@typo3/core/ajax/ajax-request.js";import b,{Sizes as z}from"@typo3/backend/modal.js";import m from"@typo3/backend/notification.js";import A from"@typo3/backend/action-button/immediate-action.js";import x from"@typo3/backend/hashing/md5.js";import"@typo3/backend/element/icon-element.js";import E from"@typo3/core/event/regular-event.js";import k from"@typo3/backend/utility/dom-helper.js";import{KeyTypesEnum as D}from"@typo3/backend/enum/key-types.js";import"@typo3/backend/element/progress-bar-element.js";import{topLevelModuleImport as I}from"@typo3/backend/utility/top-level-module-import.js";import{FormatUtility as u}from"@typo3/backend/utility/format-utility.js";import r from"~labels/core.core";import U from"~labels/core.common";import v from"~labels/filelist.mod_file_list";var n;(function(h){h.OVERRIDE="replace",h.RENAME="rename",h.SKIP="cancel",h.USE_EXISTING="useExisting"})(n||(n={}));var d;(function(h){h.MANAGE="manage",h.BROWSE="browse"})(d||(d={}));const g="typo3:drag-uploader:upload-finished";class p{constructor(t){this.askForOverride=[],this.percentagePerFile=1,this.overallProgressBar=null,this.dragStartedInDocument=!1,this.closeDropzone=()=>{this.dropzone.hidden=!0,this.dropzone.classList.remove("drop-status-ok"),this.irreObjectUid!==void 0&&(this.fileList.parentElement.hidden=!0),this.manuallyTriggered=!1},this.hideDropzone=e=>{e.stopPropagation(),e.preventDefault(),this.closeDropzone()},this.dragFileIntoDocument=e=>(this.dragStartedInDocument||!e.dataTransfer.types.includes("Files")||(e.stopPropagation(),e.preventDefault(),e.currentTarget.classList.add("drop-in-progress"),this.element.offsetParent&&this.showDropzone()),!1),this.dragAborted=e=>(e.stopPropagation(),e.preventDefault(),e.currentTarget.classList.remove("drop-in-progress"),this.dragStartedInDocument=!1,!1),this.ignoreDrop=e=>(e.stopPropagation(),e.preventDefault(),this.dragAborted(e),!1),this.handleDrop=e=>{this.ignoreDrop(e),this.hideDropzone(e),this.processFiles(e.dataTransfer.files)},this.fileInDropzone=()=>{this.dropzone.classList.add("drop-status-ok")},this.fileOutOfDropzone=()=>{this.dropzone.classList.remove("drop-status-ok"),this.manuallyTriggered||this.dropzone.setAttribute("hidden","hidden")},this.body=document.querySelector("body"),this.element=t,this.trigger=document.querySelector(this.element.dataset.dropzoneTrigger),this.defaultAction=this.element.dataset.defaultAction||n.SKIP,this.dropzone=document.createElement("div"),this.dropzone.classList.add("dropzone"),this.dropzone.setAttribute("hidden","hidden"),this.irreObjectUid=this.element.dataset.fileIrreObject,this.manualTable=this.element.hasAttribute("data-manual-table");const s=document.querySelector(this.element.dataset.dropzoneTarget);if(this.irreObjectUid&&k.nextAll(s).length!==0?(this.dropZoneInsertBefore=!0,s.before(this.dropzone)):(this.dropZoneInsertBefore=!1,s.after(this.dropzone)),this.fileInput=document.createElement("input"),this.fileInput.setAttribute("type","file"),this.fileInput.setAttribute("multiple","multiple"),this.fileInput.setAttribute("name","files[]"),this.fileInput.classList.add("upload-file-picker"),this.body.append(this.fileInput),this.fileList=document.querySelector(this.element.dataset.progressContainer),this.fileListColumnCount=this.fileList?.querySelectorAll("thead tr:first-child th").length+1,this.filesExtensionsAllowed=this.element.dataset.fileAllowed,this.filesExtensionsDisallowed=this.element.dataset.fileDisallowed,this.fileDenyPattern=this.element.dataset.fileDenyPattern?new RegExp(this.element.dataset.fileDenyPattern,"i"):null,this.maxFileSize=parseInt(this.element.dataset.maxFileSize,10),this.target=this.element.dataset.targetFolder,this.reloadUrl=this.element.dataset.reloadUrl,this.browserCapabilities={fileReader:typeof FileReader<"u",DnD:"draggable"in document.createElement("span"),Progress:"upload"in new XMLHttpRequest},!this.browserCapabilities.DnD){console.warn("Browser has no Drag and drop capabilities; cannot initialize DragUploader");return}this.body.addEventListener("dragstart",()=>{this.dragStartedInDocument=!0}),this.body.addEventListener("dragover",this.dragFileIntoDocument),this.body.addEventListener("dragend",this.dragAborted),this.body.addEventListener("drop",this.ignoreDrop),this.dropzone.innerHTML='"),this.dragUploader.irreObjectUid?(p.addFileToIrre(this.dragUploader.irreObjectUid,t.upload[0]),setTimeout(()=>{this.row.remove(),this.dragUploader.fileList.querySelectorAll("tr").length===0&&(this.dragUploader.fileList.setAttribute("hidden","hidden"),this.dragUploader.fileList.closest(".t3-filelist-container")?.classList.add("hidden"),this.dragUploader.trigger?.dispatchEvent(new CustomEvent("uploadSuccess",{detail:[this,t]})))},3e3)):setTimeout(()=>{this.showFileInfo(t.upload[0]),this.dragUploader.trigger?.dispatchEvent(new CustomEvent("uploadSuccess",{detail:[this,t]}))},3e3)}}showFileInfo(t){if(this.removeProgress(),document.querySelector("#filelist-searchterm")?.value){const i=document.createElement("td");i.textContent=t.path,this.row.append(i)}const s=document.createElement("td");s.classList.add("col-control"),this.row.append(s);const o=document.createElement("td");o.textContent=U.get("file")+" ("+t.extension.toUpperCase()+")",this.row.append(o);const e=document.createElement("td");if(e.textContent=u.fileSizeAsString(t.size),this.row.append(e),this.mode===d.MANAGE){let i="";t.permissions.read&&(i+=''+v.get("read")+""),t.permissions.write&&(i+=''+v.get("write")+"");const a=document.createElement("td");a.innerHTML=i,this.row.append(a);const l=document.createElement("td");l.textContent="-",this.row.append(l)}for(let i=this.row.querySelectorAll("td").length;i