PageSourceSearch

https://ecoprod.com/wp-content/themes/generatepress-child/js/custom-ajax.js

js ecoprod.com collected 2026-10-02 07:24:42 UTC 7,910 bytes, 217 lines download raw bytes

1jQuery(document).ready(function($) {
2    // Vérifier si l'on est sur les pages concernées
3    var path = window.location.pathname;
4    if (path !== "/ressources-ecoprod/" && path !== "/en/ecoprod-resources/") {
5        return; // Sortie immédiate si la page n'est pas celle souhaitée
6    }
7
8    // 🔹 Détection automatique de la langue via l'URL
9    var lang = window.location.pathname.includes('/en/') ? 'en' : 'fr';
10
11    // Fonction pour récupérer les paramètres d'URL
12    function getUrlParameter(name) {
13        name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
14        var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
15        var results = regex.exec(location.search);
16        return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
17    }
18
19    // Fonction pour soumettre la requête AJAX
20    function submitFormAjax() {
21        var form = $('#filter-form');
22        var ajaxurl = form.attr('action');
23        var data = form.serialize();
24
25        // Ajout du paramètre langue
26        data += '&lang=' + lang;
27
28        $.ajax({
29            url: ajaxurl,
30            type: 'POST',
31            data: data,
32            success: function(response) {
33                // Insère le HTML des ressources
34                $('#resources-list').html(response);
35
36                // Déplace la pagination hors de #resources-list
37                var $pagination = $('#resources-list').find('.resources-pagination');
38                if ($pagination.length) {
39                    $('.resources-pagination-container').html($pagination);
40                }
41
42                initPaginationLinks(); // Réinitialise les liens de pagination
43            }
44        });
45    }
46
47    // Gestion des dropdowns
48    $('.dropdown-check-list .anchor').on('click', function(e) {
49        var element = $(this).parent();
50        if (element.hasClass('visible')) {
51            element.removeClass('visible');
52        } else {
53            $('.dropdown-check-list').removeClass('visible');
54            element.addClass('visible');
55        }
56    });
57
58    $(document).on('click', function(e) {
59        if (!$(e.target).closest('.dropdown-check-list').length) {
60            $('.dropdown-check-list').removeClass('visible');
61        }
62    });
63
64    $('.dropdown-check-list').on('click', function(e) {
65        e.stopPropagation();
66    });
67
68    // Pré-cocher les filtres à partir des paramètres d'URL
69    var format = getUrlParameter('format');
70    var category = getUrlParameter('category');
71
72    if (format) {
73        var formats = format.split(',');
74        formats.forEach(function(value) {
75            $('input[name="format[]"][value="' + value + '"]').prop('checked', true);
76        });
77    }
78    if (category) {
79        var categories = category.split(',');
80        categories.forEach(function(value) {
81            $('input[name="category[]"][value="' + value + '"]').prop('checked', true);
82        });
83    }
84
85    // Mise à jour des filtres sélectionnés et envoi AJAX
86    updateSelectedFilters();
87
88    $('input[name="format[]"], input[name="category[]"]').on('change', function() {
89        $('#current-page').val(1);
90        updateSelectedFilters();
91        submitFormAjax();
92    });
93
94    $('#filter-form').submit(function(e) {
95        e.preventDefault();
96        $('#current-page').val(1);
97        submitFormAjax();
98    });
99
100    $('#filter-form').trigger('submit');
101
102    function updateSelectedFilters() {
103        const selectedFiltersContainer = document.getElementById('selected-filters');
104        const clearAllButton = document.getElementById('clear-all-filters');
105    
106        
107    
108        selectedFiltersContainer.innerHTML = '';
109    
110        let selectedFilters = [];
111        let formatCount = 0;
112        let categoryCount = 0;
113    
114        document.querySelectorAll('input[name="format[]"]:checked').forEach(checkbox => {
115            let filterText = checkbox.parentNode.textContent.trim().replace(/\s*\(\d+\)\s*/g, '');
116            selectedFilters.push({ name: filterText, value: checkbox.value, type: 'format' });
117            formatCount++;
118        });
119    
120        document.querySelectorAll('input[name="category[]"]:checked').forEach(checkbox => {
121            let filterText = checkbox.parentNode.textContent.trim().replace(/\s*\(\d+\)\s
121*/g, '');
122            selectedFilters.push({ name: filterText, value: checkbox.value, type: 'category' });
123            categoryCount++;
124        });
125    
126        document.getElementById('format-count').textContent = formatCount;
127        document.getElementById('category-count').textContent = categoryCount;
128    
129        clearAllButton.style.display = selectedFilters.length > 0 ? 'block' : 'none';
130    
131        selectedFilters.forEach(filter => {
132            const filterElement = document.createElement('div');
133            filterElement.classList.add('selected-filter');
134            filterElement.innerHTML = `${filter.name} <span class="remove-filter" data-type="${filter.type}" data-value="${filter.value}">&times;</span>`;
135            selectedFiltersContainer.appendChild(filterElement);
136        });
137    }
138    
139
140    // Fonction pour envoyer la requête AJAX
141    function submitFormAjax() {
142        var form = $('#filter-form');
143        var ajaxurl = form.attr('action');
144        var data = form.serialize();
145
146        // Ajout de la langue au data
147        data += '&lang=' + lang;
148
149        $.ajax({
150            url: ajaxurl,
151            type: 'POST',
152            data: data,
153            success: function(response) {
154                $('#resources-list').html(response);
155            }
156        });
157        updateSelectedFilters();
158    }
159
160    // Gestion de la suppression des filtres individuels
161    document.getElementById('selected-filters').addEventListener('click', function (event) {
162        if (event.target.classList.contains('selected-filter') || event.target.classList.contains('remove-filter')) {
163            const filterElement = event.target.closest('.selected-filter');
164            const type = filterElement.querySelector('.remove-filter').getAttribute('data-type');
165            const value = filterElement.querySelector('.remove-filter').getAttribute('data-value');
166            removeFilter(type, value);
167        }
168        updateSelectedFilters();
169        submitFormAjax();
170    });
171
172    // Fonction pour supprimer un filtre spécifique
173    function removeFilter(type, value) {
174        document.querySelectorAll('input[name="' + type + '[]"]').forEach(function (checkbox) {
175            if (checkbox.value === value) {
176                checkbox.checked = false;
177            }
178        });
179        updateSelectedFilters();
180        submitFormAjax();
181    }
182
183    // Mettre à jour les filtres sélectionnés quand les cases à cocher changent
184    document.querySelectorAll('input[name="format[]"], input[name="category[]"]').forEach(function (checkbox) {
185        checkbox.addEventListener('change', function () {
186            updateSelectedFilters();
187        });
188    });
189
190    
191
192    // Gestion du bouton "Tout effacer"
193    document.getElementById('clear-all-filters').addEventListener('click', function () {
194        document.querySelectorAll('input[name="format[]"], input[name="category[]"]').forEach(function (checkbox) {
195            checkbox.checked = false;
196        });
197        updateSelectedFilters();
198        submitFormAjax();
199    });
200
201    updateSelectedFilters();
202
203    function initPaginationLinks() {
204        $(document).off('click', '.resources-pagination .page-numbers');
205        $(document).on('click', '.resources-pagination .page-numbers', function(e) {
206            e.preventDefault();
207            var href = $(this).attr('href');
208            var pageMatch = href.match(/paged=([0-9]+)/);
209            var pageNumber = 1;
210            if (pageMatch) {
211                pageNumber = parseInt(pageMatch[1]);
212            }
213            $('#current-page').val(pageNumber);
214            submitFormAjax();
215        });
216    }
217});

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.