From 09bea09c8157ff45279f0d06aa9d313448c0bec5 Mon Sep 17 00:00:00 2001 From: polo Date: Mon, 7 Apr 2025 07:46:27 +0200 Subject: nouvelle "news" --- public/assets/logo-fond-bleu.png | Bin 61236 -> 0 bytes public/js/main.js | 96 +++++++++++++--------- public/js/tinymce.js | 166 ++++++++++++++++++++++++--------------- 3 files changed, 161 insertions(+), 101 deletions(-) delete mode 100644 public/assets/logo-fond-bleu.png (limited to 'public') diff --git a/public/assets/logo-fond-bleu.png b/public/assets/logo-fond-bleu.png deleted file mode 100644 index f51ac9c..0000000 Binary files a/public/assets/logo-fond-bleu.png and /dev/null differ diff --git a/public/js/main.js b/public/js/main.js index c05eb2f..cb76ea8 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -90,13 +90,8 @@ function changeDate(id_date) const real_id = 'i' + id_date.slice(1); const date_span = document.getElementById(id_date); // = var old_date = date_span.innerHTML; - - // changer "le 28-12-2024 à 23h14" en "2024-12-28T23:14" - let values = old_date.split(" à "); // 2 parties: date et heure - values[1] = values[1].replace('h', ':'); - values[0] = values[0].replace("le ", ""); - let date = values[0].split("-"); // tableau jj-mm-aaaa - old_date = date[2] + '-' + date[1] + "-" + date[0] + "T" + values[1]; + + old_date = dateToISO(old_date); var label = document.createElement('label'); label.textContent = 'Choisir une date: '; @@ -117,6 +112,15 @@ function changeDate(id_date) document.querySelector(`#submit-${id_date}`).classList.remove('hidden'); } +function dateToISO(date){ + // changer "le 28-12-2024 à 23h14" en "2024-12-28T23:14" + let values = date.split(" à "); // 2 parties: date et heure + values[1] = values[1].replace('h', ':'); + values[0] = values[0].replace("le ", ""); + let date_array = values[0].split("-"); // tableau jj-mm-aaaa + return date_array[2] + '-' + date_array[1] + "-" + date_array[0] + "T" + values[1]; +} + function closeInput(id) { const date_span = document.getElementById(id); @@ -133,40 +137,56 @@ function closeInput(id) function submitDate(id_date) { - const date_input = document.getElementById('input-' + id_date); + var date_input = document.getElementById('input-' + id_date); + + // cas des nouvelles "news" + const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters + if(params != null && params.get("id")[0] === 'n') + { + // modifier la date dans le caché + date_input = updateDate(id_date, date_input); + closeInput(id_date); + return; + } + else{ + fetch('index.php?action=date_submit', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({id: id_date, date: date_input.value}) + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + // modifier la date dans le caché + date_input = updateDate(id_date, date_input); + closeInput(id_date); + } + else { + console.error('Erreur lors de la sauvegarde de la date.'); + } + }) + .catch(error => { + console.error('Erreur:', error); + }); + } +} - fetch('index.php?action=date_submit', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({id: id_date, date: date_input.value}) - }) - .then(response => response.json()) - .then(data => { - if (data.success) { - // modifier la date dans le caché - const date_span = document.getElementById(id_date); - let date = new Date(date_input.value); - date_span.innerHTML = - 'le ' + String(date.getDate()).padStart(2, '0') + '-' + - String(date.getMonth() + 1).padStart(2, '0') + '-' + - String(date.getFullYear()).padStart(4, '0') + ' à ' + - String(date.getHours()).padStart(2, '0') + 'h' + - String(date.getMinutes()).padStart(2, '0'); - - closeInput(id_date); - } - else { - console.error('Erreur lors de la sauvegarde de la date.'); - } - }) - .catch(error => { - console.error('Erreur:', error); - }); +function updateDate(id_date, date_input){ + var date_span = document.getElementById(id_date); + let date = new Date(date_input.value); + date_span.innerHTML = + 'le ' + String(date.getDate()).padStart(2, '0') + '-' + + String(date.getMonth() + 1).padStart(2, '0') + '-' + + String(date.getFullYear()).padStart(4, '0') + ' à ' + + String(date.getHours()).padStart(2, '0') + 'h' + + String(date.getMinutes()).padStart(2, '0'); + + return date_input; } -function findParent(element, tag_name) { +function findParent(element, tag_name){ while (element !== null) { if (element.tagName === tag_name.toUpperCase()) // tagName est en majuscules { diff --git a/public/js/tinymce.js b/public/js/tinymce.js index 1e40f51..00868ee 100644 --- a/public/js/tinymce.js +++ b/public/js/tinymce.js @@ -38,10 +38,10 @@ function openEditor(id, page = '') { document.querySelector(`#submit-${id}`).classList.remove('hidden'); if(creation_mode === false){ document.querySelector(`#edit-${id}`).classList.add('hidden'); - document.querySelector(`#delete-${real_id}`).classList.add('hidden'); if(page != 'article'){ document.querySelector(`#position_up-${id}`).classList.add('hidden'); document.querySelector(`#position_down-${id}`).classList.add('hidden'); + document.querySelector(`#delete-${real_id}`).classList.add('hidden'); } } else{ @@ -175,37 +175,75 @@ function closeEditor(id, page = '', restore_old = true) } -function submitArticle(id, page = '', clone = null) { - //var creation_mode; - if(id[0] === 'n'){ - //creation_mode = true; +function submitArticle(id, page = '', clone = null) +{ + /*if(id[0] === 'n' && clone == null){ + return; // sécurité + }*/ + var editor; + const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters - // sécurité - if(clone == null){ - return; - } - } - else{ - //creation_mode = false; - } + // clic sur "tout enregistrer" + if(id[0] === 'n' && page === 'article'){ + const prefixes = ['t', 'p', 'i', 'd']; + const allElemsWithId = document.querySelectorAll('[id]'); + var content = {}; - // Récupérer l'éditeur correspondant à l'article - const editor = editors[id]; - if(!editor) { - console.error('Éditeur non trouvé pour l\'article:', id); + allElemsWithId.forEach(element => { + const first_letter = element.id.charAt(0).toLowerCase(); + if(prefixes.includes(first_letter)){ + content[first_letter] = element.innerHTML; + } + }) + content['d'] = dateToISO(content['d']); + + // Envoi AJAX au serveur + fetch('index.php?action=editor_submit', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({id: id, content: content}) + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + console.log('données envoyées au serveur avec succès.'); + + // remplacer les boutons (Enregistrer => Supprimer) + } + else { + alert('Erreur lors de la sauvegarde de l\'article.'); + } + }) + .catch(error => { + console.error('Erreur:', error); + }); return; } + // champs à remplir des nouvelles "news" + else if(page === 'article' && params != null && params.get("id")[0] === 'n'){ + closeEditor(id, page, false); + //makeNewArticleButtons(id, id, clone); + return; + } + // dans les autres cas, on doit pouvoir récupérer l'éditeur + else{ + // l'éditeur correspond à l'article OU page "article" à un élément: titre, aperçu, article + editor = editors[id]; + if(!editor) { + console.error('Éditeur non trouvé pour l\'article:', id); + return; + } + } - // Récupérer le contenu de l'éditeur - const html = editor.getContent(); - // Envoi AJAX au serveur fetch('index.php?action=editor_submit', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({id: id, content: html}) + body: JSON.stringify({id: id, content: editor.getContent()}) }) .then(response => response.json()) .then(data => { @@ -213,48 +251,7 @@ function submitArticle(id, page = '', clone = null) { // Fermer l'éditeur et mettre à jour le contenu de l'article closeEditor(id, page, false); if(id[0] === 'n'){ - var share_btn = document.querySelector(`.share.hidden`); // combinaison de deux classes - var new_btn = document.querySelector(`#new-${id}`); - var edit_btn = document.querySelector(`#edit-${id}`); - var pos_up_btn = document.querySelector(`#position_up-${id}`); - var pos_down_btn = document.querySelector(`#position_down-${id}`); - var delete_btn = document.querySelector(`#delete-${id}`); - var cancel_btn = document.querySelector(`#cancel-${id}`); - var submit_btn = document.querySelector(`#submit-${id}`); - - share_btn.classList.remove('hidden') - new_btn.classList.add('hidden'); - edit_btn.classList.remove('hidden'); - pos_up_btn.classList.remove('hidden'); - pos_down_btn.classList.remove('hidden'); - delete_btn.classList.remove('hidden'); - //cancel_btn.classList.add('hidden'); - //submit_btn.classList.add('hidden'); - - var article = document.getElementById(id); - var parent = findParent(article, 'article'); - //share_btn.setAttribute('href', '#' + data.article_id); - share_btn.setAttribute('onclick', "copyInClipBoard('" + window.location.href + data.article_id + "')"); // # de l'ancre ajouté au clic sur le lien ouvrant l'éditeur - article.id = data.article_id; - edit_btn.id = 'edit-' + data.article_id; - edit_btn.querySelector('.action_icon').setAttribute('onclick', "openEditor('" + data.article_id + "')"); - pos_up_btn.id = 'position_up-' + data.article_id; - pos_up_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + data.article_id + "', 'up')"); - pos_down_btn.id = 'position_down-' + data.article_id; - pos_down_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + data.article_id + "', 'down')"); - delete_btn.id = 'delete-' + data.article_id; - delete_btn.querySelector('.action_icon').setAttribute('onclick', "deleteArticle('" + data.article_id + "')"); - cancel_btn.id = 'cancel-' + data.article_id; - cancel_btn.querySelector('button').setAttribute('onclick', "closeEditor('" + data.article_id + "')"); - submit_btn.id = 'submit-' + data.article_id; - submit_btn.querySelector('button').setAttribute('onclick', "submitArticle('" + data.article_id + "')"); - - var next_div = parent.nextElementSibling.nextElementSibling; - parent.parentNode.replaceChild(clone.cloneNode(true), parent); // clone du squelette pour le garder intact - next_div.appendChild(parent); - } - else{ - //document.getElementById(id).innerHTML = html; + makeNewArticleButtons(id, data.article_id, clone); } } else { @@ -264,4 +261,47 @@ function submitArticle(id, page = '', clone = null) { .catch(error => { console.error('Erreur:', error); }); +} + +function makeNewArticleButtons(id, article_id, clone) +{ + var share_btn = document.querySelector(`.share.hidden`); // combinaison de deux classes + var new_btn = document.querySelector(`#new-${id}`); + var edit_btn = document.querySelector(`#edit-${id}`); + var pos_up_btn = document.querySelector(`#position_up-${id}`); + var pos_down_btn = document.querySelector(`#position_down-${id}`); + var delete_btn = document.querySelector(`#delete-${id}`); + var cancel_btn = document.querySelector(`#cancel-${id}`); + var submit_btn = document.querySelector(`#submit-${id}`); + + share_btn.classList.remove('hidden') + new_btn.classList.add('hidden'); + edit_btn.classList.remove('hidden'); + pos_up_btn.classList.remove('hidden'); + pos_down_btn.classList.remove('hidden'); + delete_btn.classList.remove('hidden'); + //cancel_btn.classList.add('hidden'); + //submit_btn.classList.add('hidden'); + + var article = document.getElementById(id); + var parent = findParent(article, 'article'); + + share_btn.setAttribute('onclick', "copyInClipBoard('" + window.location.href + article_id + "')"); // # de l'ancre ajouté au clic sur le lien ouvrant l'éditeur + article.id = article_id; + edit_btn.id = 'edit-' + article_id; + edit_btn.querySelector('.action_icon').setAttribute('onclick', "openEditor('" + article_id + "')"); + pos_up_btn.id = 'position_up-' + article_id; + pos_up_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + article_id + "', 'up')"); + pos_down_btn.id = 'position_down-' + article_id; + pos_down_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + article_id + "', 'down')"); + delete_btn.id = 'delete-' + article_id; + delete_btn.querySelector('.action_icon').setAttribute('onclick', "deleteArticle('" + article_id + "')"); + cancel_btn.id = 'cancel-' + article_id; + cancel_btn.querySelector('button').setAttribute('onclick', "closeEditor('" + article_id + "')"); + submit_btn.id = 'submit-' + article_id; + submit_btn.querySelector('button').setAttribute('onclick', "submitArticle('" + article_id + "')"); + + var next_div = parent.nextElementSibling.nextElementSibling; + parent.parentNode.replaceChild(clone.cloneNode(true), parent); // clone du squelette pour le garder intact + next_div.appendChild(parent); } \ No newline at end of file -- cgit v1.2.3