Viewer: jedna reguła stylu dla węzłów typu "external"
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) <noreply@anthropic.com>
This commit is contained in:
parent
c1c53d1b6c
commit
8cca477153
52
gen_viz.py
52
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
|
||||
|
|
|
|||
12
viz.html
12
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: {
|
||||
|
|
|
|||
Loading…
Reference in a new issue