summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-06-18 15:10:21 +0200
committerpolo <ordipolo@gmx.fr>2025-06-18 15:10:21 +0200
commit83619ac611490e8cd652a0252349704100fc5148 (patch)
tree400151c102a75186660046c791e4a921c2e1c98d /public
parent9db3f7c6c636eb2bc8368d83ca09b12b4bb94c7b (diff)
downloadcms-83619ac611490e8cd652a0252349704100fc5148.zip
collage contenu HTML dans l'éditeur
Diffstat (limited to 'public')
-rw-r--r--public/js/tinymce.js53
1 files changed, 49 insertions, 4 deletions
diff --git a/public/js/tinymce.js b/public/js/tinymce.js
index 307c384..55a37cc 100644
--- a/public/js/tinymce.js
+++ b/public/js/tinymce.js
@@ -30,7 +30,7 @@ function openEditor(id, page = '') {
30 toolbar_mode: 'wrap', 30 toolbar_mode: 'wrap',
31 statusbar: false, 31 statusbar: false,
32 setup: function (editor) { 32 setup: function (editor) {
33 editor.on('init', function () { 33 editor.on('init', function (){
34 editors[id] = editor; 34 editors[id] = editor;
35 35
36 // boutons "Modifier", "Supprimer", "déplacer vers le haut", "déplacer vers le bas", "Annuler" et "Soumettre" 36 // boutons "Modifier", "Supprimer", "déplacer vers le haut", "déplacer vers le bas", "Annuler" et "Soumettre"
@@ -48,6 +48,53 @@ function openEditor(id, page = '') {
48 document.querySelector(`#new-${id}`).classList.add('hidden'); // id = new-new-id_node 48 document.querySelector(`#new-${id}`).classList.add('hidden'); // id = new-new-id_node
49 } 49 }
50 }); 50 });
51 editor.on('PastePreProcess', function (e){ // déclenchement au collage AVANT insertion dans l'éditeur
52 let parser = new DOMParser();
53 let doc = parser.parseFromString(e.content, 'text/html');
54 let images = doc.querySelectorAll('img');
55
56 let downloads_in_progress = [];
57
58 images.forEach(img => {
59 if(img.src.startsWith('file://')){ // détection d'images non insérables
60 console.warn('Image locale non insérable dans tinymce :', img.src);
61 img.outerHTML = '<div style="border:1px solid red; padding:10px; margin:5px 0; background-color:#ffe6e6; color:#a94442; font-size:14px;">' +
62"Image locale non insérée. Pour insérer une image depuis LibreOffice, copiez l'image seule et recoller." +
63'</div>';
64 }
65 else if(img.src.startsWith('http')){ // détection d'images web
66 let promise = fetch('index.php?action=upload_image_url', { // promesse d'un fichier téléchargeable sur le serveur
67 method: 'POST',
68 headers: { 'Content-Type': 'application/json' },
69 body: JSON.stringify({ image_url: img.src })
70 })
71 .then(response => response.json())
72 .then(data => {
73 if(data.location){
74 img.src = data.location; // remplacer l'image par celle du serveur
75 }
76 })
77 .catch(error => {
78 console.error('Erreur lors de l’upload de l’image :', error);
79 });
80
81 downloads_in_progress.push(promise);
82 }
83 });
84
85 // une image web ou plus: différer l'insertion dans l'éditeur le temps que le serveur télécharge les images
86 if(downloads_in_progress.length > 0){
87 e.preventDefault();
88
89 Promise.all(downloads_in_progress).then(() => {
90 e.content = doc.body.innerHTML; // remplacement du HTML dans l'éditeur par la copie modifiée (doc)
91 editor.insertContent(e.content);
92 });
93 }
94 else{
95 e.content = doc.body.innerHTML; // remplacement du HTML dans l'éditeur par la copie modifiée (doc)
96 }
97 }); // fin editor.on('PastePreProcess'...
51 }, 98 },
52 // upload d'image 99 // upload d'image
53 images_upload_handler: (blobInfo, progress) => new Promise((resolve, reject) => { 100 images_upload_handler: (blobInfo, progress) => new Promise((resolve, reject) => {
@@ -86,9 +133,7 @@ function deleteArticle(id, page = '') {
86 // Envoyer une requête au serveur pour supprimer l'article 133 // Envoyer une requête au serveur pour supprimer l'article
87 fetch('index.php?action=delete_article', { 134 fetch('index.php?action=delete_article', {
88 method: 'POST', 135 method: 'POST',
89 headers: { 136 headers: {'Content-Type': 'application/json'},
90 'Content-Type': 'application/json'
91 },
92 body: JSON.stringify({ id: id }) 137 body: JSON.stringify({ id: id })
93 }) 138 })
94 .then(response => response.json()) 139 .then(response => response.json())