document.addEventListener("contextmenu", (e) => { e.preventDefault() }) function generateFileExplorer() { const View = new ViewWindow({ title: ` Gestionnaire de fichiers`, width: "1000px", height: "600px" }) goHomePath() function goHomePath() { const rFiles = post("FX_GET", "homepath") rFiles.then((result) => { loadFiles(result) }) } function goSharePath() { const rFiles = post("FX_GET", "sharepath") rFiles.then((result) => { loadFiles(result) }) } View.setContent(`
Revenir au dossier parent
Vous n'avez pas les permissions pour accéder à ce dossier.
") } else if(files.content == "NOT_EXIST") { fileElements.unshift(`Revenir au dossier parent
Ce dossier n'existe pas.
" } else { for(const file of files.content) { if(file.directory) { file.size = "Dossier" } else { console.log('------------') console.log(file.size) console.log(bytesToSize(file.size)) console.log('------------') file.size = bytesToSize(file.size) } fileElements.push(`${file.name}
Taille : ${file.size}
Date de modification : ${getFormattedDate(file.lastedition)}
Revenir au dossier parent
Vous n'avez pas les permissions pour supprimer ce fichier.
` }) } else { const reqFiles = post("FX_GET", files.root) reqFiles.then((result) => { loadFiles(result) }) View.createPopup({ title: ` Erreur`, content: `Une erreur est survenue.
` }) } }) }) dropMenu.get("rename").addEventListener("click", () => { dropMenu.hide() View.createPopup({ title: ` Renommer`, content: ` `}) const rename = getID(View.getViewTitle() + "_rename") const renameBtn = getID(View.getViewTitle() + "_renameBtn") const renameInfo = new InfoPop(View.getViewTitle() + "_renameInfo") renameInfo.setSize("13px") rename.value = file.name rename.focus() rename.select() renameBtn.addEventListener("click", () => { renameInfo.clear() if(rename.value.length < 1) { renameInfo.err("Le nom du fichier / dossier est trop court.") return } const regex = new RegExp(/^[a-zA-Z0-9-_]+$/) if(!regex.test(rename.value) | rename.value.replace(/\s/g, '').length < 1) { renameInfo.err("Le nom du fichier / dossier est invalide.") return } const reqFiles = post("FX_RENAME", {root: files.root, oldName: file.name, newName: rename.value}) reqFiles.then((result) => { if(result == "OK") { View.destroyPopup(` Renommer`) const reqFiles = post("FX_GET", files.root) reqFiles.then((result) => { loadFiles(result) }) } else if(result == "EXIST") { renameInfo.err("Le fichier / dossier existe déjà.") } else if(result == "NOT_PERMITTED") { renameInfo.err("Vous n'avez pas les permissions pour renommer ce fichier / dossier.") } else { renameInfo.err("Une erreur est survenue.") } }) }) }) if(!file.directory) { dropMenu.get("share").addEventListener("click", () => { dropMenu.hide() const reqFiles = post("FX_SHARE", {root: files.root, name: file.name}) reqFiles.then((result) => { if(result == "NOT_PERMITTED") { View.createPopup({ title: ` Erreur`, content: `Vous n'avez pas les permissions pour partager ce fichier.
` }) } else { View.createPopup({ title: ` Partager`, content: ` `}) const sharelink = getID(View.getViewTitle() + "_sharelink") const shareBtn = getID(View.getViewTitle() + "_shareBtn") const shareInfo = new InfoPop(View.getViewTitle() + "_shareInfo") shareInfo.setSize("13px") sharelink.value = result sharelink.focus() sharelink.select() shareBtn.addEventListener("click", () => { sharelink.focus() sharelink.select() window.navigator.clipboard.writeText(sharelink.value) shareInfo.ok("Copié !") }) } }) }) // Edit file with an ViewWindow with 2 options close & save and the name of the window is like File - Editor dropMenu.get("edit").addEventListener("click", () => { dropMenu.hide() editFile() }) dropMenu.get("download").addEventListener("click", () => { dropMenu.hide() const reqFiles = post("FX_GETFILE", file.fileDirectory) reqFiles.then((result) => { if(result == "NOT_PERMITTED") { View.createPopup({ title: ` Erreur`, content: `Vous n'avez pas les permissions pour télécharger ce fichier.
` }) } else { // Make Download using result const element = document.createElement('a'); element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(result)); element.setAttribute('download', file.name); element.style.display = 'none'; document.body.appendChild(element); element.click(); document.body.removeChild(element); } }) }) } }) function editFile() { const reqFiles = post("FX_GETFILE", file.fileDirectory) reqFiles.then((result) => { if(result == "NOT_PERMITTED") { View.createPopup({ title: ` Erreur`, content: `Vous n'avez pas les permissions pour éditer ce fichier.
` }) } else { const editor = new ViewWindow({ title: ` Editeur - ${file.fileDirectory}`, width: "1000px", height: "600px" }) editor.setContent(` `) const editorSave = getID(editor.getViewTitle() + "_save") const editorContent = getID(editor.getViewTitle() + "_editorContent") // Sauvegarder le fichier en l'envoyant editorSave.addEventListener("click", () => { const reqFiles = post("FX_SAVEFILE", {root: files.root, name: file.name, content: editorContent.value}) reqFiles.then((result) => { if(result == "OK") { editor.destroy() const reqFiles = post("FX_GET", files.root) reqFiles.then((result) => { loadFiles(result) }) } else if(result == "NOT_PERMITTED") { View.createPopup({ title: ` Erreur`, content: `Vous n'avez pas les permissions pour éditer ce fichier.
` }) } else { View.createPopup({ title: ` Erreur`, content: `Une erreur est survenue.
` }) } }) }) //forbid textarea resize editorContent.style.resize = "none" editorClose.addEventListener("click", () => { editor.destroy() }) } }) } } } } } function getIcon(file) { if(file.type == "application/json") { return '' } if(file.type == "application/msword" | file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") { return '' } if(file.type == "application/vnd.ms-powerpoint") { return '' } if(file.type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | file.type == "application/vnd.ms-excel") { return '' } if(file.type == "application/java-archive") { return '' } if(file.type == "application/x-sh") { return '' } if(file.type == "application/x-msdos-program" | file.type == "application/x-msdownload") { return'' } if(file.type == "application/javascript") { return '' } if(file.type == "image/png" | file.type == "image/jpeg") { return '' } if(file.type == "text/html") { return '' } if(file.type == "text/css") { return '' } if(file.type == "application/zip") { return '' } if(file.type == "audio/mpeg") { return '' } if(file.type == "application/pdf") { return '' } if(file.directory) { return '' } else { return '' } } function bytesToSize(bytes) { var sizes = ['o', 'Ko', 'Mo', 'Go', 'To']; if (bytes == 0) return '0 o'; var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]; }