diff --git a/Documentation/ChangeLog/Index.rst b/Documentation/ChangeLog/Index.rst
index dde243af..417fadbe 100644
--- a/Documentation/ChangeLog/Index.rst
+++ b/Documentation/ChangeLog/Index.rst
@@ -7,6 +7,36 @@
ChangeLog
=========
+Version 13.0.1
+==============
+
+* BUGFIX: Fix TypeError in OpenStreetMap2 JS when no PoiCollection is assigned
+* BUGFIX: Fix XSS via category title/uid in OpenStreetMap2 and GoogleMaps2 category checkboxes
+* TASK: Replace gulp with esbuild for building the JavaScript assets
+
+Version 13.0.0
+==============
+
+* Compatibility fixes for TYPO3 14 LTS
+* Remove TYPO3 13 compatibility
+* Introduce Environment configuration state and EnvironmentFactory, replacing SettingsHelper
+* Add MapProviderEnum and MapperFactory to streamline Google Maps / OpenStreetMap handling
+* Refactor Google Maps initialization to use the async Google Maps JavaScript API
+* Add support for Google Maps Map ID configuration
+* Fix OpenStreetMap backend map rendering when switching FormEngine tabs
+* Replace QueryBuilder injection with ConnectionPool throughout the extension
+* Migrate sys_category TCA overrides to the current TYPO3 14 API
+* Add ColumnRegistration to make Maps2Registry storage configuration type-safe
+* Migrate Maps2Registry from a JSON-file-based Singleton registry to a
+ TcaSchemaFactory-driven, cached, event-listener-based column detection
+* Replace useNonce with csp in asset definitions for Content Security Policy compliance
+* Remove deprecated MapProviderRequestService, GetExtConfTrait and GetTypo3RequestTrait
+* Replace Extbase @validate annotations with PHP attributes
+* Declare service, mapper and helper classes as readonly and/or final wherever possible
+* Rename Fluid templates to use the .fluid.html extension
+* Introduce Rector configuration under Build/rector for automated code modernization
+* Update testing-framework dependency to ^9.5.0 and refactor test suite accordingly
+
Version 12.1.1
===============
diff --git a/Documentation/guides.xml b/Documentation/guides.xml
index 0b275b57..78f826e8 100644
--- a/Documentation/guides.xml
+++ b/Documentation/guides.xml
@@ -9,5 +9,5 @@
project-issues="https://github.com/jweiland-net/maps2/issues"
edit-on-github-branch="main"
edit-on-github="jweiland/maps2" typo3-core-preferred="stable"/>
-
{if(o.keyCode===13)return!1})}} //# sourceMappingURL=GoogleMaps2.min.js.map diff --git a/Resources/Public/JavaScript/GoogleMaps2.min.js.map b/Resources/Public/JavaScript/GoogleMaps2.min.js.map index 18e9bb29..56b41f2e 100644 --- a/Resources/Public/JavaScript/GoogleMaps2.min.js.map +++ b/Resources/Public/JavaScript/GoogleMaps2.min.js.map @@ -1 +1,7 @@ -{"version":3,"sources":["GoogleMaps2.js"],"names":["GoogleMaps2","allMarkers","categorizedMarkers","pointMarkers","bounds","infoWindow","poiCollections","editable","map","constructor","element","environment","this","google","maps","LatLngBounds","InfoWindow","JSON","parse","dataset","pois","classList","contains","setMapDimensions","settings","initialize","async","lat","lng","createMap","Number","latitude","longitude","await","createMarkerByLatLng","setCenter","LatLng","extConf","defaultLatitude","defaultLongitude","createPointByCollectionType","markerClusterer","enable","MarkerClusterer","imagePath","countObjectProperties","showSwitchableCategories","shouldFitBounds","fitBounds","getMapOptions","let","mapOptions","mapTypeId","zoom","parseInt","zoomControl","mapTypeControl","scaleControl","streetViewControl","fullscreenControl","fullScreenControl","scrollwheel","activateScrollWheel","styles","eval","MapTypeId","HYBRID","ROADMAP","SATELLITE","TERRAIN","getCircleOptions","centerPosition","poiCollection","center","radius","strokeColor","strokeOpacity","strokeWeight","fillColor","fillOpacity","getPolygonOptions","paths","getPolylineOptions","path","mapId","googleMapsMapId","Map","canBeInterpretedAsNumber","value","isNaN","normalizeDimension","dimension","normalizedDimension","String","forceZoom","length","collectionType","style","height","mapHeight","width","mapWidth","groupCategories","categoryUid","groupedCategories","x","y","categories","uid","inList","hasOwnProperty","getCategoriesOfCheckboxesWithStatus","form","isChecked","querySelectorAll","forEach","checkbox","push","getMarkersToChangeVisibilityFor","markers","marker","allCategoriesOfMarker","categoriesOfCheckboxesWithStatus","i","markerCategoryHasCheckboxWithStatus","j","k","document","createElement","add","setAttribute","contentRecord","appendChild","getCheckbox","querySelector","insertAdjacentHTML","title","addEventListener","checked","setVisible","setMap","insertAdjacentElement","category","div","innerHTML","obj","count","key","createMarker","createArea","createRoute","createRadius","c","relatedCategories","AdvancedMarkerElement","importLibrary","markerOptions","position","gmpDraggable","markerIcon","img","markerIconPath","startsWith","substring","src","siteUrl","markerIconWidth","markerIconHeight","markerIconAnchorPosX","markerIconAnchorPosY","content","anchorLeft","anchorTop","extend","addEditListeners","addInfoWindow","latLng","mapPosition","area","Polygon","route","Polyline","circle","Circle","union","getBounds","event","addListener","fetch","ajaxUrl","method","headers","Content-Type","ext-maps2","body","stringify","then","response","json","data","close","setContent","setPosition","open","anchor","catch","error","console","list","item","search","mapContainer","toFixed","prevAll","val","maps2GoogleMaps","initMap","override","args","extended","deep","Object","prototype","toString","call","prop","address","places","Autocomplete","fields","keyCode"],"mappings":"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","file":"GoogleMaps2.min.js","sourcesContent":["class GoogleMaps2 {\n allMarkers = [];\n categorizedMarkers = {};\n pointMarkers = [];\n bounds = {};\n infoWindow = {};\n poiCollections = {};\n editable = {};\n map = {};\n\n /**\n * @param {HTMLElement} element\n * @param {Environment} environment\n * @constructor\n */\n constructor (element, environment) {\n this.allMarkers = [];\n this.categorizedMarkers = {};\n this.pointMarkers = [];\n this.bounds = new google.maps.LatLngBounds();\n this.infoWindow = new google.maps.InfoWindow();\n this.poiCollections = JSON.parse(element.dataset.pois || \"null\");\n this.editable = element.classList.contains('editMarker');\n\n this.setMapDimensions(element, environment.settings);\n\n this.initialize(element, environment);\n }\n\n /**\n * Initialize Map and Markers asynchronously\n *\n * @param {HTMLElement} element\n * @param {Environment} environment\n */\n initialize = async (element, environment) => {\n this.createMap(element, environment);\n\n if (typeof this.poiCollections === 'undefined' || this.poiCollections === null) {\n let lat = Number(element.dataset.latitude);\n let lng = Number(element.dataset.longitude);\n if (lat && lng) {\n await this.createMarkerByLatLng(lat, lng);\n this.map.setCenter(new google.maps.LatLng(lat, lng));\n } else {\n this.map.setCenter(new google.maps.LatLng(environment.extConf.defaultLatitude, environment.extConf.defaultLongitude));\n }\n } else {\n await this.createPointByCollectionType(element, environment);\n if (\n typeof environment.settings.markerClusterer !== 'undefined'\n && environment.settings.markerClusterer.enable === 1\n ) {\n new MarkerClusterer(\n this.map,\n this.pointMarkers,\n { imagePath: environment.settings.markerClusterer.imagePath }\n );\n }\n\n if (this.countObjectProperties(this.categorizedMarkers) > 1) {\n this.showSwitchableCategories(element, environment);\n }\n\n if (this.shouldFitBounds(environment.settings)) {\n this.map.fitBounds(this.bounds);\n } else {\n this.map.setCenter(new google.maps.LatLng(this.poiCollections[0].latitude, this.poiCollections[0].longitude));\n }\n }\n }\n\n /**\n * Return a MapOptions object which can be assigned to the Map object of Google\n *\n * @param {Settings} settings\n * @return {object}\n */\n getMapOptions = settings => {\n let mapOptions = {\n mapTypeId: '',\n zoom: parseInt(settings.zoom),\n zoomControl: (parseInt(settings.zoomControl) !== 0),\n mapTypeControl: (parseInt(settings.mapTypeControl) !== 0),\n scaleControl: (parseInt(settings.scaleControl) !== 0),\n streetViewControl: (parseInt(settings.streetViewControl) !== 0),\n fullscreenControl: (parseInt(settings.fullScreenControl) !== 0),\n scrollwheel: settings.activateScrollWheel,\n styles: ''\n };\n\n if (settings.styles) {\n mapOptions.styles = eval(settings.styles);\n }\n\n switch (settings.mapTypeId) {\n case 'google.maps.MapTypeId.HYBRID':\n case 'hybrid':\n mapOptions.mapTypeId = google.maps.MapTypeId.HYBRID;\n break;\n case 'google.maps.MapTypeId.ROADMAP':\n case 'roadmap':\n mapOptions.mapTypeId = google.maps.MapTypeId.ROADMAP;\n break;\n case 'google.maps.MapTypeId.SATELLITE':\n case 'satellite':\n mapOptions.mapTypeId = google.maps.MapTypeId.SATELLITE;\n break;\n case 'google.maps.MapTypeId.TERRAIN':\n case 'terrain':\n mapOptions.mapTypeId = google.maps.MapTypeId.TERRAIN;\n break;\n }\n\n return mapOptions;\n }\n\n /**\n * Returns CircleOptions which can be assigned to the Circle object of Google\n *\n * @param {L.Map} map\n * @param {object} centerPosition\n * @param {PoiCollection} poiCollection\n * @return {object}\n */\n getCircleOptions (map, centerPosition, poiCollection) {\n return {\n map: map,\n center: centerPosition,\n radius: poiCollection.radius,\n strokeColor: poiCollection.strokeColor,\n strokeOpacity: poiCollection.strokeOpacity,\n strokeWeight: poiCollection.strokeWeight,\n fillColor: poiCollection.fillColor,\n fillOpacity: poiCollection.fillOpacity\n };\n }\n\n /**\n * Returns PolygonOptions which can be assigned to the Polygon object of Google\n *\n * @param {object} paths\n * @param {PoiCollection} poiCollection\n * @return {object}\n */\n getPolygonOptions (paths, poiCollection) {\n return {\n paths: paths,\n strokeColor: poiCollection.strokeColor,\n strokeOpacity: poiCollection.strokeOpacity,\n strokeWeight: poiCollection.strokeWeight,\n fillColor: poiCollection.fillColor,\n fillOpacity: poiCollection.fillOpacity\n };\n }\n\n /**\n * Return PolylineOptions which can be assigned to the Polyline object of Google\n *\n * @param {object} paths\n * @param {PoiCollection} poiCollection\n * @return {object}\n */\n getPolylineOptions (paths, poiCollection) {\n return {\n path: paths,\n strokeColor: poiCollection.strokeColor,\n strokeOpacity: poiCollection.strokeOpacity,\n strokeWeight: poiCollection.strokeWeight,\n };\n }\n\n /**\n * Create Map\n *\n * @param {HTMLElement} element\n * @param {Environment} environment\n */\n createMap (element, environment) {\n let mapOptions = this.getMapOptions(environment.settings);\n mapOptions.mapId = environment.settings.googleMapsMapId || '';\n\n this.map = new google.maps.Map(element, mapOptions);\n }\n\n /**\n * @param {string | number} value\n * @return {boolean}\n */\n canBeInterpretedAsNumber(value) {\n return typeof value === 'number' || !isNaN(Number(value));\n }\n\n /**\n * @param {string | number} dimension\n * @returns {string}\n */\n normalizeDimension(dimension) {\n let normalizedDimension = String(dimension);\n\n if (this.canBeInterpretedAsNumber(normalizedDimension)) {\n normalizedDimension += 'px';\n }\n\n return normalizedDimension;\n }\n\n /**\n * @param {Settings} settings\n * @returns {boolean}\n */\n shouldFitBounds(settings) {\n if (settings.forceZoom === true) {\n return false;\n }\n\n if (this.poiCollections === null) {\n return false;\n }\n\n if (this.poiCollections.length > 1) {\n return true;\n }\n\n if (\n this.poiCollections.length === 1\n && (\n this.poiCollections[0].collectionType === \"Area\"\n || this.poiCollections[0].collectionType === \"Route\"\n )\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {HTMLElement} element\n * @param {Settings} settings\n */\n setMapDimensions(element, settings) {\n element.style.height = this.normalizeDimension(settings.mapHeight);\n element.style.width = this.normalizeDimension(settings.mapWidth);\n }\n\n /**\n * Group Categories\n *\n * @param {Environment} environment\n */\n groupCategories = environment => {\n let groupedCategories = {};\n let categoryUid = \"0\";\n for (let x = 0; x < this.poiCollections.length; x++) {\n for (let y = 0; y < this.poiCollections[x].categories.length; y++) {\n categoryUid = String(this.poiCollections[x].categories[y].uid);\n if (this.inList(environment.settings.categories, categoryUid) > -1 && !groupedCategories.hasOwnProperty(categoryUid)) {\n groupedCategories[categoryUid] = this.poiCollections[x].categories[y];\n }\n }\n }\n\n return groupedCategories;\n };\n\n /**\n * Get categories of all checkboxes with a given status\n *\n * @param {HTMLElement} form The HTML form element containing the checkboxes\n * @param {boolean} isChecked Get checkboxes of this status only\n */\n getCategoriesOfCheckboxesWithStatus = (form, isChecked) => {\n let categories = [];\n let checkboxes = isChecked ? form.querySelectorAll(\"input:checked\") : form.querySelectorAll(\"input:not(input:checked)\");\n\n checkboxes.forEach(checkbox => {\n categories.push(parseInt(checkbox.value));\n });\n\n return categories;\n }\n\n getMarkersToChangeVisibilityFor = (categoryUid, form, isChecked) => {\n let markers = [];\n if (this.allMarkers.length === 0) {\n return markers;\n }\n\n let marker = null;\n let allCategoriesOfMarker = null;\n let categoriesOfCheckboxesWithStatus = this.getCategoriesOfCheckboxesWithStatus(form, isChecked);\n for (let i = 0; i < this.allMarkers.length; i++) {\n marker = this.allMarkers[i];\n allCategoriesOfMarker = marker.poiCollection.categories;\n if (allCategoriesOfMarker.length === 0) {\n continue;\n }\n\n let markerCategoryHasCheckboxWithStatus;\n for (let j = 0; j < allCategoriesOfMarker.length; j++) {\n markerCategoryHasCheckboxWithStatus = false;\n for (let k = 0; k < categoriesOfCheckboxesWithStatus.length; k++) {\n if (allCategoriesOfMarker[j].uid === categoriesOfCheckboxesWithStatus[k]) {\n markerCategoryHasCheckboxWithStatus = true;\n }\n }\n if (markerCategoryHasCheckboxWithStatus === isChecked) {\n break;\n }\n }\n\n if (markerCategoryHasCheckboxWithStatus) {\n markers.push(marker.marker);\n }\n }\n\n return markers;\n }\n\n /**\n * Show switchable categories\n *\n * @param {HTMLElement} element\n * @param {Environment} environment\n */\n showSwitchableCategories = (element, environment) => {\n let categories = this.groupCategories(environment);\n let form = document.createElement(\"form\");\n let span = {};\n\n form.classList.add(\"txMaps2Form\");\n form.setAttribute(\"id\", \"txMaps2Form-\" + environment.contentRecord.uid);\n\n for (let categoryUid in categories) {\n if (categories.hasOwnProperty(categoryUid)) {\n form.appendChild(this.getCheckbox(categories[categoryUid]));\n form.querySelector(\"#checkCategory_\" + categoryUid)?.insertAdjacentHTML(\n \"afterend\",\n `${categories[categoryUid].title}`\n );\n }\n }\n\n form.querySelectorAll(\"input\").forEach((checkbox) => {\n checkbox.addEventListener(\"click\", () => {\n let isChecked = (checkbox).checked;\n let categoryUid = (checkbox).value;\n let markers = this.getMarkersToChangeVisibilityFor(categoryUid, form, isChecked);\n\n markers.forEach((marker) => {\n if (typeof marker.setVisible === 'function') {\n marker.setVisible(isChecked);\n } else if (typeof marker.setMap === 'function') {\n marker.setMap(isChecked ? this.map : null);\n } else {\n marker.map = isChecked ? this.map : null;\n }\n });\n });\n });\n\n element.insertAdjacentElement(\"afterend\", form);\n }\n\n /**\n * Get Checkbox for Category\n *\n * @param category\n */\n getCheckbox(category) {\n let div = document.createElement(\"div\");\n div.classList.add(\"form-group\");\n div.innerHTML = `\n