diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..a5a37a0 --- /dev/null +++ b/TODO.md @@ -0,0 +1,10 @@ +Durée : faire une option pour une déterminer une durée min et max + moyenne + +Mettre une date butoir et une date critique + +Mettre les dates au format humain : le vendredi 11 septembre +(enlever l'année + mettre au fromat français) + +Mettre option rayer les tâches faites (done) + +Mettre des indicateurs de ressenti (content, pas content) quand done \ No newline at end of file diff --git a/app/ico/poubelle.png b/app/ico/poubelle.png new file mode 100644 index 0000000..3c6f063 Binary files /dev/null and b/app/ico/poubelle.png differ diff --git a/app/img/liege.jpg b/app/img/liege.jpg new file mode 100644 index 0000000..02c7d76 Binary files /dev/null and b/app/img/liege.jpg differ diff --git a/app/img/nav.avif b/app/img/nav.avif new file mode 100644 index 0000000..8c0485a Binary files /dev/null and b/app/img/nav.avif differ diff --git a/app/index.html b/app/index.html index 2f95b67..914eae9 100644 --- a/app/index.html +++ b/app/index.html @@ -18,12 +18,30 @@ - - - + + +
+ + + + + + + + + + + + + + + +
+
diff --git a/app/script.js b/app/script.js index 3e1720e..adbe920 100644 --- a/app/script.js +++ b/app/script.js @@ -17,28 +17,28 @@ function tri_duree_descend(table) { //définition de l'objet tâche class Tache { - + //Identifiant de la tâche - integer + identifiant = 0; //Nom de la tâche - chaîne de caractères nom = "default"; //Durée en heures - float duree = 0.0; - //Date de début - date - //par défaut, c'est la date du jour - datedebut; //Date de fin - date datefin; //Tache à faire avant la tâche courante - instance de classe //TODO implémenter cette fonctionnalité est_bloque_par; - //Priorité - integer - priorite = 0; + //Priorité - integer entre 1 et 3 + priorite = 3; - //l'utilisateur définit le nom de la tâche et sa durée - constructor(nom, duree, datedebut, datefin) { + //l'utilisateur définit le nom de la tâche et sa durée + + //crée un identifiant unique aléatoire entre 0 et 9999 + constructor(nom, duree, datefin, priorite) { this.nom = nom; this.duree = duree; - this.datedebut = datedebut; this.datefin = datefin; + this.priorite = priorite; + this.identifiant = Math.floor(Math.random()*10000); } //fonction qui ajoute une date de début ou de fin en fonction des inputs disponibles @@ -56,7 +56,8 @@ class Tache { function update_postit(table) { //identifie la div qui contient les tâches - var element = document.getElementById("conteneur"); + let element = document.getElementById("conteneur"); + //supprime les post-it existants de la balise div id "conteneur" while (element.firstChild){ element.removeChild(element.firstChild); @@ -64,13 +65,19 @@ function update_postit(table) { //parcours le tableau de tâches et récupère les variables var longueur = table.length; for (let i = 0; i < longueur; i++ ) { + let displayid = table[i].identifiant; let displayname = table[i].nom; let displayduration = table[i].duree; - let displaystartdate = table[i].datedebut; - let displayenddate = table[i].datefin; + let displayenddate = table[i].datefin; + let displaypriority = table[i].priorite; //crée une div qui contient les éléments de la tâche let balise = document.createElement("div"); + //on change la couleur de la balise en fonction de la priorité de la tâche + //1 = rouge, 2 = orange, 3 = jaune + //TODO permettre la customisation de ces couleurs + let couleurs = ["plum", "gold", "lightblue"]; + balise.style.backgroundColor = couleurs[displaypriority - 1] balise.classList.add("tache"); //titre de la tâche (son nom) let titre = document.createElement("h3"); @@ -79,16 +86,16 @@ function update_postit(table) { titre.classList.add("titre_tache"); //on ajoute le titre à la page HTML dans la div conteneur balise.appendChild(titre); + //puis on rajoute un séparateur let separator = document.createElement("hr"); balise.appendChild(separator); //corps de la tâche let duree = "durée " + displayduration + "h"; - let datedebut = "du " + displaystartdate; - let datefin = "au " + displayenddate; + let datefin = "à faire avant le " + displayenddate; //liste qui contient les éléments à ajouter - var liste = [duree, datedebut, datefin]; + var liste = [duree, datefin]; //boucle de création des éléments à ajouter for (let p = 0; p < liste.length; p++){ //ajoute le texte courant @@ -96,10 +103,22 @@ function update_postit(table) { let paragraph = document.createElement("p"); paragraph.appendChild(chunck); - paragraph.classList.add("corps_tache") + paragraph.classList.add("corps_tache"); //ajoute l'élément au corps de texte de la tâche balise.appendChild(paragraph); - } + } + + // en bas, on ajoute l'îcone de suppression de la tâche + let poubelle = document.createElement("img"); + poubelle.src="ico/poubelle.png"; + poubelle.classList.add("poubelle"); + poubelle.addEventListener('click',function(){ + remove_task(displayid); + }); + balise.appendChild(poubelle); + + //ajout l'identifiant unique comme id à la div de la tâche + balise.setAttribute('id', displayid); //ajoute la div de la tâche au conteneur element.appendChild(balise); @@ -112,17 +131,17 @@ function createtask(){ //on récupère l'input de l'utilisateur.ice let taskname = document.getElementById("nom").value; let taskduration = document.getElementById("duree").value; - let taskdatedebut = document.getElementById("datedebut").value; let taskdatefin = document.getElementById("datefin").value; + let taskpriorite = document.querySelector('input[name="priorite"]:checked').value; //on instancie une tâche avec les valeurs de l'utilisateur.ice - let tache = new Tache(taskname, taskduration, taskdatedebut, taskdatefin); + let tache = new Tache(taskname, taskduration, taskdatefin, taskpriorite); //on ajoute la nouvelle tâche à la fin au tableau de tâches tableau_taches.push(tache); //on calcule les dates de début et de fin de la tâche en fonction //des inputs envoyés //TODO à implémenter - //tache.ajoute_date(taskdatedebut, taskdatefin, taskduration); + //tache.ajoute_date(taskdatefin, taskduration); //-----TRI PAR DÉFAUT //appel de la fonction qui trie les tâches dans le tableau @@ -132,4 +151,14 @@ function createtask(){ //update de l'affichage de la liste des tâches en HTML update_postit(tableau_taches); +} + +// fonction de suppression de la tâche courante +function remove_task(id) { + //trouve l'index de la tâche du tableau grâce à son id + let taskindex = tableau_taches.findIndex(item => item.identifiant === id); + //retire la tâche du tableau des tâches + tableau_taches.splice(taskindex, 1); + //on update l'affichage du tableau des tâches + update_postit(tableau_taches); } \ No newline at end of file diff --git a/app/style.css b/app/style.css index 5238b6f..28270e8 100644 --- a/app/style.css +++ b/app/style.css @@ -6,7 +6,7 @@ body{ font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; - background-image: url(https://t3.ftcdn.net/jpg/09/18/51/88/360_F_918518811_e0Wh732g7nIS9hsyi7ox9wWhguruEEgx.jpg); + background-image: url('img/liege.jpg'); background-size: 500px; font-weight: 400; display: flex; @@ -43,7 +43,7 @@ nav{ min-height: 100vh; text-align: center; padding:15px; - background-image: url('https://img.freepik.com/free-photo/yellow-sponge-rubber-texture-background_1373-524.jpg?semt=ais_hybrid'); + background-image: url('img/nav.avif'); background-size: 300px; box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; @@ -93,13 +93,16 @@ button:hover{ } #conteneur{ + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; flex: 7; padding: 10px; } #commandes{ background-color: rgba(255, 255, 255, 0.171); - } .tache{ @@ -110,6 +113,7 @@ button:hover{ flex-direction: column; align-items: center; width: 200px; + height: fit-content; background-color: gold; box-shadow: rgba(0, 0, 0, 0.1) 0px 20px 25px -5px, rgba(0, 0, 0, 0.04) 0px 10px 10px -5px; padding: 15px; @@ -118,6 +122,15 @@ button:hover{ -o-transform: rotate(2deg); -ms-transform: rotate(2deg); transform: rotate(2deg); + transition: all 300ms; +} + +.tache:hover{ + rotate:(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); } .titre_tache{ @@ -130,5 +143,42 @@ button:hover{ .corps_tache{ margin: 0; padding: 5px; + text-align: center; +} + +.poubelle{ + width: 20px; + opacity: 50%; + transition: all 500ms; + margin-top: 5px; +} + +.poubelle:hover{ + opacity: 90%; +} + +.radio-conteneur{ + margin-top: 5px; + padding: 10px; + background-color: lightyellow; + border-radius: 10px; + width: 80%; + box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 2px 6px 2px; + display: flex; + flex-direction: column; + align-items: center; +} + +.radio_line{ + display: flex; + width: 80%; + justify-content: right; +} + +.radio{ + width: 15px; + margin-left: 1vw; + position: relative; + top: 4px; } \ No newline at end of file