From f4cadad9152ff09ab027acb2bcb1fa2615a7f06f Mon Sep 17 00:00:00 2001 From: "florian.llimos" Date: Wed, 19 Feb 2025 12:33:23 +0100 Subject: [PATCH] fix: modify function name and update the code with the prod code --- .../css/{style.css => cartographie.css} | 0 cartographie/function.php | 331 ++++++++++++++++-- cartographie/js/main.js | 158 +++++---- 3 files changed, 402 insertions(+), 87 deletions(-) rename cartographie/css/{style.css => cartographie.css} (100%) diff --git a/cartographie/css/style.css b/cartographie/css/cartographie.css similarity index 100% rename from cartographie/css/style.css rename to cartographie/css/cartographie.css diff --git a/cartographie/function.php b/cartographie/function.php index e35b31d..a16dbab 100644 --- a/cartographie/function.php +++ b/cartographie/function.php @@ -1,26 +1,31 @@
-
Status
@@ -82,29 +87,29 @@ function display_hello_world_page() {

Plateforme logistique

-
- +
post_content, 'cartographie')) { wp_enqueue_style( 'leaflet-css', - 'https://unpkg.com/leaflet@1.9.3/dist/leaflet.css', + plugin_dir_url(__FILE__) . 'css/leaflet.css', array(), '1.9.3' ); wp_enqueue_script( 'leaflet-js', - 'https://unpkg.com/leaflet@1.9.3/dist/leaflet.js', + plugin_dir_url(__FILE__) . 'js/leaflet.js', array(), '1.9.3', true @@ -112,28 +117,35 @@ function hello_world_enqueue_assets() { wp_enqueue_style( 'leaflet-markercluster-css', - 'https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css' + plugin_dir_url(__FILE__) . 'css/MarkerCluster.Default.css', + array(), + '1.5.3' ); wp_enqueue_script( 'leaflet-markercluster-js', - 'https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js', + plugin_dir_url(__FILE__) . 'js/leaflet.markercluster.js', array('leaflet-js', 'jquery'), - null, + '1.5.3', true ); wp_enqueue_script( - 'hello-world-script', + 'cartographie-script', plugin_dir_url(__FILE__) . 'js/main.js', array('leaflet-js', 'leaflet-markercluster-js'), '1.0', true ); + wp_localize_script( 'cartographie-script', 'wpApiSettings', array( + 'root' => esc_url_raw( rest_url() ), + 'nonce' => wp_create_nonce( 'wp_rest' ) + ) ); + wp_enqueue_style( - 'hello-world-style', - plugin_dir_url(__FILE__) . 'css/style.css', + 'cartographie-style', + plugin_dir_url(__FILE__) . 'css/cartographie.css', array(), '1.0' ); @@ -141,16 +153,17 @@ function hello_world_enqueue_assets() { } add_action('rest_api_init', function() { + register_rest_route('custom/v1', '/markers', array( - 'methods' => 'GET', - 'callback' => 'get_cartographie_markers', + 'methods' => "GET", + 'permission_callback' => '__return_true', + 'callback' => 'get_cartographie_markers' )); }); function get_cartographie_markers() { global $wpdb; $table_name = $wpdb->prefix . 'posts'; - $results = $wpdb->get_results(" SELECT wp_posts.ID, wp_posts.post_title, wp_term_taxonomy.taxonomy, GROUP_CONCAT(wp_terms.term_id ORDER BY wp_terms.term_id) AS term_ids, @@ -176,6 +189,7 @@ $image_results = $wpdb->get_results(" "); $image_data = []; + foreach ($image_results as $image_row) { $image_data[$image_row->ID] = [ 'image_id' => $image_row->image_id, @@ -190,14 +204,12 @@ foreach ($results as $row) { ]; } - // Ajouter les termes (taxonomies) if ($row->taxonomy == "categorielabel") { $structured_data[$row->ID][$row->taxonomy] = explode(",", $row->term_names); } else { $structured_data[$row->ID][$row->taxonomy] = $row->term_names; } - - // Ajouter l'image mise en avant si elle existe + if (isset($image_data[$row->ID])) { $structured_data[$row->ID]['image'] = $image_data[$row->ID]; } @@ -205,5 +217,282 @@ foreach ($results as $row) { return $structured_data; +} + +function wpm_custom_post_type() { + + $labels = array( + 'name' => _x( 'Cartographie', 'Post Type General Name'), + 'singular_name' => _x( 'Cartographie', 'Post Type Singular Name'), + 'menu_name' => __( 'Cartographie'), + 'all_items' => __( 'Tous les marqueurs'), + 'view_item' => __( 'Voir les marqueurs'), + 'add_new_item' => __( 'Ajouter un nouveau marqueur'), + 'add_new' => __( 'Ajouter'), + 'edit_item' => __( 'Editer le marqueur'), + 'update_item' => __( 'Modifier le marqueur'), + 'search_items' => __( 'Rechercher un marqueur'), + 'not_found' => __( 'Non trouvée'), + 'not_found_in_trash' => __( 'Non trouvée dans la corbeille'), + ); + + $args = array( + 'label' => __( 'Cartographie'), + 'description' => __( 'Tous sur les markers de la cartographie'), + 'labels' => $labels, + 'menu_icon' => 'dashicons-video-alt2', + 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ), + 'show_in_rest' => true, + 'rest_base' => 'markers', + 'rest_controller_class' => 'WP_REST_Posts_Controller', + 'hierarchical' => false, + 'public' => true, + 'has_archive' => true, + 'rewrite' => array( 'slug' => 'cartographie'), + ); + register_post_type( 'markercartographie', $args ); + +} + +add_action( 'init', 'wpm_custom_post_type', 0 ); +add_action( 'init', 'wpm_add_taxonomies', 0 ); + +function wpm_add_taxonomies() { + + $labels_annee = array( + 'name' => _x( 'Année', 'taxonomy general name'), + 'singular_name' => _x( 'Année', 'taxonomy singular name'), + 'search_items' => __( 'Chercher une année'), + 'all_items' => __( 'Toutes les années'), + 'edit_item' => __( "Editer l'année"), + 'update_item' => __( "Mettre à jour l'année"), + 'add_new_item' => __( 'Ajouter une nouvelle année'), + 'new_item_name' => __( 'Valeur de la nouvelle année'), + 'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'), + 'menu_name' => __( 'Année'), + ); + + $labels_latitude = array( + 'name' => _x( 'Latitude', 'taxonomy general name'), + 'singular_name' => _x( 'Latitude', 'taxonomy singular name'), + 'search_items' => __( 'Chercher une latitude'), + 'all_items' => __( 'Toutes les latitudes'), + 'edit_item' => __( 'Editer la latitude'), + 'update_item' => __( 'Mettre à jour la latitude'), + 'add_new_item' => __( 'Ajouter une nouvelle latitude'), + 'new_item_name' => __( 'Valeur de la nouvelle latitude'), + 'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'), + 'menu_name' => __( 'Latitude'), + ); + + $labels_longitude = array( + 'name' => _x( 'Longitude', 'taxonomy general name'), + 'singular_name' => _x( 'Longitude', 'taxonomy singular name'), + 'search_items' => __( 'Chercher une longitude'), + 'all_items' => __( 'Toutes les longitude'), + 'edit_item' => __( 'Editer la longitude'), + 'update_item' => __( 'Mettre à jour la longitude'), + 'add_new_item' => __( 'Ajouter une nouvelle longitude'), + 'new_item_name' => __( 'Valeur de la nouvelle longitude'), + 'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'), + 'menu_name' => __( 'Longitude'), + ); + + $labels_codepstl = array( + 'name' => _x( 'Code postal', 'taxonomy general name'), + 'singular_name' => _x( 'Code postal', 'taxonomy singular name'), + 'search_items' => __( 'Chercher une longitude'), + 'all_items' => __( 'Tous les codes postaux'), + 'edit_item' => __( 'Editer le code postal'), + 'update_item' => __( 'Mettre à jour le code postal'), + 'add_new_item' => __( 'Ajouter un nouveau code postal'), + 'new_item_name' => __( 'Valeur du nouveau code postal'), + 'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'), + 'menu_name' => __( 'Code postal'), + ); + + $labels_ville = array( + 'name' => _x( 'Ville', 'taxonomy general name'), + 'singular_name' => _x( 'Ville', 'taxonomy singular name'), + 'search_items' => __( 'Chercher une ville'), + 'all_items' => __( 'Toutes les villes'), + 'edit_item' => __( 'Editer la ville'), + 'update_item' => __( 'Mettre à jour la ville'), + 'add_new_item' => __( 'Ajouter une nouvelle ville'), + 'new_item_name' => __( 'Valeur de la nouvelle ville'), + 'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'), + 'menu_name' => __( 'Ville'), + ); + + $labels_cat_serie = array( + 'name' => _x( "Domaine d'activité", 'taxonomy general name'), + 'singular_name' => _x( "Domaine d'activité", 'taxonomy singular name'), + 'search_items' => __( "Rechercher un domaine d'activité"), + 'all_items' => __( "Tous les domaines d'activités"), + 'edit_item' => __( "Editer un domaine d'activité"), + 'update_item' => __( "Mettre à jour un domaine d'activité"), + 'add_new_item' => __( "Ajouter un nouveau domaine d'activité"), + 'new_item_name' => __( "Nom du nouveau domaine d'activité"), + 'add_or_remove_items' => __( "Ajouter ou supprimer un domaine d'activité"), + 'choose_from_most_used' => __( "Choisir parmi les domaines d'activité les plus utilisées"), + 'not_found' => __( "Pas de domaine d'activité trouvées"), + 'menu_name' => __( "Domaine d'activité"), + ); + + $labels_label_serie = array( + 'name' => _x( 'Label', 'taxonomy general name'), + 'singular_name' => _x( 'Label', 'taxonomy singular name'), + 'search_items' => __( 'Rechercher un label'), + 'popular_items' => __( 'Labels populaires'), + 'all_items' => __( 'Tous les labels'), + 'edit_item' => __( 'Editer un label'), + 'update_item' => __( 'Mettre à jour un label'), + 'add_new_item' => __( 'Ajouter un nouveau label'), + 'new_item_name' => __( 'Nom du nouveau label'), + 'add_or_remove_items' => __( 'Ajouter ou supprimer un label'), + 'choose_from_most_used' => __( 'Choisir parmi les labels les plus utilisées'), + 'not_found' => __( 'Pas de label trouvées'), + 'menu_name' => __( 'Label'), + ); + + $labels_avancement_serie = array( + 'name' => _x( 'Avancement du projet', 'taxonomy general name'), + 'singular_name' => _x( 'Avancement du projet', 'taxonomy singular name'), + 'search_items' => __( 'Rechercher un avancement de projet'), + 'popular_items' => __( 'Avancement de projet populaires'), + 'all_items' => __( 'Tous les avancement de projet'), + 'edit_item' => __( 'Editer un avancement de projet'), + 'update_item' => __( 'Mettre à jour un avancement de projet'), + 'add_new_item' => __( 'Ajouter un nouvel avancement de projet'), + 'new_item_name' => __( 'Nom du nouveau avancement de projet'), + 'add_or_remove_items' => __( 'Ajouter ou supprimer un avancement de projet'), + 'choose_from_most_used' => __( 'Choisir parmi les avancement de projet les plus utilisées'), + 'not_found' => __( "Pas d'avancemenet de projet trouvées"), + 'menu_name' => __( 'Avancement du projet'), + ); + + $labels_associe = array( + 'name' => _x( 'Associé BBE', 'taxonomy general name'), + 'singular_name' => _x( 'Associé BBE', 'taxonomy singular name'), + 'search_items' => __( 'Chercher une association'), + 'all_items' => __( 'Toutes les associations'), + 'edit_item' => __( "Editer l'association"), + 'update_item' => __( 'Mettre à jour l année'), + 'add_new_item' => __( 'Ajouter une nouvelle association'), + 'new_item_name' => __( 'Valeur de la nouvelle association'), + 'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'), + 'menu_name' => __( 'Associé-e BBE'), + ); + + $args_cat_serie = array( + 'hierarchical' => true, + 'labels' => $labels_cat_serie, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'categories-series' ), + ); + + $args_label_serie = array( + 'hierarchical' => true, + 'labels' => $labels_label_serie, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'categories-label' ), + ); + + $args_avancement_serie = array( + 'hierarchical' => true, + 'labels' => $labels_avancement_serie, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'categories-avancement' ), + ); + + $args_associe = array( + 'hierarchical' => false, + 'labels' => $labels_associe, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'associe' ), + ); + + $args_ville = array( + 'hierarchical' => false, + 'labels' => $labels_ville, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'ville' ), + ); + + $args_codepstl = array( + 'hierarchical' => false, + 'labels' => $labels_codepstl, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'codepstl' ), + ); + + $args_latitude = array( + 'hierarchical' => false, + 'labels' => $labels_latitude, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'latitude' ), + ); + + $args_annee = array( + 'hierarchical' => false, + 'labels' => $labels_annee, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'annees' ), + ); + + $args_longitude = array( + 'hierarchical' => false, + 'labels' => $labels_longitude, + 'show_ui' => true, + 'show_in_rest' => true, + 'show_admin_column' => true, + 'query_var' => true, + 'public' => true, + 'rewrite' => array( 'slug' => 'longitude' ), + ); + + register_taxonomy( 'associe', 'markercartographie', $args_associe ); + register_taxonomy( 'categoriesseries', 'markercartographie', $args_cat_serie ); + register_taxonomy( 'avancementduprojet', 'markercartographie', $args_avancement_serie ); + register_taxonomy( 'categoriesseries', 'markercartographie', $args_cat_serie ); + register_taxonomy( 'categorielabel', 'markercartographie', $args_label_serie ); + register_taxonomy( 'categorielabel', 'markercartographie', $args_label_serie ); + register_taxonomy( 'ville', 'markercartographie', $args_ville ); + register_taxonomy( 'annees', 'markercartographie', $args_annee ); + register_taxonomy( 'codepstl', 'markercartographie', $args_codepstl ); + register_taxonomy( 'longitude', 'markercartographie', $args_longitude ); + register_taxonomy( 'latitude', 'markercartographie', $args_latitude ); } \ No newline at end of file diff --git a/cartographie/js/main.js b/cartographie/js/main.js index ff5df78..1fd443c 100644 --- a/cartographie/js/main.js +++ b/cartographie/js/main.js @@ -1,11 +1,12 @@ jQuery(document).ready(function($) { + var map = L.map('map', { center: [48.577742, 0.060471], zoom: 8, maxZoom: 18, minZoom: 8 }); - + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); @@ -21,15 +22,16 @@ jQuery(document).ready(function($) { }); } }); - + let allMarkers = []; - + function addMarkers(data) { markersCluster.clearLayers(); allMarkers = []; const values = Object.values(data); - + for (const item of values) { + let itemNom = item.name; var itemDomaine = item.categoriesseries ?? null; let itemCodePostal = item.codepstl ?? null; @@ -41,16 +43,15 @@ jQuery(document).ready(function($) { let itemAssocie = item.associe ?? null; let itemLabel = item.categorielabel ?? null; let itemPhoto = item.image.image_url ?? null; - + if (itemLongitude === null || itemLatitude === null) { continue; } - + const iconBaseUrl = '/wp-content/plugins/cartographie/media/'; const iconSize = [50, 50]; const iconAnchor = [16, 32]; const popupAnchor = [0, -32]; - const domaineIcons = { "Lieux de plantation": "lieux_de_plantation.svg", "Producteur de bois": "producteur_de_bois.svg", @@ -58,7 +59,7 @@ jQuery(document).ready(function($) { "Acheteur de chaleur": "chaufferie_vente_chaleur.svg", "Plateforme logistique": "plateformes_logistiques.svg" }; - + let iconUrl = domaineIcons[itemDomaine] ? `${iconBaseUrl}${domaineIcons[itemDomaine]}` : null; let defaultIcon = iconUrl ? new L.Icon({ @@ -68,9 +69,8 @@ jQuery(document).ready(function($) { popupAnchor }) : new L.Icon.Default(); - let imageUrls = []; - + if (Array.isArray(itemLabel)) { if (itemLabel.includes("Label haie") && itemLabel.includes("Label végétal local")) { imageUrls.push('/wp-content/plugins/cartographie/media/logo.png'); @@ -81,7 +81,7 @@ jQuery(document).ready(function($) { imageUrls.push('/wp-content/plugins/cartographie/media/logo.png'); } } - + let popupContent = ` `; - + let marker = L.marker([itemLatitude, itemLongitude], { icon: defaultIcon }) .bindPopup(popupContent, { autoPan: true, // Active le recadrage automatique autoPanPadding: [200, 30], // Définit le padding autour du popup keepInView: true // Assure que le popup reste visible à l'écran }); - + // Ajout du comportement dynamique lors de l'ouverture de la popup + marker.on('popupopen', function (e) { const popup = e.popup; const mapBounds = map.getBounds(); const popupPosition = popup.getLatLng(); - // Ajuste les marges dynamiques const autoPanPadding = { top: 100, // 100px depuis le haut @@ -122,7 +122,6 @@ jQuery(document).ready(function($) { left: 200, // 50px à gauche right: 200 // 50px à droite }; - // Vérifie si le popup est hors de la vue et recadre la carte if (!mapBounds.contains(popupPosition)) { map.panTo(popupPosition, { @@ -131,45 +130,64 @@ jQuery(document).ready(function($) { }); } }); - + + marker.bindPopup(popupContent, { + autoPan: false, // Désactive le recadrage automatique pour éviter un conflit + keepInView: true, // Assure que la popup reste visible + offset: L.point(0, -20) // Décale légèrement la popup au-dessus du marqueur + }); + + // Écoute l'événement `popupopen` + marker.on('popupopen', function (e) { + const map = e.target._map; // Récupère la carte + const popupLatLng = e.popup.getLatLng(); // Position du popup (marqueur) + const popupOffset = e.popup.options.offset; // Décalage défini dans les options + // Calcul du décalage supplémentaire (margin-left de 50px) + const additionalOffset = -170; // Décalage en pixels (pour le margin-left) + // Convertir le décalage en coordonnées de la carte + const projectedPoint = map.project(popupLatLng).subtract(popupOffset).subtract([additionalOffset, 0]); + const newCenter = map.unproject(projectedPoint); + // Centre la carte sur la position ajustée + map.setView(newCenter, map.getZoom(), { + animate: true // Animation fluide + }); + }); // Gestion de l'icône active lors de l'ouverture et de la fermeture de la popup marker.on('popupopen', function () { marker.setIcon(activeMarkerIcon); }); - + marker.on('popupclose', function () { marker.setIcon(defaultIcon); }); - // Ajout du marqueur au cluster allMarkers.push(marker); + markersCluster.addLayer(marker); - - - let activeIconUrl = ''; - if (itemDomaine === "Lieux de plantation") { - activeIconUrl = '/wp-content/plugins/cartographie/media/lieux_de_plantation_actif.svg'; - } else if (itemDomaine === "Producteur de bois"){ - activeIconUrl = '/wp-content/plugins/cartographie/media/producteur_de_bois_actif.svg'; - } else if (itemDomaine === "Acheteur de bois"){ - activeIconUrl = '/wp-content/plugins/cartographie/media/chaufferie_bois_clients_actif.svg'; - } else if (itemDomaine === "Acheteur de chaleur"){ - activeIconUrl = '/wp-content/plugins/cartographie/media/chaufferie_vente_chaleur_actif.svg'; - } else if (itemDomaine === "Plateforme logistique"){ - activeIconUrl = '/wp-content/plugins/cartographie/media/plateformes_logistiques_actif.svg'; - } - - let activeMarkerIcon = new L.Icon({ - iconUrl: activeIconUrl, - iconSize: [50, 50], - iconAnchor: [16, 32], - popupAnchor: [0, -32] - }); - - allMarkers.push(marker); - markersCluster.addLayer(marker); + + let activeIconUrl = ''; + if (itemDomaine === "Lieux de plantation") { + activeIconUrl = '/wp-content/plugins/cartographie/media/lieux_de_plantation_actif.svg'; + } else if (itemDomaine === "Producteur de bois"){ + activeIconUrl = '/wp-content/plugins/cartographie/media/producteur_de_bois_actif.svg'; + } else if (itemDomaine === "Acheteur de bois"){ + activeIconUrl = '/wp-content/plugins/cartographie/media/chaufferie_bois_clients_actif.svg'; + } else if (itemDomaine === "Acheteur de chaleur"){ + activeIconUrl = '/wp-content/plugins/cartographie/media/chaufferie_vente_chaleur_actif.svg'; + } else if (itemDomaine === "Plateforme logistique"){ + activeIconUrl = '/wp-content/plugins/cartographie/media/plateformes_logistiques_actif.svg'; } - + + let activeMarkerIcon = new L.Icon({ + iconUrl: activeIconUrl, + iconSize: [50, 50], + iconAnchor: [16, 32], + popupAnchor: [0, -32] + }); + allMarkers.push(marker); + markersCluster.addLayer(marker); + } + map.addLayer(markersCluster); } @@ -179,27 +197,28 @@ jQuery(document).ready(function($) { function mapFullScreen() { if (!theMap.classList.contains("map-full-screen")) { theMap.classList.add("map-full-screen"); - document.querySelector("#full-screen > img").src = "https://cdn-icons-png.flaticon.com/128/1828/1828778.png"; + document.querySelector("#full-screen > img").src = "/wp-content/plugins/cartographie/media/close.png"; document.querySelector("#full-screen > img").style.padding = "15px"; - // Redimensionner la carte Leaflet après être passé en plein écran map.invalidateSize(); // Demande à Leaflet de recalculer la taille de la carte } else if (theMap.classList.contains("map-full-screen")) { theMap.classList.remove("map-full-screen"); - document.querySelector("#full-screen > img").src = "https://cdn-icons-png.flaticon.com/128/3413/3413667.png"; + document.querySelector("#full-screen > img").src = "/wp-content/plugins/cartographie/media/full-screen.png"; document.querySelector("#full-screen > img").style.padding = "10px"; - // Redimensionner la carte Leaflet après avoir quitté le plein écran map.invalidateSize(); } } btnFullScreen.addEventListener("click", mapFullScreen); - + let api_root = window.location.origin + '?rest_route=/'; $.ajax({ - url: '/wp-json/custom/v1/markers', - method: 'GET', - dataType: 'json', + url: api_root + "custom/v1/markers", + method: "GET", + timeout: 0, + headers: { + "Authorization": "Basic ZGlnaXRhbmllOmlOdVkgZkJyVyBRelRDIDVGaTcgVTVzOCBEU2ZZ" + }, success: function(data) { initialMarkerData = data; addMarkers(data); @@ -209,21 +228,21 @@ jQuery(document).ready(function($) { } }); + function filterMarkers() { var statusFilters = { 'En cours': $('#en-cours').hasClass('filter-active'), 'Terminé': $('#projets-finis').hasClass('filter-active'), 'Prévu': $('#prevu').hasClass('filter-active'), }; - + var associeFilterActive = $('#toggle-associe').hasClass('filter-active'); - var labelFilters = { 'aucun': $('#label-aucun').hasClass('filter-active'), 'haie': $('#label-haie').hasClass('filter-active'), 'vegetal': $('#label-vegetal').hasClass('filter-active'), }; - + var domaineFilters = { 'Lieux de plantation': $('#lieux-de-plantation').hasClass('filter-active'), 'Acheteur de bois': $('#chaufferies-bois-clients').hasClass('filter-active'), @@ -231,47 +250,58 @@ jQuery(document).ready(function($) { 'Acheteur de chaleur': $('#chaufferies-vente-de-chaleur').hasClass('filter-active'), 'Plateforme logistique': $('#plateformes-logistiques').hasClass('filter-active'), }; - + var filteredMarkers = allMarkers.filter(function(marker) { let popupContent = marker.getPopup().getContent(); - let matchesStatusFilter = Object.keys(statusFilters).some(function(key) { return statusFilters[key] ? popupContent.includes(key) : false; }) || !Object.values(statusFilters).includes(true); - let matchesAssocieFilter = associeFilterActive ? popupContent.includes('Associé-e BBE') : true; - let matchesLabelFilter = labelFilters['haie'] && labelFilters['vegetal'] + ? (popupContent.includes('Label haie') || popupContent.includes('végétal local')) + : (labelFilters['haie'] ? popupContent.includes('Label haie') + : (labelFilters['vegetal'] ? popupContent.includes('végétal local') + : labelFilters['aucun'] ? popupContent.includes('Aucun') : true)); + + let matchesDomaineFilter = Object.keys(domaineFilters).some(function(key) { + return domaineFilters[key] ? popupContent.includes(key) : false; + }) || !Object.values(domaineFilters).includes(true); + + return matchesStatusFilter && matchesAssocieFilter && matchesLabelFilter && matchesDomaineFilter; + }); + + markersCluster.clearLayers(); + markersCluster.addLayers(filteredMarkers); + } + + function handleFilterClick(filterId, otherFilterIds) { $(filterId).on('click', function() { $(this).toggleClass('filter-active'); - if ($(this).hasClass('wait-button')) { $(this).toggleClass('button-active'); } - if ($(this).hasClass('filter-active') && otherFilterIds && Array.isArray(otherFilterIds)) { otherFilterIds.forEach(function(otherFilterId) { $(otherFilterId).removeClass('filter-active button-active'); }); } - filterMarkers(); }); } @@ -280,7 +310,6 @@ jQuery(document).ready(function($) { $(toggleId).on('click', function() { const parentElement = document.querySelector(toggleId); const childElement = document.querySelector(`${toggleId} > div`); - if ($(this).toggleClass('filter-active').hasClass('filter-active')) { parentElement.classList.remove("toggle-to-anim-parent-reverse"); childElement.classList.remove("toggle-to-anim-enfant-reverse"); @@ -292,7 +321,6 @@ jQuery(document).ready(function($) { parentElement.classList.add("toggle-to-anim-parent-reverse"); childElement.classList.add("toggle-to-anim-enfant-reverse"); } - filterMarkers(); }); } @@ -301,10 +329,8 @@ jQuery(document).ready(function($) { handleFilterClick('#prevu', ['#en-cours', '#projets-finis']); handleFilterClick('#projets-finis', ['#en-cours', '#prevu']); handleToggleClick('#toggle-associe'); - handleFilterClick('#label-haie', ['#label-aucun']); handleFilterClick('#label-vegetal', ['#label-aucun']); - handleFilterClick('#lieux-de-plantation', false); handleFilterClick('#chaufferies-bois-clients', false); handleFilterClick('#exploitations-productrices-de-bois-pour-BBE', false); @@ -312,11 +338,11 @@ jQuery(document).ready(function($) { handleFilterClick('#plateformes-logistiques', false); map.scrollWheelZoom.disable(); + map.on('click', () => { map.scrollWheelZoom.enable(); }); map.on('mouseout', () => { map.scrollWheelZoom.disable(); }); - }); \ No newline at end of file -- 2.45.1