File Manager App

This commit is contained in:
Zarak Khan 2024-02-05 11:39:22 +05:00
parent a3ec75a9d1
commit ad2d3e92fb
6 changed files with 346 additions and 246 deletions

View File

@ -205,8 +205,6 @@ newapp.config(['$interpolateProvider', function ($interpolateProvider) {
}]);
newapp.controller('dashboardV2', function ($scope, $http, $timeout) {
alert('dashboardV2');
function getStuff() {

View File

@ -271,8 +271,6 @@ newapp.controller('configureDefaultNameserversV2', function ($scope, $http) {
newapp.controller('addModifyDNSRecordsCloudFlareV2', function ($scope, $http, $window) {
alert('Hello');
$scope.saveCFConfigs = function () {
$scope.recordsLoading = false;
@ -1279,14 +1277,19 @@ newapp.controller('addModifyDNSRecordsV2', function ($scope, $http) {
);
var dnsTabButton = document.getElementById("dns_tab_button");
var apiTabButton = document.getElementById("api_tab_button");
function changeBackgroundColor(button) {
var allButtons = document.querySelectorAll('.flex li');
allButtons.forEach(function (btn) {
btn.classList.remove('bg-orange-400','text-white', 'show');
// Select only the dnsTabButton and apiTabButton
var specificButtons = [dnsTabButton, apiTabButton];
specificButtons.forEach(function (btn) {
if (btn === button) {
btn.classList.add('bg-orange-400', 'text-white', 'show');
} else {
btn.classList.remove('bg-orange-400', 'text-white', 'show');
}
btn.classList.add('bg-white');
});
button.classList.add('bg-orange-400','text-white', 'show');
}
dnsTabButton.addEventListener("click", function () {

View File

@ -35,13 +35,13 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
var allFilesAndFolders = [];
$scope.showUploadBox = function () {
$('#uploadBox').modal('show');
// $('#uploadBox').modal('show');
};
$scope.showHTMLEditorModal = function (MainFM = 0) {
$scope.htmlEditorLoading = false;
$scope.errorMessageEditor = true;
$('#showHTMLEditor').modal('show');
// $('#showHTMLEditor').modal('show');
$scope.fileInEditor = allFilesAndFolders[0];
$scope.getFileContents(MainFM);
};
@ -446,14 +446,9 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
}
$scope.fetchForTableSecondary = function (node, functionName) {
console.log("habbi.................run");
allFilesAndFolders = [];
$scope.buttonActivator();
url = "/filemanager/controller";
@ -576,12 +571,10 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
};
// Button Activator
// Button Activator
$scope.buttonActivator = function () {
console.log("----------cal button activater------------");
// for restore button
if ($scope.currentPath === trashPath) {
var restoreBTN = document.getElementById("restoreRight");
@ -591,143 +584,142 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
restoreBTN.style.display = "none";
}
console.log("----------cal button activater-----------1-");
// for edit button
if (allFilesAndFolders.length === 1) {
var editNode = document.getElementById("editFile");
editNode.style.pointerEvents = "auto";
var editNotRight = document.getElementById("editOnRight");
var result = findFileExtension(allFilesAndFolders[0]);
if (result !== undefined) {
if (result[0] === "js") {
aceEditorMode = "ace/mode/javascript";
editNotRight.style.display = "Block";
} else if (result[0] === "html") {
aceEditorMode = "ace/mode/html";
editNotRight.style.display = "Block";
} else if (result[0] === "css") {
aceEditorMode = "ace/mode/css";
editNotRight.style.display = "Block";
} else if (result[0] === "php") {
aceEditorMode = "ace/mode/php";
editNotRight.style.display = "Block";
} else if (result[0] === "py") {
aceEditorMode = "ace/mode/python";
editNotRight.style.display = "Block";
} else if (result[0] === "txt") {
aceEditorMode = "";
editNotRight.style.display = "Block";
} else if (result[0] === "htaccess") {
aceEditorMode = "";
editNotRight.style.display = "Block";
} else {
var editNode = document.getElementById("editFile");
editNode.style.pointerEvents = "none";
editNotRight.style.display = "None";
}
} else {
var editNode = document.getElementById("editFile");
editNode.style.pointerEvents = "none";
editNotRight.style.display = "None";
}
} else {
var editNode = document.getElementById("editFile");
editNode.style.pointerEvents = "none";
}
// if (allFilesAndFolders.length === 1) {
// var editNode = document.getElementById("editFile");
// editNode.style.pointerEvents = "auto";
//
// var editNotRight = document.getElementById("editOnRight");
//
// var result = findFileExtension(allFilesAndFolders[0]);
//
// if (result !== undefined) {
// if (result[0] === "js") {
// aceEditorMode = "ace/mode/javascript";
// editNotRight.style.display = "Block";
// } else if (result[0] === "html") {
// aceEditorMode = "ace/mode/html";
// editNotRight.style.display = "Block";
// } else if (result[0] === "css") {
// aceEditorMode = "ace/mode/css";
// editNotRight.style.display = "Block";
// } else if (result[0] === "php") {
// aceEditorMode = "ace/mode/php";
// editNotRight.style.display = "Block";
// } else if (result[0] === "py") {
// aceEditorMode = "ace/mode/python";
// editNotRight.style.display = "Block";
// } else if (result[0] === "txt") {
// aceEditorMode = "";
// editNotRight.style.display = "Block";
// } else if (result[0] === "htaccess") {
// aceEditorMode = "";
// editNotRight.style.display = "Block";
// } else {
// var editNode = document.getElementById("editFile");
// editNode.style.pointerEvents = "none";
// editNotRight.style.display = "None";
// }
// } else {
// var editNode = document.getElementById("editFile");
// editNode.style.pointerEvents = "none";
// editNotRight.style.display = "None";
// }
// } else {
// var editNode = document.getElementById("editFile");
// editNode.style.pointerEvents = "none";
// }
// extraction button
if (allFilesAndFolders.length === 1) {
var extractFileNode = document.getElementById("extractFile");
extractFileNode.style.pointerEvents = "auto";
var extractNodeRight = document.getElementById("extractOnRight");
var result = findFileExtension(allFilesAndFolders[0]);
if (result !== undefined) {
if (result[0] === "gz") {
extractFileNode.style.pointerEvents = "auto";
extractNodeRight.style.display = "Block";
} else if (result[0] === "zip") {
extractFileNode.style.pointerEvents = "auto";
extractNodeRight.style.display = "Block";
} else {
extractFileNode.style.pointerEvents = "none";
extractNodeRight.style.display = "None";
}
} else {
extractFileNode.style.pointerEvents = "none";
extractNodeRight.style.display = "None";
}
} else {
var extractFileNode = document.getElementById("extractFile");
extractFileNode.style.pointerEvents = "none";
}
// if (allFilesAndFolders.length === 1) {
// var extractFileNode = document.getElementById("extractFile");
// extractFileNode.style.pointerEvents = "auto";
//
// var extractNodeRight = document.getElementById("extractOnRight");
//
// var result = findFileExtension(allFilesAndFolders[0]);
//
// if (result !== undefined) {
// if (result[0] === "gz") {
// extractFileNode.style.pointerEvents = "auto";
// extractNodeRight.style.display = "Block";
// } else if (result[0] === "zip") {
// extractFileNode.style.pointerEvents = "auto";
// extractNodeRight.style.display = "Block";
// } else {
// extractFileNode.style.pointerEvents = "none";
// extractNodeRight.style.display = "None";
// }
// } else {
// extractFileNode.style.pointerEvents = "none";
// extractNodeRight.style.display = "None";
// }
// } else {
// var extractFileNode = document.getElementById("extractFile");
// extractFileNode.style.pointerEvents = "none";
// }
// move button
if (allFilesAndFolders.length >= 1) {
var moveFileNode = document.getElementById("moveFile");
moveFileNode.style.pointerEvents = "auto";
} else {
var moveFileNode = document.getElementById("moveFile");
moveFileNode.style.pointerEvents = "none";
}
// if (allFilesAndFolders.length >= 1) {
//
// var moveFileNode = document.getElementById("moveFile");
// moveFileNode.style.pointerEvents = "auto";
// } else {
// var moveFileNode = document.getElementById("moveFile");
// moveFileNode.style.pointerEvents = "none";
// }
//copy button
if (allFilesAndFolders.length >= 1) {
var copeFileNode = document.getElementById("copyFile");
copeFileNode.style.pointerEvents = "auto";
} else {
var copeFileNode = document.getElementById("copyFile");
copeFileNode.style.pointerEvents = "none";
}
// if (allFilesAndFolders.length >= 1) {
//
// var copeFileNode = document.getElementById("copyFile");
// copeFileNode.style.pointerEvents = "auto";
// } else {
// var copeFileNode = document.getElementById("copyFile");
// copeFileNode.style.pointerEvents = "none";
// }
// }
// rename button
if (allFilesAndFolders.length === 1) {
var renameFileNode = document.getElementById("renameFile");
renameFileNode.style.pointerEvents = "auto";
} else {
var renameFileNode = document.getElementById("renameFile");
renameFileNode.style.pointerEvents = "none";
}
// if (allFilesAndFolders.length === 1) {
//
// var renameFileNode = document.getElementById("renameFile");
// renameFileNode.style.pointerEvents = "auto";
// } else {
// var renameFileNode = document.getElementById("renameFile");
// renameFileNode.style.pointerEvents = "none";
// }
// compress button
if (allFilesAndFolders.length >= 1) {
var compressFile = document.getElementById("compressFile");
compressFile.style.pointerEvents = "auto";
} else {
var compressFile = document.getElementById("compressFile");
compressFile.style.pointerEvents = "none";
}
// if (allFilesAndFolders.length >= 1) {
// var compressFile = document.getElementById("compressFile");
// compressFile.style.pointerEvents = "auto";
// } else {
// var compressFile = document.getElementById("compressFile");
// compressFile.style.pointerEvents = "none";
// }
// move button
if (allFilesAndFolders.length >= 1) {
var deleteFile = document.getElementById("deleteFile");
deleteFile.style.pointerEvents = "auto";
} else {
var deleteFile = document.getElementById("deleteFile");
deleteFile.style.pointerEvents = "none";
}
// if (allFilesAndFolders.length >= 1) {
//
// var deleteFile = document.getElementById("deleteFile");
// deleteFile.style.pointerEvents = "auto";
// } else {
// var deleteFile = document.getElementById("deleteFile");
// deleteFile.style.pointerEvents = "none";
// }
};
@ -915,7 +907,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.createSuccess = true;
$scope.errorMessageFolder = true;
$scope.newFolderName = "";
$('#showCreateFolder').modal('show');
// $('#showCreateFolder').modal('show');
};
$scope.createFolderEnter = function ($event) {
@ -966,7 +958,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
if (response.data.status === 1) {
$scope.createSuccess = false;
$scope.fetchForTableSecondary(null, 'refresh');
$('#showCreateFolder').modal('hide');
// $('#showCreateFolder').modal('hide');
} else {
$scope.errorMessageFolder = false;
$scope.error_message = response.data.error_message;
@ -988,7 +980,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.createSuccess = true;
$scope.errorMessageFile = true;
$scope.newFileName = "";
$('#showCreateFile').modal('show');
// $('#showCreateFile').modal('show');
};
$scope.createFileEnter = function ($event) {
@ -996,6 +988,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
if (keyCode === 13) {
$scope.htmlEditorLoading = false;
$scope.createNewFile();
$scope.fetchForTableSecondary(null, 'refresh');
}
};
@ -1039,7 +1032,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
if (response.data.status === 1) {
$scope.createSuccess = false;
$scope.fetchForTableSecondary(null, 'refresh');
$('#showCreateFile').modal('hide');
// $('#showCreateFile').modal('hide');
} else {
$scope.errorMessageFile = false;
$scope.error_message = response.data.error_message;
@ -1060,7 +1053,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.deleteLoading = true;
$scope.showDeleteModal = function () {
$('#showDelete').modal('show');
// $('#showDelete').modal('show');
};
$scope.deleteFolderOrFile = function () {
@ -1099,7 +1092,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
function ListInitialDatas(response) {
$scope.deleteLoading = true;
if (response.data.status === 1) {
$('#showDelete').modal('hide');
// $('#showDelete').modal('hide');
var notification = alertify.notify('Successfully Deleted!', 'success', 5, function () {
});
$scope.fetchForTableSecondary(null, 'refresh');
@ -1122,7 +1115,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.compressionLoading = true;
$scope.showCompressionModal = function () {
$('#showCompression').modal('show');
// $('#showCompression').modal('show');
$scope.listOfFiles = "";
$scope.compressedFileName = "";
@ -1167,7 +1160,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
function ListInitialDatas(response) {
$scope.compressionLoading = true;
$('#showCompression').modal('hide');
// $('#showCompression').modal('hide');
if (response.data.status === 1) {
var notification = alertify.notify('Successfully Compressed!', 'success', 5, function () {
});
@ -1190,7 +1183,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.showExtractionModal = function () {
$scope.extractionLocation = $scope.currentPath;
$('#showExtraction').modal('show');
// $('#showExtraction').modal('show');
$scope.fileToBeExtracted = allFilesAndFolders[0];
};
@ -1239,7 +1232,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
function ListInitialDatas(response) {
$scope.extractionLoading = true;
$('#showExtraction').modal('hide');
// $('#showExtraction').modal('hide');
if (response.data.status === 1) {
var notification = alertify.notify('Successfully Extracted!', 'success', 5, function () {
@ -1264,7 +1257,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.moveLoading = true;
$scope.showMoveModal = function () {
$('#showMove').modal('show');
// $('#showMove').modal('show');
$scope.pathToMoveTo = $scope.currentPath;
$scope.listOfFiles = "";
@ -1309,7 +1302,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
function ListInitialDatas(response) {
$scope.moveLoading = true;
$('#showMove').modal('hide');
// $('#showMove').modal('hide');
if (response.data.status === 1) {
var notification = alertify.notify('Successfully Moved!', 'success', 5, function () {
@ -1332,7 +1325,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.copyLoading = true;
$scope.showCopyModal = function () {
$('#showCopy').modal('show');
// $('#showCopy').modal('show');
$scope.pathToCopyTo = $scope.currentPath;
$scope.listOfFiles = "";
@ -1378,7 +1371,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
function ListInitialDatas(response) {
$scope.copyLoading = true;
$('#showCopy').modal('hide');
// $('#showCopy').modal('hide');
if (response.data.status === 1) {
var notification = alertify.notify('Successfully Copied!', 'success', 5, function () {
@ -1472,7 +1465,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
$scope.renameLoading = true;
$scope.showRenameModal = function () {
$('#showRename').modal('show');
// $('#showRename').modal('show');
$scope.fileToRename = allFilesAndFolders[0];
$scope.newFileName = "";
};
@ -1518,7 +1511,7 @@ newapp.controller('fileManagerCtrlV2', function ($scope, $http, FileUploader, $w
function ListInitialDatas(response) {
$scope.moveLoading = true;
$('#showRename').modal('hide');
// $('#showRename').modal('hide');
$scope.renameLoading = true;
if (response.data.status === 1) {

View File

@ -29,11 +29,25 @@
{##}
{# </head>#}
<script src="https://cdn.jsdelivr.net/npm/alertifyjs@1.11.0/build/alertify.min.js"></script>
<!-- CSS -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.11.0/build/css/alertify.min.css"/>
<!-- Default theme -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.11.0/build/css/themes/default.min.css"/>
<!-- Semantic UI theme -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.11.0/build/css/themes/semantic.min.css"/>
<!-- Bootstrap theme -->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/alertifyjs@1.11.0/build/css/themes/bootstrap.min.css"/>
<div ng-controller="fileManagerCtrlV2" class="p-8">
<span style="display: none" id="domainNameInitial">{{ domainName }}</span>
<div>
<a href="/websites/{{ domainName }}">
<span id="domainNameInitial">{{ domainName }}</span></a>
</div>
<div class="flex py-2 px-6 items-center gap-4">
<div id="treeView" class="flex py-2 px-6 items-center gap-4">
<div>
<p class="font-bold w-32">Current Path</p>
</div>
@ -52,13 +66,16 @@
</a>
<a onclick="return false;"
ng-click="fetchForTableSecondary($event,'fromTree',completeStartingPath)" href="#">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round"
d="M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z"/>
</svg>
<div class="flex">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round"
d="M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z"/>
</svg>
<span class="ml-2">{$ startingPath $}</span>
</div>
</a>
<a href="" class="ml-2">{$ startingPath $}</a>
</li>
</ul>
</div>
@ -66,8 +83,9 @@
<div class="py-4">
<div>
<ul class="flex justify-between bg-blue-200 py-5 px-5 rounded-lg shadow-lg font-semibold">
<li>
<a class="cursor-pointer" onclick="return false;" ng-click="showUploadBox()"
<li id="uploadBox" nv-file-drop="" uploader="uploader" filters="queueLimit, customFilter">
<a class="cursor-pointer" onclick="return false;"
ng-click="showUploadBox()"
data-modal-target="upload"
data-modal-toggle="upload"> {% trans "Upload" %}</a>
<div id="upload" tabindex="-1"
@ -99,10 +117,11 @@
<h3 class="text-xl">{% trans "Upload queue" %}</h3>
<p>{% trans "Queue length:" %} {$ uploader.queue.length $}</p>
<div>
<div nv-file-over="" uploader="uploader">
<div class="border border-4 border-dotted px-4 py-4" nv-file-over=""
uploader="uploader">
<div>
<h4 class="font-bold mt-4">{% trans "Drop" %}</h4>
<p class="card-text">{% trans "Drop Files here to upload them." %}</p>
<h4 class="font-bold">{% trans "Drop" %}</h4>
<p class="text-sm">{% trans "Drop Files here to upload them." %}</p>
</div>
</div>
<div class="mt-4">
@ -147,37 +166,63 @@
{$ item.file.size / 1024 / 1024 | number:2 $} MB
</td>
<td ng-show="uploader.isHTML5" class="px-6 py-4">
<div class="progress">
<div class="progress-bar" role="progressbar"
ng-style="{ 'width': item.progress + '%' }"></div>
<div class="w-full bg-gray-100 rounded-full">
<div id="installProgress"
ng-style="{ 'width': item.progress + '%' }"
class="bg-green-600 text-xs font-medium text-white text-center p-2 leading-none rounded-full"
style="width:0%">
</div>
</div>
</td>
<td class="px-6 py-4">
<span ng-show="item.isSuccess"><i class="fa fa-check"
aria-hidden="true"></i></span>
<span ng-show="item.isCancel"><i class="fa fa-ban"
aria-hidden="true"></i></span>
<span ng-show="item.isError"><i class="fa fa-trash"
aria-hidden="true"></i></span>
<td class="flex justify-center px-6 py-4">
<span ng-show="item.isSuccess"><svg
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round"
d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/>
</svg>
</span>
<span ng-show="item.isCancel"><svg
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round"
d="M18.364 18.364A9 9 0 0 0 5.636 5.636m12.728 12.728A9 9 0 0 1 5.636 5.636m12.728 12.728L5.636 5.636"/>
</svg>
</span>
<span ng-show="item.isError"><svg
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round"
d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"/>
</svg>
</span>
</td>
<td nowrap class="px-6 py-4">
<button type="button" class="btn btn-success btn-sm"
ng-click="item.upload()"
ng-disabled="item.isReady || item.isUploading || item.isSuccess">
<i class="fa fa-upload"
aria-hidden="true"></i> {% trans "Upload" %}
</button>
<button type="button" class="btn btn-warning btn-sm"
ng-click="item.cancel()"
ng-disabled="!item.isUploading">
<i class="fa fa-ban"
aria-hidden="true"></i> {% trans "Cancel" %}
</button>
<button type="button" class="btn btn-danger btn-sm"
ng-click="item.remove()">
<i class="fa fa-trash"
aria-hidden="true"></i> {% trans "Remove" %}
</button>
<td class="px-6 py-4">
<div class="flex items-center gap-1">
<button type="button"
class="text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 font-medium rounded-lg text-sm inline-flex items-center px-1 py-1 text-center"
ng-click="item.upload()"
ng-disabled="item.isReady || item.isUploading || item.isSuccess">
<i class="fa fa-upload"
aria-hidden="true"></i> {% trans "Upload" %}
</button>
<button type="button"
class="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-gray-200 rounded-lg border border-gray-200 text-sm font-medium px-1 py-1 hover:text-gray-900 focus:z-10"
ng-click="item.cancel()"
ng-disabled="!item.isUploading">
<i class="fa fa-ban"
aria-hidden="true"></i> {% trans "Cancel" %}
</button>
<button type="button"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-1 py-1 text-center"
ng-click="item.remove()">
<i class="fa fa-trash"
aria-hidden="true"></i> {% trans "Remove" %}
</button>
</div>
</td>
</tr>
</tbody>
@ -186,15 +231,19 @@
<div>
<div id="queueProg">
{% trans "Queue progress:" %}
<div class="progress" style="">
<div class="progress-bar" role="progressbar"
ng-style="{ 'width': uploader.progress + '%' }"></div>
<div class="w-full bg-gray-100 rounded-full">
<div id="installProgress"
ng-style="{ 'width': uploader.progress + '%' }"
class="bg-green-600 text-xs font-medium text-white text-center p-2 leading-none rounded-full"
style="width:0%">
</div>
</div>
</div>
</div>
<div ng-hide="errorMessage" class="alert alert-danger" role="alert">
<div ng-hide="errorMessage"
class="flex justify-center bg-red-500 rounded-lg text-white px-2 py-1 font-semibold"
role="alert">
{$ fileName $} {% trans "can not be uploaded, Error message:" %}
{$ error_message $}
</div>
@ -229,8 +278,10 @@
</div>
</div>
</li>
<li>
<a onclick="return false;" ng-click="showCreateFileModal()" class="nav-link point-events"
<li id="showCreateFile">
<a onclick="return false;"
ng-click="showCreateFileModal()"
class="nav-link point-events"
href="#" data-modal-target="newfile" data-modal-toggle="newfile"><i class="fa fa-plus-square"
aria-hidden="true"></i> {% trans "New File" %}
</a>
@ -263,6 +314,7 @@
<small class="form-text text-muted">{% trans "File will be created in your current directory, if it already exists it will not overwirte." %}</small>
<div class="flex justify-center mt-3">
<button type="button" ng-click="createNewFile()"
data-modal-toggle="newfile" data-modal-hide="newfile"
class="bg-orange-500 text-white font-bold px-4 py-1 text-xl">{% trans "Create File" %}</button>
</div>
</div>
@ -287,8 +339,10 @@
</div>
</div>
</li>
<li>
<a onclick="return false;" ng-click="showCreateFolderModal()" class="nav-link point-events"
<li id="showCreateFolder">
<a onclick="return false;"
ng-click="showCreateFolderModal()"
class="nav-link point-events"
href="#" data-modal-target="newfolder" data-modal-toggle="newfolder"><i class="fa fa-folder"
aria-hidden="true"></i> {% trans "New Folder" %}
</a>
@ -321,6 +375,7 @@
<small class="form-text text-muted">{% trans "Folder will be created in your current directory" %}</small>
<div class="flex justify-center mt-3">
<button type="button" ng-click="createNewFolder()"
data-modal-toggle="newfolder" data-modal-hide="newfolder"
class="bg-orange-500 text-white font-bold px-4 py-1 text-xl">{% trans "Create Folder" %}</button>
</div>
</div>
@ -346,7 +401,9 @@
</div>
</li>
<li id="deleteFile">
<a onclick="return false;" ng-click="showDeleteModal()" class="nav-link point-events"
<a onclick="return false;"
ng-click="showDeleteModal()"
class="nav-link point-events"
href="#" data-modal-target="delete" data-modal-toggle="delete"><i
class="fa fa-trash-o" aria-hidden="true"></i> {% trans "Delete" %}</a>
<div id="delete" tabindex="-1"
@ -378,9 +435,10 @@
</div>
</div>
<div class="flex gap-1 justify-end py-2">
<button ng-click="deleteFolderOrFile()" type="button"
<button ng-click="deleteFolderOrFile()" type="button" data-modal-toggle="delete"
data-modal-hide="delete"
class="text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">{% trans "Confirm" %}</button>
<button type="button"
<button type="button" data-modal-toggle="delete" data-modal-hide="delete"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2"
data-dismiss="modal">{% trans "Close" %}</button>
</div>
@ -388,8 +446,10 @@
</div>
</div>
</li>
<li id="copyFile">
<a onclick="return false;" ng-click="showCopyModal()" class="nav-link point-events" href="#"
<li id="">
<a onclick="return false;"
ng-click="showCopyModal()"
class="nav-link point-events" href="#"
data-modal-target="copy" data-modal-toggle="copy"><i
class="fa fa-files-o" aria-hidden="true"></i> {% trans "Copy" %}</a>
<div id="copy" tabindex="-1"
@ -420,9 +480,10 @@
<small class="form-text text-muted">{% trans "Enter a path to copy your files to!" %}</small>
</div>
<div class="flex gap-1 justify-end py-2">
<button ng-click="startCopying()" type="button"
<button ng-click="startCopying()" type="button" data-modal-toggle="copy"
data-modal-hide="copy"
class="text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">{% trans "Copy" %}</button>
<button type="button"
<button type="button" data-modal-toggle="copy" data-modal-hide="copy"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2"
data-dismiss="modal">{% trans "Close" %}</button>
</div>
@ -430,8 +491,10 @@
</div>
</div>
</li>
<li id="moveFile">
<a onclick="return false;" ng-click="showMoveModal()" class="nav-link point-events" href="#"
<li id="">
<a onclick="return false;"
ng-click="showMoveModal()"
class="nav-link point-events" href="#"
data-modal-target="move" data-modal-toggle="move"><i
class="fa fa-arrows-alt" aria-hidden="true"></i> {% trans "Move" %}</a>
<div id="move" tabindex="-1"
@ -462,9 +525,10 @@
<small class="form-text text-muted">{% trans "Enter a path to move your files!" %}</small>
</div>
<div class="flex gap-1 justify-end py-2">
<button ng-click="startMoving()" type="button"
<button ng-click="startMoving()" type="button" data-modal-toggle="move"
data-modal-hide="move"
class="text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">{% trans "Move" %}</button>
<button type="button"
<button type="button" data-modal-toggle="move" data-modal-hide="move"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2"
data-dismiss="modal">{% trans "Close" %}</button>
</div>
@ -472,8 +536,10 @@
</div>
</div>
</li>
<li id="renameFile">
<a onclick="return false;" ng-click="showRenameModal()" class="nav-link point-events"
<li id="">
<a onclick="return false;"
ng-click="showRenameModal()"
class="nav-link point-events"
href="#" data-modal-target="rename" data-modal-toggle="rename"><i
class="fa fa-file-text-o" aria-hidden="true"></i> {% trans "Rename" %}</a>
<div id="rename" tabindex="-1"
@ -504,18 +570,22 @@
</div>
</div>
<div class="flex gap-1 justify-end py-2">
<button ng-click="renameFile()" type="button"
<button ng-click="renameFile()" type="button" data-modal-toggle="rename"
data-modal-hide="rename"
class="text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">{% trans "Rename" %}</button>
<button type="button"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2"
data-dismiss="modal">{% trans "Close" %}</button>
data-modal-toggle="rename"
data-modal-hide="rename">{% trans "Close" %}</button>
</div>
</div>
</div>
</div>
</li>
<li id="editFile">
<a onclick="return false;" ng-click="showHTMLEditorModal()" class="nav-link point-events"
<a onclick="return false;"
ng-click="showHTMLEditorModal()"
class="nav-link point-events"
href="#" data-modal-target="edit" data-modal-toggle="edit"><i
class="fa fa-pencil-square-o" aria-hidden="true"></i> {% trans "Edit" %}</a>
<div id="edit" tabindex="-1"
@ -559,7 +629,8 @@
</div>
</div>
<div class="flex justify-end py-3 px-3">
<button ng-click="putFileContents()" type="button"
<button ng-click="putFileContents()" type="button" data-modal-toggle="edit"
data-modal-hide="edit"
class="bg-orange-500 text-white font-bold px-4 py-1 text-xl">
<i class="fa" aria-hidden="true"></i> {% trans "Save Changes" %}
</button>
@ -570,7 +641,9 @@
</div>
</li>
<li id="compressFile">
<a onclick="return false;" ng-click="showCompressionModal()" class="nav-link point-events"
<a onclick="return false;"
ng-click="showCompressionModal()"
class="nav-link point-events"
href="#" data-modal-target="compress" data-modal-toggle="compress"><i
class="fa fa-compress" aria-hidden="true"></i> {% trans "Compress" %}</a>
<div id="compress" tabindex="-1"
@ -611,8 +684,10 @@
<div class="flex gap-1 justify-end py-2">
<div>
<button ng-click="startCompression()" type="button"
data-modal-toggle="compress" data-modal-hide="compress"
class="text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">{% trans "Compress" %}</button>
<button type="button"
<button type="button" data-modal-toggle="compress"
data-modal-hide="compress"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2"
data-dismiss="modal">{% trans "Close" %}</button>
</div>
@ -622,7 +697,9 @@
</div>
</li>
<li id="extractFile">
<a onclick="return false;" ng-click="showExtractionModal()" class="nav-link point-events"
<a onclick="return false;"
ng-click="showExtractionModal()"
class="nav-link point-events"
href="#" data-modal-target="extract" data-modal-toggle="extract"><i class="fa fa-expand"
aria-hidden="true"></i> {% trans "Extract" %}
</a>
@ -652,13 +729,22 @@
<small class="form-text text-muted">{% trans "You can enter . to extract in current directory!" %}</small>
</div>
<div class="flex justify-center py-2">
<button type="button" ng-click="startExtraction()"
<button type="button" ng-click="startExtraction()" data-modal-toggle="extract"
data-modal-hide="extract"
class="bg-orange-500 text-white font-bold px-4 py-1 text-xl">{% trans "Extract" %}</button>
</div>
</div>
</div>
</div>
</li>
<li id="fixPermissions">
<a onclick="return false;" ng-click="fixPermissions()" class="nav-link point-events" href="#"><i
class="fa fa-wrench" aria-hidden="true"></i> {% trans "Fix Permissions" %}</a>
</li>
</ul>
</div>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
</ul>
</div>
<div class="mt-2">
@ -690,23 +776,23 @@
</ul>
</div>
<div>
<div class="relative py-5 overflow-x-auto">
<div class="relative overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead id="tableHead">
<tr>
<th scope="col" class="px-6 py-3">
<tr class="bg-gray-200 w-full rounded-t-lg border-b-2 border-gray-400">
<th scope="col" class="py-3">
</th>
<th scope="col" class="px-6 py-3">
<th scope="col" class="py-3">
File Name
</th>
<th scope="col" class="px-6 py-3">
<th scope="col" class="py-3">
Size (KB)
</th>
<th scope="col" class="px-6 py-3">
<th scope="col" class="py-3">
Last Modified
</th>
<th scope="col" class="px-6 py-3">
<th scope="col" class="py-3">
Permissions
</th>
</tr>
@ -718,10 +804,10 @@
</div>
</div>
<div style="position: absolute;top: 0;left: 0;" id="rightClick" class="card" style="width: 20rem;">
<ul class="list-group list-group-flush">
<a style="border-bottom: 1px solid #007bff;" onclick="return false;" ng-click="showMoveModal()"
href="#">
<div style="position: absolute;top: 0;left: 0;" id="rightClick" class="border bg-gray-50 px-4 py-2">
<ul>
<a style="border-bottom: 1px solid #000000;" onclick="return false;" ng-click="showMoveModal()"
href="#" data-modal-target="move" data-modal-toggle="move">
<li class="list-group-item"><i class="fa fa-arrows-alt" aria-hidden="true"></i> {% trans "Move" %}
</li>
</a>
@ -731,11 +817,11 @@
</li>
</a>
<a style="border-bottom: 1px solid #007bff;" onclick="return false;" ng-click="showCopyModal()"
href="#">
href="#" data-modal-target="copy" data-modal-toggle="copy">
<li class="list-group-item"><i class="fa fa-files-o" aria-hidden="true"></i> {% trans "Copy" %}</li>
</a>
<a style="border-bottom: 1px solid #007bff;" onclick="return false;" ng-click="showRenameModal()"
href="#">
<a style="border-bottom: 1px solid #007bff;" onclick="return false;"
href="#" ng-click="showRenameModal()" data-modal-target="rename" data-modal-toggle="rename">
<li class="list-group-item"><i class="fa fa-file-text-o"
aria-hidden="true"></i> {% trans "Rename" %}</li>
</a>
@ -745,21 +831,23 @@
aria-hidden="true"></i> {% trans "Change Permissions" %}</li>
</a>
<a style="border-bottom: 1px solid #007bff;" onclick="return false;" ng-click="showDeleteModal()"
href="#">
href="#" data-modal-target="delete" data-modal-toggle="delete">
<li class="list-group-item"><i class="fa fa-trash" aria-hidden="true"></i> {% trans "Delete" %}</li>
</a>
<a style="border-bottom: 1px solid #007bff;" onclick="return false;" ng-click="showCompressionModal()"
href="#">
href="#" data-modal-target="compress" data-modal-toggle="compress">
<li class="list-group-item"><i class="fa fa-compress" aria-hidden="true"></i> {% trans "Compress" %}
</li>
</a>
<a style="border-bottom: 1px solid #007bff;" id="extractOnRight" onclick="return false;"
ng-click="showExtractionModal()" href="#">
ng-click="showExtractionModal()"
data-modal-target="extract" data-modal-toggle="extract" href="#">
<li class="list-group-item"><i class="fa fa-expand" aria-hidden="true"></i> {% trans "Extract" %}
</li>
</a>
<a style="border-bottom: 1px solid #007bff;" id="editOnRight" onclick="return false;"
ng-click="showHTMLEditorModal(1)" href="#">
ng-click="showHTMLEditorModal(1)"
data-modal-target="edit" data-modal-toggle="edit" href="#">
<li class="list-group-item"><i class="fa fa-pencil-square-o"
aria-hidden="true"></i> {% trans "Edit" %}</li>
</a>

View File

@ -39,13 +39,13 @@
border: 1px solid rgba(90, 91, 92, 0.7);
position: absolute; z-index: 1;
background-color: #FFFFFF">
</div>
</div>
<div class="py-4 px-6 mt-3">
<p class="text-gray-500 font-bold">Selected Plugin</p>
</div>
<div id="selJS" style="display: none; display: flex; flex-direction: row; margin-top: 10px;">
</div>
</div>
<hr>
<div ng-hide="installationDetailsForm" class="flex justify-center mt-3">
<button ng-disabled="websiteCreationForm.dom.$error.required || websiteCreationForm.email.$invalid"

View File

@ -52,7 +52,14 @@
<div class="border shadow-lg rounded-lg px-3">
<div ng-repeat="web in WebSitesList track by $index" class="px-2">
<div class="bg-gray-200 mt-6 w-full rounded-t-lg border-b-2 border-gray-400">
<p class="font-bold px-4 py-1" ng-bind="web.domain"></p>
<div class="flex items-center">
<a href="http://{$ web.domain $}" target="_blank" title="Visit Site">
<p class="font-bold px-4 py-1" ng-bind="web.domain"></p>
</a>
<a class="text-blue-600 font-semibold" target="_self" href="/filemanagerv2/{$ web.domain $}"
title="Open File Manager">--
{% trans "File Manager" %}</a>
</div>
</div>
<div class="py-3 mb-3 rounded-b-lg border-b-2 border-gray-400 overflow-x-auto">
<table>
@ -91,17 +98,22 @@
</a>
</th>
<th class="w-32 pt-2 font-semibold text-sm"><span ng-bind="web.admin"
style="text-transform: none"></span></th>
<th class="w-32 pt-2 font-semibold text-sm"><span ng-bind="web.ipAddress"></span></th>
style="text-transform: none"></span>
</th>
<th class="w-32 pt-2 font-semibold text-sm"><span ng-bind="web.ipAddress"></span>
</th>
<th class="w-32 pt-2 font-semibold text-sm"><span ng-bind="web.diskUsed"
style="text-transform: none"></span></th>
style="text-transform: none"></span>
</th>
<th class="w-32 pt-2 font-semibold text-sm"><span ng-bind="web.package"
style="text-transform: none"></span></th>
<th class="w-32 pt-2 font-semibold text-sm"><span><a ng-click="issueSSL(web.domain)" href=""
style="text-transform: none">Issue SSL</a></span>
style="text-transform: none"></span>
</th>
<th class="w-32 pt-2 font-semibold text-sm"><span><a ng-click="issueSSL(web.domain)"
href=""
style="text-transform: none">Issue SSL</a></span>
</th>
<th class="w-32 pt-2 font-semibold text-green-700 text-sm"><span ng-bind="web.state"
style="text-transform: none"></span>
style="text-transform: none"></span>
</th>
</tr>
</div>
@ -111,6 +123,12 @@
</div>
</div>
</div>
<div class="flex justify-end mt-4">
<select ng-model="currentPage" class="w-36 bg-gray-200 py-3 px-2 rounded"
ng-change="getFurtherWebsitesFromDB()">
<option ng-repeat="page in pagination">{$ $index + 1 $}</option>
</select>
</div>
</div>
</div>
{% endblock %}