fix: modify function name and update the code with the prod code

This commit is contained in:
florian.llimos 2025-02-19 12:33:23 +01:00
parent 9c9568430d
commit f4cadad915
3 changed files with 402 additions and 87 deletions

View File

@ -1,26 +1,31 @@
<?php <?php
/** /**
* Cartographie Leaflet
* *
* @package Cartographie * @package Cartographie
* @author Digitanie * @author Digitanie
* @copyright 2024 Digitanie * @copyright 2024 Digitanie
* @license GPL-2.0-or-later
* *
* @wordpress-plugin * @wordpress-plugin
* Plugin Name: Cartographie * Plugin Name: Cartographie
* Plugin URI: https://digitanie.org
* Description: Plugin pour la cartographie. * Description: Plugin pour la cartographie.
* Version: 1.0.0 * Version: 1.0.0
* Author: Digitanie * Author: Digitanie
* Author URI: https://digitanie.org * Author URI: https://digitanie.org
* Text Domain: cartographie * Text Domain: cartographie
* License: GPL v2 or later
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/ */
add_shortcode('cartographie', 'display_hello_world_page'); add_shortcode('cartographie', 'cartographie');
function display_hello_world_page() { function cartographie() {
ob_start(); ob_start();
?> ?>
<div id="container-filter"> <div id="container-filter">
<div id="container-filter-avancement"> <div id="container-filter-avancement">
<div class="container-title-filter"> <div class="container-title-filter">
<h5 id="avancement-button">Status</h5> <h5 id="avancement-button">Status</h5>
@ -82,29 +87,29 @@ function display_hello_world_page() {
<p>Plateforme logistique</p> <p>Plateforme logistique</p>
</div> </div>
</div> </div>
<div id=""><p id="modal-title"></p></div>
</div> </div>
<div id='map' class='map-container'> <div id='map' class='map-container'>
<div id="full-screen"> <div id="full-screen">
<img src="https://cdn-icons-png.flaticon.com/128/3413/3413667.png"> <img src="/wp-content/plugins/cartographie/media/full-screen.png">
</div> </div>
<?php <?php
return ob_get_clean(); return ob_get_clean();
} }
add_action('wp_enqueue_scripts', 'hello_world_enqueue_assets'); add_action('wp_enqueue_scripts', 'preload');
function hello_world_enqueue_assets() {
function preload() {
if (has_shortcode(get_post()->post_content, 'cartographie')) { if (has_shortcode(get_post()->post_content, 'cartographie')) {
wp_enqueue_style( wp_enqueue_style(
'leaflet-css', 'leaflet-css',
'https://unpkg.com/leaflet@1.9.3/dist/leaflet.css', plugin_dir_url(__FILE__) . 'css/leaflet.css',
array(), array(),
'1.9.3' '1.9.3'
); );
wp_enqueue_script( wp_enqueue_script(
'leaflet-js', 'leaflet-js',
'https://unpkg.com/leaflet@1.9.3/dist/leaflet.js', plugin_dir_url(__FILE__) . 'js/leaflet.js',
array(), array(),
'1.9.3', '1.9.3',
true true
@ -112,28 +117,35 @@ function hello_world_enqueue_assets() {
wp_enqueue_style( wp_enqueue_style(
'leaflet-markercluster-css', '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( wp_enqueue_script(
'leaflet-markercluster-js', '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'), array('leaflet-js', 'jquery'),
null, '1.5.3',
true true
); );
wp_enqueue_script( wp_enqueue_script(
'hello-world-script', 'cartographie-script',
plugin_dir_url(__FILE__) . 'js/main.js', plugin_dir_url(__FILE__) . 'js/main.js',
array('leaflet-js', 'leaflet-markercluster-js'), array('leaflet-js', 'leaflet-markercluster-js'),
'1.0', '1.0',
true true
); );
wp_localize_script( 'cartographie-script', 'wpApiSettings', array(
'root' => esc_url_raw( rest_url() ),
'nonce' => wp_create_nonce( 'wp_rest' )
) );
wp_enqueue_style( wp_enqueue_style(
'hello-world-style', 'cartographie-style',
plugin_dir_url(__FILE__) . 'css/style.css', plugin_dir_url(__FILE__) . 'css/cartographie.css',
array(), array(),
'1.0' '1.0'
); );
@ -141,16 +153,17 @@ function hello_world_enqueue_assets() {
} }
add_action('rest_api_init', function() { add_action('rest_api_init', function() {
register_rest_route('custom/v1', '/markers', array( register_rest_route('custom/v1', '/markers', array(
'methods' => 'GET', 'methods' => "GET",
'callback' => 'get_cartographie_markers', 'permission_callback' => '__return_true',
'callback' => 'get_cartographie_markers'
)); ));
}); });
function get_cartographie_markers() { function get_cartographie_markers() {
global $wpdb; global $wpdb;
$table_name = $wpdb->prefix . 'posts'; $table_name = $wpdb->prefix . 'posts';
$results = $wpdb->get_results(" $results = $wpdb->get_results("
SELECT wp_posts.ID, wp_posts.post_title, wp_term_taxonomy.taxonomy, 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, 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 = []; $image_data = [];
foreach ($image_results as $image_row) { foreach ($image_results as $image_row) {
$image_data[$image_row->ID] = [ $image_data[$image_row->ID] = [
'image_id' => $image_row->image_id, 'image_id' => $image_row->image_id,
@ -190,14 +204,12 @@ foreach ($results as $row) {
]; ];
} }
// Ajouter les termes (taxonomies)
if ($row->taxonomy == "categorielabel") { if ($row->taxonomy == "categorielabel") {
$structured_data[$row->ID][$row->taxonomy] = explode(",", $row->term_names); $structured_data[$row->ID][$row->taxonomy] = explode(",", $row->term_names);
} else { } else {
$structured_data[$row->ID][$row->taxonomy] = $row->term_names; $structured_data[$row->ID][$row->taxonomy] = $row->term_names;
} }
// Ajouter l'image mise en avant si elle existe
if (isset($image_data[$row->ID])) { if (isset($image_data[$row->ID])) {
$structured_data[$row->ID]['image'] = $image_data[$row->ID]; $structured_data[$row->ID]['image'] = $image_data[$row->ID];
} }
@ -205,5 +217,282 @@ foreach ($results as $row) {
return $structured_data; 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 );
} }

View File

@ -1,4 +1,5 @@
jQuery(document).ready(function($) { jQuery(document).ready(function($) {
var map = L.map('map', { var map = L.map('map', {
center: [48.577742, 0.060471], center: [48.577742, 0.060471],
zoom: 8, zoom: 8,
@ -30,6 +31,7 @@ jQuery(document).ready(function($) {
const values = Object.values(data); const values = Object.values(data);
for (const item of values) { for (const item of values) {
let itemNom = item.name; let itemNom = item.name;
var itemDomaine = item.categoriesseries ?? null; var itemDomaine = item.categoriesseries ?? null;
let itemCodePostal = item.codepstl ?? null; let itemCodePostal = item.codepstl ?? null;
@ -50,7 +52,6 @@ jQuery(document).ready(function($) {
const iconSize = [50, 50]; const iconSize = [50, 50];
const iconAnchor = [16, 32]; const iconAnchor = [16, 32];
const popupAnchor = [0, -32]; const popupAnchor = [0, -32];
const domaineIcons = { const domaineIcons = {
"Lieux de plantation": "lieux_de_plantation.svg", "Lieux de plantation": "lieux_de_plantation.svg",
"Producteur de bois": "producteur_de_bois.svg", "Producteur de bois": "producteur_de_bois.svg",
@ -68,7 +69,6 @@ jQuery(document).ready(function($) {
popupAnchor popupAnchor
}) })
: new L.Icon.Default(); : new L.Icon.Default();
let imageUrls = []; let imageUrls = [];
if (Array.isArray(itemLabel)) { if (Array.isArray(itemLabel)) {
@ -110,11 +110,11 @@ jQuery(document).ready(function($) {
}); });
// Ajout du comportement dynamique lors de l'ouverture de la popup // Ajout du comportement dynamique lors de l'ouverture de la popup
marker.on('popupopen', function (e) { marker.on('popupopen', function (e) {
const popup = e.popup; const popup = e.popup;
const mapBounds = map.getBounds(); const mapBounds = map.getBounds();
const popupPosition = popup.getLatLng(); const popupPosition = popup.getLatLng();
// Ajuste les marges dynamiques // Ajuste les marges dynamiques
const autoPanPadding = { const autoPanPadding = {
top: 100, // 100px depuis le haut top: 100, // 100px depuis le haut
@ -122,7 +122,6 @@ jQuery(document).ready(function($) {
left: 200, // 50px à gauche left: 200, // 50px à gauche
right: 200 // 50px à droite right: 200 // 50px à droite
}; };
// Vérifie si le popup est hors de la vue et recadre la carte // Vérifie si le popup est hors de la vue et recadre la carte
if (!mapBounds.contains(popupPosition)) { if (!mapBounds.contains(popupPosition)) {
map.panTo(popupPosition, { map.panTo(popupPosition, {
@ -132,6 +131,27 @@ 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 // Gestion de l'icône active lors de l'ouverture et de la fermeture de la popup
marker.on('popupopen', function () { marker.on('popupopen', function () {
marker.setIcon(activeMarkerIcon); marker.setIcon(activeMarkerIcon);
@ -140,11 +160,10 @@ jQuery(document).ready(function($) {
marker.on('popupclose', function () { marker.on('popupclose', function () {
marker.setIcon(defaultIcon); marker.setIcon(defaultIcon);
}); });
// Ajout du marqueur au cluster // Ajout du marqueur au cluster
allMarkers.push(marker); allMarkers.push(marker);
markersCluster.addLayer(marker);
markersCluster.addLayer(marker);
let activeIconUrl = ''; let activeIconUrl = '';
if (itemDomaine === "Lieux de plantation") { if (itemDomaine === "Lieux de plantation") {
@ -165,7 +184,6 @@ jQuery(document).ready(function($) {
iconAnchor: [16, 32], iconAnchor: [16, 32],
popupAnchor: [0, -32] popupAnchor: [0, -32]
}); });
allMarkers.push(marker); allMarkers.push(marker);
markersCluster.addLayer(marker); markersCluster.addLayer(marker);
} }
@ -179,27 +197,28 @@ jQuery(document).ready(function($) {
function mapFullScreen() { function mapFullScreen() {
if (!theMap.classList.contains("map-full-screen")) { if (!theMap.classList.contains("map-full-screen")) {
theMap.classList.add("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"; document.querySelector("#full-screen > img").style.padding = "15px";
// Redimensionner la carte Leaflet après être passé en plein écran // Redimensionner la carte Leaflet après être passé en plein écran
map.invalidateSize(); // Demande à Leaflet de recalculer la taille de la carte map.invalidateSize(); // Demande à Leaflet de recalculer la taille de la carte
} else if (theMap.classList.contains("map-full-screen")) { } else if (theMap.classList.contains("map-full-screen")) {
theMap.classList.remove("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"; document.querySelector("#full-screen > img").style.padding = "10px";
// Redimensionner la carte Leaflet après avoir quitté le plein écran // Redimensionner la carte Leaflet après avoir quitté le plein écran
map.invalidateSize(); map.invalidateSize();
} }
} }
btnFullScreen.addEventListener("click", mapFullScreen); btnFullScreen.addEventListener("click", mapFullScreen);
let api_root = window.location.origin + '?rest_route=/';
$.ajax({ $.ajax({
url: '/wp-json/custom/v1/markers', url: api_root + "custom/v1/markers",
method: 'GET', method: "GET",
dataType: 'json', timeout: 0,
headers: {
"Authorization": "Basic ZGlnaXRhbmllOmlOdVkgZkJyVyBRelRDIDVGaTcgVTVzOCBEU2ZZ"
},
success: function(data) { success: function(data) {
initialMarkerData = data; initialMarkerData = data;
addMarkers(data); addMarkers(data);
@ -209,6 +228,7 @@ jQuery(document).ready(function($) {
} }
}); });
function filterMarkers() { function filterMarkers() {
var statusFilters = { var statusFilters = {
'En cours': $('#en-cours').hasClass('filter-active'), 'En cours': $('#en-cours').hasClass('filter-active'),
@ -217,7 +237,6 @@ jQuery(document).ready(function($) {
}; };
var associeFilterActive = $('#toggle-associe').hasClass('filter-active'); var associeFilterActive = $('#toggle-associe').hasClass('filter-active');
var labelFilters = { var labelFilters = {
'aucun': $('#label-aucun').hasClass('filter-active'), 'aucun': $('#label-aucun').hasClass('filter-active'),
'haie': $('#label-haie').hasClass('filter-active'), 'haie': $('#label-haie').hasClass('filter-active'),
@ -234,44 +253,55 @@ jQuery(document).ready(function($) {
var filteredMarkers = allMarkers.filter(function(marker) { var filteredMarkers = allMarkers.filter(function(marker) {
let popupContent = marker.getPopup().getContent(); let popupContent = marker.getPopup().getContent();
let matchesStatusFilter = Object.keys(statusFilters).some(function(key) { let matchesStatusFilter = Object.keys(statusFilters).some(function(key) {
return statusFilters[key] ? popupContent.includes(key) : false; return statusFilters[key] ? popupContent.includes(key) : false;
}) || !Object.values(statusFilters).includes(true); }) || !Object.values(statusFilters).includes(true);
let matchesAssocieFilter = associeFilterActive ? popupContent.includes('Associé-e BBE') : true; let matchesAssocieFilter = associeFilterActive ? popupContent.includes('Associé-e BBE') : true;
let matchesLabelFilter = labelFilters['haie'] && labelFilters['vegetal'] let matchesLabelFilter = labelFilters['haie'] && labelFilters['vegetal']
? (popupContent.includes('Label haie') || popupContent.includes('végétal local')) ? (popupContent.includes('Label haie') || popupContent.includes('végétal local'))
: (labelFilters['haie'] ? popupContent.includes('Label haie') : (labelFilters['haie'] ? popupContent.includes('Label haie')
: (labelFilters['vegetal'] ? popupContent.includes('végétal local') : (labelFilters['vegetal'] ? popupContent.includes('végétal local')
: labelFilters['aucun'] ? popupContent.includes('Aucun') : true)); : labelFilters['aucun'] ? popupContent.includes('Aucun') : true));
let matchesDomaineFilter = Object.keys(domaineFilters).some(function(key) { let matchesDomaineFilter = Object.keys(domaineFilters).some(function(key) {
return domaineFilters[key] ? popupContent.includes(key) : false; return domaineFilters[key] ? popupContent.includes(key) : false;
}) || !Object.values(domaineFilters).includes(true); }) || !Object.values(domaineFilters).includes(true);
return matchesStatusFilter && matchesAssocieFilter && matchesLabelFilter && matchesDomaineFilter; return matchesStatusFilter && matchesAssocieFilter && matchesLabelFilter && matchesDomaineFilter;
}); });
markersCluster.clearLayers(); markersCluster.clearLayers();
markersCluster.addLayers(filteredMarkers); markersCluster.addLayers(filteredMarkers);
} }
function handleFilterClick(filterId, otherFilterIds) { function handleFilterClick(filterId, otherFilterIds) {
$(filterId).on('click', function() { $(filterId).on('click', function() {
$(this).toggleClass('filter-active'); $(this).toggleClass('filter-active');
if ($(this).hasClass('wait-button')) { if ($(this).hasClass('wait-button')) {
$(this).toggleClass('button-active'); $(this).toggleClass('button-active');
} }
if ($(this).hasClass('filter-active') && otherFilterIds && Array.isArray(otherFilterIds)) { if ($(this).hasClass('filter-active') && otherFilterIds && Array.isArray(otherFilterIds)) {
otherFilterIds.forEach(function(otherFilterId) { otherFilterIds.forEach(function(otherFilterId) {
$(otherFilterId).removeClass('filter-active button-active'); $(otherFilterId).removeClass('filter-active button-active');
}); });
} }
filterMarkers(); filterMarkers();
}); });
} }
@ -280,7 +310,6 @@ jQuery(document).ready(function($) {
$(toggleId).on('click', function() { $(toggleId).on('click', function() {
const parentElement = document.querySelector(toggleId); const parentElement = document.querySelector(toggleId);
const childElement = document.querySelector(`${toggleId} > div`); const childElement = document.querySelector(`${toggleId} > div`);
if ($(this).toggleClass('filter-active').hasClass('filter-active')) { if ($(this).toggleClass('filter-active').hasClass('filter-active')) {
parentElement.classList.remove("toggle-to-anim-parent-reverse"); parentElement.classList.remove("toggle-to-anim-parent-reverse");
childElement.classList.remove("toggle-to-anim-enfant-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"); parentElement.classList.add("toggle-to-anim-parent-reverse");
childElement.classList.add("toggle-to-anim-enfant-reverse"); childElement.classList.add("toggle-to-anim-enfant-reverse");
} }
filterMarkers(); filterMarkers();
}); });
} }
@ -301,10 +329,8 @@ jQuery(document).ready(function($) {
handleFilterClick('#prevu', ['#en-cours', '#projets-finis']); handleFilterClick('#prevu', ['#en-cours', '#projets-finis']);
handleFilterClick('#projets-finis', ['#en-cours', '#prevu']); handleFilterClick('#projets-finis', ['#en-cours', '#prevu']);
handleToggleClick('#toggle-associe'); handleToggleClick('#toggle-associe');
handleFilterClick('#label-haie', ['#label-aucun']); handleFilterClick('#label-haie', ['#label-aucun']);
handleFilterClick('#label-vegetal', ['#label-aucun']); handleFilterClick('#label-vegetal', ['#label-aucun']);
handleFilterClick('#lieux-de-plantation', false); handleFilterClick('#lieux-de-plantation', false);
handleFilterClick('#chaufferies-bois-clients', false); handleFilterClick('#chaufferies-bois-clients', false);
handleFilterClick('#exploitations-productrices-de-bois-pour-BBE', false); handleFilterClick('#exploitations-productrices-de-bois-pour-BBE', false);
@ -312,11 +338,11 @@ jQuery(document).ready(function($) {
handleFilterClick('#plateformes-logistiques', false); handleFilterClick('#plateformes-logistiques', false);
map.scrollWheelZoom.disable(); map.scrollWheelZoom.disable();
map.on('click', () => { map.on('click', () => {
map.scrollWheelZoom.enable(); map.scrollWheelZoom.enable();
}); });
map.on('mouseout', () => { map.on('mouseout', () => {
map.scrollWheelZoom.disable(); map.scrollWheelZoom.disable();
}); });
}); });