Releases: peckadesign/pdForms
Oprava závislosti jquery
Oprava závislosti jQuery → jquery.
Full Changelog: v4.3.1...v4.3.2
Úprava frontendových závislostí
jQueryanette.ajax.jspřesunuty dooptionalDependencies. V případě, že není využíváno ajaxových pravidel z tohoto balíčku, nejsou tyto závislosti potřeba. Projektově je možné používat např. Naja.- Přesunutí
nette-formsdopeerDependencies.
Full Changelog: v4.3.0...v4.3.1
Rozšíření možností pro vkládání validační zprávy
Byla upravena logika pro vkládání validačních zpráv. Samotné vyhledávání placeholder elementu pro validační zprávy (a třídy označující validační stav) se nezměnila. Před samotným vložením validační zprávy se ale ještě hledá element .pdforms-messages__aria. Pokud je nalezen, použije se ten, jinak se použije přímo placeholder. Data atributy pro pozici zprávy zůstávají zachovány.
Díky tomu je možné poskytnout lepší UX pro uživatele odečítačů obrazovek, kdy danému elementu můžeme přidat atribut aria-live="polite" a tím zajistit jeho čtení při změně. Zároveň, protože jde o dedikovaný element pouze pro validační zprávy, nedochází ke čtení již dříve přečtených částí formuláře. Tj. není čtený opakovaně input, label a případné jakékoli další elementy, které byly v placeholderu, ale nijak se validací nezměnily.
Základní struktura kódu pro použití je následující:
<p> <!-- Na tento element budou přidané stavové validační CSS třídy-->
<label for="email">E-mail:</label>
<input type="email" id="email" name="email" ...>
<span class="pdforms-messages__aria" aria-live="polite"></span> <!-- Do tohoto elementu budou vloženy validační zprávy -->
</p>Složitější struktura může vypadat například takto. V tomto případě by přidání aria-live="polite" na celý fieldset vedlo ke špatnému UX, kdy by byl zopakován velký kus dokumentu.
<fieldset class="pdforms-messages">
<legend>Výběr dopravy</legend>
<div class="pdforms-message__aria" aria-live="polite"></div> <!-- Odečítač obrazovky přečte pouze vložené validační zprávy -->
<!-- Např. vypsané radio buttony pro jednotlivé dopravy, včetně delších popisů, cen, atd. -->
</fieldset>Oprava live validací
Dokončení revertu z předchozího release. Při live validaci je potřeba mazat na začátku zprávy. Toto bylo původně přesunuto do validateControl, ale poté odebráno a přesunuto do validateForm. Nyní tedy vracíme ještě i do liveValidation, aby zprávy byly odebírány při každé opětovné validaci inputu.
Mazání zpráv při validaci formuláře uvnitř `validateForm`
Zprávy se nyní nemažou v rámci validateControl, ale při validateForm. Původní úprava řešila problém #58, nicméně zanesla chybu, kdy mohlo dojít k nezobrazení chyb. Pokud bylo po zobrazení chyby validováno další pravidlo, jehož součástí byla podmínka (zanořené rules) a toto pravidlo bylo validní (respektive jeho první část - podmínka), došlo ke smazání původní chyby. To bylo způsobeno rekurzivním voláním validateControl. Řešení je revert původní úpravy (nemazat zprávy uvnitř validateControl) a zároveň přetížení validateForm, na jehož začátku smažeme zprávy v celém formuláři a poté jej validujeme.
fix kompatibility s nette/forms
v releasu 4.0.0 se změnilo IControl na Control, který je v nette/forms od verze 3.1
podpora v composer.json, ale zůstala i pro nette/forms 2.4
vzhledem k tomu, že IControl bylo z nette/forms odstraněno až ve verzi 4.0, tak vrátíme úpravu zpět, ať je zachována podpora nette/forms uvedená v composer.json
Úprava scrollování po validaci
Pokud validace vkládá validační zprávu před input, musíme scrollovat na zprávu místo inputu.
Oprava mazání chyb z `RadioNodeList`
Pokud byl element RadioNodeList, do pdForms.removeMessages se posílal chybně místo Element právě RadioNodeList, což mohlo způsobit chybu. Nyní je v metodě validateControl správně pořadí tak, že nejprve ošetříme RadioNodeList a teprve poté voláme removeMessages.
Správné mazání validačních zpráv při odeslání formuláře
Přesunutí mazání validačních zpráv z live validace obecně do validateControl. V případě live validací se nic nemění, ale zprávy se nově mažou např. i při volání validateForm. Díky tomu při odeslání formuláře dojde vždy ke smazání (potenciálně) neaktuálních chyb, např. o vyplnění přes autofill (které nevyvolává change událost). Řeší issue #58.
Oprava inicializace formulářů se snippety
Původní metodu Nette.initForm chceme volat vždy. Sama o sobě obsahuje kontrolu na opětovnou inicializaci, na začátku ale ještě spouští nastavení, které je nutné udělat i po ajaxu (jmenovitě inicializace toggle elementů). Metoda Nette.toggleControl je pak v Nette ošetřená proti vícenásobnému navázání handleru pomocí weakMap.