Ce tutoriel concerne la release mapstore2-georchestra contenant au moins la version Mapstore 2021.02.xx.

Qu’est-ce qu’un thème ?

L’apparence MapStore2-georchestra utilise un fichier CSS d’afficher les éléments graphiques de MapStore2. On désignera ce fichier (et donc cet ensemble de règles communes à un fichier) comme un theme.

Un thème est donc un ensemble de règles de style CSS qui permettent d’afficher les éléments graphiques de MapStore2.

Pour Mapstore2-georchestra, un thème spécifique a été rajouté pour l’intégration de MapStore2 dans geOrchestra. Nous considéront ce thème comme thème par défaut. Il est disponible ici :

https://github.com/georchestra/mapstore2-georchestra/tree/master/themes/default

Il est donc possible de modifier l’apparence de l’interface en :

Prérequis

Ces prérequis concerne une distribution Linux Debian et permette de compiler un thème depuis les sources.

Pour pouvoir modifier ou créer un thème, vous devez installer :

Vous devez également disposer de :

Il est fortement conseillé de lire les documents suivants avant de commencer :

Avec ces prérequis, nous pourrons réaliser le build de la webapp mapstore2-georchestra, unique étape qui nous intéressera dans ce tutoriel.

Compilation des thèmes dans MapStore2-georchestra

Le format LESS

De façon générale, les thèmes utilisent des fichiers .less qui devront être compilés au format .css pour être lus par les navigateurs.
Aussi, les fichiers de style .less utilisent d’autres fichiers dont ils sont dépendants. Ces dépendances doivent être accessibles lors de la compilation pour que les feuilles de styles CSS créés soient correctement exploitables (lire la doc less pour plus de détails).

Localisation des fichiers

Dans MapStore2-georchestra, l’étape de compilation permettant de compiler les fichiers .less en .css est réalisée lors de la création de la webapp (.war) via le bundler webpack.

Tous les fichiers localisés dans le répertoire /themes du projet seront donc compilés pendant cette étape. Les fichiers .css seront ensuite disponibles au sein de la webapp dans /mapstore/dist/themes :
https://github.com/georchestra/mapstore2-georchestra/blob/50e9e4e2febc27576fa867d74f9e57476fa75ff3/webpack.config.js#L16

Pour résumer :

Modifier un thème

Pour modifier un thème comme le thème par défaut (dans themes/default) vous devez accéder aux sources du thème au sein du projet (GitHub) mapstore2-georchestra via le répertoire themes/default :
https://github.com/georchestra/mapstore2-georchestra/tree/master/themes

Ensuite, vous pouvez modifier le fichier variable.less qui contient les règles CSS principales du thème (commence par ms-).

Nous ne conseillons pas de modifier d’autres éléments du thème par défaut. Si vous devez appliquer beaucoup de modifications au sein d’un thème par défaut qui ne vous appartient pas, nous conseillons de créer un nouveau thème et de passer directement à l’étape suivante Créer un thème.

Pour terminer, vous devez réaliser un build de la webapp avant de la déployer à nouveau sur votre serveur :

cd mapstore2-georchestra
./build.sh [version_identifier]

Enfin, redémarrer le service tomcat si nécessaire :

service [email protected] restart

Vous devriez à présent voir les modifications appliquée sur le thème.

Il n’est pas conseillé de faire le build et seulement déployer les fichiers CSS compilés dans la webapp car un redémarrage du serveur reprendra les sources du .war par défaut et écraserai votre nouvelle configuration sans les fichiers publiés manuellement.

Créer un nouveau thème

La création d’un thème reprend les étapes de la section Modifier un thème. Nous rajouterons cependant en étapes la création des sources et la configuration de la webapp pour utiliser un nouveau thème.

Pour créer un nouveau thème nous conseillons de duppliquer un thème existant. Vous pouvez utiliser comme base le thème Dark disponible dans les sources de MapStore2 :
https://github.com/geosolutions-it/MapStore2/tree/c87f5fa9e5e744abc209d7a5e33b4682e22f04d9/web/client/themes/dark

cd mapstore2-georchestra
./build.sh
service tomcat-georchestra restart

Sur votre serveur, vous devriez avoir maintenant les fichiers de votre nouveau thème dans dans la webapp au sein du répertoire /mapstore/dist/themes/foo.

Configurer le thème par défaut

La configuration permet de :

Pour choisir le thème par défaut, vous devez ouvrir le fichier localConfig.json (localisé dans <datadir>/mapstore/configs/localConfig.json).

Identifier dans le fichier la configuration de l’état par défaut defaultState et rajouter le theme par défaut en utilisant comme ID le nom du fichier css de votre theme (localisé dans /dist/themes/foo/foo.css):

  "initialState": {
    "defaultState": {
      "theme":{
        "selectedTheme":{
          "id": "foo"
        }
      },

Accéder à votre carte par défaut pour voir la modification : <my.georchestra.fr>/mapstore/#/

Configurer les thèmes avec les contextes

Pour gérer la liste des thèmes disponibles à la création ou modification d’un contexte, vous devez ouvrir le fichier localConfig.json (localisé dans <datadir>/mapstore/configs.localConfig.json).

Identifier la configuration du contexteCreator qui doit être par défaut :

  {
    "name": "ContextCreator",
    "cfg": {
      "documentationBaseURL": "https://mapstore.geo-solutions.it/mapstore/docs/api/plugins",
      "saveDestLocation": "/admin",
      "backToPageDestRoute": "/admin"
    }
  },

Rajouter le thème par défaut et le nouveau thème foo à la liste des themes comme ceci (à adapter selon votre configuration initiale):

  {
    "name": "ContextCreator",
    "cfg": {
      "documentationBaseURL": "https://mapstore.geo-solutions.it/mapstore/docs/api/plugins",
      "saveDestLocation": "/admin",
      "backToPageDestRoute": "/admin",
      "themes":[
        {"id":"foo","type":"link","href":"dist/themes/foo.css"},
        {"id":"default","type":"link","href":"dist/themes/default.css"}
      ]
    }
  },

Créer maintenant un nouveau thème (ou modifier un contexte existant). La dernière étape Thème vous proposera mainetnant de choisir le thème foo.

Aller plus loin

http://docs.georchestra.geo-solutions.it/en/latest/developer/index.html
https://mapstore.readthedocs.io/en/latest/developer-guide/requirements/