File "arboresence09.php"
Full Path: /home/analogde/www/CGI/uploads/arboresence09.php
File size: 7.49 KB
MIME-type: text/html
Charset: utf-8
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Explorateur de fichiers</title>
<style>
ul { list-style-type: none; }
li { padding: 5px; cursor: pointer; }
.hidden { display: none; }
.folder-icon, .file-icon { margin-right: 10px; }
/* Menu contextuel */
.context-menu {
position: absolute;
background-color: white;
border: 1px solid #ddd;
padding: 10px;
display: none;
z-index: 1000;
}
.context-menu ul { list-style-type: none; padding: 0; }
.context-menu li { padding: 5px; cursor: pointer; }
.context-menu li:hover { background-color: #eee; }
</style>
</head>
<body>
<?php
function generateFileTree($directory)
{
echo "---->>> " .$directory;
// Lire le contenu du répertoire
$files = scandir($directory);
echo "<ul>";
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
// Si c'est un dossier, ajouter un bouton pour l'expand/collapse
if (is_dir($filePath)) {
echo "<li class='directory' data-path='$filePath'><span class='folder-icon'>📁</span> $file";
// Appeler récursivement pour les sous-répertoires
echo "<ul class='hidden'>";
generateFileTree($filePath);
echo "</ul>";
echo "</li>";
} else {
// Si c'est un fichier, afficher avec une icône appropriée
$fileExtension = pathinfo($file, PATHINFO_EXTENSION);
$fileIcon = getFileIcon($fileExtension);
echo "<li class='file' data-path='$filePath'><span class='file-icon'>$fileIcon</span> $file</li>";
}
}
}
echo "</ul>";
}
function getFileIcon($extension)
{
/*
// Assigner des icônes selon l'extension
$icons = [
'txt' => '📄', // 📄 pour fichier texte
'jpg' => '🖼', // 🖼️ pour image jpg
'png' => '🖼', // 🖼️ pour image png
'pdf' => '📕', // 📕 pour PDF
'zip' => '🗜', // 🗜️ pour fichier compressé
'default' => '📁' // 📁 pour fichier par défaut
];
return $icons[$extension] ?? $icons['default'];
*/
return = '📁'
}
// Appeler la fonction pour générer l'arborescence à partir du répertoire courant ou celui spécifié
*/
echo "TRACE...";
generateFileTree(getcwd());
?>
<!-- Menu contextuel -->
<div id="contextMenu" class="context-menu">
<ul>
<li id="option1">Option 1</li>
<li id="option2">Option 2</li>
<li id="option3">Option 3</li>
</ul>
<p id="elementInfo"></p>
</div>
<script>
// Gérer l'expansion et la réduction des dossiers au clic gauche
document.addEventListener('click', function(event) {
const target = event.target;
// Si l'élément cliqué est un dossier (représenté par la classe 'directory')
if (target.closest('.directory')) {
const liElement = target.closest('.directory');
const sublist = liElement.querySelector('ul');
// Alternance entre afficher et cacher le contenu du dossier
if (sublist.classList.contains('hidden')) {
sublist.classList.remove('hidden');
target.querySelector('.folder-icon').textContent = '📂'; // Icône ouverte
} else {
sublist.classList.add('hidden');
target.querySelector('.folder-icon').textContent = '📁'; // Icône fermée
}
}
});
/*
// Gérer le menu contextuel au clic droit sur un fichier
document.addEventListener('contextmenu', function(event) {
event.preventDefault();
const target = event.target.closest('.file');
if (target) {
// Récupérer les informations du fichier
const filePath = target.dataset.path;
const fileName = target.textContent.trim();
// Positionner et afficher le menu contextuel
const contextMenu = document.getElementById('contextMenu');
contextMenu.style.top = `${event.clientY}px`;
contextMenu.style.left = `${event.clientX}px`;
contextMenu.style.display = 'block';
// Afficher les informations du fichier
document.getElementById('elementInfo').textContent = `Fichier: ${fileName}, Chemin: ${filePath}`;
// Masquer le menu lorsque l'on clique ailleurs
document.addEventListener('click', function(e) {
if (!contextMenu.contains(e.target)) {
contextMenu.style.display = 'none';
}
});
}
});
*/
// Gérer le collapse/expand au clic sur le nom du répertoire parent
document.addEventListener('click', function(event) {
const directoryName = event.target.closest('.directory'); // Vérifie si le clic est sur un répertoire
if (directoryName) {
// Toggle (afficher/cacher) le contenu du répertoire
const subTree = directoryName.querySelector('ul');
if (subTree) {
subTree.classList.toggle('hidden'); // Ajoute ou retire la classe 'hidden' pour afficher/masquer
}
}
});
// Gérer le menu contextuel uniquement au clic droit sur le texte du nom du fichier
document.addEventListener('contextmenu', function(event) {
event.preventDefault(); // Empêcher le menu contextuel par défaut
const target = event.target.closest('.file-name') || event.target.closest('.directory'); // Vérifie si le clic est sur le nom du fichier ou d'un dossier
if (target) {
// Récupérer l'élément parent qui contient les données du fichier ou dossier
const itemElement = target.closest('li');
const filePath = itemElement.dataset.path; // Chemin relatif du fichier/dossier
const depth = itemElement.dataset.depth; // Profondeur dans l'arborescence
const itemName = target.textContent.trim(); // Nom du fichier ou du dossier
// Positionner le menu contextuel aux coordonnées de la souris
const contextMenu = document.getElementById('contextMenu');
contextMenu.style.top = `${event.clientY}px`; // Position Y de la souris
contextMenu.style.left = `${event.clientX}px`; // Position X de la souris
contextMenu.style.display = 'block';
// Afficher les informations du fichier/dossier dans le menu
document.getElementById('elementInfo').textContent = `Nom: ${itemName}, Chemin: ${filePath}, Profondeur: ${depth}`;
// Masquer le menu lorsqu'on clique ailleurs
document.addEventListener('click', function(e) {
if (!contextMenu.contains(e.target)) {
contextMenu.style.display = 'none';
}
});
}
// Options du menu contextuel
document.getElementById('option1').addEventListener('click', function() {
alert('Option 1 sélectionnée');
});
document.getElementById('option2').addEventListener('click', function() {
alert('Option 2 sélectionnée');
});
document.getElementById('option3').addEventListener('click', function() {
alert('Option 3 sélectionnée');
});
</script>
</body>
</html>