PageSourceSearch

https://www.livreshebdo.fr/modules/custom/livreshebdo_site/js/custom.js?v=1.x

js livreshebdo.fr collected 2026-10-02 02:46:51 UTC 95,392 bytes, 2,365 lines download raw bytes

1(function ($) {
2  $(document).ready(function () {
3//    $('#toolbar-item-workbench').hide();
4    $('#edit-group-event-related-contents').hide();
5    $('.csv-feed .feed-icon').text('Export csv');
6
7    $("#edit-field-override-prices-value").change(function () {
8      if (this.checked) {
9        $('#edit-field-price-cc-wrapper').show();
10        $('#edit-field-price-with-files-cc-wrapper').show();
11      }
12      else {
13        $('#edit-field-price-cc-wrapper').hide();
14        $('#edit-field-price-with-files-cc-wrapper').hide();
15      }
16    });
17
18    if (($('#node-job-offer-form').length)) {
19      $('#edit-status-value').prop("checked", false);
20    }
21
22    if (($('#article-entity-article-add-form').length) || ($('#article-entity-article-edit-form').length)) {
23      $('#edit-field-sections').bind("change", function () {
24        var rubrique = $('#edit-field-sections option:selected').text();
25        if (rubrique == 'actualité des prix') {
26          $('#edit-field-award-wrapper').show();
27        }
28        else {
29          $('#edit-field-award-wrapper').hide();
30          $('#edit-field-award-target-id').val('');
31        }
32      });
33    }
34
35    $('#edit-moderation-state-0-state').bind("change", function () {
36      var state = $('#edit-moderation-state-0-state option:selected').text();
37      var d = new Date();
38
39      month = (d.getMonth() + 1);
40      day = d.getDate();
41      heure = d.getHours();
42      minute = d.getMinutes();
43      second = d.getSeconds();
44
45      if (day < 10) {
46        day = '0' + day;
47      }
48
49      if (month < 10) {
50        month = '0' + month;
51      }
52
53      if (heure < 10) {
54        heure = '0' + heure;
55      }
56
57      if (minute < 10) {
58        minute = '0' + minute;
59      }
60
61      if (second < 10) {
62        second = '0' + second;
63      }
64
65      var date = d.getFullYear() + '-' + month + '-' + day;
66      var hours = heure + ':' + minute + ':' + second;
67
68      $('#edit-field-actual-moderation-state-0-value').val(state);
69      if (($('#article-entity-article-add-form').length) || ($('#article-entity-article-edit-form').length) ||
70          ($('#article-entity-billet-blog-add-form').length) || ($('#article-entity-billet-blog-edit-form').length) ||
71          ($('#article-entity-contenu-sponsorise-add-form').length) || ($('#article-entity-contenu-sponsorise-edit-form').length) ||
72          ($('#article-entity-diaporama-add-form').length) || ($('#article-entity-diaporama-edit-form').length) ||
73          ($('#article-entity-tribune-add-form').length) || ($('#article-entity-tribune-edit-form').length)) {
74        if (state == 'Programmé') {
75          $('#edit-field-article-program-date-wrapper').show();
76          $('#edit-field-article-publish-date-wrapper').hide();
77          $('#edit-field-article-program-date-0').attr("required", "required");
78          $('#edit-field-article-program-date-0').attr("aria-required", true);
79          $('#edit-field-article-program-date-0').addClass("required");
80
81          $('#edit-field-article-program-date-0 .fieldset-legend').addClass("form-required");
82
83          $('#edit-field-article-program-date-0-value-date').attr("required", "required");
84          $('#edit-field-article-program-date-0-value-date').attr("aria-required", true);
85          $('#edit-field-article-program-date-0-value-date').addClass("required");
86
87          $('#edit-field-article-program-date-0-value-time').attr("required", "required");
88          $('#edit-field-article-program-date-0-value-time').attr("aria-required", true);
89          $('#edit-field-article-program-date-0-value-time').addClass("required");
90
91        }
92        else {
93          $('#edit-field-article-publish-date-wrapper').hide();
94          $('#edit-field-article-program-date-wrapper').hide();
95
96          $('#edit-field-article-program-date-0-value-date').removeAttr("required");
97          $('#edit-field-article-program-date-0-value-date').removeAttr("aria-required");
98          $('#edit-field-article-program-date-0-value-date').removeClass("required");
99
100          $('#edit-field-article-program-date-0-value-time').removeAttr("required");
101          $('#edit-field-article-program-date-0-value-time').removeAttr("aria-required");
102          $('#edit-field-article-program-date-0-value-time').removeClass("required");
103        }
104      }
105
106      if (($('#node-folder-form').length) || ($('#node-folder-edit-form').length)) {
107        if (state == 'Publié') {
108          $('#edit-field-dossier-publish-date-wrapper').show();
109          $('#edit-field-dossier-publish-date-0-value-date').val(date);
110          $('#edit-field-dossier-publish-date-0-value-time').val(hours);
111        } else {
112          $('#edit-field-dossier-publish-date-wrapper').hide();
113        }
114      }
115      if (($('#node-faq-form').length) || ($('#node-faq-edit-form').length)) {
116        if (state == 'Publié') {
117          $('#edit-field-faq-publish-date-wrapper').show();
118          $('#edit-field-faq-publish-date-0-value-date').val(date);
119          $('#edit-field-faq-publish-date-0-value-time').val(hours);
120        } else {
121          $('#edit-field-faq-publish-date-wrapper').hide();
122        }
123      }
124      if (($('#event-entity-add-form').length) || ($('#event-entity-edit-form').length)) {
125        if (state == 'Publié') {
126          $('#edit-field-event-publish-date-wrapper').show();
127          $('#edit-field-event-publish-date-0-value-date').val(date);
128          $('#edit-field-event-publish-date-0-value-time').val(hours);
129        } else {
130          $('#edit-field-event-publish-date-wrapper').hide();
131        }
132      }
133      if (($('#node-economical-dashboard-form').length) || ($('#node-economical-dashboard-edit-form').length)) {
134
135        if (state == 'Publié') {
136          $('#edit-field-dashboard-publish-date-wrapper').show();
137          $('#edit-field-dashboard-publish-date-0-value-date').val(date);
138          $('#edit-field-dashboard-publish-date-0-value-time').val(hours);
139        } else {
140          $('#edit-field-dashboard-publish-date-wrapper').hide();
141        }
142      }
143    })
144
145    if (($('#media-document-add-form').length) || ($('#media-document-edit-form').length)) {
146      $("#edit-field-document-nature").change(function () {
147        var nature = $('#edit-field-document-nature').val();
148        if (nature == 1) {
149          $('#edit-field-document-type-wrapper').show();
150          $('#edit-field-document-topic-wrapper').show();
151        }
152        else {
153          $('#edit-field-document-type-wrapper').hide();
154          $('#edit-field-document-topic-wrapper').hide();
155        }
156      });
157    }
158
159    if (($('#media-document-add-form').length) || ($('#media-document-edit-form').length)) {
160      Drupal.behaviors.fileAutoUpload = {
161        attach: function attach(context) {
162          id = $('input[name="field_media_document[0][fids]"]').val()
163          name = $('[data-drupal-selector="edit-field-media-document-0-file-' + id + '-filename"]').text();
164          var n = name.split('.');
165          ext=n[n.length - 1];
166          if (ext) {
167            $('#edit-field-document-format-0-value').val('.' + ext);
168          }else {
169            $('#edit-field-document-format-0-value').val('');
170          }
171          $(context)
172            .find('input[type="file"]')
173            .once('auto-file-upload')
174            .on('change.autoFileUpload', Drupal.file.triggerUploadButton);
175
176          },
177      };
178    }
179    $('.delete-session').click(function () {
180      sessionDelete ($(this).attr('sid'));
181    });
182    $('.delete-all-session').click(function (e) {
183      var url = window.location.href;
184      e.preventDefault();
185      var abonnement = $('#edit-abonnement').val();
186      var message = "Êtes-vous sûr(e) de vouloir supprimer les sessions ?";
187      if(abonnement != ""){
188        message = "Êtes-vous sûr(e) de vouloir supprimer les sessions de l'abonnement "+ abonnement +" ?";
189      }
190      var decision = confirm(message);
191      url = url.replace('#', '');
192      if (decision) {
193        $.ajax({
194          url: '/deleteSession',
195          type: 'POST',
196          dataType: 'json',
197          data: {
198            abonnement: abonnement
199          },
200          success: function (response) {
201            if (response.data === 'success') {
202              window.location.href = url;
203            }
204          }
205        });
206      }
207    });
208    if ($('#edit-field-article-poool-content-type').length > 0) {
209      var poool = $('#edit-field-article-poool-content-type').val();
210      if (poool == 'free' || poool == 'reserved') {
211        $('#edit-group-article-price').hide();
212        $('#edit-group-price').hide();
213      }
214    }
215    $("#edit-field-article-poool-content-type").change(function () {
216      var poool_category = $(this).val();
217      if (poool_category == 'free' || poool_category == 'reserved') {
218        $('#edit-group-article-price').hide();
219        $('#edit-group-price').hide();
220      }
221      else {
222        $('#edit-group-article-price').show();
223        $('#edit-group-price').show();
224      }
225    });
226
227    if ($("form").hasClass("newsletter-entity-form")) {
228      var my_elem = document.getElementById('edit-field-newsletter-send-date-0');
229      var span = document.createElement('span');
230      span.innerHTML = '';
231      span.className = 'errors_nsl_send_date';
232      span.style.cssText = 'color: #ff0000';
233      my_elem.parentNode.insertBefore(span, my_elem);
234      $('#edit-actions').on('mouseover', function (event) {
235        var send_date = $('#edit-field-newsletter-send-date-0-value-date').val();
236        var send_time = $('#edit-field-newsletter-send-date-0-value-time').val();
237        dateParts = send_date.split('-');
238        timeParts = send_time.split(':');
239        date = new Date(dateParts[0], parseInt(dateParts[1], 10) - 1, dateParts[2], timeParts[0], timeParts[1]);
240        send_datetime = date.getTime();
241        date_now = new Date().getTime();
242        if (parseInt(send_datetime) < parseInt(date_now)) {
243          $('.errors_nsl_send_date').html("Date d\'envoi de la newsletter doit être supérieur à la date actuelle");
244          $('#edit-actions').hide();
245          $("#edit-field-newsletter-send-date-0").css("border-color", "#ff0000");
246        }
247      });
248
249      /*$('#edit-field-newsletter-send-date-0').on('mouseover', function (event) {
250        nsl_quot_article_unchecked();
251      });*/
252      $('#edit-field-newsletter-send-date-0-value-date, #edit-field-newsletter-send-date-0-value-time').on('change', function (event) {
253        nsl_quot_article_unchecked();
254      });
255
256      $("#edit-field-newsletter-send-date-0-value-date, #edit-field-newsletter-send-date-0-value-time").change(function () {
257        $('#edit-actions').show();
258        $('.errors_nsl_send_date').html("");
259        $("#edit-field-newsletter-send-date-0").css("border-color", "");
260      });
261
262      $("#edit-submit").click(function () {
263        $("#edit-submit").hide();
264      });
265
266    }
267    /////////////////////////////////
268
269    if ($("form").hasClass("eventmedia-entity-form") || $("form").hasClass("classified-entity-form") || $("form").hasClass("book-entity-form")
270      || $("form").hasClass("node-notification-form") || $("form").hasClass("node-notification-edit-form") || $("form").hasClass("reserved-title-entity-form")
271      || $("form").hasClass("vintage-entity-form") || $("form").hasClass("selections-enitity-form") || $("form").hasClass("position-entity-form")
272      || $("form").hasClass("node-job-offer-form")) {
273
274
275      var my_elem = document.getElementById('edit-field-option-planification-0');
276      var span = document.createElement('span');
277      span.innerHTML = '';
278      span.className = 'errors_planification_date';
279      span.style.cssText = 'color: #ff0000';
280      my_elem.parentNode.insertBefore(span, my_elem);
281
282      $('#edit-submit').on('mouseover', function (event) {
283
284        var scheduler_type = $('#edit-field-option-planification-0-scheduler-type').val();
285        var date_deb = $('#edit-field-option-planification-0-value-date').val();
286        var time_deb = $('#edit-field-option-planification-0-value-time').val();
287        var date_fin = $('#edit-field-option-planification-0-end-value-date').val();
288        var time_fin = $('#edit-field-option-planification-0-end-value-time').val();
289
290        var debut = new Date(date_deb + ' ' + time_deb);
291        var fin = new Date(date_fin + ' ' + time_fin);
292        var CurrentDate = new Date();
293
294        if (scheduler_type == 'scheduler_field_type_publication') {
295          if (debut > fin) {
296            $('.errors_planification_date').html("Date fin doit être supérieur au date début");
297            $('#edit-actions').hide();
298            $("#edit-field-option-planification-0").css("border-color", "#ff0000");
299          }
300
301          if (CurrentDate > fin) {
302            $('.errors_planification_date').html("Période de planification est dépassée");
303            $('#edit-actions').hide();
304            $("#edit-field-option-planification-0").css("border-color", "#ff0000");
305          }
306        }
307      })
308
309      $("#edit-field-option-planification-0-value-date, #edit-field-option-planification-0-value-time, #edit-field-option-planification-0-e
309nd-value-date, #edit-field-option-planification-0-end-value-time, #edit-field-option-planification-0-scheduler-type").change(function () {
310
311        var scheduler_type = $('#edit-field-option-planification-0-scheduler-type').val();
312        var date_deb = $('#edit-field-option-planification-0-value-date').val();
313        var time_deb = $('#edit-field-option-planification-0-value-time').val();
314        var date_fin = $('#edit-field-option-planification-0-end-value-date').val();
315        var time_fin = $('#edit-field-option-planification-0-end-value-time').val();
316
317        var debut = new Date(date_deb + ' ' + time_deb);
318        var fin = new Date(date_fin + ' ' + time_fin);
319        var CurrentDate = new Date();
320
321
322        if ((((CurrentDate < debut) || (CurrentDate > fin)) && scheduler_type == 'scheduler_field_type_publication') ||
323          (((CurrentDate >= debut) && (CurrentDate <= fin)) && scheduler_type == 'scheduler_field_type_disabled')) {
324          $('#edit-status-value').prop("checked", false);
325        }
326        else if ((((CurrentDate >= debut) && (CurrentDate <= fin)) && scheduler_type == 'scheduler_field_type_publication') ||
327            (((CurrentDate < debut) || (CurrentDate > fin)) && scheduler_type == 'scheduler_field_type_disabled')) {
328            $('#edit-status-value').prop("checked", true);
329          }
330
331        $('#edit-actions').show();
332        $('.errors_planification_date').html("");
333        $("#edit-field-option-planification-0").css("border-color", "");
334      });
335
336      $("#edit-status-value").click(function () {
337        var scheduler_type = $('#edit-field-option-planification-0-scheduler-type').val();
338        var date_deb = $('#edit-field-option-planification-0-value-date').val();
339        var time_deb = $('#edit-field-option-planification-0-value-time').val();
340        var date_fin = $('#edit-field-option-planification-0-end-value-date').val();
341        var time_fin = $('#edit-field-option-planification-0-end-value-time').val();
342
343
344        var debut = new Date(date_deb + ' ' + time_deb);
345        var fin = new Date(date_fin + ' ' + time_fin);
346        var CurrentDate = new Date();
347
348
349        if ((((CurrentDate < debut) || (CurrentDate > fin)) && scheduler_type == 'scheduler_field_type_publication' && $(this).prop("checked") == true) ||
350          (((CurrentDate >= debut) && (CurrentDate <= fin)) && scheduler_type == 'scheduler_field_type_disabled' && $(this).prop("checked") == false)) {
351          $('#edit-status-value').prop("checked", false);
352          $('.errors_planification_date').html("Vérifier période de planification");
353        }
354        else if ((((CurrentDate >= debut) && (CurrentDate <= fin)) && scheduler_type == 'scheduler_field_type_publication' && $(this).prop("checked") == false) ||
355          (((CurrentDate < debut) || (CurrentDate > fin)) && scheduler_type == 'scheduler_field_type_disabled' && $(this).prop("checked") == true)) {
356            $('#edit-status-value').prop("checked", true);
357            $('.errors_planification_date').html("Vérifier période de planification");
358        }
359      })
360    }
361
362
363    if ($("body").hasClass("path-eventmedia-entity") || $("form").hasClass("eventmedia-entity-form")|| $("form").hasClass('views-exposed-form')) {
364      if ($("form").hasClass("eventmedia-entity-add-form")) {
365        var pathname = window.location.pathname;
366        var search = window.location.search;
367        var hash = window.location.hash;
368
369        var basePath = '/eventmedia_entity/add';
370
371        if (pathname === basePath) {
372          if (!search && !hash) {
373            $('#edit-field-event-media-support').empty();
374            $('#edit-field-event-media-support').append('<option value="_none">- Choisir une valeur -</option>');
375
376            $('#edit-field-emission').empty();
377            $('#edit-field-emission').append('<option value="_none">- Choisir une valeur -</option>');
378          } else {
379            var support = $('#edit-field-event-media-support').val();
380            var emission = $('#edit-field-emission').val();
381            getEventMedia(support, 'emission', 'edit-field-emission', emission);
382            getEmissionAnimateur(emission,'emission');
383
384            var media_txt = $('#edit-field-event-media-type option:selected').text();
385            if( media_txt == 'Presse' || media_txt == 'Films et séries') {
386              $('#edit-field-event-media-date-0-value-time').hide();
387            }
388            else {
389              var now = new Date();
390              var hour = now.getHours().toString().padStart(2, '0');
391              var min = now.getMinutes().toString().padStart(2, '0');
392              var sec = now.getSeconds().toString().padStart(2, '0');
393              var time =  hour + ':' + min + ':' + sec;
394
395              $('#edit-field-event-media-date-0-value-time').val(time);
396              $('#edit-field-event-media-date-0-value-time').show();
397            }
398
399          }
400        }
401      }
402      if( $("form").hasClass('views-exposed-form')){
403
404        $('#edit-field-event-media-support').empty();
405        $('#edit-field-event-media-support').append('<option value="_none">- Choisir une valeur -</option>');
406
407        $('#edit-field-emission').empty();
408        $('#edit-field-emission').append('<option value="_none">- Choisir une valeur -</option>');
409
410        var media = $('#edit-field-event-media-type-target-id').val();
411        var name = $('#edit-field-event-media-type-target-id option:selected').text();
412        $('.form-item-field-films-target-id').hide()
413        if(media != "All"){
414          getEventMediaFilter(media, 'media_company', 'edit-field-event-media-support-target-id');
415          if(name == 'Films et séries'){
416            $(".form-item-field-emission-target-id").hide();
417            $('.form-item-field-films-target-id').show()
418          }else{
419            $(".form-item-field-emission-target-id").show();
420            $('.form-item-field-films-target-id').hide()
421          }
422          $("#edit-field-event-media-support-target-id").bind("change", function (){
423            var support = $('#edit-field-event-media-support-target-id').val();
424            var emission = $('#edit-field-emission-target-id').val();
425            getEventMediaFilter(support, 'emission', 'edit-field-emission-target-id', emission);
426          })
427      }
428        $('#edit-field-event-media-type-target-id').bind("change", function () {
429          var media = $('#edit-field-event-media-type-target-id').val();
430          var name = $('#edit-field-event-media-type-target-id option:selected').text();
431          $('.form-item-field-films-target-id').hide()
432          getEventMediaFilter(media, 'media_company', 'edit-field-event-media-support-target-id');
433          if(name == 'Films et séries'){
434            $(".form-item-field-emission-target-id").hide();
435            $('.form-item-field-films-target-id').show()
436          }else{
437            $(".form-item-field-emission-target-id").show();
438            $('.form-item-field-films-target-id').hide()
439          }
440          $("#edit-field-event-media-support-target-id").bind("change", function (){
441            var support = $('#edit-field-event-media-support-target-id').val();
442            var emission = $('#edit-field-emission-target-id').val();
443            getEventMediaFilter(support, 'emission', 'edit-field-emission-target-id', emission);
444          })
445        });
446      }
447
448      if ($("form").hasClass("eventmedia-entity-edit-form")) {
449        var media = $('#edit-field-event-media-type').val();
450        var support = $('#edit-field-event-media-support').val();
451        var emission = $('#edit-field-emission').val();
452        getEventMedia(media, 'media_company', 'edit-field-event-media-support', support);
453        getEventMedia(support, 'emission', 'edit-field-emission', emission);
454      }
455
456      if ($("form").hasClass("eventmedia-entity-add-form")) {
457        var media = $('#edit-field-event-media-type').val();
458        if (media != "All") {
459         // getEventMedia(media, 'media_company', 'edit-field-event-media-support');
460        }
461      }
462
463      $('#edit-field-event-media-type').bind("change", function () {
464        var media = $('#edit-field-event-media-type').val();
465        getEventMedia(media, 'media_company', 'edit-field-event-media-support');
466        $('#edit-field-emission').empty();
467        $('#edit-field-emission').append('<option value="_none">- Choisir une valeur -</option>');
468
469        var media_txt = $('#edit-field-event-media-type option:selected').text();
470        if( media_txt == 'Presse' || media_txt == 'Films et séries') {
471          $('#edit-field-event-media-date-0-value-time').val('00:00:00');
472          $('#edit-field-event-media-date-0-value-time').hide();
473          //$('#edit-field-event-media-date-0-value-time').removeAttr('required').removeClass('required').attr('aria-required', 'false');
474        }
475        else {
476          var now = new Date();
477          var hour = now.getHours().toString().padStart(2, '0');
478          var min = now.getMinutes().toString().padStart(2, '0');
479          var sec = now.getSeconds().toString().padStart(2, '0');
480          var time =  hour + ':' + min + ':' + sec;
481
482          $('#edit-field-event-media-date-0-value-time').val(time);
483          $('#edit-field-event-media-date-0-value-time').show();
484        }
485      });
486      $('#edit-field-event-media-support').bind("change", function () {
487        var support = $('#edit-field-event-media-support').val();
488        getEventMedia(support, 'emission', 'edit-field-emission');
489      });
490    }
491    $('#edit-field-emission').bind("change", function () {
492      var emission = $('#edit-field-emission').val();
493      getEmissionAnimateur(emission,'emission');
494    });
495
496
497    $('#edit-submit-evenement-media').on('click', function(){
498        $('#edit-field-event-media-type-target-id').bind("change", function () {
499          var media = $('#edit-field-event-media-type-target-id').val();
500          getEventMedia(media, 'media_company', 'edit-field-event-media-support-target-id');
501        });
502    })
503  /*  if ($("form").hasClass("eventmedia-entity-clone-form")) {
504      $('#eventmedia-entity-clone-form').submit(function (event) {
505        window.location.href = '/admin/content/eventmedia_entity';
506      });
507      $('#edit-field-event-media-support-target-id').val('_none');
508      $('#edit-field-films-target-id').val('_none');
509      $('#edit-field-event-media-type-target-id').val('_none');
510      var media = $('#edit-field-event-media-type').val();
511      var support = $('#edit-field-event-media-support').val();
512      var emission = $('#edit-field-emission').val();
513      getEventMedia(media, 'media_company', 'edit-field-event-media-support', support);
514      getEventMedia(support, 'emission', 'edit-field-emission', emission);
515    }*/
516
517
518    Drupal.behaviors.cleanUrlAfterClone = {
519      attach: function (context, settings) {
520        // Vérifiez que l'utilisateur a été redirigé à la page ciblée
521        if (window.location.pathname === '/admin/content/eventmedia_entity') {
522          // Supprimez tous les paramètres de l'URL
523          var cleanUrl = window.location.origin + window.location.pathname;
524          window.history.replaceState({}, document.title, cleanUrl);
525        }
526      }
527    };
528
529
530    if ($("form").hasClass("article-entity-billet-blog-add-form")) {
531      var url = window.location.href;
532      if (url.indexOf('?blog_id=') != -1) {
533        var blog = $("#edit-field-blog option:selected").text();
534        var my_elem = document.getElementById('edit-group-blog-categorization-menu');
535        var span = document.createElement('span');
536        span.innerHTML = 'Blog: ' + blog;
537        span.className = 'errors_nsl_send_date';
538        span.style.cssText = 'font-weight: bold';
539        my_elem.parentNode.insertBefore(span, my_elem);
540      }
541    }
542
543    $('#edit-electre-import').bind('click',function (e){
544      e.preventDefault();
545      var ean = $('#edit-field-book-isbn-0-value').val();
546      var page = 'add';
547      if ($("form").hasClass("book-entity-edit-form")) {
548        page = 'edit'
549      }
550      $.ajax({
551        url: '/getBook',
552        type: 'POST',
553        dataType: 'json',
554        data: {
555          ean: ean,
556          page: page,
557        },
558        success: function (response) {
559          if (response.data === 'success') {
560            var redirect = window.location.href;
561            var res = redirect.split('ean');
562            var build = redirect.split('build_cache_id');
563            var destination = redirect.split('destination');
564
565            if (res.length == 1) {
566              redirect = res[0] + '?ean=' + ean;
567            }
568            else {
569              redirect = res[0] + 'ean=' + ean;
570            }
571            if ((res.length == 1) && (build.length == 2)) {
572              redirect = res[0] + '&ean=' + ean;
573            }
574            if ((res.length == 2) && (build.length == 2)) {
575              redirect = res[0] + 'ean=' + ean;
576            }
577            if ((destination.length == 2) && (res.length == 1) && (page == 'edit')) {
578              redirect = window.location.href + '&ean=' + ean;
579            }
580            if ((destination.length == 2) && (res.length == 2) && (page == 'edit')) {
581              redirect = window.location.href;
582            }
583
584            window.location.href = redirect;
585          }else {
586            var ab = '<div data-drupal-messages="" class="getbook">\n' +
587              '    <div role="contentinfo" aria-label="Message d\'erreur" class="messages messages--error">\n' +
588              '          <div role="alert">\n' +
589              '                  <h2 class="visually-hidden">Message d\'erreur</h2>\n' +
590              '                    <ul class="messages__list">\n' +
591              '                      <li>'+response.msg+'</li>\n' +
592              '                    \n' +
593              '                  </ul>\n' +
594              '                </div>\n' +
595              '      </div>\n' +
596              '    </div>';
597            $('.getbook').remove();
598            $(ab).insertBefore('#edit-field-book-isbn-wrapper');
599          }
600        }
601      });
602    })
603
604    if ($("body").hasClass("path-article-entity")) {
605      $('body').addClass('article-wrapper-button');
606
607      $('#btn_add_bloc_ean_book').click(function (e) {
608        e.preventDefault();
609        $(".getbook").addClass("hidden");
610        var exist_input = false;
611        $('.nb-book').find('input').each(function (e) {
612          if (($(this).attr('type') == 'text') && ($(this).attr('id') != 'ean_book')) {
613            if ($(this).val() == '') {
614              exist_input = true;
615            }
616          }
617        });
618
619        if (exist_input == true) {
620          $("#bloc_ean_book").removeClass("hidden");
621          $('#bloc_ean_book').attr("open", "open");
622          $('#ean_book').val('');
623        }
624        else {
625          var ab = '<div data-drupal-messages="" class="getbook">\n' +
626            '    <div role="contentinfo" aria-label="Message d\'erreur" class="messages messages--error">\n' +
627            '          <div role="alert">\n' +
628            '                  <h2 class="visually-hidden">Message d\'erreur</h2>\n' +
629            '                    <ul class="messages__list">\n' +
630            '                      <li>Cliquer sur le bouton "Ajouter un autre élément" pour insérer un nouveau livre</li>\n' +
631            '                    \n' +
632            '                  </ul>\n' +
633            '                </div>\n' +
634            '      </div>\n' +
635            '    </div>';
636          $('.getbook').remove();
637          $(ab).insertBefore('#bloc_ean_book');
638        }
639      });
640
641      $('.get_ean').click( function (e) {
642        e.preventDefault();
643        $('.getbook').remove();
644        var div_loader = '<div data-drupal-messages="" class="loader_book"><div class="ajax-loader"></div></div>';
645        $(div_loader).insertBefore('.get_ean');
646        var ean = $('#ean_book').val();
647        $.ajax({
648          url: '/eanAddBook',
649          type: 'POST',
650          dataType: 'json',
651          data: {
652            ean: ean,
653          },
654          beforeSend: function () {
655            $('.loader_book').find('.ajax-loader').fadeIn('slow');
656            $("#edit-get-ean").hide();
657          },
658          complete: function () {
659            $('.loader_book').find('.ajax-loader').fadeOut('slow');
660            $("#edit-get-ean").show();
661
662            $('.loader_book').remove();
663          },
664          success: function (response) {
665            if (response.data === 'success') {
666              $('.nb-book').find('input').each(function (e) {
667                 if(($(this).attr('type') == 'text') && ($(this).attr('id') != 'ean_book')){
668                   if($(this).val() == ''){
669                     $(this).val(response.book);
670                   }
671                 }
672              });
673              $("#bloc_ean_book").addClass("hidden");
674            }else {
675              var ab = '<div data-drupal-messages="" class="getbook">\n' +
676                '    <div role="contentinfo" aria-label="Message d\'erreur" class="messages messages--error">\n' +
677                '          <div role="alert">\n' +
678                '                  <h2 class="visually-hidden">Message d\'erreur</h2>\n' +
679                '                    <ul class="messages__list">\n' +
680                '                      <li>'+response.msg+'</li>\n' +
681                '                    \n' +
682                '                  </ul>\n' +
683                '                </div>\n' +
684                '      </div>\n' +
685                '    </div>';
686              $(ab).insertBefore('#bloc_ean_book');
687            }
688          }
689        });
690        //$('.getbook').remove();
691        const scrollToBloc = $(window).scrollTop() - 200;
692        $("html,body").animate({scrollTop: scrollToBloc}, 500)
693      });
694    };
695
696    $('#views-exposed-form-sessions-history-sessions-history .fieldset-legend').attr('style','opacity:0');
697    if( $('#views-exposed-form-sessions-history-sessions-history #edit-session-inactive').is(':checked') ){
698      $('.delete-session').hide();
699    }
700    href = $('.csv-feed .feed-icon').attr('href');
701    if(href){
702      href = href.replace('http','https');
703      $('.csv-feed .feed-icon').attr('href',href);
704    }
705    if ($("form").hasClass("newsletter-entity-quotidienne-add-form")) {
706      nsl_quot_article_unchecked();
707      $(document).ajaxSuccess(function (event, xhr, settings) {
708        nsl_quot_article_unchecked();
709      });
710    }
711    $('.vintage_table').on('click', function (e) {
712      e.preventDefault();
713
714      //récupere id prix littéraire
715      var path = window.location.pathname;
716      var segments = path.split('/');
717      var prixlitt_Id = segments[2];
718
719      select_millesime($(this), prixlitt_Id);
720    });
721    $(document).on('click', '.selection_book',  function (e) {
722      e.preventDefault();
723      $('.selection_book.clicked').removeClass('clicked').closest('tr').css('background-color', '');
724      var id = $(this).data('id');
725      $(this).addClass('clicked').closest('tr').css('background-color', '#ffffcc');
726      $(".view_book").addClass('hidden');
727      $("#edit-view-book-"+id).removeClass('hidden');
728      $("#add_ouvrage").removeAttr("style");
729      $(".add_ouvrage_electre").removeAttr("style");
730      document.cookie = "plitt_selectprix=" + id + "; Path=/";
731    });
732    $(document).on('click', '.selection_book',  function (e) {
733      e.preventDefault();
734      $('.selection_book.clicked').removeClass('clicked').closest('tr').css('background-color', '');
735      var id = $(this).data('id');
736      $(this).addClass('clicked').closest('tr').css('background-color', '#ffffcc');
737      $(".view_auteur").addClass('hidden');
738      $("#edit-view-auteur-"+id).removeClass('hidden');
739      $("#add_auteur").removeAttr("style");
740      document.cookie = "plitt_selectprix=" + id + "; Path=/";
741    });
742    $('.award-entity-edit-form').ready( function (e) {
743      var urlParams = new URLSearchParams(window.location.search);
744      var milesime = urlParams.get('millesime');
745      var selection = urlParams.get('selection');
746
747      //récupere id prix littéraire
748      var path = window.location.pathname;
749      var segments = path.split('/');
750      var prixlitt_Id = segments[2];
751
752      $('#vintage_table_'+milesime).addClass('clicked').closest('tr').css('background-color', '#ffffcc');
753      $('#selection_book_'+selection).addClass('clicked').closest('tr').css('background-color', '#ffffcc');
754      $('#selection_auteur_'+selection).addClass('clicked').closest('tr').css('background-color', '#ffffcc');
755      (milesime != null)? document.cookie = "plitt_vintprix=" + milesime + "; Path=/":document.cookie = "plitt_vintprix=; Path=/";
756      (selection != null)? document.cookie = "plitt_selectprix="+selection+"; Path=/":document.cookie = "plitt_selectprix=; Path=/";
757      (prixlitt_Id != null)? document.cookie = "plitt_id="+prixlitt_Id+"; Path=/":document.cookie = "plitt_id=; Path=/";
758    });
759    function select_millesime(millessime, prixlitt_Id){
760      var idSelection = millessime.data('id');
761      $(".view_selection").addClass('hidden');
762      $(".view_jury").addClass('hidden');
763      $(".view_book").addClass('hidden');
764      $(".view_auteur").addClass('hidden');
765      $("#edit-view-selection-"+idSelection).removeClass('hidden');
766      $("#edit-view-jury-"+idSelection).removeClass('hidden');
767      $('.vintage_table.clicked').removeClass('clicked').closest('tr').css('background-color', '');
768      $('.selection_book.clicked').removeClass('clicked').closest('tr').css('background-color', '');
769      $('.selection_auteur.clicked').removeClass('clicked').closest('tr').css('background-color', '');
770      millessime.addClass('clicked').closest('tr').css('background-color', '#ffffcc');
771      document.cookie = "plitt_id=" + prixlitt_Id + "; Path=/";
772      document.cookie = "plitt_vintprix=" + idSelection + "; Path=/";
773      document.cookie = "plitt_selectprix=; Path=/";
774      $("#add_Selection").removeAttr("style");
775      $("#add_jury").removeAttr("style");
776      $("#add_ouvrage").css('display','none');
777      $("#add_ouvrage_electre").css('display','none');
778      $("#add_auteur").css('display','none');
779    }
780
781    if ($('.import-mv-form').length) {
782      $('.ui-autocomplete').bind("click", function () {
783        var categorie = $('#edit-categories').val().split(' (');
784        id_categorie = categorie[0];
785        getNbSemaineCouvertes(id_categorie);
786
787      });
788    }
789
790    $('.export-classement-mv').on('click', function(e) {
791      e.preventDefault();
792
793      var currentUrl = window.location.href;
794      var queryString = currentUrl.split('?')[1];
795      var newUrl = $(this).attr('href') + '?' + queryString;
796      $(this).attr('href', newUrl);
797
798      window.location.href = newUrl;
799    });
800
801    $('.js-export-with-filters').on('click', function (e) {
802      e.preventDefault();
803
804      window.location.href = $(this).attr('href') + window.location.search;
805    });
806    $('div.article-event__col--action').on('click', 'a', function () {
807      var email = $(this).data('mail');
808      var subscriptionNumber = $(this).data('subscription');
809      $('#modal-confirm-remove-user span.user-email').html(email);
810      $('#modal-confirm-remove-user span.subscription-number').html(subscriptionNumber);
811    });
812
813    $('div.bloc-ressource__footer--s1').on('click', 'a', function () {
814      var email = $(this).data('mail');
815      var subscriptionNumber = $(this).data('subscription');
816      $('#modal-confirm-attach-user span.subscription-number').html(subscriptionNumber);
817    });
818
819    $('#modal-confirm-remove-user .button--primary').on('click', function () {
820      var email = $('#modal-confirm-remove-user .user-email').text();
821      var subscriptionNumber = $('#modal-confirm-remove-user .subscription-number').text();
822      const url = new URL(window.location.href);
823      const sequenceNumber = url.searchParams.get('sequenceNumber');
824      let detachmentUrl;
825      if (sequenceNumber) {
826        detachmentUrl = '/detachment-user?sequenceNumber=' + sequenceNumber;
827      } else {
828        detachmentUrl = '/detachment-user';
829      }
830      $.ajax({
831        url: detachmentUrl,
832        type: 'Delete',
833        dataType: 'json',
834        data: {
835          email: email,
836          subscriptionNumber: subscriptionNumber
837        },
838        success: function (response) {
839          $('#modal-confirm-remove-user').fadeOut();
840          window.location.reload();
841        },
842        error: function (xhr, status, error) {
843          $('#modal-confirm-remove-user .error-remove-user').html("Erreur pour détachement " + email + " d’une affaire.");
844        }
845      });
846    });
847
848    $('div.article-event__col--action').on('click', 'a', function () {
849      var email = $(this).data('mail');
850      var subscriptionNumber = $(this).data('subscription');
851      $('#modal-email').val(email);
852      $('#modal-subscription').val(subscriptionNumber);
853    });
854    $('#modal-confirm-create-role-gest .button--primary').on('click', function () {
855      var email = $('#modal-email').val();
856      var subscriptionNumber = $('#modal-subscription').val();
857      const url = new URL(window.location.href);
858      const sequenceNumber = url.searchParams.get('sequenceNumber');
859      let detachmentUrl;
860      if (sequenceNumber) {
861        detachmentUrl = '/attachment-user-manager?sequenceNumber=' + sequenceNumber;
862      } else {
863        detachmentUrl = '/attachment-user-manager';
864      }
865      $.ajax({
866        url: detachmentUrl,
867        type: 'Put',
868        dataType: 'json',
869        data: {
870          email: email,
871          subscriptionNumber: subscriptionNumber
872        },
873        success: function (response) {
874          $('#modal-confirm-create-role-gest').fadeOut();
875          window.location.reload();
876        },
877        error: function (xhr, status, error) {
878          $('#modal-confirm-create-role-gest .error-remove-user').html("Erreur pour ajouter " + email + " au rôle gestionnaire.");
879        }
880      });
881    });
882
883    $('#modal-confirm-remove-role-gest .button--primary').on('click', function () {
884      var email = $('#modal-email').val();
885      var subscriptionNumber = $('#modal-subscription').val();
886      const url = new URL(window.location.href);
887      const sequenceNumber = url.searchParams.get('sequenceNumber');
888      let detachmentUrl;
889      if (sequenceNumber) {
890        detachmentUrl = '/detachment-user-manager?sequenceNumber=' + sequenceNumber;
891      } else {
892        detachmentUrl = '/detachment-user-manager';
893      }
894      $.ajax({
895        url: detachmentUrl,
896        type: 'Delete',
897        dataType: 'json',
898        data: {
899          email: email,
900          subscriptionNumber: subscriptionNumber
901        },
902        success: function (response) {
903          $('#modal-confirm-remove-role-gest').fadeOut();
904          window.location.reload();
905        },
906        error: function (xhr, status, error) {
907          $('#modal-confirm-create-role-gest .error-remove-user').html("Erreur pour retiré " + email + " au rôle gestionnaire.");
908        }
909      });
910    });
911
912    $('#modal-confirm-remove-jeton .button--primary').on('click', function () {
913      var email = $('#modal-email').val();
914      var subscriptionNumber = $('#modal-subscription').val();
915      const url = new URL(window.location.href);
916      const sequenceNumber = url.searchParams.get('sequenceNumber');
917      let detachmentUrl;
918      if (sequenceNumber) {
919        detachmentUrl = '/detachment-user-reader?sequenceNumber=' + sequenceNumber;
920      } else {
921        detachmentUrl = '/detachment-user-reader';
922      }
923      $.ajax({
924        url: detachmentUrl,
925        type: 'Delete',
926        dataType: 'json',
927        data: {
928          email: email,
929          subscriptionNumber: subscriptionNumber
930        },
931        success: function (response) {
932          $('#modal-confirm-remove-jeton').fadeOut();
933          window.location.reload();
934        },
935        error: function (xhr, status, error) {
936          $('#modal-confirm-remove-jeton.error-remove-user').html("Erreur pour détachement " + email + " au rôle lecture.");
937        }
938      });
939    });
940
941    $('#modal-confirm-create-jeton .button--primary').on('click', function () {
942      var email = $('#modal-email').val();
943      var subscriptionNumber = $('#modal-subscription').val();
944      const url = new URL(window.location.href);
945      const sequenceNumber = url.searchParams.get('sequenceNumber');
946      let detachmentUrl;
947      if (sequenceNumber) {
948        detachmentUrl = '/attachment-user-reader?sequenceNumber=' + sequenceNumber;
949      } else {
950        detachmentUrl = '/attachment-user-reader';
951      }
952      $.ajax({
953        url: detachmentUrl,
954        type: 'Put',
955        dataType: 'json',
956        data: {
957          email: email,
958          subscriptionNumber: subscriptionNumber
959        },
960        success: function (response) {
961          $('#modal-confirm-create-jeton').fadeOut();
962          window.location.reload();
963        },
964        error: function (xhr, status, error) {
965          $('#modal-confirm-create-jeton .error-remove-user').html("Le nombre de jetons indisponible.");
966        }
967      });
968    });
969
970    // Validation date d'envoi — formulaire NL Paramétrable (nl_edition_data)
971    var $nedDate = $('#edit-field-newsletter-sending-date-0');
972    if ($nedDate.length) {
973      $('<span class="errors_nsl_send_date" style="color:#ff0000"></span>').insertBefore($nedDate);
974
975      $('#edit-actions').on('mouseover', function () {
976        var sendDate = $('#edit-field-newsletter-sending-date-0-value-date').val();
977        var sendTime = $('#edit-field-newsletter-sending-date-0-value-time').val();
978        if (!sendDate) { return; }
979        var dp = sendDate.split('-');
980        var tp = sendTime ? sendTime.split(':') : ['0', '0'];
981        var dt = new Date(dp[0], parseInt(dp[1], 10) - 1, dp[2], tp[0], tp[1]);
982        if (dt.getTime() < new Date().getTime()) {
983          $('.errors_nsl_send_date').html("Date d\'envoi de la newsletter doit être supérieur à la date actuelle");
984          $('#edit-actions').hide();
985          $('#edit-field-newsletter-sending-date-0').css('border-color', '#ff0000');
986        }
987      });
988
989      $('#edit-field-newsletter-sending-date-0-value-date, #edit-field-newsletter-sending-date-0-value-time').on('change', function () {
990        $('#edit-actions').show();
991        $('.errors_nsl_send_date').html('');
992        $('#edit-field-newsletter-sending-date-0').css('border-color', '');
993      });
994    }
995
996
997  });
998
999  function nsl_quot_article_unchecked() {
1000    var send_date = $('#edit-field-newsletter-send-date-0-value-date').val();
1001    var send_time = $('#edit-field-newsletter-send-date-0-value-time').val();
1002    dateParts = send_date.split('-');
1003    timeParts = send_time.split(':');
1004    date = new Date(dateParts[0], parseInt(dateParts[1], 10) - 1, dateParts[2], timeParts[0], timeParts[1]);
1005    send_datetime = date.getTime();
1006
1007    let article_unchecked = '0';
1008    $(".recup_article_quotidienne").each(function (index) {
1009      $(this).parent().parent().parent().show();
1010      $(this).parent().parent().parent().parent().show();
1011      if (parseInt(send_datetime / 1000) < parseInt($(this)
1012        .attr('article_date'))) {
1013        if ($(this).parent().parent().parent().hasClass('draggable')) {
1014          $(this).parent().parent().parent().hide();
1015        }
1016        else {
1017          $(this).parent().parent().parent().parent().hide();
1018        }
1019        article_unchecked += ',' + $(this).attr("article_id");
1020      }
1021      $('#edit-field-article-unchecked-0-value').val(article_unchecked);
1022    });
1023  }
1024
1025  function getEventMedia(id, vid, select, id_selected) {
1026    if (id) {
1027      $.ajax({
1028        url: '/getSupport',
1029        type: 'POST',
1030        dataType: 'json',
1031        data: {
1032          id: id,
1033          vid: vid,
1034          id_selected: id_selected,
1035        },
1036        success: function (response) {
1037          $('#' + select).empty();
1038          $('#' + select).append(response);
1039        }
1040      });
1041    }
1042  }
1043
1044  function getEmissionAnimateur(id, vid) {
1045    if (id) {
1046      $.ajax({
1047        url: '/getEmissionAnimateur',
1048        type: 'POST',
1049        dataType: 'json',
1050        data: {
1051          id: id,
1052          vid: vid,
1053        },
1054        success: function (response) {
1055          if (Array.isArray(response) && response.length > 0) {
1056            const $animatorTable = $('#field-animator-values tbody');
1057            $animatorTable.empty();
1058            let counter = 0;
1059            response.forEach(function (animatorLabel) {
1060              const rowId = `edit-field-animator-${counter}-target-id`;
1061              const newRow = $(`
1062              <tr class="draggable ${counter % 2 === 0 ? 'even' : 'odd'}" xmlns="http://www.w3.org/1999/html">
1063                <td class="field-multiple-drag">
1064                  <a href="#" class="tabledrag-handle" title="Cliquer-déposer pour ré-organiser" style="display: none;">
1065                    <div class="handle">&nbsp;</div>
1066                  </a>
1067                </td>
1068                <td>
1069                  <div class="js-form-item form-item js-form-type-entity-autocomplete form-type-entity-autocomplete js-form-item-field-animator-0-target-id form-item-field-animator-0-target-id form-no-label">
1070                    <label for="edit-field-animator-0-target-id--pTwCWmaQwDk" class="visually-hidden">Animateur (valeur ${counter})</label>
1071                    <input
1072                      data-drupal-selector="${rowId}"
1073                      class="form-autocomplete form-text ui-autocomplete-input"
1074                      data-autocomplete-path="/entity_reference_autocomplete/people_entity/default%3Apeople_entity/4kFvEaBNeXJ4klbVfq3dF8Cjkk_hzoy_sUd0AvCe430"
1075                      type="text"
1076                      id="${rowId}"
1077                      name="field_animator[${counter}][target_id]"
1078                      value="${animatorLabel}"
1079                      size="60"
1080                      maxlength="1024"
1081                      placeholder="" autocomplete="off" data-listener-added_b56f0b93="true">
1082                  </div>
1083                </td>
1084                <td class="delta-order tabledrag-hide">
1085                <div class="js-form-item form-item js-form-type-select form-type-select js-form-item-field-animator-0--weight form-item-field-animator-0--weight form-no-label">
1086                 <label for="edit-field-animator-0-weight--o6zWehJ4KXQ" class="visually-hidden">Poids pour la ligne ${counter+1}</label>
1087                  <select data-drupal-selector="${rowId}-weight" class="field_animator-delta-order form-select" name="field_animator[${counter}][_weight]">
1088                    <option value="${counter}" selected>${counter}</option>
1089                  </select>
1090                </div>
1091                </td>
1092              </tr>
1093            `);
1094              $animatorTable.append(newRow);
1095              counter++;
1096            });
1097            Drupal.attachBehaviors($animatorTable[0]);
1098            const addMoreButton = document.querySelector('[data-drupal-selector="edit-field-animator-add-more"]');
1099            if (addMoreButton) {
1100              const event = new MouseEvent('click', {
1101                view: window,
1102                bubbles: true,
1103                cancelable: true,
1104              });
1105              addMoreButton.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));
1106              addMoreButton.dispatchEvent(new MouseEvent('mouseup', { bubbles: true, cancelable: true }));
1107              addMoreButton.dispatchEvent(event);
1108            }
1109          }
1110
1111        },
1112        error: function (e) {
1113          console.error('Erreur AJAX:', e);
1114        }
1115      });
1116    } else {
1117      console.warn('Aucun ID fourni pour getEmissionAnimateur.');
1118    }
1119  }
1120
1121  function getNbSemaineCouvertes (id_categorie) {
1122    if (id_categorie) {
1123      $.ajax({
1124        url: '/getNbSemaineCouvert',
1125        type: 'POST',
1126        dataType: 'json',
1127        data: {
1128          id: id_categorie,
1129        },
1130        success: function (response) {
1131          $('#edit-nb-semaine-couvert').val(response);
1132        }
1133      });
1134    }
1135  }
1136
1137  $(document).ajaxSuccess(function (event, xhr, settings) {
1138    if ($("body").hasClass("path-article-entity") || $("body").hasClass("page-node-type-economical-dashboard") || $("form").hasClass("node-economical-dashboard-form") || $("form").hasClass("classified-entity-form")) {
1139      $('input[name="media[0][fields][field_document_format][0][value]"]').prop('readonly', true);
1140      Drupal.behaviors.fileAutoUpload = {
1141        attach: function attach(context) {
1142          name = $('.form-item-name').text();
1143          var n = name.split('.');
1144          ext=n[n.length - 1];
1145          if (ext) {
1146            $('input[name="media[0][fields][field_document_format][0][value]"]').val('.' + ext);
1147          }else {
1148            $('input[name="media[0][fields][field_document_format][0][value]"]').val('');
1149          }
1150          $(context)
1151            .find('input[type="file"]')
1152            .once('auto-file-upload');
1153            //.on('change.autoFileUpload', Drupal.file.triggerUploadButton);
1154        },
1155      };
1156
1157      if (settings.url.indexOf("/media-library?media_library_opener_id=media_library") > -1) {
1158        $('select[name="media[0][fields][field_document_nature]"]').change(function (e) {
1159          var nature = $('select[name="media[0][fields][field_document_nature]"]').val();
1160          if (nature == 1) {
1161            $('.form-item-media-0-fields-field-document-type').show();
1162            $('.form-item-media-0-fields-field-document-topic').show();
1163          }
1164          else {
1165            $('.form-item-media-0-fields-field-document-type').hide();
1166            $('.form-item-media-0-fields-field-document-topic').hide();
1167          }
1168        });
1169      }
1170    }
1171    $('.delete-session').click(function () {
1172      sessionDelete ($(this).attr('sid'));
1173    });
1174
1175    if ($("body").hasClass("path-article-entity") || ($('#media-library-content').length)) {
1176      var class_menu_quote = $('.media-library-menu-quote a').attr('class');
1177      if (class_menu_quote) {
1178        if (class_menu_quote.indexOf('active') > -1) {
1179          $('div.div_add_quote').remove();
1180          $("#media-library-add-form-wrapper").addClass("hidden");
1181          var my_elem = document.getElementById('media-library-view');
1182          var div = document.createElement('div');
1183          div.className = 'div_add_quote';
1184          div.style.cssText = 'border: 1px solid #bfbfbf; padding:16px';
1185          my_elem.parentNode.insertBefore(div, my_elem);
1186          $('div.div_add_quote').append('<label for="quote_name" class="form-required">Nom</label><input class="form-text" type="text" id="quote_name" name="quote_name" size="60">');
1187          $('div.div_add_quote').append('<label for="quote_name" id="quote_name_errors" class="quote_errors hidden">Le champ Nom est obligatoire</label>');
1188          $('div.div_add_quote').append('<label for="quote_citation" class="form-required">Citation</label><textarea class="form-textarea" type="text" id="quote_citation" name="quote_citation" rows="5" cols="60"></textarea>');
1189          $('div.div_add_quote').append('<label for="quote_citation" id="quote_citation_errors" class="quote_errors hidden">Le champ Citation est obligatoire</label>');
1190          $('div.div_add_quote').append('<label for="quote_auteur">Auteur</label><input class="form-text" type="text" id="quote_auteur" name="quote_auteur" size="60"><br><br>');
1191          $('div.div_add_quote').append('<button type="button" class="button button--primary btn-add-quote">Enregistrer</button>');
1192        }
1193      }
1194    }
1195
1196    $('.btn-add-quote').click(function () {
1197      var quote_name = $('#quote_name').val();
1198      var quote_citation = $('#quote_citation').val();
1199      var quote_auteur = $('#quote_auteur').val();
1200      if (quote_name === '') {
1201        $("#quote_name_errors").removeClass("hidden");
1202      } else {
1203        $("#quote_name_errors").addClass("hidden");
1204      }
1205      if (quote_citation === '') {
1206        $("#quote_citation_errors").removeClass("hidden");
1207      } else {
1208        $("#quote_citation_errors").addClass("hidden");
1209      }
1210      if (quote_name != '' && quote_citation != '') {
1211        $.ajax({
1212          url: '/addQuote',
1213          type: 'POST',
1214          dataType: 'json',
1215          data: {
1216            name: quote_name,
1217            citation: quote_citation,
1218            auteur: quote_auteur,
1219          },
1220          success: function (response) {
1221            if (response.data === 'success') {
1222              $(".ui-dialog-titlebar-close").trigger("click");
1223              var $iframe = $('.cke_wysiwyg_frame');
1224              $iframe.ready(function () {
1225                $iframe.contents()
1226                  .find("body")
1227                  .append('<drupal-media data-entity-type="media" data-entity-uuid="' + response.uuid + '"></drupal-media>');
1228                $(".cke_button__source").trigger("click");
1229                setTimeout(function () {
1230                  $(".cke_button__source").trigger("click");
1231                }, 100);
1232              });
1233
1234            }
1235          }
1236        });
1237      }
1238    });
1239  });
1240
1241  function sessionDelete (sid){
1242    var decision = confirm("Êtes-vous sûr(e) de vouloir supprimer cette session ?");
1243    var url = window.location.href;
1244    url = url.replace('#', '');
1245    if (decision) {
1246      jQuery.ajax({
1247        url: '/disconnectedSession',
1248        type: 'POST',
1249        dataType: 'json',
1250        data: {
1251          sid: sid
1252        },
1253        success: function (response) {
1254          if (response.data === 'success') {
1255            window.location.href = url;
1256          }
1257        }
1258      });
1259    }
1260  }
1261  Drupal.behaviors.entityLHFormModal = {
1262    attach: function (context, settings) {
1263      $('.open-modal-link', context)
1264        .once('entity-lh-form-modal')
1265        .click(function () {
1266
1267          var url = Drupal.url('form_classement');
1268          var action_form = "/form_classement" ;
1269          $('<form action="' + action_form + '" method="post"></form>')
1270            .appendTo('body')
1271            .dialog({
1272              title: "Ajouter d'un ouvrage",
1273              modal: true,
1274              width: 1200,
1275              height: 600,
1276              open: function () {
1277                var modal_form = $(this);
1278                $.get(url, function (data) {
1279                  var formHtml = $(data).find('.classement-modal-form').html();
1280                  modal_form.html(formHtml);
1281                  myCustomModalBehavior(modal_form);
1282                  $('#edit-submit').remove()
1283                })
1284              },
1285              close: function () {
1286                $(this).remove();
1287              },
1288              buttons: {
1289                "Submit": function () {
1290                  var formData = $('form').serialize();
1291                  $.ajax({
1292                    type: 'POST',
1293                    url: action_form,
1294                    data: formData,
1295                    success: function () {
1296                      location.reload();
1297                    },
1298                  });
1299                },
1300              }
1301            });
1302        });
1303    }
1304  };
1305
1306  function myCustomModalBehavior($modalContent) {
1307    const id_radio = {
1308      "m_radio_title": "elec_radio_title",
1309      "m_radio_editeur": "elec_radio_editeur",
1310      "m_radio_auteur": "elec_radio_auteur",
1311      "m_radio_price": "elec_radio_price"
1312    };
1313
1314    for (const [masterRadioId, slaveRadioId] of Object.entries(id_radio)) {
1315      $modalContent.find(`#${slaveRadioId}, #${masterRadioId}`)
1316        .click(function () {
1317          const $clickedRadio = $(this);
1318          const $otherRadio = $modalContent.find(`#${slaveRadioId}, #${masterRadioId}`)
1319            .not($clickedRadio);
1320          $otherRadio.prop('checked', false);
1321        });
1322    }
1323  }
1324
1325  jQuery('.view-classement-mv tbody tr').each(function () {
1326    var row = $(this);
1327    var positionWeeksInPeriod = row.find('td.views-field.views-field-field-position-weeks-in-period')
1328      .text();
1329    var positionWeeksInRating = row.find('td.views-field.views-field-field-position-weeks-in-rating')
1330      .text();
1331    var positionOldPosition = row.find('td.views-field.views-field-field-position-old-position')
1332      .text();
1333    var positionRank = row.find('td.views-field.views-field-field-position-rank')
1334      .text();
1335    var isbn = row.find('td.views-field.views-field-field-book-isbn')
1336      .text()
1337    var category = row.find('td.views-field.views-field-field-position-category')
1338      .text()
1339    var position_id = row.find('td.views-field.views-field-id')
1340      .text()
1341    var start_date = row.find('td.views-field.views-field-field-position-date time')
1342      .first()
1343      .attr('datetime')
1344      .split('T')[0];
1345
1346    row.find('td.views-field.views-field-field-position-weeks-in-period')
1347      .addClass('hidden');
1348    row.find('td.views-field.views-field-field-position-weeks-in-rating')
1349      .addClass('hidden');
1350    row.find('td.views-field.views-field-field-position-old-position')
1351      .addClass('hidden');
1352    row.find('td.views-field.views-field-id')
1353      .addClass('hidden');
1354    $.ajax({
1355      url: '/getNewPosition/' + isbn.trim() +'/'+ position_id.trim() +'/'+category.trim() +'/'+start_date.trim(),
1356      type: 'GET',
1357      success: function (response) {
1358        if
1358 (response.data === 'success') {
1359          row.addClass('yellow-row');
1360        }
1361      },
1362      error: function (response) {
1363
1364      }
1365    });
1366  });
1367  jQuery('.view-classement-mv thead tr').each(function () {
1368    var row = $(this);
1369    row.find('th.views-field.views-field-field-position-weeks-in-period')
1370      .addClass('hidden');
1371    row.find('th.views-field.views-field-field-position-weeks-in-rating')
1372      .addClass('hidden');
1373    row.find('th.views-field.views-field-field-position-old-position')
1374      .addClass('hidden');
1375
1376    row.find('th.views-field.views-field-id')
1377      .addClass('hidden');
1378  });
1379
1380  $('.views-field-delete-position-entity a:contains("supprimer")').each(function () {
1381    var classmentUrl = $(this).attr('href');
1382    var id_mv = classmentUrl.split('/')[2];
1383    $(this).html('<span class="custom-delete-icon" data-classement='+id_mv+'>&#10060;</span>');
1384
1385  });
1386
1387
1388  $('.custom-delete-icon').on('click', function (e) {
1389
1390    e.preventDefault();
1391    var url_delete_mv = $(this).data('classement'),
1392      decision = confirm('Vous allez supprimer ce livre du classement ?'),
1393      line = $(this).parent().parent().parent().closest('tr');
1394
1395    if (decision) {
1396      $.ajax({
1397        url: '/delete_classement/' + url_delete_mv,
1398        type: 'POST',
1399        success: function (response) {
1400          if (response.data === 'success') {
1401            line.slideUp().remove();
1402            $('.view-classement-mv tbody tr').each(function (index) {
1403              $(this).find('td.views-field.views-field-field-position-rank').text(index + 1);
1404            });
1405          }
1406        },
1407        error: function (response) {
1408          var content = '<div class="alert alert-danger">' + response.msg + '</div>';
1409          $('.tab-basket').before(content);
1410        }
1411      });
1412    }
1413  });
1414
1415  Drupal.behaviors.entityLHFormModal = {
1416    attach: function (context, settings) {
1417      $('.open-modal-link', context)
1418        .once('entity-lh-form-modal')
1419        .click(function () {
1420          var entityId = $(this)
1421            .parent()
1422            .parent()
1423            .find('td.views-field.views-field-id')
1424            .text();
1425          var action_form = "/form_classement/" + $.trim(entityId)
1426          $('<form action="' + action_form + '" method="post"></form>')
1427            .appendTo('body')
1428            .dialog({
1429              title: "Validation d'un ouvrage",
1430              modal: true,
1431              width: 1200,
1432              height: 500,
1433              open: function () {
1434                var modal_form = $(this);
1435                $.get('/form_classement/' + entityId, function (data) {
1436                  var formHtml = $(data).find('.classement-modal-form').html();
1437                  modal_form.html(formHtml);
1438                  myCustomModalBehavior(modal_form);
1439                  $('#edit-submit').remove()
1440                })
1441              },
1442              close: function () {
1443                $(this).remove();
1444              },
1445              buttons: {
1446                "Submit": function () {
1447                  var formData = $('form').serialize();
1448                  $.ajax({
1449                    type: 'POST',
1450                    url: action_form,
1451                    data: formData,
1452                    success: function () {
1453                      location.reload();
1454                      },
1455                  });
1456                },
1457              }
1458            });
1459        });
1460
1461        if ($("body").hasClass("path-eventmedia-entity") || $("form").hasClass("eventmedia-entity-form")) {
1462          if($('#edit-field-event-media-type').val() != '_none'){
1463            var media = $('#edit-field-event-media-type').val();
1464            var support = $('#edit-field-event-media-support').val();
1465            getEventMedia(media, 'media_company', 'edit-field-event-media-support', support);
1466          }
1467          var button = $('.button_show_popup');
1468          var fieldBookCitedWrapper = $('#edit-field-book-cited-wrapper');
1469          button.insertAfter(fieldBookCitedWrapper);
1470        }
1471    }
1472  };
1473  Drupal.behaviors.purchaseDialog = {
1474    attach: function (context, settings) {
1475      $('.purchase-link', context).once('purchaseDialog').click(function (e) {
1476        e.preventDefault(); // Empêche l'action par défaut du lien
1477        // Initialiser la boîte de dialogue
1478        $('#purchase-dialog').dialog({
1479          modal: true,
1480          dialogClass: 'dialog-top', // Ajoute une classe CSS personnalisée
1481        });
1482      });
1483    }
1484  };
1485  function myCustomModalBehavior($modalContent) {
1486    const id_radio = {
1487      "m_radio_title": "elec_radio_title",
1488      "m_radio_editeur": "elec_radio_editeur",
1489      "m_radio_auteur": "elec_radio_auteur",
1490      "m_radio_price": "elec_radio_price"
1491    };
1492
1493    for (const [masterRadioId, slaveRadioId] of Object.entries(id_radio)) {
1494      $modalContent.find(`#${slaveRadioId}, #${masterRadioId}`)
1495        .click(function () {
1496          const $clickedRadio = $(this);
1497          const $otherRadio = $modalContent.find(`#${slaveRadioId}, #${masterRadioId}`)
1498            .not($clickedRadio);
1499          $otherRadio.prop('checked', false);
1500        });
1501    }
1502  }
1503  // configuration date page visite utilisateur
1504  $('.feed-icon').text('test')
1505
1506  Drupal.behaviors.showAddButton = {
1507    attach: function (context, settings) {
1508      $('.search-button', context).once('add-button').on('click', function (e) {
1509        if (!$('input[name="filter_options"]:checked').length) {
1510          e.preventDefault();
1511          $('#error-message').show();
1512        }
1513        else {
1514          e.preventDefault();
1515          $('#error-message').hide();
1516        }
1517      });
1518
1519      $(document).ajaxComplete(function () {
1520        if ($('#book-results-wrapper table').length > 0) {
1521          $('.add-selected-books', context).show();
1522        } else {
1523          $('.add-selected-books', context).hide();
1524        }
1525      });
1526    }
1527  };
1528  Drupal.behaviors.updateHiddenField = {
1529    attach: function (context, settings) {
1530      window.updateFieldModalBook = function (bookTitleWithId) {
1531        var bookIdToRemove = bookTitleWithId.match(/\((\d+)\)$/)?.[1];
1532        if (bookIdToRemove) {
1533          var currentIds = $('#field-modal-book').val().split(',').filter(
1533Boolean);
1534          var updatedIds = currentIds.filter(function (id) {
1535            return id !== bookIdToRemove;
1536          });
1537          $('#field-modal-book').val(updatedIds.join(','));
1538        } else {
1539          console.error("Impossible d'extraire l'ID à partir du texte :", bookTitleWithId);
1540        }
1541      };
1542    }
1543  };
1544  Drupal.behaviors.addDeleteButton = {
1545    attach: function (context, settings) {
1546      $('[id^="edit-field-book-cited-"]', context).each(function () {
1547        var $inputField = $(this);
1548        if ($inputField.val().trim() !== '') {
1549          if ($inputField.next('.custom-delete-wrapper').length === 0) {
1550            var $deleteWrapper = $('<div>', {
1551              style: 'padding: 10px; display: inline-block;',
1552              class: 'custom-delete-wrapper'
1553            });
1554            var $deleteIcon = $('<a>', {
1555              href: '#',
1556              class: 'custom-delete-icon',
1557              title: 'Supprimer ce livre',
1558              style: 'font-size: 14px; text-decoration: none; color: red;'
1559            }).append(
1560              $('<span>', {
1561                class: 'icon',
1562                html: '❌'
1563              })
1564            );
1565
1566            $deleteIcon.on('click', function (e) {
1567              e.preventDefault();
1568              var bookTitleWithId = $inputField.val();
1569              window.updateFieldModalBook(bookTitleWithId);
1570              $inputField.closest('tr').remove();
1571              hideLastDeleteButton();
1572            });
1573            $deleteWrapper.append($deleteIcon);
1574            $inputField.after($deleteWrapper);
1575          }
1576        } else {
1577          $inputField.next('.custom-delete-wrapper').remove();
1578        }
1579      });
1580      function hideLastDeleteButton() {
1581        var deleteIcons = $('.custom-delete-wrapper');
1582        if (deleteIcons.length > 0) {
1583          deleteIcons.last().hide();
1584        }
1585      }
1586      hideLastDeleteButton();
1587    }
1588  };
1589
1590  Drupal.behaviors.addRemoveButton = {
1591    attach: function (context, settings) {
1592      Drupal.behaviors.addDeleteButton.attach(context, settings);
1593      Drupal.behaviors.updateHiddenField.attach(context, settings);
1594    }
1595  };
1596
1597  // charger le chmap selected-eans hidden
1598
1599  Drupal.behaviors.sortTable = {
1600    attach: function (context, settings) {
1601      $('#book-results-wrapper table th.sortable', context).once('sortTable').click(function () {
1602        var column = $(this).data('column');
1603        var table = $(this).closest('table');
1604        var rows = table.find('tbody tr').toArray();
1605
1606        var isAscending = !$(this).hasClass('sorted-asc');
1607        table.find('th').removeClass('sorted-asc sorted-desc');
1608        $(this).addClass(isAscending ? 'sorted-asc' : 'sorted-desc');
1609
1610        var isDateColumn = $(this).data('column') === 'date-parution';
1611        var isPriceColumn = $(this).data('column') === 'prix';
1612        // Trier les lignes
1613        rows.sort(function (a, b) {
1614          var cellA = $(a).find('td[data-column="' + column + '"]').text().trim();
1615          var cellB = $(b).find('td[data-column="' + column + '"]').text().trim();
1616
1617          if (isDateColumn) {
1618            var dateA = new parseDate(cellA);
1619            var dateB = new parseDate(cellB);
1620
1621            if (isNaN(dateA) || isNaN(dateB)) {
1622              console.warn('Invalid date format:', cellA, cellB);
1623              return 0;
1624            }
1625
1626            // Comparer les dates
1627            return isAscending ? dateA - dateB : dateB - dateA;
1628          }
1629          else if (isPriceColumn) {
1630            var priceA = parsePrice(cellA);
1631            var priceB = parsePrice(cellB);
1632
1633            // Comparer les prix
1634            return isAscending ? priceA - priceB : priceB - priceA;
1635          }
1636          else {
1637            // Comparaison standard pour les colonnes textuelles
1638            return isAscending ? cellA.localeCompare(cellB) : cellB.localeCompare(cellA);
1639          }
1640        });
1641
1642        rows.forEach(function (row) {
1643          table.find('tbody').append(row);
1644        });      });
1645
1646      $('.bloc-event--s5 .bloc-event__head_abonnement div.sortable', context).once('sortTable').click(function () {
1647        var column = $(this).data('column');
1648        var table = $(this).closest('.bloc-event--s5');
1649        var rows = table.find('.user-row').toArray();
1650
1651        var isAscending = !$(this).hasClass('sorted-asc');
1652        table.find('.bloc-event__head_abonnement div').removeClass('sorted-asc sorted-desc');
1653        $(this).addClass(isAscending ? 'sorted-asc' : 'sorted-desc');
1654
1655        // Trier les lignes
1656        rows.sort(function (a, b) { console.log('sort');
1657          var cellA = $(a).find('.article-event--bord p[data-column="' + column + '"]').text().trim();
1658          var cellB = $(b).find('.article-event--bord p[data-column="' + column + '"]').text().trim();
1659
1660          if (isAscending) {
1661            return cellA.localeCompare(cellB);
1662          }
1663          return cellB.localeCompare(cellA);
1664        });
1665
1666        rows.forEach(function (row) {
1667          table.find('.all-user').append(row);
1668        });
1669      });
1670    }
1671  };
1672
1673// Fonction pour convertir une date au format DD/MM/YYYY en objet Date
1674  function parseDate(dateStr) {
1675    var parts = dateStr.split('/');
1676    if (parts.length !== 3) {
1677      console.warn('Invalid date format:', dateStr);
1678      return null;
1679    }
1680    return new Date(parts[2], parts[1] - 1, parts[0]); // Année, mois (0-indexé), jour
1681  }
1682
1683// Fonction pour convertir un prix en valeur numérique
1684  function parsePrice(priceStr) {
1685    var numericStr = priceStr.replace(/[^\d,.-]/g, '').replace(',', '.');
1686    var numericValue = parseFloat(numericStr);
1687    return isNaN(numericValue) ? 0 : numericValue;
1688  }
1689
1690  Drupal.behaviors.updateSelectedEans = {
1691    attach: function(context, settings) {
1692      // Mettre à jour le champs hidden avec les ean sélectionnés
1693      $('.select-book-checkbox').change(function() {
1694        var selectedEans = [];
1695
1696        $('.select-book-checkbox:checked').each(function() {
1697          selectedEans.push($(this).data('ean'));
1698         });
1699
1700        $('#selected-eans').val(selectedEans.join(','));
1701      });
1702    }
1703  };
1704
1705  Drupal.behaviors.reloadBookCitedField = {
1706    attach: function (context, settings) {
1707
1708      Drupal.AjaxCommands.prototype.reloadBookCitedField = function (ajax, response, status) {
1709        window.reloadBookCitedField(response.data);
1710      };
1711
1712      // Fonction pour recharger le champ field_book_cited dans event media
1713      window.reloadBookCitedField = function (updatedIds) {
1714        var field = $('[id^="field-book-cited-values"]');
1715        var tbody = field.find('tbody');
1716
1717        if (tbody.length === 0) {
1718          tbody = $('<tbody></tbody>');
1719          field.append(tbody);
1720        }
1721
1722        var counter = tbody.find('tr').length; // Compte les lignes actuelles
1723        var weightOptions = [];
1724        var maxWeight = counter + updatedIds.length;
1725
1726        for (var i = 1; i <= maxWeight; i++) {
1727          weightOptions.push({ value: i, text: i.toString() });
1728        }
1729
1730        // Mettre à jour le champ caché
1731        var selectedIds = $('#field-modal-book').val().split(',');
1732        selectedIds.push(updatedIds);
1733        $('#field-modal-book').val(selectedIds.join(','));
1734        updatedIds.forEach(function (bookId) {
1735          $.ajax({
1736            url: '/getBookInfo',
1737            type: 'POST',
1738            dataType: 'json',
1739            data: {
1740              bookId: bookId,
1741            },
1742            success: function(data) {
1743
1744               var class_dragg = (counter % 2 === 0) ? 'odd' : 'even';
1745
1746              // Générer une nouvelle ligne
1747              var newRow = $('<tr>', { class: 'draggable '+ class_dragg }).append(
1748                $('<td>', { class: 'field-multiple-drag' }).append(
1749                  $('<a>', {
1750                    href: '#',
1751                    class: 'tabledrag-handle',
1752                    title: 'Cliquer-déposer pour ré-organiser'
1753                  }).append($('<div>', { class: 'handle' }).html('&nbsp;'))
1754                ),
1755                $('<td>').append(
1756                  $('<div>', {
1757                    class: 'js-form-item form-item js-form-type-entity-autocomplete form-type-entity-autocomplete js-form-item-field-book-cited-' + counter + '-target-id form-item-field-book-cited-' + counter + '-target-id form-no-label'
1758                  }).append(
1759                    $('<input>', {
1760                      type: 'text',
1761                      id: 'edit-field-book-cited-' + counter + '-target-id',
1762                      name: 'field_book_cited[' + counter + '][target_id]',
1763                      class: 'form-autocomplete form-text ui-autocomplete-input', 'data-autocomplete-path': '/entity_reference_autocomplete/book_entity/default%3Abook_entity/1zMHv1xpqcGsKKg1TOwA2A6xbkTilkIr7Xa3e4bsq7w',
1764                      value: data.title+ ' ('+bookId+')',
1765                      size: 60,
1766                      maxlength: 1024,
1767                      readonly: true
1768                    })
1769                  )
1770                ),
1771                // Ajouter la nouvelle TD ici
1772                $('<td>', {
1773                  class: 'delta-order tabledrag-hide',
1774                  style: ' display: none; '
1775                }).append(
1776                  $('<div>', {
1777                    class: 'js-form-item form-item js-form-type-select form-type-select js-form-item-field-book-cited-' + counter + '--weight form-item-field-book-cited-' + counter + '--weight form-no-label'
1778                  }).append(
1779                    $('<label>', {
1780                      for: 'edit-field-book-cited-' + counter + '-weight',
1781                      class: 'visually-hidden',
1782                      text: 'Poids pour la ligne ' + (counter + 1)
1783                    }),
1784                    $('<select>', {
1785                      'data-drupal-selector': 'edit-field-book-cited-' + counter + '-weight',
1786                      class: 'field_book_cited-delta-order form-select',
1787                      id: 'edit-field-book-cited-' + counter + '-weight',
1788                      name: 'field_book_cited[' + counter + '][_weight]'
1789                    }).append(
1790                      $.map(weightOptions, function(option) {
1791                        return $('<option>', {
1792                          value: option.value,
1793                          text: option.text,
1794                          selected: (option.value == counter)
1795                        });
1796                      })
1797                    )
1798                  )
1799                )
1800              );
1801              tbody.append(newRow);
1802              Drupal.attachBehaviors(); // Réapplique les comportements
1803              counter++;
1804            },
1805            error: function() {
1806              console.log('Erreur lors de la récupération des informations du livre avec l\'ID ' + bookId);
1807            }
1808          });
1809        });
1810      };
1811    }
1812  };
1813
1814  ///// autocomplete du champ field_book_cited
1815  Drupal.behaviors.customAutocomplete = {
1816    attach: function (context, settings) {
1817      if (
1818        $("form").hasClass("eventmedia-entity-form") && ($("form").hasClass("eventmedia-entity-edit-form") || $("form").hasClass("eventmedia-entity-add-form"))) {
1819        // Attacher l'autocomplétion sur les nouveaux champs ajoutés dynamiquement
1820        $('.form-autocomplete', context).each(function () {
1821          var $input = $(this);
1822          var autocompletePath = $input.attr('data-autocomplete-path');
1823
1824          // Si un chemin d'autocomplétion existe
1825          if (autocompletePath) {
1826            $input.autocomplete({
1827              source: function (request, response) {
1828                $.ajax({
1829                  url: autocompletePath.replace('/eventmedia_entity/entity_reference_autocomplete', '/entity_reference_autocomplete'),
1830                  dataType: 'json',
1831                  data: {
1832                    q: request.term
1833                  },
1834                  success: function (data) {
1835                    response(data);
1836                  },
1837                  error: function (jqXHR, textStatus, errorThrown) {
1838                  }
1839                });
1840              },
1841              minLength: 1,
1842              select: function (event, ui) {
1843                $input.val(ui.item.value);
1844              }
1845            });
1846          }
1847          else {
1848          }
1849        });
1850      }
1851
1852      $('[data-modal-close]', context).once('customModalClose').on('click', function (e) {
1853        e.preventDefault();
1854        const $modal = $('#modal-confirm-create-user');
1855        if ($modal.length > 0 && $(this).closest('#modal-confirm-create-user').length) {
1856          const searchParams = new URLSearchParams(window.location.search);
1857          const url = window.location.pathname;
1858          window.history.pushState({}, '', url + '?sequenceNumber=' + searchParams.get('sequenceNumber'));
1859          window.location.reload();
1860        } else {
1861          $(this).closest('.back-modal').removeClass('open');
1862        }
1863      });
1864    }
1865  };
1866
1867$('.view-id-visite_utilisateurs').each(function(){
1868  var date =  new Date();
1869  var currentMonth = date.getMonth();
1870  var currentYear = date.getFullYear();
1871  var monthNames = [
1872    "Janvier", "Février", "Mars",
1873    "Avril", "Mai", "Juin", "Juillet",
1874    "Août", "Septembre", "Octobre",
1875    "Novembre", "Décembre"
1876  ];
1877for(i=0; i<12;i++){
1878  if((currentMonth - i)<0){
1879    indexMonth = 12 +(currentMonth - i)
1880    $('#view-m-'+(i+1)+'-table-column').text(monthNames[indexMonth ] + " "  + (currentYear -1))
1881  }else{
1882    $('#view-m-'+(i+1)+'-table-column').text(monthNames[currentMonth - i]+ " "  + (currentYear))
1883  }
1884}
1885})
1886
1887  if ($("form").hasClass("award-entity-edit-form award-entity-form")) {
1888    Drupal.behaviors.preventBeforeUnloadPopup = {
1889      attach: function (context, settings) {
1890        $(document).on('click', 'input[type="submit"]', function () {
1891          window.onbeforeunload = null;
1892        });
1893      }
1894    };
1895    Drupal.behaviors.disableBeforeUnloadPopup = {
1896      attach: function (context, settings) {
1897        $('input[type="submit"]').on('click', function () {
1898          window.onbeforeunload = null;
1899        });
1900      }
1901    };
1902  }
1903
1904function getEventMediaFilter(id, vid, select, id_selected) {
1905  if (id) {
1906    $.ajax({
1907      url: '/getSupportFilter',
1908      type: 'POST',
1909      dataType: 'json',
1910      data: {
1911        id: id,
1912        vid: vid,
1913        id_selected: id_selected,
1914      },
1915      success: function (response) {
1916        $('#' + select).empty();
1917        $('#' + select).append(response);
1918      }
1919    });
1920  }
1921}
1922  $(document).ready(function() {
1923    var urlParams = new URLSearchParams(window.location.search);
1924    var paramValue = urlParams.get('num-affaire') || urlParams.get('num-affaire');
1925    if (paramValue) {
1926      $('#num-affaire').val(paramValue);
1927    }
1928    $('.search_abonnement').on('click', function() {
1929      var subscriptionNumber = $('#num-affaire').val();
1930      if (subscriptionNumber !== '') {
1931        searchAbonnement(subscriptionNumber[0], '');
1932        const currentUrl = new URL(window.location.href);
1933        currentUrl.searchParams.set('num-affaire', subscriptionNumber);
1934        window.history.replaceState({}, '', currentUrl);
1935      } else {
1936        location.reload();
1937      }
1938    });
1939  });
1940
1941  function searchAbonnement(subscriptionNumber, sequenceNumber){
1942    if(subscriptionNumber != ''){
1943      $.ajax({
1944        url: '/search-affaires/' + subscriptionNumber+'?sequenceNumber='+sequenceNumber,
1945        type: 'POST',
1946        dataType: 'json',
1947
1948        success: function (response) {
1949          $('.list-abn article').remove();
1950          $('.list-abn .list-abn-div').append('<article class="article-event article-event--bord article-event--filtre-s3">' +
1951            '<div class="article-event__col article-event__col--type"><a ' +
1952            'href="/details-affaires/'+response.subscriptionNumber+'"'+
1953            ' class="article-event__link"> '+ response.subscriptionNumber +' </a>' +
1954            '</div>' +
1955            '<div class="article-event__col article-event__col--date">' +
1956            '<p  class="article-event__text"> du '+response.startDate+' au '+response.endDate+' </p>' +
1957            '</div> </article>');
1958        },
1959        error: function (res){
1960          console.log(res.responseJSON);
1961          $('.list-abn .row').remove();
1962          $('.list-abn h1').remove();
1963          $('.list-abn').append('<h1>il n\'existe pas d\'affaire avec ce numéro</h1>');
1964        }
1965      });
1966    }
1967  }
1968
1969  function handleSearch() {
1970    var email = $('#edit-Email').val().trim();
1971    var currentUrl = window.location.href.split('?')[0];
1972    var urlParams = new URLSearchParams(window.location.search);
1973    if (email) {
1974      urlParams.set('Email', email);
1975      urlParams.delete('page');
1976      urlParams.delete('limit');
1977    } else {
1978      urlParams.delete('Email');
1979    }
1980    var newUrl = currentUrl + (urlParams.toString() ? '?' + urlParams.toString() : '');
1981    window.location.href = newUrl;
1982  }
1983
1984  function populateFieldsFromUrl() {
1985    var urlParams = new URLSearchParams(window.location.search);
1986    if (urlParams.has('Email')) {
1987      $('#edit-Email').val(decodeURIComponent(urlParams.get('Email')));
1988    }
1989  }
1990
1991  if ($('#edit-submit-detail-affaire').length) {
1992    $('#edit-submit-detail-affaire').on('click', function(event) {
1993      event.preventDefault();
1994      handleSearch();
1995    });
1996  }
1997
1998  window.addEventListener('load', populateFieldsFromUrl);
1999
2000
2001  jQuery(document).ready(function ($) {
2002    const $addUserButton = $('.add-user-abonnement');
2003    const $modal = $('#modal-confirm-attach-user');
2004
2005    if ($addUserButton.length && $modal.length) {
2006      $addUserButton.on('click', function (event) {
2007        event.preventDefault();
2008        $modal.addClass('open');
2009      });
2010
2011      $modal.find('.modal__close').on('click', function (event) {
2012        event.preventDefault();
2013        $modal.removeClass('open');
2014      });
2015    }
2016  });
2017
2018  (function (Drupal) {
2019    Drupal.behaviors.userAttachmentEnterKey = {
2020      attach: function (context, settings) {
2021        const emailInput = $('#edit-email--2', context);
2022        const submitButton = $('#edit-submit--2', context);
2023        if (emailInput.length && submitButton.length) {
2024          console.log('Elements found');
2025          emailInput.once('userAttachmentEnterKey').on('keydown', function (event) {
2026            if (event.key === 'Enter') {
2027              event.preventDefault();
2028              submitButton.trigger('mousedown').trigger('mouseup').trigger('click');
2029            }
2030          });
2031        }
2032      },
2033    };
2034  })(Drupal);
2035
2036  (function ($, Drupal) {
2037    Drupal.behaviors.clearModalFields = {
2038      attach: function (context, settings) {
2039        const observer = new MutationObserver(function (mutations) {
2040          mutations.forEach(function (mutation) {
2041            if (mutation.attributeName === "class") {
2042              const modal = $(mutation.target);
2043              if (!modal.hasClass('open')) {
2044                $('#create-user-modal-form')[0].reset();
2045              }
2046            }
2047          });
2048        });
2049        const target = document.getElementById('create-user');
2050        if (target) {
2051          observer.observe(target, { attributes: true });
2052        }
2053      }
2054    };
2055  })(jQuery, Drupal);
2056
2057// validate MV
2058  $('.view-header .validate-classement-mv').css({"color" : "#1e5c90", "border": "2px solid #1e5c90"})
2059  Drupal.behaviors.moveHeaderToFilters = {
2060    attach: function (context, settings) {
2061      $('.view-header .validate-classement-mv', context).once('move-header').each(function () {
2062        $('.view-filters .form-actions').append($(this));
2063      });
2064    }
2065  };
2066  if(location.pathname == "/admin/classement-mv"){
2067    $('.view-header').append('<div hidden="hidden" role="contentinfo" aria-label="Message d\'erreur" class="messages">' +
2068      '<div role="alert">\n' +
2069      '                  <h2 class="visually-hidden">Message d\'erreur</h2>\n' +
2070      '                    <ul class="messages__list">\n' +
2071      '                      <li class="messages__item"> </li>\n' +
2072      '                  </ul>\n' +
2073      '                </div></div>')
2074  }
2075  $('.validate-classement-mv').on('click', function () {
2076    const params = new URLSearchParams(window.location.search);
2077    let categorie = params.get('field_position_category_target_id');
2078    let startDate = params.get('field_position_date_value');
2079    let endDate = params.get('field_position_date_end_value');
2080    var div_loader = '<div data-drupal-messages="" class="loader_book"><div class="ajax-loader"></div></div>';
2081
2082    if(categorie == "All" || categorie == null) {
2083      $('.view-header .messages').addClass('messages--error');
2084      $('.view-header .messages--error div ul li').text("Catégorie est obligatoire");
2085      $('.view-header .messages--error').show()
2086    }else if(startDate === '') {
2087      $('.view-header .messages').addClass('messages--error');
2088      $('.view-header .messages--error div ul li').text("Date début est obligatoire");
2089      $('.view-header .messages--error').show()
2090    }else if(endDate === '') {
2091      $('.view-header .messages').addClass('messages--error');
2092      $('.view-header .messages--error div ul li').text("Date fin est obligatoire");
2093      $('.view-header .messages--error').show()
2094    }else{
2095      $('.validate-classement-mv').replaceWith(div_loader);
2096      $.ajax({
2097        url: '/validateClassement/'+categorie+'/'+startDate+'/'+endDate,
2098        type: 'POST',
2099        dataType: 'json',
2100        beforeSend: function () {
2101          $('.loader_book').find('.ajax-loader').fadeIn('slow');
2102          $("#edit-get-ean").hide();
2103        },
2104        complete: function () {
2105          $('.loader_book').find('.ajax-loader').fadeOut('slow');
2106          $("#edit-get-ean").show();
2107
2108          $('.loader_book').remove();
2109        },
2110        success: function (response) {
2111          $('.view-header .messages').addClass('messages--status');
2112          $('.view-header .messages--status div ul li').text("Validation est enregistrée");
2113          $('.view-header .messages--status').show()
2114          location.reload()
2115        }
2116      })
2117    }
2118  })
2119})(jQuery);
2120
2121(function() {
2122  'use strict';
2123  
2124  function initFrenchQuotesConversion() {
2125    
2126    // Espace insécable
2127    var nbsp = '\u00A0';
2128    var frenchQuoteOpen = '«' + nbsp;
2129    var frenchQuoteClose = nbsp + '»';
2130    
2131    // Fonction pour attacher les événements à un élément
2132    function attachQuoteReplacement(element) {
2133      if (!element || element.hasAttribute('data-french-quotes-attached')) {
2134        return;
2135      }
2136      
2137      // Vérifier que c'est un input ou textarea
2138      if (element.tagName !== 'INPUT' && element.tagName !== 'TEXTAREA') {
2139        return;
2140      }
2141      
2142      element.setAttribute('data-french-quotes-attached', 'true');
2143      
2144      // Écouter les événements keydown pour intercepter avant insertion
2145      element.addEventListener('keydown', function(e) {
2146        if (e.key === '"') {
2147          e.preventDefault();
2148          e.stopPropagation();
2149          
2150          // Insérer le guillemet français à la place
2151          var cursorPos = this.selectionStart;
2152          var value = this.value;
2153          var charBefore = cursorPos > 0 ? value.charAt(cursorPos - 1) : ' ';
2154          
2155          // Déterminer si c'est un guillemet ouvrant ou fermant
2156          var isOpening = /[\s\u00A0\u00BB\n\r\t]/.test(charBefore) || cursorPos === 0;
2157          var replacement = isOpening ? frenchQuoteOpen : frenchQuoteClose;
2158          
2159          // Insérer le remplacement
2160          var before = value.substring(0, cursorPos);
2161          var after = value.substring(cursorPos);
2162          this.value = before + replacement + after;
2163          
2164          // Repositionner le curseur après le remplacement
2165          var newCursorPos = cursorPos + replacement.length;
2166          this.setSelectionRange(newCursorPos, newCursorPos);
2167          
2168          var inputEvent = new Event('input', { bubbles: true });
2169          this.dispatchEvent(inputEvent);
2170          
2171          return false;
2172        }
2173      }, true);
2174      
2175      element.addEventListener('input', function(e) {
2176        var value = this.value;
2177        var cursorPos = this.selectionStart;
2178        
2179        // Vérifier si un guillemet anglais vient d'être inséré
2180        if (cursorPos > 0 && value.charAt(cursorPos - 1) === '"') {
2181          var charBefore = cursorPos > 1 ? value.charAt(cursorPos - 2) : ' ';
2182          var isOpening = /[\s\u00A0\u00BB\n\r\t]/.test(charBefore) || cursorPos === 1;
2183          var replacement = isOpening ? frenchQuoteOpen : frenchQuoteClose;
2184          
2185          var before = value.substring(0, cursorPos - 1);
2186          var after = value.substring(cursorPos);
2187          this.value = before + replacement + after;
2188          
2189          // Repositionner le curseur
2190          var newCursorPos = cursorPos - 1 + replacement.length;
2191          this.setSelectionRange(newCursorPos, newCursorPos);
2192        }
2193      }, true);
2194    }
2195    
2196    // Chercher tous les inputs et textareas
2197    var allInputs = document.querySelectorAll('input[type="text"], textarea');
2198    
2199    allInputs.forEach(function(input) {
2200      var id = input.id || '';
2201      var name = input.name || '';
2202      var dataSelector = input.getAttribute('data-drupal-selector') || '';
2203      var label = '';
2204      
2205      if (input.id) {
2206        var labelElement = document.querySelector('label[for="' + input.id + '"]');
2207        if (labelElement) {
2208          label = labelElement.textContent.trim().toLowerCase();
2209        }
2210      }
2211      
2212      // Détection améliorée du champ titre
2213      // Le champ titre peut avoir plusieurs formats selon Drupal :
2214      // - edit-name-0-value (format standard)
2215      // - edit-name (format simplifié)
2216      // - data-drupal-selector="edit-name-0-value"
2217      // - name="name[0][value]" ou name="name"
2218      var isTitle = false;
2219
2220      // Vérifier l'ID pour le champ "name" (entités custom) ou "title" (nodes)
2221      if (id.indexOf('edit-name') !== -1 || id.indexOf('-name-') !== -1 || id.indexOf('edit-title') !== -1 || id.indexOf('-title-') !== -1) {
2222        isTitle = true;
2223      }
2224      
2225      // Vérifier le name
2226      if (!isTitle && (name.indexOf('[name]') !== -1 || name === 'name' || name.indexOf('name[0]') !== -1 || name.indexOf('title[0]') !== -1 || name === 'title')) {
2227        isTitle = true;
2228      }
2229      
2230      // Vérifier le data-drupal-selector
2231      if (!isTitle && (dataSelector.indexOf('name') !== -1 || dataSelector.indexOf('title') !== -1)) {
2232        isTitle = true;
2233      }
2234      
2235      // Vérifier le label
2236      if (!isTitle && label.indexOf('titre') !== -1) {
2237        isTitle = true;
2238      }
2239      
2240      // Vérifier le parent avec data-drupal-selector
2241      if (!isTitle && input.closest) {
2242        var closestName = input.closest('[data-drupal-selector*="name"]');
2243        var closestTitle = input.closest('[data-drupal-selector*="title"]');
2244        var closestEl = closestName || closestTitle;
2245        if (closestEl) {
2246          var closestSelector = closestEl.getAttribute('data-drupal-selector') || '';
2247            isTitle = true;
2248        }
2249      }
2250      
2251      // Champ chapô : contient "teaser" dans l'ID, le name ou le data-drupal-selector
2252      var isTeaser = id.indexOf('teaser') !== -1 || 
2253                    name.indexOf('teaser') !== -1 || 
2254                    dataSelector.indexOf('teaser') !== -1 ||
2255                    (input.closest && input.closest('[data-drupal-selector*="teaser"]'));
2256      
2257      if (isTitle || isTeaser) {
2258        console.log('[FrenchQuotes] Champ détecté:', {
2259          id: id,
2260          name: name,
2261          dataSelector: dataSelector,
2262          label: label,
2263          isTitle: isTitle,
2264          isTeaser: isTeaser
2265        });
2266        attachQuoteReplacement(input);
2267      }
2268    });
2269    
2270    // Utiliser MutationObserver pour les champs ajoutés dynamiquement
2271    if (typeof MutationObserver !== 'undefined') {
2272      var observer = new MutationObserver(function(mutations) {
2273        var allInputs = document.querySelectorAll('input[type="text"], textarea');
2274        allInputs.forEach(function(input) {
2275          if (input.hasAttribute('data-french-quotes-attached')) {
2276            return; // Déjà traité
2277          }
2278          
2279          var id = input.id || '';
2280          var name = input.name || '';
2281          var dataSelector = input.getAttribute('data-drupal-selector') || '';
2282          var label = '';
2283          
2284          if (input.id) {
2285            var labelElement = document.querySelector('label[for="' + input.id + '"]');
2286            if (labelElement) {
2287              label = labelElement.textContent.trim().toLowerCase();
2288            }
2289          }
2290          
2291          // Détection améliorée du champ titre
2292          var isTitle = false;
2293
2294          if (id.indexOf('edit-name') !== -1 || id.indexOf('-name-') !== -1 ) {
2295              isTitle = true;
2296          }
2297
2298          if (!isTitle && (name.indexOf('[name]') !== -1 || name === 'name' || name.indexOf('name[0]') !== -1 || name.indexOf('title[0]') !== -1 || name === 'title')) {
2299              isTitle = true;
2300          }
2301
2302          if (!isTitle && (dataSelector.indexOf('name') !== -1 || dataSelector.indexOf('title') !== -1)) {
2303            isTitle = true;
2304          }
2305          
2306          if (!isTitle && label.indexOf('titre') !== -1) {
2307            isTitle = true;
2308          }
2309
2310          if (!isTitle && input.closest) {
2311            var closestName = input.closest('[data-drupal-selector*="name"]');
2312            var closestTitle = input.closest('[data-drupal-selector*="title"]');
2313            var closestEl = closestName || closestTitle;
2314            if (closestEl) {
2315              var closestSelector = closestEl.getAttribute('data-drupal-selector') || '';
2316                isTitle = true;
2317            }
2318          }
2319          
2320          var isTeaser = id.indexOf('teaser') !== -1 || 
2321                        name.indexOf('teaser') !== -1 || 
2322                        dataSelector.indexOf('teaser') !== -1 ||
2323                        (input.closest && input.closest('[data-drupal-selector*="teaser"]'));
2324          
2325          if ((isTitle || isTeaser) && !input.hasAttribute('data-french-quotes-attached')) {
2326            attachQuoteReplacement(input);
2327          }
2328        });
2329      });
2330
2331      observer.observe(document.body, {
2332        childList: true,
2333        subtree: true
2334      });
2335    }
2336  }
2337  
2338  window.initFrenchQuotesConversion = initFrenchQuotesConversion;
2339  
2340  if (document.readyState === 'loading') {
2341    document.addEventListener('DOMContentLoaded', function() {
2342      setTimeout(initFrenchQuotesConversion, 500);
2343    });
2344  } else {
2345    setTimeout(initFrenchQuotesConversion, 500);
2346  }
2347  
2348  if (typeof jQuery !== 'undefined') {
2349    jQuery(document).ajaxComplete(function() {
2350      setTimeout(initFrenchQuotesConversion, 200);
2351    });
2352  }
2353})();
2354
2355(function (Drupal) {
2356  'use strict';
2357  
2358  Drupal.behaviors.frenchQuotesConversion = {
2359    attach: function (context, settings) {
2360      if (typeof window.initFrenchQuotesConversion === 'function') {
2361        window.initFrenchQuotesConversion();
2362      }
2363    }
2364  };
2365})(Drupal);

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.