Skip to content

chore(deps): plotly.js 2.35 → 4.1.2 (maplibre-gl critical XSS, #883) - #885

Merged
mpasternak merged 2 commits into
devfrom
chore/plotly-4
Oct 24, 2026
Merged

mpasternak merged 2 commits into
devfrom
chore/plotly-4

Conversation

@mpasternak

@mpasternak mpasternak commented Oct 22, 2026 •

Copy link
Copy Markdown
Member

Closes #883. Wydzielone z #731.

Po co

Dependabot #358: maplibre-gl ≤ 6.4.0 ma krytyczny XSS w DOM.sanitize(). Trafiał do nas tylko pośrednio przez plotly.js 2.35.3 (maplibre-gl 4.7.1). plotly.js 4.1.2 ciągnie maplibre-gl 6.11.2, a yarn.lock ma teraz tylko tę jedną wersję.

Breaking changes plotly.js 3.0 / 4.0, które nas dotyczyły

Zmiana Co zrobiłem
v3: title jako string jest ignorowany (wykres bez tytułu), a titlefont/titleside zostały usunięte Wszędzie przepisałem na title: {text, side, font}: ewaluacja_metryki/lista.html, szczegoly.html, ewaluacja_optymalizacja/discipline_comparison.html oraz JSON wykresów admin_dashboard/views/{time_series,charakter_stats,base}.py
v4: modebar domyślnie pokazuje „Upload to Cloud” (showSendToCloud: true), który po potwierdzeniu wysyła dane wykresu na cloud.plotly.com Wyłączyłem go globalnie: Plotly.setPlotConfig({locale: 'pl', showSendToCloud: false}) + PLOT_CONFIG w lazy-charts.js
v4: oś nakładana (overlaying) domyślnie ma tickmode: 'sync' Dla yaxis2 (sloty) w szczegółach metryki zostawiłem dotychczasowe tickmode: 'auto'
v4: etykiety osi kategorii na wąskim wykresie nie obracają się już same Wykres „Edycje w dni tygodnia” dostał tickangle: 30 („Poniedziałek” nachodził na „Wtorek”)

Pozostałe breaking changes nas nie dotyczą: trasy mapbox, MathJax, transforms, kolory rgb() z ułamkami 0–1 (używamy tylko liczb całkowitych), splom, geo, hoveranywhere. dist/plotly.min.js i dist/plotly-locale-pl.js są w 4.x pod tymi samymi ścieżkami.

Testy

  • Nowy admin_dashboard/tests/test_plotly_layout_format.py przechodzi po wszystkich endpointach wykresów i sprawdza, że żaden title w layoucie nie jest stringiem i że nie ma usuniętych atrybutów. Na starym kodzie pada 10/10, po zmianie przechodzi.
  • pytest src/admin_dashboard src/ewaluacja_metryki src/ewaluacja_optymalizacja/tests src/integration_tests/test_admin_dashboard_lazy_charts.py daje 247 passed.
  • Przegląd wizualny na dumpie produkcyjnym (2026-04-28) przez run-site + Playwright: 23 wykresy, czyli dashboard admina (9), lista metryk (7 widoków), szczegóły metryki (4) i porównanie dyscyplin (3). Wszystkie renderują się na 4.1.2 z tytułami wykresów, osi i colorbarów, bez błędów JS i bez przycisku chmury. 14 wykresów porównałem pikselowo z renderem na 2.35.3 i są identyczne, poza obrotem etykiet dni tygodnia (poprawione wyżej). Porównanie dyscyplin (w dumpie jedna dyscyplina) też renderuje się poprawnie.

Uwaga dla recenzenta: na szczegółach metryki etykieta „50” prawej osi „Sloty” jest przycięta przez legendę, a na donutach charakterów formalnych zewnętrzne etykiety wychodzą poza ramkę. Na 2.35.3 wygląda to tak samo, więc nie jest to regresja z tego PR-a.

🤖 Generated with Claude Code

https://claude.ai/code/session_01V5NgRzHfVBb6qGi5agZDvw

mpasternak and others added 2 commits October 22, 2026 23:04
plotly.js 4.1.x ciągnie maplibre-gl 6.11.2, co zamyka krytyczny alert
Dependabota #358 (XSS w DOM.sanitize, maplibre-gl <= 6.4.0).

Dostosowanie do breaking changes:
- v3: `title` jako string oraz `titlefont`/`titleside` nie są już
  obsługiwane — przepisane na `title: {text, side, font}` w szablonach
  ewaluacja_metryki/ewaluacja_optymalizacja i w JSON-ie wykresów
  admin_dashboard (+ test regresji),
- v4: modebar domyślnie pokazuje przycisk "Upload to Cloud" (wysyła
  dane wykresu na cloud.plotly.com) — wyłączony globalnie
  `showSendToCloud: false`,
- v4: oś nakładana domyślnie dostaje `tickmode: 'sync'` — dla yaxis2
  w szczegółach metryki zostawiamy dotychczasowe `auto`.

Closes #883

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V5NgRzHfVBb6qGi5agZDvw
@mpasternak
mpasternak merged commit 64067c3 into dev Oct 24, 2026
9 of 11 checks passed
@mpasternak
mpasternak deleted the chore/plotly-4 branch October 24, 2026 07:10
mpasternak added a commit that referenced this pull request Oct 24, 2026
)

Po #885 'yarn install' w obrazie testowym i w jobie vitest pada na
'The engine "node" is incompatible with this module. Expected version
">=22.0.0". Got "20.20.2"'. Node 20 jest i tak EOL od kwietnia 2026.


Claude-Session: https://claude.ai/code/session_01V5NgRzHfVBb6qGi5agZDvw

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Aktualizacja plotly.js 2.x → 4.x (maplibre-gl critical XSS, Dependabot #358)

1 participant