From 8cca47715333a9dd34c1d3f6251857e26bde6907 Mon Sep 17 00:00:00 2001 From: oskar Date: Fri, 31 Jul 2026 16:27:19 +0200 Subject: [PATCH] =?UTF-8?q?Viewer:=20jedna=20regu=C5=82a=20stylu=20dla=20w?= =?UTF-8?q?=C4=99z=C5=82=C3=B3w=20typu=20"external"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jedyna ingerencja w logikę viewera w tym repo, wydzielona do osobnego commita zgodnie z ustaleniem. Kolor węzła jest sterowany danymi ("background-color": "data(color)"), więc odróżnienie kolorem załatwiła sama warstwa danych (poprzedni commit, zero zmian w viewerze). Kształt już nie — cytoscape'owa tablica stylów siedzi w viz.js. Dokładamy do niej DOKŁADNIE jedną regułę: selector: 'node[type = "external"]' shape: round-diamond, border-style: dotted, font-size: 10 To ta sama konwencja co istniejące reguły node[?stale] i node[status = "deprecated"] — selektor po polu danych. Reguła jest wstawiana przed node[?stale], czyli przed node:selected, więc podświetlenie zaznaczenia nadal wygrywa. Podmiana dzieje się w locie, na stringu wstawianym do viz.html; plik viz.js w repo upstream pozostaje nietknięty. Jeśli upstream zmieni kotwicę, gen_viz.py przerywa z błędem zamiast po cichu wygenerować viewer bez reguły. Zweryfikowane: viz.js w viz.html == upstream + ta jedna reguła (diff bajtowy równy jej długości), viz.css nadal bajt w bajt, składnia osadzonego JS-a sprawdzona node --check. Co-Authored-By: Claude Opus 5 (1M context) --- gen_viz.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ viz.html | 12 ++++++++++++ 2 files changed, 64 insertions(+) diff --git a/gen_viz.py b/gen_viz.py index 0124d46..41f37f8 100644 --- a/gen_viz.py +++ b/gen_viz.py @@ -272,6 +272,58 @@ def _add_external(graph: dict, concepts: list) -> None: graph["palette"] = {**graph.get("palette", {}), EXTERNAL_TYPE: EXTERNAL_COLOR} +# --- jedyna ingerencja w viewer --------------------------------------- +# +# Kolor węzła jest sterowany danymi ("background-color": "data(color)"), +# więc odróżnienie kolorem nie wymaga tykania viewera. Kształt już tak: +# cytoscape'owa tablica stylów siedzi w viz.js. Dokładamy do niej DOKŁADNIE +# jedną regułę dla typu "external", analogicznie do istniejących reguł +# `node[?stale]` i `node[status = "deprecated"]` — ta sama konwencja +# selektora po polu danych. Reguła ląduje przed `node[?stale]`, czyli przed +# `node:selected`, więc podświetlenie zaznaczenia nadal wygrywa. +# +# Plik viz.js w repo upstream pozostaje nietknięty — podmiana dzieje się +# w locie, na stringu wstawianym do viz.html. + +_EXTERNAL_STYLE_ANCHOR = ' {\n selector: "node[?stale]",' + +_EXTERNAL_STYLE_RULE = """ { + // DODANE (gen_viz.py): węzły linków zewnętrznych. Inny kształt niż + // koncepty, żeby jedno i drugie dało się rozróżnić bez czytania + // etykiet i niezależnie od koloru. + selector: 'node[type = "external"]', + style: { + "shape": "round-diamond", + "border-style": "dotted", + "font-size": 10, + "color": "#0f766e", + }, + }, +""" + +_upstream_load_asset = G._load_asset + + +def _load_asset(name: str) -> str: + """Upstreamowy asset; do viz.js dokłada regułę stylu dla "external".""" + asset = _upstream_load_asset(name) + if name != "viz.js": + return asset + if _EXTERNAL_STYLE_ANCHOR not in asset: + raise SystemExit( + "gen_viz.py: nie znaleziono kotwicy stylu w viz.js — upstream " + "się zmienił, popraw _EXTERNAL_STYLE_ANCHOR przed regeneracją." + ) + return asset.replace( + _EXTERNAL_STYLE_ANCHOR, + _EXTERNAL_STYLE_RULE + _EXTERNAL_STYLE_ANCHOR, + 1, + ) + + +G._load_asset = _load_asset + + # --- łatki na generator upstreamowy ----------------------------------- _upstream_extract_links = G._extract_links diff --git a/viz.html b/viz.html index 02ec419..414de22 100644 --- a/viz.html +++ b/viz.html @@ -276,6 +276,18 @@ window.BUNDLE = {"nodes": [{"data": {"id": "oferty/alpenparks-rehrenberg", "labe "border-color": "#0f172a", }, }, + { + // DODANE (gen_viz.py): węzły linków zewnętrznych. Inny kształt niż + // koncepty, żeby jedno i drugie dało się rozróżnić bez czytania + // etykiet i niezależnie od koloru. + selector: 'node[type = "external"]', + style: { + "shape": "round-diamond", + "border-style": "dotted", + "font-size": 10, + "color": "#0f766e", + }, + }, { selector: "node[?stale]", style: {