summaryrefslogtreecommitdiff
path: root/public/js/tinymce.js
diff options
context:
space:
mode:
authorpolo-pc-greta <ordipolo@gmx.fr>2025-03-27 10:13:03 +0100
committerpolo-pc-greta <ordipolo@gmx.fr>2025-03-27 10:13:03 +0100
commitdf3612ed7e6691530503f79483d2fdbc032d01b8 (patch)
tree56d1c68fdc8625f5dad1937a654299d45142c79a /public/js/tinymce.js
downloadcms-df3612ed7e6691530503f79483d2fdbc032d01b8.zip
mise en ligne github
Diffstat (limited to 'public/js/tinymce.js')
-rw-r--r--public/js/tinymce.js164
1 files changed, 164 insertions, 0 deletions
diff --git a/public/js/tinymce.js b/public/js/tinymce.js
new file mode 100644
index 0000000..8aa9368
--- /dev/null
+++ b/public/js/tinymce.js
@@ -0,0 +1,164 @@
1let editors = {};
2
3function openEditor(articleId) {
4 // Récupérer et sauvegarder le contenu d'origine de l'article
5 const articleContent = document.getElementById(articleId).innerHTML;
6 document.getElementById(articleId).setAttribute('data-original-content', articleContent);
7
8 tinymce.init({
9 selector: `#${articleId}`,
10 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
12 license_key: 'gpl',
13 branding: false,
14 plugins: 'lists link autolink table image media autoresize help',
15 toolbar: 'undo redo newdocument print selectall styles bold italic underline strikethrough fontsizeinput forecolor backcolor fontfamily align numlist bullist outdent indent table link image media help',
16 menubar: false,
17 toolbar_mode: 'wrap',
18 statusbar: false,
19 setup: function (editor) {
20 editor.on('init', function () {
21 editors[articleId] = editor;
22
23 // Masquer le bouton "Modifier" et afficher les boutons "Annuler" et "Soumettre"
24 if(articleId != 'new')
25 {
26 document.querySelector(`#edit-${articleId}`).classList.add('hidden');
27 document.querySelector(`#delete-${articleId}`).classList.add('hidden');
28 document.querySelector(`#position_up-${articleId}`).classList.add('hidden');
29 document.querySelector(`#position_down-${articleId}`).classList.add('hidden');
30 }
31 else{
32 document.querySelector(`#new-${articleId}`).classList.add('hidden');
33 }
34 document.querySelector(`#cancel-${articleId}`).classList.remove('hidden');
35 document.querySelector(`#submit-${articleId}`).classList.remove('hidden');
36
37 });
38 },
39 // upload d'image
40 images_upload_handler: (blobInfo, progress) => new Promise((resolve, reject) => {
41 const formData = new FormData();
42 formData.append("file", blobInfo.blob());
43
44 fetch("index.php?action=upload_image", {
45 method: "POST",
46 body: formData
47 })
48 .then(response => response.json())
49 .then(data => {
50 if (data.location) {
51 resolve(data.location);
52 }
53 else {
54 reject("Erreur: Chemin d'image invalide");
55 }
56 })
57 .catch(error => {
58 reject("Erreur lors de l'upload");
59 });
60 }),
61 image_caption: true
62 });
63
64 // Remplacer le contenu de l'article par l'éditeur
65 document.getElementById(articleId).innerHTML = articleContent;
66}
67
68function deleteArticle(articleId, page = '') {
69 if (confirm('Voulez-vous vraiment supprimer cet article ?'))
70 {
71 // Envoyer une requête au serveur pour supprimer l'article
72 fetch('index.php?action=delete_article', {
73 method: 'POST',
74 headers: {
75 'Content-Type': 'application/json'
76 },
77 body: JSON.stringify({ id: articleId })
78 })
79 .then(response => response.json())
80 .then(data => {
81 if (data.success)
82 {
83 if(page == 'article'){
84 // redirection vers la page d'accueil
85 window.setTimeout(function(){
86 location.href = "index.php?page=accueil";
87 }, 0);
88 }
89 else{
90 // Supprimer l'article du DOM
91 const articleElement = document.getElementById(articleId);
92 articleElement.parentElement.parentElement.remove(); // <article> est deux niveau au dessus
93 }
94 }
95 else {
96 alert('Erreur lors de la suppression de l\'article.');
97 }
98 })
99 .catch(error => {
100 console.error('Erreur:', error);
101 });
102 }
103}
104
105function closeEditor(articleId, display_old = true)
106{
107 // Fermer l'éditeur
108 tinymce.remove(`#${articleId}`);
109 delete editors[articleId];
110
111 // Restaurer le contenu d'origine de l'article
112 if(display_old){
113 const originalContent = document.getElementById(articleId).getAttribute('data-original-content');
114 document.getElementById(articleId).innerHTML = originalContent;
115 }
116
117 // Afficher le bouton "Modifier" et masquer les boutons "Annuler" et "Soumettre"
118 if(articleId != 'new'){
119 document.querySelector(`#edit-${articleId}`).classList.remove('hidden');
120 document.querySelector(`#delete-${articleId}`).classList.remove('hidden');
121 document.querySelector(`#position_up-${articleId}`).classList.remove('hidden');
122 document.querySelector(`#position_down-${articleId}`).classList.remove('hidden');
123 }
124 else{
125 document.querySelector(`#new-${articleId}`).classList.remove('hidden');
126 }
127 document.querySelector(`#cancel-${articleId}`).classList.add('hidden');
128 document.querySelector(`#submit-${articleId}`).classList.add('hidden');
129}
130
131function submitArticle(articleId) {
132 // Récupérer l'éditeur correspondant à l'article
133 const editor = editors[articleId];
134 if (!editor) {
135 console.error('Éditeur non trouvé pour l\'article:', articleId);
136 return;
137 }
138
139 // Récupérer le contenu de l'éditeur
140 const newContent = editor.getContent();
141
142 // Envoi AJAX au serveur
143 fetch('index.php?action=editor_submit', {
144 method: 'POST',
145 headers: {
146 'Content-Type': 'application/json'
147 },
148 body: JSON.stringify({id: articleId, content: newContent})
149 })
150 .then(response => response.json())
151 .then(data => {
152 if (data.success) {
153 // Fermer l'éditeur et mettre à jour le contenu de l'article
154 closeEditor(articleId, false);
155 document.getElementById(articleId).innerHTML = newContent;
156 }
157 else {
158 alert('Erreur lors de la sauvegarde de l\'article.');
159 }
160 })
161 .catch(error => {
162 console.error('Erreur:', error);
163 });
164} \ No newline at end of file