IHM improvements: hosted mode, config modal, isolated devices, nodal order#110
Merged
Conversation
…g, dates, ouvrages isolés - Sécurité Space : import de fichier local désactivé sur une IHM déportée (onglet Local masqué + invite à l'IHM locale) ; /api/pick_grid_file et /api/load_grid renvoient 403 quand hosted (fichiers potentiellement confidentiels). - Carte France : nom du poste affiché au survol (#mapTip) et curseur en croix (pointeur précis) sur les disques au lieu d'une main. - Modale ⚙ Config : algorithmes pluggables par phase (avec le défaut « libtopo ») et chemins de sauvegarde/rechargement des scénarios/séquences ; GET/POST /api/config. - Scénarios : conservation de la date/heure de la topo de départ (meta.dt, local ou RTE7000) et de la topo cible (meta.cible_dt) pour un fichier RTE7000 dont la cible n'a pas été modifiée. - Topo nodale cible : champ « ⌀ Isoler » + zone de dépose pour déclarer des ouvrages isolés ; le backend les laisse hors partition ET les déconnecte réellement (nœud 0-barre, Session._isoler_dans_etat) au lieu d'un faux nœud à un seul ouvrage. - Tests : tests/manoeuvre/test_ihm_ui_improvements.py ; doc docs/manoeuvre/ihm.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk
…ivé » Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk
…étaillé Les départs « haut » et « bas » d'un nœud étaient répartis sur deux rangées indépendantes (espacement par rang propre à chaque rangée), donc sans axe horizontal commun : la position relative gauche→droite ne reflétait pas le schéma détaillé. buildNodaleSVG attribue désormais une colonne par rang d'abscisse SLD sur l'ensemble des départs du nœud (haut et bas confondus) ; le côté (haut/bas) et l'ordre gauche→droite sont conservés exactement comme dans la vue détaillée. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk
…l nodal→détaillé, tests - /api/nodale_to_detaillee renvoie désormais `changes` (diff départ→cible) ; le front applique highlightChanges → organes verts/oranges affichés après « Calculer la topologie détaillée d'intérêt » (auparavant absents). - Verdict recalculé sur l'état FINAL (post-isolation) : les ouvrages isolés sont comptés à part (`nb_isoles`) et jamais comme des nœuds. Le statut affiche « N nœud(s) + M ouvrage(s) isolé(s) » au lieu d'un total gonflé (« obtenu 4 » pour 2 nœuds + 2 isolés). is_verified compare la partition réelle (hors isolés) à la cible visée. - Tests : test_ihm_ui_improvements.py (changes, nb_isoles, compte réel, ordre nodal) ; marqueurs de structure dans test_ihm_frontend_asset.py. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk
- Métadonnées de scénario enrichies : `created_at` (horloge serveur, à l'écriture) et `author` (facultatif) ajoutés au bloc meta et exposés par /api/scenarios. - Champ « ✍ votre nom » dans l'en-tête, à gauche de ⚙ Config : auteur des scénarios, mémorisé localement (localStorage) et modifiable à tout moment. - À la première sauvegarde sans nom déclaré, une modale demande l'auteur une fois, avec une coche « ne plus me redemander » (resolveAuthor/askAuthor). - Modale Recharger : chips ✍ auteur et 🕒 date de création ; l'auteur entre aussi dans la recherche texte. - Tests : created_at/author dans meta + list_scenarios + /api/save ; marqueurs de structure (authorName, authorModal, resolveAuthor, authorNoask). Doc à jour. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk
…ndex docs - README : nouvelle section « Getting Started » avec les recettes de lancement des deux points d'entrée — système expert (CLI main.py : scénario par défaut, contingence custom, backend pypowsybl) et IHM manœuvre (extra [ihm], modes --grid local et --dataset RTE7000). Entrée ajoutée à la table des matières. - README : section « Interactive Maneuver Interface » enrichie (commandes de lancement, points forts : édition nodale, ⌀ Isoler, carte d'exploration, modale ⚙ Config, champ ✍ login + date de création). - docs/README.md : description de ihm.md mise à jour (carte, config, isolés, métadonnées auteur/date) + lien vers Getting Started. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk
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.
Summary
This PR adds four major improvements to the maneuver IHM (interactive web interface):
Key Changes
Backend (
scripts/manoeuvre_ihm.py)Hosted mode detection & enforcement:
DATASET["hosted"]flag (auto-detected viaSPACE_IDenv var or--hostedCLI flag)/api/pick_grid_fileand/api/load_gridreturn403when hosted_HOSTED_IMPORT_MSGconstant with installation instructionsIsolated device disconnection (
_isoler_dans_etatmethod):nodale_to_detailleebefore topology calculationScenario metadata enhancements:
save_scenario()now acceptscible_dt(target topology date) andauthorparameterscreated_at(ISO format, server time) andauthorin scenario metadatalist_scenarios()exposes these fields for the reload modalConfiguration API (
/api/config):GET /api/configreturns available algorithms per phase + current save paths + hosted flagPOST /api/configupdates scenario/sequence directories (read-only when hosted)Enhanced
nodale_to_detailleeresponse:nb_isoles(count of isolated devices)changesfield (diff between initial and target states for highlighting)Frontend (
scripts/manoeuvre_ihm_assets/index.html)Hosted mode UI:
dismissHostedNote()function to hide the bannerConfiguration modal (
#configModal):openConfig(),saveConfig(),closeConfig()functionsAuthor field:
#authorModal) for first-time author entryinitAuthor(),confirmAuthor(),closeAuthor()functionsMap improvements:
crosshairon substation disks for precise targeting#mapTipelement displays substation name on hover, follows mouseNodal view enhancements:
nodIsolateSel()function to move selected feeders to isolated zone.droptargetCSS class for visual feedbackScenario list display:
cible_dt(target date) if different from departure dateauthorandcreated_atmetadata as chipsTests (`tests/manoe
https://claude.ai/code/session_0144YJtJLNn3gaBHh2mF9dQk