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;