Skip to content

Architecture du Helper ​

Vue d'ensemble du code pour s'orienter avant de contribuer. Le point d'entrée est main.user.ts ; tout le reste vit dans src/. Les fichiers cités sont la source de vérité ; cette page ne fait qu'en dessiner la carte.

Flux au démarrage ​

main.user.ts attend l'initialisation du SDK puis enchaîne :

  1. unsafeWindow.SDK_INITIALIZED → récupère l'instance via unsafeWindow.getWmeSdk({ scriptId, scriptName }).
  2. activateLanguage() : lit la locale du WME et cale i18next dessus.
  3. createLayers() : instancie chaque couche et la range dans une Map<string, Layer>.
  4. addScriptTab() : enregistre l'onglet du script (wmeSDK.Sidebar.registerScriptTab()) et le remplit.
  5. Sur l'événement wme-ready : restoreState() de chaque couche (rétablit les cases cochées et les rendus).

Le modèle de couches ​

Toute la logique carte s'organise autour d'une hiérarchie de couches. Chaque couche possède sa case dans le sélecteur de couches, ses événements et sa persistance.

ClasseFichierRôle
Layer (abstraite)src/layer.tsSocle : ajoute la case (LayerSwitcher.addLayerCheckbox), gère le toggle (wme-layer-checkbox-toggled → sauvegarde + addToMap/removeFromMap), restaure l'état.
TileLayersrc/tileLayer.tsCouche raster (tuiles WMTS swisstopo). Piloté par la config : name, servers, tileWidth/Height, fileName, zIndex.
FeatureLayer (abstraite)src/featureLayer.tsCouche vecteur. Gère render / re-filtrage / clics / wme-map-move-end. Sous-classes à implémenter : fetchData (générateur async), mapRecordToFeature, getRecordId, shouldDrawRecord, featureClicked.

État persisté via src/storage.ts (saveLayerState, isLayerEnabled).

Barre latérale ​

L'UI de l'onglet est un arbre d'éléments (src/sidebar.ts) : SidebarTab contient des SidebarSection, Paragraph et SidebarItem. Chaque élément a une méthode render() qui produit du HTML ; le tout est injecté dans tabPane.innerHTML.

Traductions ​

i18next, namespace common. Les clés sont résolues par i18next.t("common:...", "fallback") et vivent dans locales/<lang>/common.json (de, en, fr, it), câblées par locales/i18n.

Chaîne de build ​

main.user.ts + src/  →  Rollup  →  .out/main.user.js  →  + header.js  →  releases/*.user.js

npm run watch fait tourner cette chaîne en continu ; npm run build la fait une fois.

Carte de src/ ​

  • Couches : layer.ts, tileLayer.ts, featureLayer.ts, sbbDataLayer.ts, publicTransportStopsLayer.ts, clusterManager.ts
  • Pipeline arrêts TP : stopCityMatcher.ts, stopGeometry.ts, stopNameCleaner.ts, stopNameFormatter.ts, stopValidity.ts (+ leurs *.test.ts)
  • POI / venues : venueMatcher.ts, wazeVenueFetcher.ts
  • Vérif noms de rue : street-name-checker/ (module à part)
  • Infra : storage.ts, utils.ts, reloadButton.ts

Modules à part ​

Le vérificateur de noms de rue (initStreetNameChecker) tourne avec son propre scriptId et son propre onglet ; registerScriptTab() lève une erreur si le scriptId de l'hôte possède déjà un onglet.

Déjouons le trafic, ensembleGemeinsam dem Verkehr entfliehenSuperiamo il traffico, tutti assiemeOutsmarting traffic, together

Waze Community Switzerland · Documentation communautaire, non affiliée à Waze/Google