fix(importer_publikacji): kafelki jak w kreatorze zgłoszeń, Wstecz bez starego układu, autodetekcja języka - #803
Open
mpasternak wants to merge 3 commits into
Open
fix(importer_publikacji): kafelki jak w kreatorze zgłoszeń, Wstecz bez starego układu, autodetekcja języka#803mpasternak wants to merge 3 commits into
mpasternak wants to merge 3 commits into
Conversation
Kafle wyboru źródła danych w importerze to `<a class="tile-card">` stojące
wewnątrz `.callout`, więc łapała je globalna reguła z `flash_messages.css`:
.callout a:not(.close-button) { font-weight: bolder; … }
.callout a:not(.close-button):hover { text-decoration: underline; }
Efekt: pogrubiony CAŁY kafel — razem z opisem, który miał być zwykłą
czcionką — i podkreślenie wszystkich linii tekstu po najechaniu myszą.
Kafle kreatora „Zgłoś publikację" wyglądają dobrze wyłącznie dlatego, że są
`<label>`, a nie `<a>`, więc reguła ich nie dotyczy.
Neutralizuje styl linku dla `.callout a.tile-card` (specyficzność remisowa
0,2,1, rozstrzygana kolejnością importu: `wizard_forms` idzie po `common`
we wszystkich motywach). Ikona dostaje kolor motywu jako jedyny akcent,
a kafle na obu ekranach unoszą się delikatnie pod kursorem — z wyłączeniem
przy `prefers-reduced-motion`.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dmq7jpU52KwQwPLp689ny6
… kroku 1 Po wejściu na importer, kliknięciu kafla i naciśnięciu „Wstecz" część przeglądarek pokazywała ekran sprzed przebudowy kroku 1 — radiowy wybór źródła i listę sesji pod spodem — czyli layout, którego nie ma już nawet w kodzie (usunięty w c2a63f9). Źródłem jest cache historii HTMX-a w localStorage. `hx-history="false"` na `#importer-wizard` blokuje wyłącznie ZAPIS snapshotu; `restoreHistory()` czyta cache bezwarunkowo. Wpis zapisany przed dodaniem tej flagi przeżywał więc bezterminowo — i, skoro zapisu nigdy już nie będzie, nic nie miało go nadpisać (HTMX podmienia wpis o danym URL-u dopiero przy zapisie, a LRU wyrzuca go dopiero po 10 innych stronach z HTMX-em). Nowy `history_cache.js` kasuje przy wejściu wpisy z prefiksem URL-a importera, zostawiając cudze (np. liveops). Ładowany przed htmx.min.js, prefiks wstrzykuje szablon przez `data-prefiks`. Odtworzone i zweryfikowane w przeglądarce: przed poprawką „Wstecz" wstawiał podstawiony snapshot bez pytania serwera, po poprawce wraca pełna strona z kafelkami. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dmq7jpU52KwQwPLp689ny6
…ncyjnych
Import pracy z `language="en"` (np. DOI 10.1007/s00005-017-0485-3 z CrossRef)
zostawiał pole „Język" puste, mimo że dostawca jawnie podaje język.
Przyczyna: `_resolve_jezyk` — i `Komparator.porownaj_language` przed nim —
pytają wyłącznie o `Jezyk.skrot_crossref`. Tę kolumnę wypełnia jedynie
migracja `0410`, i tylko dla polskiego; enum `Jezyk.SKROT_CROSSREF` ogranicza
przy tym listę wyboru w adminie do {en, es, pl}, więc redakcja nie ustawi tam
np. „de". Na czystej instalacji BPP jedynym rozpoznawanym językiem był więc
polski, a fallback z FD#389 (pomyślany właśnie dla de/fr/ru/uk) był w praktyce
nieosiągalny. Testy FD#389 tego nie łapały, bo same zakładały rekord `Jezyk`
z ustawionym `skrot_crossref` — czyli stan, którego produkcja nie ma.
Poprawne kody ISO są w BPP od dawna, tyle że w innej kolumnie: `kod_bcp47`,
wypełnianej kuratorsko przez fixture `jezyk.json` i migrację `0480` (pl, en,
de, fr, es, ru, it). `_resolve_jezyk` sięga po nią, gdy `skrot_crossref` nic
nie zwróci — jawne mapowanie redakcji zachowuje pierwszeństwo. Region jest
pomijany po obu stronach (`en-GB` ↔ `en`), bo i CrossRef, i langdetect
potrafią go zwrócić. Ta sama ścieżka obsługuje język streszczeń.
Testy pokrywają całą drogę, także jej koniec: krok „Weryfikacja" musi
wyrenderować wykryty język jako `selected` w liście wyboru — bez tej asercji
samo mapowanie mogłoby być zielone przy pustym polu w formularzu.
Zweryfikowane na dumpie produkcyjnym i realnym API CrossRef: dla tego DOI
sesja importu dostaje teraz język „angielski".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dmq7jpU52KwQwPLp689ny6
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.
Trzy niezależne poprawki w importerze publikacji, zgłoszone w jednej sesji.
1. Kafelki wyboru źródła wyglądały inaczej niż w kreatorze zgłoszeń
Kafle importera to
<a class="tile-card">stojące wewnątrz.callout, więcłapała je globalna reguła z
flash_messages.css:Efekt: pogrubiony cały kafel — razem z opisem, który miał być zwykłą
czcionką — i podkreślenie wszystkich linii tekstu po najechaniu myszą. Kafle
kreatora „Zgłoś publikację" wyglądają dobrze wyłącznie dlatego, że są
<label>, a nie<a>, więc reguła ich nie dotyczy.Neutralizuje styl linku dla
.callout a.tile-card(specyficzność remisowa0,2,1, rozstrzygana kolejnością importu:
wizard_formsidzie pocommonwe wszystkich motywach). Ikona dostaje kolor motywu jako jedyny akcent, a
kafle na obu ekranach unoszą się delikatnie pod kursorem — z wyłączeniem
przy
prefers-reduced-motion.2. „Wstecz" przywracał układ kroku 1 sprzed przebudowy
Po wejściu na importer, kliknięciu kafla i naciśnięciu „Wstecz" część
przeglądarek pokazywała radiowy wybór źródła i listę sesji pod spodem —
layout usunięty w
c2a63f932, nieobecny już nawet w kodzie.Źródłem jest cache historii HTMX-a w
localStorage.hx-history="false"na#importer-wizardblokuje wyłącznie zapis snapshotu;restoreHistory()czyta cache bezwarunkowo. Wpis zapisany przed dodaniem tej flagi przeżywał
więc bezterminowo — i, skoro zapisu nigdy już nie będzie, nic nie miało go
nadpisać (HTMX podmienia wpis o danym URL-u dopiero przy zapisie, a LRU
wyrzuca go dopiero po 10 innych stronach z HTMX-em).
Nowy
history_cache.jskasuje przy wejściu wpisy z prefiksem URL-aimportera, zostawiając cudze (np. liveops). Ładowany przed
htmx.min.js,prefiks wstrzykuje szablon przez
data-prefiks.3. Autodetekcja języka nie działała poza polskim
Import pracy z
language="en"(np. DOI10.1007/s00005-017-0485-3z CrossRef) zostawiał pole „Język" puste, mimo że dostawca jawnie podaje
język.
_resolve_jezyk— iKomparator.porownaj_languageprzed nim — pytająwyłącznie o
Jezyk.skrot_crossref. Tę kolumnę wypełnia jedynie migracja0410, i tylko dla polskiego; enumJezyk.SKROT_CROSSREFogranicza przy tymlistę wyboru w adminie do
en / es / pl, więc redakcja nie ustawi tam np.„de". Na czystej instalacji jedynym rozpoznawanym językiem był polski,
a fallback z FD#389 (pomyślany właśnie dla de/fr/ru/uk) był w praktyce
nieosiągalny. Testy FD#389 tego nie łapały, bo same zakładały rekord
Jezykz ustawionymskrot_crossref— czyli stan, którego produkcja nie ma.Poprawne kody ISO są w BPP od dawna, tyle że w innej kolumnie:
kod_bcp47,wypełnianej kuratorsko przez fixture
jezyk.jsoni migrację0480(pl, en,de, fr, es, ru, it).
_resolve_jezyksięga po nią, gdyskrot_crossrefnicnie zwróci — jawne mapowanie redakcji zachowuje pierwszeństwo. Region jest
pomijany po obu stronach (
en-GB↔en). Ta sama ścieżka obsługuje językstreszczeń.
Bez migracji danych — działa od razu po wdrożeniu, na istniejących danych
referencyjnych.
Weryfikacja
pytest src/importer_publikacji/ src/crossref_bpp/— 914 passed, 1 skippedvitest tests/js/importer-history-cache.test.js— 7 passedpre-commit— exit 0podstawiony snapshot bez zapytania do serwera) i sprawdzony po niej
tego DOI sesja dostaje język „angielski". Test domyka też koniec ścieżki —
krok „Weryfikacja" renderuje wykryty język jako
selectedZnane ograniczenie (poza zakresem)
Pełne pokrycie mają języki skonfigurowane kuratorsko: pl, en, de, fr, es, ru,
it. Pozostałe rekordy mają w
kod_bcp47kody trzyliterowe wzięte ze skrótu(
ces,nld,ukr), a CrossRef i langdetect zwracają dwuliterowe — więc np.praca czeska nadal nie dopasuje języka. Domknięcie wymaga tablicy
ISO 639-1 ↔ 639-2.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Dmq7jpU52KwQwPLp689ny6