Open
Conversation
Ajout de classes toggle et toggleContent/toggleInteraction ainsi qu'une classe Dialog/TabNav pour gérer les composants dans deux classes distinctes (et favoriser leur utilisation après)
ADD - key events copy/cut/past/delete
…pf-extensions-openlayers into feature/drawing-refonte
Rebase main into feature/drawing-refonte
Reste encore à voir comment modifier textarea + faire des classes utilitaires pour chaque module (icônes, bordure etc.) + faire exemple gestion style
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR important de nombreux changements, principalement sur la partie dessin et édition de style, mais aussi en terme de dépendances (donc à confirmer sur la faisabilité @elias75015 @lowzonenose) :
Exemples :
Via la commande
npm run sample:modules, les exemples se trouvent dans le dossier :DrawingInteraction
Dossier :
DrawingInteractionStyleDialog
Dossier :
StyleDialogAjouté
Modification dépendances / CSS
"sass": "^1.95.1","sass-loader": "^16.0."style-loader": "^4.0.0","css-loader": "^7.1.2";hover-media-query: Méthode pour le hover sur les boutons (inactifs en mobile);button-state($text-color, $background): Permet la modification d'un bouton, avec :hover et :active compris (nécessaire d'instancier au préalable les variables--hover-tintet--active-tint);respond-from: Méthode générique pour appliquer des styles en fonctions des breakpoint (Points de rupture DSFR);Modification contrôles et interactions "génériques"
Modification du composant générique
Control.js:Ajout d'un écouteur d'événement sur la taille de la carte, avec deux composantes CSS :
--map-height: hauteur de la carte, en pixel;--map-width: largeur de la carte, en pixel;L'écouteur d'événement est ajouté lorsque le premier contrôle est ajouté à une carte.
Ajout des méthodes abstraites et génériques
_initialize,_initContaineret_initEvents, utilisé par la suite dans les autres contrôles (pas d'appel dans le constructeur pour ne pas poser de conflit avec les contrôles existant)Ajout de méthodes dans le fichier
Helper.js:setIcon: ajoute une icône via une classe, un svg ou autre chose.Ajout de composants "génériques" pour la créations d'autres composants, pour l'instant dans un dossier
Toggle, à savoir :Toggle.js: Contrôle correspondant à un bouton simple sur la carte, avec état activé ou non. Sert surtout de base pour les autres type de toggle.ToggleInteraction.js: Contrôle liant un bouton avec une interaction sur la carte. L'interaction est activé / désactivé en fonction de l'état du bouton.ToggleContent.js: Contrôle liant un bouton à un panneau / modale sur la carte. Cette modale est une instance de la classeDialog.js, mais elle permet d'avoir des "helper" pour modifier facilement le dialog.Dialog.js: Contrôle créant un panneau sur la carte, positionné à gauche ou à droite et ayant 3 variantes de tailles. Le panneau comprend un titre avec une icône (optionnelle) et un contenu. Pour les panneaux nécessitant une navigation tertiaire, il est possible de l'ajouter via l'optionsitems, correspondant au contrôleTabNav, contenant lui même desTabNavItem`.TabNavItem.js: Contrôle correspondant à un élément de la navigation tertiaire. Possède un titre, une icône (optionnelle) et un contenu. Une fonction peut être lancée à l'ouverture ou à la fermeture de l'élément. N'a pas besoin d'être (voire ne doit pas être) ajouté à la carte via la méthodesetMap.TabNav.js: Contrôle correspondant à une navigation tertiaire. Gère notamment le fait qu'un seul élément ne peut être ouvert à la fois.Ajout d'interaction (dossier
Interactions) étendant les interactions natives openlayer :Drawing.js: étend l'interaction Draw. Permet notamment de gérer le style (défini dansselectStyle.jsetselectFlatStyle.js, le dernier utilisant un flatStyle pour gérer le style), mais aussi de gérer des raccourcis claviers et de lier cela à une sélection.LongTouch.js: nouvelle interaction permettant de gérer un événement de type "longtouch".Modifying.js: étend l'interaction Modify. Gère notamment les liens avec une sélection donnée, les interactions de type "longTouch" ou même de double click par exemple. Permet aussi de gérer des raccourcis claviers et d'afficher un menu simple au clic droit.Selecting.js: étend l'interaction Select. Gère notamment le double click sur un événement sélectionné, ajoute une méthodeclearpour effacer la sélection avec un envoi d'événement et gère le style par défaut de la sélection.Ajout contrôle pour le dessin
Ajout d'un composant de dessin
Draw.js:ToggleContent, et contient une liste d'intéractions, qui sont ajoutées comme étant desToggleInteractionpour pouvoir les activer et désactiver facilement.Ajout de composant affichant des informations, dans le dossier
ContextMenu:InfoControl.jspour afficher des informations sur la carte (notamment indications pour le dessin);SimpleMenu.js, plus light et moins dense que le contrôleContextMenu;Ajouté ensuite
Modification du composant Dialog
Modification du contrôle
Dialog.jspour ajouter des boutons de footer via l'attributfooteret la méthode setFooterContent.Il est possible d'ajouter des boutons via footer.buttons et du contenu au dessus, via footer.content.
Modification du composant de dessin
Refonte du contrôle de dessin
Draw.js, avec intégration d’un panneau de contenu, d’un groupe de boutons d’interactions et d'un comportement par défaut :StyleDialog.js, via l'optionstyle:truedans le constructeur :onStyle:onStyle:false: remontée des événements"style"uniquement;onStyle: (property, value, features) => ...: application de la fonction sur les entités sélectionnées;Inputs de style
Ajout d'input de style, héritant de la classe générique
Control.js.Le but est de lier une propriété (à priori propriété flat-style, par exemple
"fill-color"), avec un input conforme aux attentes (pas simplement une sélection).Les fichiers sont trouvables dans le dossier
Input.La gestion des styles a été faites pour le mode DSFR / non-DSFR directement dans le dossier CSS
Input, avec une gestion commune et une gestion par thème.Les contrôles créées sont :
DefaultInput
Composant de base pour les champs de formulaire de style
DefaultInput.js:attributes, ajouté directement à l'input ou à la sélection;InputNumber
Extension de DefaultInput dédiée aux valeurs numériques (
<input type="number">)InputNumber.js:CustomSelect
Select personnalisé accessible, basé sur un modèle combobox
CustomSelect.js:CustomSelectGrid
Extension de CustomSelect en mode grille
CustomSelectGrid.js:InputColor
Extension de CustomSelectGrid dédiée aux couleurs
InputColor.js, créée pour faciliter l'utilisation des couleurs (devra être amélioré à terme) :Sans couleur;Gestion de formulaire de style
Ajout d'une classe pour le formulaire de style, pouvant contenir des inputs / select basiques HTML (toujours liés à des propriétés flatStyle) ou des input customisés, soit de type
DefaultInput, soit d'un autre type, à condition d'avoir les méthodesgetInput()etgetElement().Les fichiers sont trouvables dans le dossier
StyleDialog, les fichiers CSS dansCSS/Controls/StyleDialog.Les classes et instances créées sont :
FlatStyleForm
Classe générique de style flat OpenLayers
FlatStyleForm.js:form.addInput(config), avec en paramètreconfig.inputcorrespondant à un objet ayant une méthodegetInputetgetElementGPFflatStyleForm.scsspour plus d'informations sur la gestion de cela).styleForm
Instance de
FlatStyleForm.js, pour la gestion du style des entitésstyleForm.js:labelForm
Instance de
FlatStyleForm.js, pour une gestion simple des étiquetteslabelForm.js:StyleDialog
Classe héritant de
Dialog.js, permettant de lier le dialogue de style avec une sélectionStyleDialog.js:styleForm.jsetlabelForm.js, chacun mis dans des onglets de la navigation tertiaire);À améliorer / modifier