summaryrefslogtreecommitdiff
path: root/public/js/tinymce.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/js/tinymce.js')
-rw-r--r--public/js/tinymce.js166
1 files changed, 103 insertions, 63 deletions
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 = '') {
38 document.querySelector(`#submit-${id}`).classList.remove('hidden'); 38 document.querySelector(`#submit-${id}`).classList.remove('hidden');
39 if(creation_mode === false){ 39 if(creation_mode === false){
40 document.querySelector(`#edit-${id}`).classList.add('hidden'); 40 document.querySelector(`#edit-${id}`).classList.add('hidden');
41 document.querySelector(`#delete-${real_id}`).classList.add('hidden');
42 if(page != 'article'){ 41 if(page != 'article'){
43 document.querySelector(`#position_up-${id}`).classList.add('hidden'); 42 document.querySelector(`#position_up-${id}`).classList.add('hidden');
44 document.querySelector(`#position_down-${id}`).classList.add('hidden'); 43 document.querySelector(`#position_down-${id}`).classList.add('hidden');
44 document.querySelector(`#delete-${real_id}`).classList.add('hidden');
45 } 45 }
46 } 46 }
47 else{ 47 else{
@@ -175,37 +175,75 @@ function closeEditor(id, page = '', restore_old = true)
175 175
176} 176}
177 177
178function submitArticle(id, page = '', clone = null) { 178function submitArticle(id, page = '', clone = null)
179 //var creation_mode; 179{
180 if(id[0] === 'n'){ 180 /*if(id[0] === 'n' && clone == null){
181 //creation_mode = true; 181 return; // sécurité
182 }*/
183 var editor;
184 const params = new URL(document.location).searchParams; // "search" = ? et paramètres, searchParams = objet avec des getters
182 185
183 // sécurité 186 // clic sur "tout enregistrer"
184 if(clone == null){ 187 if(id[0] === 'n' && page === 'article'){
185 return; 188 const prefixes = ['t', 'p', 'i', 'd'];
186 } 189 const allElemsWithId = document.querySelectorAll('[id]');
187 } 190 var content = {};
188 else{
189 //creation_mode = false;
190 }
191 191
192 // Récupérer l'éditeur correspondant à l'article 192 allElemsWithId.forEach(element => {
193 const editor = editors[id]; 193 const first_letter = element.id.charAt(0).toLowerCase();
194 if(!editor) { 194 if(prefixes.includes(first_letter)){
195 console.error('Éditeur non trouvé pour l\'article:', id); 195 content[first_letter] = element.innerHTML;
196 }
197 })
198 content['d'] = dateToISO(content['d']);
199
200 // Envoi AJAX au serveur
201 fetch('index.php?action=editor_submit', {
202 method: 'POST',
203 headers: {
204 'Content-Type': 'application/json'
205 },
206 body: JSON.stringify({id: id, content: content})
207 })
208 .then(response => response.json())
209 .then(data => {
210 if (data.success) {
211 console.log('données envoyées au serveur avec succès.');
212
213 // remplacer les boutons (Enregistrer => Supprimer)
214 }
215 else {
216 alert('Erreur lors de la sauvegarde de l\'article.');
217 }
218 })
219 .catch(error => {
220 console.error('Erreur:', error);
221 });
196 return; 222 return;
197 } 223 }
224 // champs à remplir des nouvelles "news"
225 else if(page === 'article' && params != null && params.get("id")[0] === 'n'){
226 closeEditor(id, page, false);
227 //makeNewArticleButtons(id, id, clone);
228 return;
229 }
230 // dans les autres cas, on doit pouvoir récupérer l'éditeur
231 else{
232 // l'éditeur correspond à l'article OU page "article" à un élément: titre, aperçu, article
233 editor = editors[id];
234 if(!editor) {
235 console.error('Éditeur non trouvé pour l\'article:', id);
236 return;
237 }
238 }
198 239
199 // Récupérer le contenu de l'éditeur
200 const html = editor.getContent();
201
202 // Envoi AJAX au serveur 240 // Envoi AJAX au serveur
203 fetch('index.php?action=editor_submit', { 241 fetch('index.php?action=editor_submit', {
204 method: 'POST', 242 method: 'POST',
205 headers: { 243 headers: {
206 'Content-Type': 'application/json' 244 'Content-Type': 'application/json'
207 }, 245 },
208 body: JSON.stringify({id: id, content: html}) 246 body: JSON.stringify({id: id, content: editor.getContent()})
209 }) 247 })
210 .then(response => response.json()) 248 .then(response => response.json())
211 .then(data => { 249 .then(data => {
@@ -213,48 +251,7 @@ function submitArticle(id, page = '', clone = null) {
213 // Fermer l'éditeur et mettre à jour le contenu de l'article 251 // Fermer l'éditeur et mettre à jour le contenu de l'article
214 closeEditor(id, page, false); 252 closeEditor(id, page, false);
215 if(id[0] === 'n'){ 253 if(id[0] === 'n'){
216 var share_btn = document.querySelector(`.share.hidden`); // combinaison de deux classes 254 makeNewArticleButtons(id, data.article_id, clone);
217 var new_btn = document.querySelector(`#new-${id}`);
218 var edit_btn = document.querySelector(`#edit-${id}`);
219 var pos_up_btn = document.querySelector(`#position_up-${id}`);
220 var pos_down_btn = document.querySelector(`#position_down-${id}`);
221 var delete_btn = document.querySelector(`#delete-${id}`);
222 var cancel_btn = document.querySelector(`#cancel-${id}`);
223 var submit_btn = document.querySelector(`#submit-${id}`);
224
225 share_btn.classList.remove('hidden')
226 new_btn.classList.add('hidden');
227 edit_btn.classList.remove('hidden');
228 pos_up_btn.classList.remove('hidden');
229 pos_down_btn.classList.remove('hidden');
230 delete_btn.classList.remove('hidden');
231 //cancel_btn.classList.add('hidden');
232 //submit_btn.classList.add('hidden');
233
234 var article = document.getElementById(id);
235 var parent = findParent(article, 'article');
236 //share_btn.setAttribute('href', '#' + data.article_id);
237 share_btn.setAttribute('onclick', "copyInClipBoard('" + window.location.href + data.article_id + "')"); // # de l'ancre ajouté au clic sur le lien ouvrant l'éditeur
238 article.id = data.article_id;
239 edit_btn.id = 'edit-' + data.article_id;
240 edit_btn.querySelector('.action_icon').setAttribute('onclick', "openEditor('" + data.article_id + "')");
241 pos_up_btn.id = 'position_up-' + data.article_id;
242 pos_up_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + data.article_id + "', 'up')");
243 pos_down_btn.id = 'position_down-' + data.article_id;
244 pos_down_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + data.article_id + "', 'down')");
245 delete_btn.id = 'delete-' + data.article_id;
246 delete_btn.querySelector('.action_icon').setAttribute('onclick', "deleteArticle('" + data.article_id + "')");
247 cancel_btn.id = 'cancel-' + data.article_id;
248 cancel_btn.querySelector('button').setAttribute('onclick', "closeEditor('" + data.article_id + "')");
249 submit_btn.id = 'submit-' + data.article_id;
250 submit_btn.querySelector('button').setAttribute('onclick', "submitArticle('" + data.article_id + "')");
251
252 var next_div = parent.nextElementSibling.nextElementSibling;
253 parent.parentNode.replaceChild(clone.cloneNode(true), parent); // clone du squelette pour le garder intact
254 next_div.appendChild(parent);
255 }
256 else{
257 //document.getElementById(id).innerHTML = html;
258 } 255 }
259 } 256 }
260 else { 257 else {
@@ -264,4 +261,47 @@ function submitArticle(id, page = '', clone = null) {
264 .catch(error => { 261 .catch(error => {
265 console.error('Erreur:', error); 262 console.error('Erreur:', error);
266 }); 263 });
264}
265
266function makeNewArticleButtons(id, article_id, clone)
267{
268 var share_btn = document.querySelector(`.share.hidden`); // combinaison de deux classes
269 var new_btn = document.querySelector(`#new-${id}`);
270 var edit_btn = document.querySelector(`#edit-${id}`);
271 var pos_up_btn = document.querySelector(`#position_up-${id}`);
272 var pos_down_btn = document.querySelector(`#position_down-${id}`);
273 var delete_btn = document.querySelector(`#delete-${id}`);
274 var cancel_btn = document.querySelector(`#cancel-${id}`);
275 var submit_btn = document.querySelector(`#submit-${id}`);
276
277 share_btn.classList.remove('hidden')
278 new_btn.classList.add('hidden');
279 edit_btn.classList.remove('hidden');
280 pos_up_btn.classList.remove('hidden');
281 pos_down_btn.classList.remove('hidden');
282 delete_btn.classList.remove('hidden');
283 //cancel_btn.classList.add('hidden');
284 //submit_btn.classList.add('hidden');
285
286 var article = document.getElementById(id);
287 var parent = findParent(article, 'article');
288
289 share_btn.setAttribute('onclick', "copyInClipBoard('" + window.location.href + article_id + "')"); // # de l'ancre ajouté au clic sur le lien ouvrant l'éditeur
290 article.id = article_id;
291 edit_btn.id = 'edit-' + article_id;
292 edit_btn.querySelector('.action_icon').setAttribute('onclick', "openEditor('" + article_id + "')");
293 pos_up_btn.id = 'position_up-' + article_id;
294 pos_up_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + article_id + "', 'up')");
295 pos_down_btn.id = 'position_down-' + article_id;
296 pos_down_btn.querySelector('.action_icon').setAttribute('onclick', "switchPositions('" + article_id + "', 'down')");
297 delete_btn.id = 'delete-' + article_id;
298 delete_btn.querySelector('.action_icon').setAttribute('onclick', "deleteArticle('" + article_id + "')");
299 cancel_btn.id = 'cancel-' + article_id;
300 cancel_btn.querySelector('button').setAttribute('onclick', "closeEditor('" + article_id + "')");
301 submit_btn.id = 'submit-' + article_id;
302 submit_btn.querySelector('button').setAttribute('onclick', "submitArticle('" + article_id + "')");
303
304 var next_div = parent.nextElementSibling.nextElementSibling;
305 parent.parentNode.replaceChild(clone.cloneNode(true), parent); // clone du squelette pour le garder intact
306 next_div.appendChild(parent);
267} \ No newline at end of file 307} \ No newline at end of file