PageSourceSearch

https://sportgabon.com/plugins/auto/commentaires_avances/javascript/commentaires_avances.js

js sportgabon.com collected 2026-09-27 13:14:52 UTC 9,034 bytes, 244 lines download raw bytes

1(function(){
2  function ready(fn){
3    if(document.readyState !== 'loading'){ fn(); }
4    else { document.addEventListener('DOMContentLoaded', fn); }
5  }
6
7  function insertAtCursor(field, value){
8    if(!field || typeof value === 'undefined') return;
9    var start = field.selectionStart || 0;
10    var end = field.selectionEnd || 0;
11    var text = field.value || '';
12    field.value = text.slice(0, start) + value + text.slice(end);
13    field.focus();
14    var pos = start + value.length;
15    if(field.setSelectionRange) field.setSelectionRange(pos, pos);
16  }
17
18  function parseHTML(html){
19    var parser = new DOMParser();
20    return parser.parseFromString(html, 'text/html');
21  }
22
23  function closestRoot(el){
24    return el ? el.closest('[data-ca-root]') : null;
25  }
26
27  function refreshRoot(root, html, url){
28    if(!root) return;
29    var rootId = root.getAttribute('data-ca-root');
30    if(!rootId) return;
31    var doc = parseHTML(html);
32    var replacement = doc.querySelector('[data-ca-root="' + rootId + '"]') || doc.getElementById(rootId);
33    if(!replacement) return;
34    root.replaceWith(replacement);
35    if(url && window.history && window.history.replaceState){
36      window.history.replaceState({}, document.title, url);
37    }
38    hideNativeSpipForum();
39    initCommentaireAvance(replacement);
40  }
41
42  function fetchAndRefresh(root, url, options){
43    if(!root || !url) return;
44    root.classList.add('ca-is-loading');
45    options = options || {};
46    options.credentials = 'same-origin';
47    options.headers = options.headers || {};
48    options.headers['X-Requested-With'] = 'XMLHttpRequest';
49    fetch(url, options)
50      .then(function(response){ return response.text(); })
51      .then(function(html){ refreshRoot(root, html, url); })
52      .catch(function(){ window.location.href = url; })
53      .finally(function(){ root.classList.remove('ca-is-loading'); });
54  }
55
56  function bindAjax(root){
57    if(!root || root.dataset.caAjaxBound === '1') return;
58    root.dataset.caAjaxBound = '1';
59
60    root.addEventListener('click', function(e){
61      var checkAll = e.target.closest('.ca-check-all');
62      if(checkAll){
63        var bulkForm = checkAll.closest('.ca-bulk-form');
64        if(bulkForm){
65          bulkForm.querySelectorAll('.ca-bulk-check').forEach(function(cb){
66            cb.checked = checkAll.checked;
67          });
68        }
69        return;
70      }
71
72      var bulkBtn = e.target.closest('.ca-bulk-btn');
73      if(bulkBtn){
74        var bulkForm2 = bulkBtn.closest('.ca-bulk-form');
75        if(bulkForm2){
76          var selected = bulkForm2.querySelectorAll('.ca-bulk-check:checked');
77          if(!selected.length){
78            e.preventDefault();
79            alert('Sélectionnez au moins un commentaire.');
80            return;
81          }
82          var opField = bulkForm2.querySelector('.ca-bulk-operation');
83          if(opField) opField.value = bulkBtn.getAttribute('data-operation') || '';
84        }
85      }
86
87      var profileBtn = e.target.closest('.ca-profile-edit-toggle');
88      if(profileBtn){
89        e.preventDefault();
90        var cibleProfil = document.getElementById(profileBtn.getAttribute('data-cible'));
91        if(cibleProfil){
92          cibleProfil.hidden = !cibleProfil.hidden;
93          if(!cibleProfil.hidden){
94            var inputProfil = cibleProfil.querySelector('input[type="text"], input[type="email"]');
95            if(inputProfil) inputProfil.focus();
96          }
97        }
98        return;
99      }
100
101      var replyBtn = e.target.closest('.ca-repondre');
102      if(replyBtn){
103        e.preventDefault();
104        var target = document.getElementById(replyBtn.getAttribute('data-cible'));
105        if(target){
106          target.hidden = !target.hidden;
107          if(!target.hidden){
108            var textarea = target.querySelector('textarea');
109            if(textarea) textarea.focus();
110          }
111        }
112        return;
113      }
114
115      var emojiBtn = e.target.closest('.ca-emoji');
116      if(emojiBtn){
117        e.preventDefault();
118        var form = emojiBtn.closest('.formulaire_commenter_avance');
119        var textarea = form ? form.querySelector('textarea[name="texte"]') : null;
120        insertAtCursor(textarea, emojiBtn.getAttribute('data-emoji') || emojiBtn.textContent || '');
121        return;
122      }
123
124      var toolBtn = e.target.closest('.ca-tool[data-insert]');
125      if(toolBtn){
126        e.preventDefault();
127        var formWrap = toolBtn.closest('.formulaire_commenter_avance');
128        var area = formWrap ? formWrap.querySelector('textarea[name="texte"]') : null;
129        insertAtCursor(area, toolBtn.getAttribute('data-insert') || '');
130        return;
131      }
132
133      var previewBtn = e.target.closest('.btn_preview');
134      if(previewBtn){
135        e.preventDefault();
136        var wrap = previewBtn.closest('.formulaire_commenter_avance');
137        var preview = wrap ? wrap.querySelector('.ca-preview') : null;
138        var textarea2 = wrap ? wrap.querySelector('textarea[name="texte"]') : null;
139        if(preview && textarea2){
140          preview.textContent = textarea2.value;
141          preview.classList.toggle('ca-has-content', !!textarea2.value.trim());
142        }
143        return;
144      }
145
146      var link = e.target.closest('a.ca-ajax-link, .ca-pagination a, .ca-filter-tabs a');
147      if(link && root.contains(link) && link.getAttribute('href')){
148        e.preventDefault();
149        fetchAndRefresh(root, link.getAttribute('href'));
150      }
151    });
152
153    root.addEventListener('submit', function(e){
154      var bulkForm = e.target.closest('.ca-bulk-form');
155      if(bulkForm && root.contains(bulkForm)){
156        e.preventDefault();
157        var selected = bulkForm.querySelectorAll('.ca-bulk-check:checked');
158        if(!selected.length){
159          alert('Sélectionnez au moins un commentaire.');
160          return;
161        }
162        var actionBulk = bulkForm.getAttribute('action') || window.location.href;
163        var formDataBulk = new FormData(bulkForm);
164        fetchAndRefresh(root, actionBulk, { method: 'POST', body: formDataBulk });
165        return;
166      }
167
168      var form = e.target.closest('.formulaire_commenter_avance form');
169      if(!form || !root.contains(form)) return;
170      e.preventDefault();
171      var action = form.getAttribute('action') || window.location.href;
172      var formData = new FormData(form);
173      fetchAndRefresh(root, action, { method: 'POST', body: formData });
174    });
175  }
176
177  function initEditors(scope){
178    (scope || document).querySelectorAll('.formulaire_commenter_avance').forEach(function(formWrap){
179      var textarea = formWrap.querySelector('textarea[name="texte"]');
180      if(textarea){
181        textarea.classList.add('no_barre', 'ca-textarea');
182        var mark = textarea.closest('.markItUp');
183        if(mark){
184          mark.querySelectorAll('.markItUpHeader,.markItUpFooter,.markItUpTabs').forEach(function(el){
185            el.setAttribute('aria-hidden', 'true');
186            el.style.display = 'none';
187          });
188        }
189      }
190    });
191  }
192
193
194  function hideNativeSpipForum(){
195    document.body.classList.add('ca-plugin-commentaires-present');
196    var selectors = [
197      '.formulaire_forum:not(.formulaire_commenter_avance)',
198      'form#formulaire_forum',
199      'form.formulaire_forum',
200      '.comments-form:not(.formulaire_commenter_avance)',
201      '#formulaire_forum',
202      'form[action*="forum"]'
203    ];
204
205    selectors.forEach(function(selector){
206      document.querySelectorAll(selector).forEach(function(el){
207        if(el.closest('.commentaires-avances')) return;
208        el.setAttribute('aria-hidden', 'true');
209        el.style.display = 'none';
210        el.style.visibility = 'hidden';
211        el.style.height = '0';
212        el.style.overflow = 'hidden';
213        el.classList.add('ca-forum-natif-masque');
214      });
215    });
216
217    document.querySelectorAll('form, .formulaire_spip, section, div').forEach(function(el){
218      if(el.closest('.commentaires-avances')) return;
219      var text = (el.innerText || el.textContent || '').toLowerCase();
220      var hasNativeButtons = text.indexOf('prévisualiser') !== -1 && text.indexOf('envoyer') !== -1;
221      var hasNativePlaceholder = false;
222      el.querySelectorAll && el.querySelectorAll('textarea').forEach(function(t){
223        var ph = (t.getAttribute('placeholder') || '').toLowerCase();
224        if(ph.indexOf('soyez le premier') !== -1 || ph.indexOf('réagir') !== -1) hasNativePlaceholder = true;
225      });
226      if((hasNativeButtons || hasNativePlaceholder) && !el.querySelector('.formulaire_commenter_avance')){
227        el.setAttribute('aria-hidden', 'true');
228        el.style.display = 'none';
229        el.style.visibility = 'hidden';
230        el.style.height = '0';
231        el.style.overflow = 'hidden';
232        el.classList.add('ca-forum-natif-masque');
233      }
234    });
235  }
236
237
238  function initCommentaireAvance(scope){
239    initEditors(scope || document);
240    (scope || document).querySelectorAll('[data-ca-root]').forEach(function(root){ bindAjax(root); });
241  }
242
243  ready(function(){ hideNativeSpipForum(); initCommentaireAvance(document); });
244})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.