diff --git a/assets/js/icecoder.js b/assets/js/icecoder.js index d682abe..f2016cd 100644 --- a/assets/js/icecoder.js +++ b/assets/js/icecoder.js @@ -2470,7 +2470,7 @@ var ICEcoder = { if (-1 < tgtClass.indexOf('dirOpen')) { this.updateFileManagerList("add", location, file, false, false, false, fileOrFolder); } - this.updateFileManagerList("delete", oldName.substr(0, oldName.lastIndexOf("/")), oldName.substr(oldName.lastIndexOf("/")+1)); + this.updateFileManagerList("delete", oldName.substr(0, oldName.lastIndexOf("/")), oldName.substr(oldName.lastIndexOf("/")+1), false, false, false, fileOrFolder); this.selectedFiles = []; } } @@ -2485,7 +2485,7 @@ var ICEcoder = { if (-1 < tgtClass.indexOf('dirOpen')) { this.updateFileManagerList("add", location, file, false, false, false, fileOrFolder); } - this.updateFileManagerList("delete", oldName.substr(0, oldName.lastIndexOf("/")), file); + this.updateFileManagerList("delete", oldName.substr(0, oldName.lastIndexOf("/")), file, false, false, false, fileOrFolder); } // Chmod on files @@ -2510,6 +2510,15 @@ var ICEcoder = { targetElem = get('filesFrame').contentWindow.document.getElementById(targetElem).parentNode.parentNode; this.openCloseDir(targetElem.childNodes[0], false); targetElem.parentNode.removeChild(targetElem); + // Close any tabs we have open which would have had a file deleted + for (let i = this.openFiles.length - 1; i >= 0; i--) { + if ("folder" === fileOrFolder && location.replace(/\|/g, "/") + "/" + file === this.openFiles[i].substr(0, this.openFiles[i].lastIndexOf("/"))) { + this.closeTab(i + 1, 'dontSetPV', 'dontAsk'); + } + if ("file" === fileOrFolder && location.replace(/\|/g, "/") + "/" + file === this.openFiles[i]) { + this.closeTab(i + 1, 'dontSetPV', 'dontAsk'); + } + } } // Finally, switch to selectedTab to refresh items @@ -4108,7 +4117,6 @@ var ICEcoder = { } } - // Highlight all user selected files for (var i = 0; i < this.selectedFiles.length; i++) { fileLink = this.filesFrame.contentWindow.document.getElementById(this.selectedFiles[i]); @@ -4166,8 +4174,9 @@ var ICEcoder = { if (this.selectedTab==closeTabNum) { this.openFiles.length>0 ? this.selectedTab-=1 : this.selectedTab = 0; } - if (this.openFiles.length>0 && this.selectedTab==0) {this.selectedTab=1}; - + // Handle removing a tab from start or end as safely fallback + if (this.openFiles.length>0 && this.selectedTab === 0) {this.selectedTab = 1}; + if (this.openFiles.length>0 && this.selectedTab > this.openFiles.length) {this.selectedTab = this.openFiles.length}; // grey out the view icon if (this.openFiles.length==0) { this.fMIconVis('fMView',0.3); diff --git a/classes/File.php b/classes/File.php index e9114af..07835cd 100644 --- a/classes/File.php +++ b/classes/File.php @@ -423,6 +423,7 @@ class File if (rtrim($fullPath, "/") === rtrim($docRoot, "/")) { $doNext .= "ICEcoder.message('" . $t['Sorry, cannot delete...'] . "');"; } else if (!$demoMode && is_writable($fullPath)) { + $fileOrFolder = is_dir($fullPath) ? "folder" : "file"; if (is_dir($fullPath)) { $this->rrmdir($fullPath); } else { @@ -438,7 +439,7 @@ class File }; // Reload file manager - $doNext .= 'ICEcoder.selectedFiles = []; ICEcoder.updateFileManagerList(\'delete\', \'' . $fileLoc . '\', \'' . $fileName . '\');'; + $doNext .= 'ICEcoder.selectedFiles = []; ICEcoder.updateFileManagerList(\'delete\', \'' . $fileLoc . '\', \'' . $fileName . '\', false, false, false, \''. $fileOrFolder .'\');'; $finalAction = "delete"; // Run any extra processes @@ -471,9 +472,8 @@ class File } } reset($objects); - $ICEcoder['deleteToTmp'] - ? rename($dir, str_replace("\\", "/", dirname(__FILE__)) . "/../tmp/." . str_replace(":", "_", str_replace("/", "_", $dir))) - : rmdir($dir); + // Remove now empty dir + rmdir($dir); } } diff --git a/lib/file-control.php b/lib/file-control.php index 74d2190..f6d9bda 100644 --- a/lib/file-control.php +++ b/lib/file-control.php @@ -361,7 +361,7 @@ if (!$error && "delete" === $_GET['action']) { $fileLoc = "/"; }; // Reload file manager - $doNext .= 'ICEcoder.selectedFiles = []; ICEcoder.updateFileManagerList(\'delete\', \'' . $fileLoc . '\', \'' . $fileName . '\');'; + $doNext .= 'ICEcoder.selectedFiles = []; ICEcoder.updateFileManagerList(\'delete\', \'' . $fileLoc . '\', \'' . $fileName . '\', false, false, false, \'' . ("dir" === $itemType ? 'folder' : 'file') . '\');'; $finalAction = "delete"; // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName);