diff --git a/samples-src/pages/tests/LayerSwitcher/pages-ol-layerswitcher-modules-dsfr-no-position-css-tokens.html b/samples-src/pages/tests/LayerSwitcher/pages-ol-layerswitcher-modules-dsfr-no-position-css-tokens.html
new file mode 100644
index 000000000..b436f984d
--- /dev/null
+++ b/samples-src/pages/tests/LayerSwitcher/pages-ol-layerswitcher-modules-dsfr-no-position-css-tokens.html
@@ -0,0 +1,422 @@
+{{#extend "ol-sample-modules-dsfr-layout"}}
+
+{{#content "vendor"}}
+
+
+
+
+
+
+
+{{/content}}
+
+{{#content "head"}}
+
Sample openlayers LayerSwitcher
+{{/content}}
+
+{{#content "style"}}
+
+{{/content}}
+
+{{#content "body"}}
+Ajout du gestionnaire de couches avec formulaire d'ajout de couche
+
+
+
+
+
+
+
+
+
+
+
Sans ça, la taille des modales est fixe/ (pré)définie par l'utilisateur·ice
+
+
+
+
+
+
+
+{{/content}}
+
+{{#content "js"}}
+
+{{/content}}
+
+{{/extend}}
\ No newline at end of file
diff --git a/src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css b/src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css
index 50cafd906..f9fdaaa8f 100644
--- a/src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css
+++ b/src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css
@@ -73,6 +73,8 @@ dialog[id^=GPlayersList] {
button[id^=GPshowLayersListPicto][aria-pressed="true"] + dialog[id^=GPlayersList] {
max-height: inherit;
opacity: 1;
+ /* max-height: calc(var(--map-height) - 8px); */
+ /* height:unset; */
}
.GPlayerCounter {
diff --git a/src/packages/Controls/Control.js b/src/packages/Controls/Control.js
index 2c62423ee..027bb63d7 100644
--- a/src/packages/Controls/Control.js
+++ b/src/packages/Controls/Control.js
@@ -1,8 +1,22 @@
import Control from "ol/control/Control";
import checkDsfr from "./Utils/CheckDsfr";
+import { ObjectEvent } from "ol/Object";
+import { Map } from "ol";
class ControlExtended extends Control {
+ /**
+ * Fonction appelée au changement de taille de la carte
+ * @param {ObjectEvent} e Événement de changement de taille
+ */
+ #updateSize (e) {
+ const size = e.target.getSize();
+ if (size) {
+ e.target.getTargetElement()?.style.setProperty("--map-width", `${size[0]}px`);
+ e.target.getTargetElement()?.style.setProperty("--map-height", `${size[1]}px`);
+ }
+ }
+
constructor (options) {
options = options || {};
super({
@@ -38,6 +52,31 @@ class ControlExtended extends Control {
}
}
+ /**
+ * Ajoute un écouteur d'événement sur la taille de la carte
+ *
+ * @param {Map} map Carte
+ * @override
+ */
+ setMap (map) {
+ super.setMap(map);
+ if (map) {
+ const size = map.getSize();
+ // Initie les valeurs
+ if (size) {
+ map.getTargetElement()?.style.setProperty("--map-width", `${size[0]}px`);
+ map.getTargetElement()?.style.setProperty("--map-height", `${size[1]}px`);
+ }
+
+ // Vérifie si la carte écoute déjà cet événement
+ if (!map.get("listenToChangeSizeEvent")) {
+ // Ajoute la valeur et l'écouteur d'événement;
+ map.on("change:size", this.#updateSize);
+ map.set("listenToChangeSizeEvent", true);
+ }
+ }
+ }
+
};
export default ControlExtended;