diff options
author | polo <ordipolo@gmx.fr> | 2025-04-02 00:00:35 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2025-04-02 00:00:35 +0200 |
commit | e4a325c9d5c07f09bc18b7e366ffb82b82c43502 (patch) | |
tree | b30c9c91106ebdbeef988c2c1ebd955b62051be2 /public | |
parent | e91841c4e678f955e1a44bf0fa0839e84f0aacd0 (diff) | |
download | cms-e4a325c9d5c07f09bc18b7e366ffb82b82c43502.zip |
modification des titres, aperçus et dates des news
Diffstat (limited to 'public')
-rw-r--r-- | public/css/main.css | 29 | ||||
-rw-r--r-- | public/js/main.js | 85 | ||||
-rw-r--r-- | public/js/tinymce.js | 75 |
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 | ||
59 | article .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 | } |
65 | article .action_icon:hover | 65 | button .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 | 75 | button .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 | |||
79 | function 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 | |||
111 | function 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 | |||
125 | function 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 @@ | |||
1 | let editors = {}; | 1 | let editors = {}; |
2 | 2 | ||
3 | function openEditor(articleId, page = '') { | 3 | function 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 | ||
65 | function deleteArticle(articleId, page = '') { | 66 | function 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 | ||
102 | function closeEditor(articleId, page = '', display_old = true) | 103 | function 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 | ||
126 | function submitArticle(articleId, page = '') { | 129 | function 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.'); |