Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
3d62890
docs(wcag): specyfikacja fazy 3 — naprawy wykrywalne automatem + bram…
mpasternak Aug 17, 2026
ab67624
docs(wcag): korekty specu fazy 3 po recenzji adwersarialnej
mpasternak Aug 18, 2026
f9817a8
docs(wcag): korekty specu fazy 3 po recenzji Codeksa — dwa blokery
mpasternak Aug 18, 2026
0da1f16
docs(wcag): plan wdrozenia fazy 3 — siedem zadan, kazde z wlasnym testem
mpasternak Aug 25, 2026
1213a34
docs(wcag): plan — domknij liste parametryzacji testu etykiet
mpasternak Aug 25, 2026
1fdc966
feat(wcag): axe-core dostepny lokalnie i w obrazie CI
mpasternak Aug 25, 2026
851e732
fix(wcag): dostepne nazwy dla widocznych pol "suggested-title" (1.3.1)
mpasternak Aug 25, 2026
b6574ca
fix(wcag): pusty aria-label nie liczy sie jako dostepna nazwa w tescie
mpasternak Aug 25, 2026
ce71517
fix(wcag): przyciemnienie dwoch szarosci do progu 4.5:1 (1.4.3)
mpasternak Aug 25, 2026
67a86fe
fix(wcag): kontrast linkow breadcrumbs w motywie app-green (1.4.3)
mpasternak Aug 25, 2026
e9ad755
feat(wcag): bramka axe-core na trzech publicznych stronach, prog zero
mpasternak Aug 25, 2026
374e3f6
fix(wcag): runda poprawek bramki axe — 5 znalezisk z recenzji
mpasternak Aug 25, 2026
eddd380
docs(wcag): pomiar kontrastu w szesciu motywach
mpasternak Aug 25, 2026
0b3c0a3
docs(wcag): newsfragment dla fazy 3
mpasternak Aug 25, 2026
06515a1
fix(wcag): runda poprawek bramki axe — 7 znalezisk z recenzji calosci
mpasternak Aug 25, 2026
fe60291
docs(wcag): przenies dwa drobiazgi z ledgera do dokumentu trwalego
mpasternak Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,9 @@ TODO-*.md
# Rollbar.js kopiowany z node_modules przez grunt (build artifact, nie commitować)
src/bpp/static/rollbar/

# axe-core kopiowany z node_modules przez grunt (build artifact, nie commitować)
src/bpp/static/axe/

# SDD workflow scratch (briefs, reports, ledger, diffs)
.superpowers/

Expand Down
20 changes: 19 additions & 1 deletion Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,15 @@ module.exports = function (grunt) {
'cp node_modules/rollbar/dist/rollbar.umd.min.js ' +
'src/bpp/static/rollbar/rollbar.umd.min.js'
},
copyAxe: {
// axe-core dla bramki dostepnosci. Kopiujemy do statykow tym
// samym wzorcem co Rollbara, bo obraz CI `test-runner` NIE ma
// node_modules — wstrzykiwanie prosto stamtad dziala lokalnie
// i pada na CI.
command: 'mkdir -p src/bpp/static/axe && ' +
'cp node_modules/axe-core/axe.min.js ' +
'src/bpp/static/axe/axe.min.js'
},
collectstatic: {
command: 'uv run src/manage.py collectstatic --noinput -v0 --traceback'
}
Expand Down Expand Up @@ -331,20 +340,29 @@ module.exports = function (grunt) {
'shell:esbuildThree',
'shell:patchBundle',
'shell:copyRollbar',
'shell:copyAxe',
'shell:collectstatic',
'stampBuild'
]);
// `build-non-interactive` CELOWO nie dotyka sentinela: pomija
// `collectstatic`, wiec nie spelnia tego, co `make assets` obiecuje.
// Uzywaja go tylko Dockerfile'e, gdzie `make` nie wystepuje.
//
// `shell:copyAxe` MUSI tu byc: to jedyna lista tasków, ktora faktycznie
// biegnie w stage'u `test-assets-builder` obrazu CI (`docker/bpp_base/
// Dockerfile`, `RUN npx grunt build-non-interactive`) — `build` (z
// `collectstatic`) tam nigdy sie nie wykonuje. Bez tego wpisu axe.min.js
// istnialby lokalnie (przez `make assets` -> `build`), ale nie trafilby
// do obrazu test-runnera.
grunt.registerTask('build-non-interactive', [
'concurrent:themes',
'shell:linkSitePackages',
'shell:esbuild',
'shell:esbuildCytoscape',
'shell:esbuildThree',
'shell:patchBundle',
'shell:copyRollbar'
'shell:copyRollbar',
'shell:copyAxe'
]);

// Rename the original watch task and create an alias that builds first
Expand Down
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,10 @@ production-assets: distclean assets ## Pełny clean + build assetów pod produkc
# usuń ze staticroot niepotrzebne pakiety (Poetry pyproject.toml exclude
# nie do końca to załatwia...)
rm -rf src/django_bpp/staticroot/{qunit,sinon}
# axe-core (`shell:copyAxe`) to biblioteka testowa dla bramki axe
# (src/integration_tests/test_wcag_bramka_axe.py) — 580 KB, którego nic
# na produkcji nie ładuje. Ten sam wzorzec jak qunit/sinon wyżej.
rm -rf src/django_bpp/staticroot/axe
rm -rf src/django_bpp/staticroot/sitemap-*
rm -rf src/django_bpp/staticroot/grappelli/tinymce/
rm -rf src/django_bpp/staticroot/autocomplete_light/vendor/select2/tests/
Expand Down
7 changes: 6 additions & 1 deletion docker/bpp_base/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -168,11 +168,16 @@ RUN /app/.venv/bin/python src/manage.py compilemessages -v0 -l pl --traceback
# Source maps sluza tylko browser devtools podczas debugowania JS/CSS;
# w prod 404 na .map pojawia sie w konsoli gdy user otworzy devtools —
# bez wplywu na dzialanie aplikacji.
# R17: --ignore axe wycina axe-core (`shell:copyAxe` w Gruntfile.js, ~580 KB
# axe.min.js), skopiowany do statykow WYLACZNIE dla bramki dostepnosci Playwright
# (src/integration_tests/test_wcag_bramka_axe.py) i przez `build-non-interactive`
# trafiajacy takze do tego stage'a. Nic na produkcji go nie laduje — sam wzorzec
# co sinon/qunit powyzej.
RUN DJANGO_BPP_SECRET_KEY=build-time-only-not-used \
STATIC_ROOT=/app/staticroot.baked \
/app/.venv/bin/python src/manage.py collectstatic \
--noinput -v0 --traceback \
--ignore sinon --ignore qunit --ignore '*.map'
--ignore sinon --ignore qunit --ignore axe --ignore '*.map'

# R16: prekompresja gzip dla `gzip_static on` po stronie nginksa (bpp-deploy,
# defaults/webserver/_bpp-locations.conf). Ta dyrektywa jest tam wlaczona od
Expand Down
Loading