diff options
Diffstat (limited to 'public/js/tinymce.js')
-rw-r--r-- | public/js/tinymce.js | 166 |
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 | ||
178 | function submitArticle(id, page = '', clone = null) { | 178 | function 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 | |||
266 | function 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 |