summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-04-02 00:00:35 +0200
committerpolo <ordipolo@gmx.fr>2025-04-02 00:00:35 +0200
commite4a325c9d5c07f09bc18b7e366ffb82b82c43502 (patch)
treeb30c9c91106ebdbeef988c2c1ebd955b62051be2 /public
parente91841c4e678f955e1a44bf0fa0839e84f0aacd0 (diff)
downloadcms-e4a325c9d5c07f09bc18b7e366ffb82b82c43502.zip
modification des titres, aperçus et dates des news
Diffstat (limited to 'public')
-rw-r--r--public/css/main.css29
-rw-r--r--public/js/main.js85
-rw-r--r--public/js/tinymce.js75
3 files changed, 145 insertions, 44 deletions
diff --git a/public/css/main.css b/public/css/main.css
index a75b8cd..50c2173 100644
--- a/public/css/main.css
+++ b/public/css/main.css
@@ -56,22 +56,39 @@ article .logo2
56 overflow: hidden; 56 overflow: hidden;
57} 57}
58 58
59article .action_icon 59.action_icon
60{ 60{
61 width: 24px; 61 width: 24px;
62 vertical-align: middle; 62 vertical-align: bottom;
63 border: white 2px solid; /* invisible */ 63 border: white 2px solid; /* invisible */
64} 64}
65article .action_icon:hover 65button .action_icon
66{
67 border: none;
68}
69.action_icon:hover
66{ 70{
67 background-color: #ffff00; 71 background-color: #ffff00;
68 border-radius: 4px; 72 border-radius: 4px;
69 border: lightgrey 2px outset; 73 border: lightgrey 2px outset;
70} 74}
71.article_title_zone 75button .action_icon:hover
76{
77 border: none;
78}
79
80.button_zone
72{ 81{
73 display: flex; 82 display: flex;
74 justify-content: space-between; 83}
84
85.share
86{
87 float: right;
88}
89.article_title_zone
90{
91 padding: 10px;
75} 92}
76.under_an_article 93.under_an_article
77{ 94{
@@ -82,8 +99,8 @@ article .action_icon:hover
82.under_an_article img 99.under_an_article img
83{ 100{
84 width: 24px; 101 width: 24px;
85 vertical-align: middle;
86 margin-right: 5px; 102 margin-right: 5px;
103 vertical-align: middle;
87} 104}
88.article_admin_zone 105.article_admin_zone
89{ 106{
diff --git a/public/js/main.js b/public/js/main.js
index d985b71..1351fea 100644
--- a/public/js/main.js
+++ b/public/js/main.js
@@ -63,12 +63,93 @@ function switchPositions(articleId, direction)
63 console.log('Inversion réussie'); 63 console.log('Inversion réussie');
64 } 64 }
65 else{ 65 else{
66 console.log('Échec de l\'inversion'); 66 console.error('Échec de l\'inversion');
67 } 67 }
68 } 68 }
69 else { 69 else {
70 70
71 console.log('Échec de l\'inversion'); 71 console.error('Échec de l\'inversion');
72 }
73 })
74 .catch(error => {
75 console.error('Erreur:', error);
76 });
77}
78
79function changeDate(id_date)
80{
81 const real_id = 'i' + id_date.slice(1);
82 const date_span = document.getElementById(id_date); // = <span>
83 var old_date = date_span.innerHTML;
84
85 // changer "le 28-12-2024 à 23h14" en "2024-12-28T23:14"
86 let values = old_date.split(" à "); // 2 parties: date et heure
87 values[1] = values[1].replace('h', ':');
88 values[0] = values[0].replace("le ", "");
89 let date = values[0].split("-"); // tableau jj-mm-aaaa
90 old_date = date[2] + '-' + date[1] + "-" + date[0] + "T" + values[1];
91
92 var label = document.createElement('label');
93 label.textContent = 'Choisir une date: ';
94 label.id = 'label-' + id_date;
95
96 var input = document.createElement('input');
97 input.type = 'datetime-local';
98 input.value = old_date;
99 input.id = 'input-' + id_date;
100
101 var parent = date_span.parentElement;
102 parent.appendChild(label)
103 parent.appendChild(input);
104
105 date_span.classList.add('hidden');
106 document.querySelector(`#edit-${id_date}`).classList.add('hidden');
107 document.querySelector(`#cancel-${id_date}`).classList.remove('hidden');
108 document.querySelector(`#submit-${id_date}`).classList.remove('hidden');
109}
110
111function closeInput(id)
112{
113 const date_span = document.getElementById(id);
114 const date_input = document.getElementById('input-' + id);
115 const date_label = document.getElementById('label-' + id);
116
117 date_span.classList.remove('hidden');
118 date_input.remove();
119 date_label.remove();
120 document.querySelector(`#edit-${id}`).classList.remove('hidden');
121 document.querySelector(`#cancel-${id}`).classList.add('hidden');
122 document.querySelector(`#submit-${id}`).classList.add('hidden');
123}
124
125function submitDate(id_date)
126{
127 const date_input = document.getElementById('input-' + id_date);
128
129 fetch('index.php?action=date_submit', {
130 method: 'POST',
131 headers: {
132 'Content-Type': 'application/json'
133 },
134 body: JSON.stringify({id: id_date, date: date_input.value})
135 })
136 .then(response => response.json())
137 .then(data => {
138 if (data.success) {
139 // modifier la date dans le <span> caché
140 const date_span = document.getElementById(id_date);
141 let date = new Date(date_input.value);
142 date_span.innerHTML =
143 'le ' + String(date.getDate()).padStart(2, '0') + '-' +
144 String(date.getMonth() + 1).padStart(2, '0') + '-' +
145 String(date.getFullYear()).padStart(4, '0') + ' à ' +
146 String(date.getHours()).padStart(2, '0') + 'h' +
147 String(date.getMinutes()).padStart(2, '0');
148
149 closeInput(id_date);
150 }
151 else {
152 console.error('Erreur lors de la sauvegarde de la date.');
72 } 153 }
73 }) 154 })
74 .catch(error => { 155 .catch(error => {
diff --git a/public/js/tinymce.js b/public/js/tinymce.js
index 8aeaac8..d3c9739 100644
--- a/public/js/tinymce.js
+++ b/public/js/tinymce.js
@@ -1,12 +1,14 @@
1let editors = {}; 1let editors = {};
2 2
3function openEditor(articleId, page = '') { 3function openEditor(id, page = '') {
4 const real_id = 'i' + id.slice(1);
5
4 // Récupérer et sauvegarder le contenu d'origine de l'article 6 // Récupérer et sauvegarder le contenu d'origine de l'article
5 const articleContent = document.getElementById(articleId).innerHTML; 7 const articleContent = document.getElementById(id).innerHTML;
6 document.getElementById(articleId).setAttribute('data-original-content', articleContent); 8 document.getElementById(id).setAttribute('data-original-content', articleContent);
7 9
8 tinymce.init({ 10 tinymce.init({
9 selector: `#${articleId}`, 11 selector: `#${id}`,
10 language: 'fr_FR', // télécharger des paquets de langue ici: https://www.tiny.cloud/get-tiny/language-packages/ 12 language: 'fr_FR', // télécharger des paquets de langue ici: https://www.tiny.cloud/get-tiny/language-packages/
11 language_url: 'js/tinymce-langs/fr_FR.js', // ou installer tweeb/tinymce-i18n avec composer 13 language_url: 'js/tinymce-langs/fr_FR.js', // ou installer tweeb/tinymce-i18n avec composer
12 license_key: 'gpl', 14 license_key: 'gpl',
@@ -18,19 +20,18 @@ function openEditor(articleId, page = '') {
18 statusbar: false, 20 statusbar: false,
19 setup: function (editor) { 21 setup: function (editor) {
20 editor.on('init', function () { 22 editor.on('init', function () {
21 editors[articleId] = editor; 23 editors[id] = editor;
22 24
23 // boutons "Modifier", "Supprimer", "déplacer vers le haut", "déplacer vers le bas", "Annuler" et "Soumettre" 25 // boutons "Modifier", "Supprimer", "déplacer vers le haut", "déplacer vers le bas", "Annuler" et "Soumettre"
24 document.querySelector(`#edit-${articleId}`).classList.add('hidden'); 26 document.querySelector(`#edit-${id}`).classList.add('hidden');
25 document.querySelector(`#delete-${articleId}`).classList.add('hidden'); 27 document.querySelector(`#cancel-${id}`).classList.remove('hidden');
28 document.querySelector(`#submit-${id}`).classList.remove('hidden');
29 document.querySelector(`#delete-${real_id}`).classList.add('hidden');
26 // boutons absents page article 30 // boutons absents page article
27 if(page != 'article'){ 31 if(page != 'article'){
28 document.querySelector(`#position_up-${articleId}`).classList.add('hidden'); 32 document.querySelector(`#position_up-${id}`).classList.add('hidden');
29 document.querySelector(`#position_down-${articleId}`).classList.add('hidden'); 33 document.querySelector(`#position_down-${id}`).classList.add('hidden');
30 } 34 }
31 document.querySelector(`#cancel-${articleId}`).classList.remove('hidden');
32 document.querySelector(`#submit-${articleId}`).classList.remove('hidden');
33
34 }); 35 });
35 }, 36 },
36 // upload d'image 37 // upload d'image
@@ -59,10 +60,10 @@ function openEditor(articleId, page = '') {
59 }); 60 });
60 61
61 // Remplacer le contenu de l'article par l'éditeur 62 // Remplacer le contenu de l'article par l'éditeur
62 document.getElementById(articleId).innerHTML = articleContent; 63 document.getElementById(id).innerHTML = articleContent;
63} 64}
64 65
65function deleteArticle(articleId, page = '') { 66function deleteArticle(id, page = '') {
66 if (confirm('Voulez-vous vraiment supprimer cet article ?')) 67 if (confirm('Voulez-vous vraiment supprimer cet article ?'))
67 { 68 {
68 // Envoyer une requête au serveur pour supprimer l'article 69 // Envoyer une requête au serveur pour supprimer l'article
@@ -71,7 +72,7 @@ function deleteArticle(articleId, page = '') {
71 headers: { 72 headers: {
72 'Content-Type': 'application/json' 73 'Content-Type': 'application/json'
73 }, 74 },
74 body: JSON.stringify({ id: articleId }) 75 body: JSON.stringify({ id: id })
75 }) 76 })
76 .then(response => response.json()) 77 .then(response => response.json())
77 .then(data => { 78 .then(data => {
@@ -85,7 +86,7 @@ function deleteArticle(articleId, page = '') {
85 } 86 }
86 else{ 87 else{
87 // Supprimer l'article du DOM 88 // Supprimer l'article du DOM
88 const articleElement = document.getElementById(articleId); 89 const articleElement = document.getElementById(id);
89 articleElement.parentElement.parentElement.remove(); // <article> est deux niveau au dessus 90 articleElement.parentElement.parentElement.remove(); // <article> est deux niveau au dessus
90 } 91 }
91 } 92 }
@@ -99,40 +100,42 @@ function deleteArticle(articleId, page = '') {
99 } 100 }
100} 101}
101 102
102function closeEditor(articleId, page = '', display_old = true) 103function closeEditor(id, page = '', display_old = true)
103{ 104{
105 const real_id = 'i' + id.slice(1);
106
104 // Fermer l'éditeur 107 // Fermer l'éditeur
105 tinymce.remove(`#${articleId}`); 108 tinymce.remove(`#${id}`);
106 delete editors[articleId]; 109 delete editors[id];
107 110
108 // Restaurer le contenu d'origine de l'article 111 // Restaurer le contenu d'origine de l'article
109 if(display_old){ 112 if(display_old){
110 const originalContent = document.getElementById(articleId).getAttribute('data-original-content'); 113 const originalContent = document.getElementById(id).getAttribute('data-original-content');
111 document.getElementById(articleId).innerHTML = originalContent; 114 document.getElementById(id).innerHTML = originalContent;
112 } 115 }
113 116
114 // boutons "Modifier", "Supprimer", "déplacer vers le haut", "déplacer vers le bas", "Annuler" et "Soumettre" 117 // boutons "Modifier", "Supprimer", "déplacer vers le haut", "déplacer vers le bas", "Annuler" et "Soumettre"
115 document.querySelector(`#edit-${articleId}`).classList.remove('hidden'); 118 document.querySelector(`#edit-${id}`).classList.remove('hidden');
116 document.querySelector(`#delete-${articleId}`).classList.remove('hidden'); 119 document.querySelector(`#cancel-${id}`).classList.add('hidden');
120 document.querySelector(`#submit-${id}`).classList.add('hidden');
121 document.querySelector(`#delete-${real_id}`).classList.remove('hidden');
117 // boutons absents page article 122 // boutons absents page article
118 if(page != 'article'){ 123 if(page != 'article'){
119 document.querySelector(`#position_up-${articleId}`).classList.remove('hidden'); 124 document.querySelector(`#position_up-${id}`).classList.remove('hidden');
120 document.querySelector(`#position_down-${articleId}`).classList.remove('hidden'); 125 document.querySelector(`#position_down-${id}`).classList.remove('hidden');
121 } 126 }
122 document.querySelector(`#cancel-${articleId}`).classList.add('hidden');
123 document.querySelector(`#submit-${articleId}`).classList.add('hidden');
124} 127}
125 128
126function submitArticle(articleId, page = '') { 129function submitArticle(id, page = '') {
127 // Récupérer l'éditeur correspondant à l'article 130 // Récupérer l'éditeur correspondant à l'article
128 const editor = editors[articleId]; 131 const editor = editors[id];
129 if (!editor) { 132 if(!editor) {
130 console.error('Éditeur non trouvé pour l\'article:', articleId); 133 console.error('Éditeur non trouvé pour l\'article:', id);
131 return; 134 return;
132 } 135 }
133 136
134 // Récupérer le contenu de l'éditeur 137 // Récupérer le contenu de l'éditeur
135 const newContent = editor.getContent(); 138 const html = editor.getContent();
136 139
137 // Envoi AJAX au serveur 140 // Envoi AJAX au serveur
138 fetch('index.php?action=editor_submit', { 141 fetch('index.php?action=editor_submit', {
@@ -140,14 +143,14 @@ function submitArticle(articleId, page = '') {
140 headers: { 143 headers: {
141 'Content-Type': 'application/json' 144 'Content-Type': 'application/json'
142 }, 145 },
143 body: JSON.stringify({id: articleId, content: newContent}) 146 body: JSON.stringify({id: id, content: html})
144 }) 147 })
145 .then(response => response.json()) 148 .then(response => response.json())
146 .then(data => { 149 .then(data => {
147 if (data.success) { 150 if (data.success) {
148 // Fermer l'éditeur et mettre à jour le contenu de l'article 151 // Fermer l'éditeur et mettre à jour le contenu de l'article
149 closeEditor(articleId, page, false); 152 closeEditor(id, page, false);
150 document.getElementById(articleId).innerHTML = newContent; 153 document.getElementById(id).innerHTML = html;
151 } 154 }
152 else { 155 else {
153 alert('Erreur lors de la sauvegarde de l\'article.'); 156 alert('Erreur lors de la sauvegarde de l\'article.');