Files
2024-03-11 00:54:46 +01:00

316 lines
11 KiB
JavaScript

// Ouverture menu nav
const menuTrigger = document.getElementById("menu-trigger");
const menu = document.getElementById("menu");
const overlay = document.getElementById("overlay")
menuTrigger.addEventListener("click", () => {
menu.classList.toggle("hidden");
if (!menu.classList.contains("hidden")) {
menu.classList.remove("hidden");
menu.style.left = "-300px";
overlay.style.display = "none";
} else {
menu.classList.add("hidden");
menu.style.left = "0px";
overlay.style.display = "block";
}
});
// Notepad
ActiveFolder = "Menu principal";
/*let ActiveFolder = e.target.textContent;*/
const folderList = document.getElementById("folder-list");
const noteList = document.getElementById("note-list");
const textEditor = document.getElementById("text-editor");
const backButton = document.getElementById("back-button");
const textEditorContainer = document.getElementById("text-editor-container");
// Fonction pour afficher les dossiers
function displayFolders() {
folderList.innerHTML = ""; // Efface la liste des dossiers actuels
data.forEach((item) => {
const folderItem = document.createElement("li");
folderItem.textContent = item.folder;
folderItem.classList.add("folder");
folderList.appendChild(folderItem);
RefreshActiveFolder("Menu principal");
});
}
// Fonction pour charger la liste des notes d'un dossier
function loadNotes(folderName) {
fetch(`/api/notes/${folderName}`)
.then((response) => response.json())
.then((notes) => {
// Afficher les notes dans l'interface utilisateur
const noteList = document.getElementById('note-list');
noteList.innerHTML = '';
notes.forEach((note) => {
const noteItem = document.createElement('li');
noteItem.textContent = note.name;
noteItem.classList.add('note');
noteList.appendChild(noteItem);
// Ajoutez un gestionnaire d'événements pour charger le contenu RTF au clic
noteItem.addEventListener('click', () => {
loadRTFContent(note.rtfFile);
});
});
})
.catch((error) => {
console.error('Erreur lors du chargement des notes : ', error);
});
}
// Fonction pour afficher les notes d'un dossier donné
function displayNotes(folderName) {
noteList.innerHTML = ""; // Efface la liste des notes actuelles
const folderpath = 'notepad/contents/${folderName}/'; // Défini le chemin vers les notes
const rtfFiles = ["Note_1.rtf", "Note_2.rtf"]; // Essai
rtfFiles.forEach((rtfFile) => {
const noteName = rtfFile.replace(".rtf", ""); // Retire l'extension ".rtf"
const noteItem = document.createElement("li"); // Crée la note dans la liste
noteItem.textContent = noteName;
noteItem.classList.add("note"); // Ajoute la classe "note" ce qui défini l'élément comme une note
// Gestionnaire d'évenements de clic sur la note
noteItem.addEventListener("click", () => {
loadRTFContent(noteName, folderName);
});
noteList.appendChild(noteItem);
})
}
// Afficher les dossiers au chargement de la page
displayFolders();
// Informe sur le dossier actuellement ouvert
function RefreshActiveFolder(folderName){
let ActiveFolder = folderName;
document.getElementById("ActiveFolderInfo").innerHTML = ActiveFolder;
}
// Gérez le clic sur les dossiers
folderList.addEventListener("click", (e) => {
if (e.target.classList.contains("folder")) {
const folderName = e.target.textContent;
displayNotes(folderName); // Affichez les notes du dossier sélectionné
RefreshActiveFolder(folderName); // Mettez à jour le dossier actif
showNotesInFolder(folderName); // Affichez les notes du dossier
}
});
// Récupérer les éléments boutons
const addFolderButton = document.getElementById("add-folder");
const addNoteButton = document.getElementById("add-note");
// Fonction d'ajout de dossier
function AddFolder(){
const folderName = prompt("Entrez le nom du dossier")
data.push({ folder: folderName, notes: [] });
displayFolders();
}
// Bouton d'ajout de dossier
addFolderButton.addEventListener("click", () => {
AddFolder();
});
// Gérez l'affichage initial de la page
function showInitialView() {
folderList.style.display = "block";
noteList.style.left = "-400px";
backButton.style.display = "none";
addNoteButton.style.display ="none";
textEditorContainer.style.display = "none"; // Masquez le conteneur du traitement de texte
}
// Gérez l'affichage des notes dans un dossier
function showNotesInFolder(folderName) {
folderList.style.display = "none";
noteList.style.left = "400px";
backButton.style.display = "block";
addNoteButton.style.display = "block";
textEditorContainer.style.display = "none";
// Affichez ici les notes du dossier sélectionné
}
// Gérez le clic sur un dossier pour afficher ses notes
folderList.addEventListener("click", (e) => {
if (e.target.classList.contains("folder")) {
const folderName = e.target.textContent;
showNotesInFolder(folderName);
}
});
// Gérez le clic sur le bouton "Retour" pour quitter un dossier
backButton.addEventListener("click", () => {
showInitialView();
RefreshActiveFolder("Menu principal");
});
// Fonction pour afficher le traitement de texte dans une note
function displayRTCContent(rtfContent) {
const textContent = document.getElementById("text-editor");
const rtfViewer = new RTFJS.RTF();
rtfViewer.setHtml(textEditor);
rtfViewer.render(rtfContent);
};
// Fonction de chargement de fichier RTF
function loadRTFContent(noteName, folderName) {
const rtfFileURL = 'notepad/contents/${folderName}/${noteName}.rtf';
fetch(rtfFileURL)
.then((response) => response.text())
.then((rtfContent) => {
displayRTFContent(rtfContent);
})
.catch((error) => {
console.error("Erreur lors du chargement du fichier RTF : ", error);
});
};
// Gérez le clic sur une note pour afficher son contenu dans le traitement de texte
noteList.addEventListener("click", (e) => {
if (e.target.classList.contains("note")) {
const noteItem = e.target;
const noteName = noteItem.textContent.trim();
// Charger contenu RTF
loadRTFContent(noteName, folderName);
}
});
// Fonction pour sauvegarder le contenu du traitement de texte dans la note
function saveNoteContent() {
const folderName = getSelectedFolder();
const folder = data.find((item) => item.folder === folderName);
if (folder) {
const selectedNote = noteList.querySelector(".selected");
if (selectedNote) {
const noteName = selectedNote.textContent.trim();
folder.notes = folder.notes.map((note) =>
note === noteName ? textEditor.textContent : note
);
saveDataLocally(); // Sauvegardez les modifications
}
}
}
// Gérez le clic sur une note pour la sélectionner
noteList.addEventListener("click", (e) => {
if (e.target.classList.contains("note")) {
// Désélectionnez toutes les notes
noteList.querySelectorAll(".note").forEach((note) => {
note.classList.remove("selected");
});
// Sélectionnez la note cliquée
e.target.classList.add("selected");
}
});
// Appel initial pour afficher la vue initiale
showInitialView();
// Gérez le clic sur le bouton "Ajouter une note"
addNoteButton.addEventListener("click", () => {
const parentFolder = ActiveFolder; // Utilisez ActiveFolder ici
if (parentFolder) {
const noteName = prompt("Nom de la nouvelle note :");
if (noteName) {
// Envoyer une requête au serveur pour ajouter la nouvelle note
const formData = new FormData();
formData.append("addNote", "true");
formData.append("folderName", parentFolder);
formData.append("noteContent", noteName);
fetch("notepad.php", {
method: "POST",
body: formData,
})
.then(response => response.text())
.then(data => {
if (data === "Nouvelle note ajoutée avec succès.") {
// Mettez à jour la liste des notes du dossier actif
displayNotes(parentFolder);
} else {
alert("Erreur : " + data);
}
})
.catch(error => {
console.error("Erreur lors de l'ajout de la note : " + error);
});
}
} else {
alert("Erreur : le dossier actif n'a pas été trouvé.");
}
});
// Fonction pour appliquer le style sélectionné au texte sélectionné
function applyStyle(style, value) {
document.execCommand(style, false, value);
}
// Gérez les boutons de mise en forme (par exemple, gras, italique, souligné)
document.getElementById("bold-button").addEventListener("click", () => {
applyStyle("bold");
});
document.getElementById("italic-button").addEventListener("click", () => {
applyStyle("italic");
});
document.getElementById("underline-button").addEventListener("click", () => {
applyStyle("underline");
});
// Vous pouvez ajouter d'autres boutons et styles selon vos besoins
// Gérez la mise à jour du contenu d'une note
function saveNoteContent() {
const selectedNote = noteList.querySelector(".selected");
if (selectedNote) {
const noteId = selectedNote.getAttribute("data-note-id");
const newNoteContent = textEditor.innerHTML;
// Envoyer une requête au serveur pour mettre à jour le contenu de la note
const formData = new FormData();
formData.append("updateNote", "true");
formData.append("noteId", noteId);
formData.append("newNoteContent", newNoteContent);
fetch("notepad.php", {
method: "POST",
body: formData,
})
.then(response => response.text())
.then(data => {
if (data === "Contenu de la note mis à jour avec succès.") {
// Mettez à jour la liste des notes du dossier actif
displayNotes(ActiveFolder);
} else {
alert("Erreur : " + data);
}
})
.catch(error => {
console.error("Erreur lors de la mise à jour de la note : " + error);
});
}
}
// Gérez la modification du contenu de la zone de texte éditable
textEditor.addEventListener("input", saveNoteContent);
// Appel initial pour afficher la vue initiale
showInitialView();