/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./src/localisation-map/block.json": /*!*****************************************!*\ !*** ./src/localisation-map/block.json ***! \*****************************************/ /***/ ((module) => { "use strict"; module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"carhop-blocks/localisation-map","version":"0.1.0","title":"Localisation Map","category":"carhop-blocks","icon":"smiley","description":"Example block scaffolded with Create Block tool.","example":{},"supports":{"html":false},"textdomain":"localisation-map","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","viewScript":"file:./view.js","render":"file:./render.php"}'); /***/ }), /***/ "./src/localisation-map/edit.js": /*!**************************************!*\ !*** ./src/localisation-map/edit.js ***! \**************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ Edit) /* harmony export */ }); /* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/server-side-render */ "@wordpress/server-side-render"); /* harmony import */ var _wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__); function Edit(props) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { ...(0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.useBlockProps)(), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)((_wordpress_server_side_render__WEBPACK_IMPORTED_MODULE_0___default()), { block: "carhop-blocks/localisation-map", attributes: props.attributes }) }); } /***/ }), /***/ "./src/localisation-map/index.js": /*!***************************************!*\ !*** ./src/localisation-map/index.js ***! \***************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ "./src/localisation-map/style.scss"); /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/localisation-map/edit.js"); /* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./block.json */ "./src/localisation-map/block.json"); /* harmony import */ var _view_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./view.js */ "./src/localisation-map/view.js"); /* harmony import */ var _view_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_view_js__WEBPACK_IMPORTED_MODULE_4__); // Import the view script to load map handling on the backend (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_3__.name, { edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"] }); /***/ }), /***/ "./src/localisation-map/style.scss": /*!*****************************************!*\ !*** ./src/localisation-map/style.scss ***! \*****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin /***/ }), /***/ "./src/localisation-map/view.js": /*!**************************************!*\ !*** ./src/localisation-map/view.js ***! \**************************************/ /***/ (() => { /** * Google Maps initialization for Carhop Localisation Map block */ // Configuration const GOOGLE_MAPS_CONFIG = { apiKey: "AIzaSyBs-owKPe4qiYLb2baCTAptLeNNJX7bTQk", center: { lat: 50.61036915572659, lng: 4.148529499893204 }, zoom: 15, marker: { lat: 50.61036915386491, lng: 4.151615298397132, // Position originale du pin title: "Carhop", address: "Av. de la Houssière 80, 7090 Braine-le-Comte", placeId: "ChIJ41pZLUq1w0cRjXw8zlHnvXI", // Place ID Google Maps (à remplacer par le vrai) color: "green" }, styles: [{ featureType: "administrative", elementType: "geometry", stylers: [{ color: "#136f63" }] }, { featureType: "administrative", elementType: "labels.text.fill", stylers: [{ color: "#ffffff" }, { gamma: "1.00" }, { lightness: "0" }, { saturation: "0" }, { visibility: "on" }, { weight: "1.5" }] }, { featureType: "administrative", elementType: "labels.text.stroke", stylers: [{ color: "#19464b" }, { weight: "2" }] }, { featureType: "administrative.land_parcel", elementType: "geometry", stylers: [{ color: "#19464b" }] }, { featureType: "landscape", elementType: "all", stylers: [{ color: "#19464b" }] }, { featureType: "landscape", elementType: "geometry", stylers: [{ color: "#136f63" }] }, { featureType: "landscape.man_made", elementType: "geometry", stylers: [{ color: "#136f63" }] }, { featureType: "landscape.natural", elementType: "labels.text.fill", stylers: [{ color: "#ffffff" }, { visibility: "on" }] }, { featureType: "landscape.natural.landcover", elementType: "geometry", stylers: [{ color: "#136f63" }] }, { featureType: "landscape.natural.terrain", elementType: "geometry", stylers: [{ color: "#136f63" }] }, { featureType: "poi", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.attraction", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.business", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.government", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.park", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.school", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.medical", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.place_of_worship", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "poi.sports_complex", elementType: "all", stylers: [{ visibility: "off" }] }, { featureType: "road.highway", elementType: "geometry.fill", stylers: [{ color: "#136f63" }, { lightness: "-40" }] }, { featureType: "road.highway", elementType: "geometry.stroke", stylers: [{ visibility: "off" }] }, { featureType: "road.highway", elementType: "labels", stylers: [{ visibility: "off" }] }, { featureType: "road.highway", elementType: "labels.text.fill", stylers: [{ color: "#ffffff" }] }, { featureType: "road.highway", elementType: "labels.text.stroke", stylers: [{ color: "#0a1f14" }] }, { featureType: "road.arterial", elementType: "geometry", stylers: [{ color: "#136f63" }, { lightness: 30 }] }, { featureType: "road.arterial", elementType: "geometry.fill", stylers: [{ color: "#136f63" }] }, { featureType: "road.arterial", elementType: "labels", stylers: [{ visibility: "off" }] }, { featureType: "road.arterial", elementType: "labels.text.fill", stylers: [{ color: "#ffffff" }] }, { featureType: "road.arterial", elementType: "labels.text.stroke", stylers: [{ color: "#2c2c2c" }] }, { featureType: "road.local", elementType: "geometry", stylers: [{ color: "#136F63" }, { lightness: -20 }] }, { featureType: "road.local", elementType: "labels", stylers: [{ visibility: "simplified" }] }, { featureType: "road.local", elementType: "labels.text.fill", stylers: [{ color: "#ffffff" }] }, { featureType: "transit", elementType: "geometry", stylers: [{ color: "#136F63" }, { lightness: -20 }] }, // Grandes masses d'eau (océans, lacs, grands fleuves) { featureType: "water", elementType: "geometry", stylers: [{ color: "#136F63" }, { lightness: 18 }, { saturation: -50 }, { visibility: "simplified" // Simplifie l'affichage }] }, { featureType: "water", elementType: "geometry.fill", stylers: [{ visibility: "simplified" }] }, // Masquer les labels des petites rivières { featureType: "water", elementType: "labels", stylers: [{ visibility: "off" }] }] }; /** * Initialize Google Maps for all map containers on the page */ function initializeCarhopMaps() { // Find all map containers const mapContainers = document.querySelectorAll(".carhop-localisation-map"); mapContainers.forEach(container => { const mapElement = container.querySelector(".map-container"); if (!mapElement || mapElement.dataset.initialized === "true") { return; } // Create map const map = new google.maps.Map(mapElement, { zoom: GOOGLE_MAPS_CONFIG.zoom, center: new google.maps.LatLng(GOOGLE_MAPS_CONFIG.center.lat, GOOGLE_MAPS_CONFIG.center.lng), styles: GOOGLE_MAPS_CONFIG.styles, // Contrôles de zoom zoomControl: true, zoomControlOptions: { position: google.maps.ControlPosition.RIGHT_TOP, style: google.maps.ZoomControlStyle.DEFAULT }, // Autres contrôles utiles mapTypeControl: false, // Masquer le sélecteur de type de carte streetViewControl: false, // Contrôle Street View fullscreenControl: false // Bouton plein écran }); // Chemin vers votre pin personnalisé avec fallback const customPinPath = "/wp-content/plugins/carhop-blocks/blocks/localisation-map/src/localisation-map/carhop-pin.png"; // Add marker with custom color const marker = new google.maps.Marker({ position: new google.maps.LatLng(GOOGLE_MAPS_CONFIG.marker.lat, GOOGLE_MAPS_CONFIG.marker.lng), map: map, title: GOOGLE_MAPS_CONFIG.marker.title, icon: { url: customPinPath, scaledSize: new google.maps.Size(40, 40), // Taille du pin origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(20, 40) // Point d'ancrage (centre bas) } }); // Add click event to open Google Maps place marker.addListener("click", function () { const placeId = GOOGLE_MAPS_CONFIG.marker.placeId; // URL pour ouvrir la fiche Google Maps complète let googleMapsUrl; if (placeId && placeId !== "ChIJXXXXXXXXXXXXXXXXXXXX") { // Utiliser le Place ID pour ouvrir la fiche complète googleMapsUrl = `https://www.google.com/maps/place/?q=place_id:${placeId}`; } else { // Fallback avec l'adresse const address = encodeURIComponent(GOOGLE_MAPS_CONFIG.marker.address); googleMapsUrl = `https://www.google.com/maps/search/?api=1&query=${address}`; } // Ouvrir dans un nouvel onglet window.open(googleMapsUrl, "_blank"); }); // Mark as initialized mapElement.dataset.initialized = "true"; }); } /** * Load Google Maps API and initialize maps */ function loadGoogleMapsAPI() { // Check if Google Maps is already loaded if (typeof google !== "undefined" && google.maps) { initializeCarhopMaps(); return; } // Check if script is already loading if (window.carhopMapsLoading) { window.carhopMapsCallbacks = window.carhopMapsCallbacks || []; window.carhopMapsCallbacks.push(initializeCarhopMaps); return; } // Mark as loading window.carhopMapsLoading = true; window.carhopMapsCallbacks = [initializeCarhopMaps]; // Create callback function window.carhopMapsReady = function () { window.carhopMapsLoading = false; if (window.carhopMapsCallbacks) { window.carhopMapsCallbacks.forEach(callback => callback()); window.carhopMapsCallbacks = []; } }; // Load Google Maps API const script = document.createElement("script"); script.src = `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_CONFIG.apiKey}&callback=carhopMapsReady`; script.async = true; script.defer = true; document.head.appendChild(script); } // Initialize when DOM is ready if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", loadGoogleMapsAPI); } else { loadGoogleMapsAPI(); } // Also initialize on window load as fallback window.addEventListener("load", loadGoogleMapsAPI); /***/ }), /***/ "@wordpress/block-editor": /*!*************************************!*\ !*** external ["wp","blockEditor"] ***! \*************************************/ /***/ ((module) => { "use strict"; module.exports = window["wp"]["blockEditor"]; /***/ }), /***/ "@wordpress/blocks": /*!********************************!*\ !*** external ["wp","blocks"] ***! \********************************/ /***/ ((module) => { "use strict"; module.exports = window["wp"]["blocks"]; /***/ }), /***/ "@wordpress/server-side-render": /*!******************************************!*\ !*** external ["wp","serverSideRender"] ***! \******************************************/ /***/ ((module) => { "use strict"; module.exports = window["wp"]["serverSideRender"]; /***/ }), /***/ "react/jsx-runtime": /*!**********************************!*\ !*** external "ReactJSXRuntime" ***! \**********************************/ /***/ ((module) => { "use strict"; module.exports = window["ReactJSXRuntime"]; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /************************************************************************/ /******/ /* webpack/runtime/chunk loaded */ /******/ (() => { /******/ var deferred = []; /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { /******/ if(chunkIds) { /******/ priority = priority || 0; /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; /******/ deferred[i] = [chunkIds, fn, priority]; /******/ return; /******/ } /******/ var notFulfilled = Infinity; /******/ for (var i = 0; i < deferred.length; i++) { /******/ var [chunkIds, fn, priority] = deferred[i]; /******/ var fulfilled = true; /******/ for (var j = 0; j < chunkIds.length; j++) { /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { /******/ chunkIds.splice(j--, 1); /******/ } else { /******/ fulfilled = false; /******/ if(priority < notFulfilled) notFulfilled = priority; /******/ } /******/ } /******/ if(fulfilled) { /******/ deferred.splice(i--, 1) /******/ var r = fn(); /******/ if (r !== undefined) result = r; /******/ } /******/ } /******/ return result; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ "localisation-map/index": 0, /******/ "localisation-map/style-index": 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ // no HMR /******/ /******/ // no HMR manifest /******/ /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); /******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0; /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { /******/ for(moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(runtime) var result = runtime(__webpack_require__); /******/ } /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ installedChunks[chunkId][0](); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ return __webpack_require__.O(result); /******/ } /******/ /******/ var chunkLoadingGlobal = globalThis["webpackChunkcarhop_blocks"] = globalThis["webpackChunkcarhop_blocks"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["localisation-map/style-index"], () => (__webpack_require__("./src/localisation-map/index.js"))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() ; //# sourceMappingURL=index.js.map