[addon live-form-validation] Live Form Validation

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Tvrdík
Nette guru | 2595
+
0
-

Diskuse ke stránce Live Form Validation


Pěkná komponenta. Škoda ale, že je pod GPL, takže se v praxi moc použít nedá.

Ondřej Brejla
Člen | 746
+
0
-

Proč by nešla použít? Snad pokud budu s touto komponentou vyvíjet a distribuovat, tak dám k dispozici zdrojáky komponenty a je to ne? Nebo jsem jen nechápavec nechápavý a prosím vysvětlit :-)

Honza Kuchař
Člen | 1662
+
0
-

Podle mě je to jak říká Honza. Protože to co píšeš je licence LGPL.

buff
Člen | 63
+
0
-

V případě, že se distribuuje aplikace s komponentou, musí se distribuovat i celý zdroják aplikace. Nezdá se mi ale, že by to byl u webové aplikace nějaký problém. (Z toho důvodu, že to není problém, taky vznikla AGPL).

Jan Tvrdík
Nette guru | 2595
+
0
-

Pokud budu na nějakém webu používat komponentu pod GPL licencí, tak musím celý web vydat jako open-source projekt taktéž pod GPL licencí.

Pokud budu tvořit normální komerční web a budu tam chtít použít komponentu pod GPL licencí, tak musím celý web vydat jako open-source projekt taktéž pod GPL licencí.

Pokud tvořím komponetu a chci, aby mohla být použita i v close-source projektech, tak je ideální ji vydat pod New BSD license/MIT, případně alespoň pod LGPL.

Viz také:

Editoval Jan Tvrdík (28. 8. 2009 14:32)

Ondřej Brejla
Člen | 746
+
0
-

Pouze pokud ten web poskytuji třetí straně ne? Když si to plácnu na nějaký svůj projekt, tak ho snad nikde vystavovat nemusím? Ale dost možná je to jiná licence…

Jan Tvrdík
Nette guru | 2595
+
0
-

OT: Pořád čekám, až někdo udělá web zabývající se polopolatickým vysvětlováním licencí.

buff
Člen | 63
+
0
-

Nemusíš, pouze pokud bys ten web distribuoval, musíš přibalit zdrojové kódy (upřímně ani nevím, jak ho jinak distribuovat).

Citace z Wikipedie, poslední odstavec zde: https://en.wikipedia.org/…blic_License#…

Copyleft applies only when a person seeks to redistribute the program. One is allowed to make private modified versions, without any obligation to divulge the modifications as long as the modified software is not distributed to anyone else. Note that the copyleft applies only to the software and not to its output (unless that output is itself a derivative work of the program). For example, a public web portal running a modified derivative of a GPL'ed content management system is not required to distribute its changes to the underlying software because its output is not a derivative.

//Edit: vidím, že jdu trochu pozdě, pardon :-)

Editoval buff (28. 8. 2009 14:36)

Jan Tvrdík
Nette guru | 2595
+
0
-

Warden napsal(a):

Pouze pokud ten web poskytuji třetí straně ne? Když si to plácnu na nějaký svůj projekt, tak ho snad nikde vystavovat nemusím? Ale dost možná je to jiná licence…

Ano, je to tak, svůj předchozí výrok jsem upřesnil. Bohužel to nic nemění na tom, že pakliže je komponenta pod GPL licencí a neexistuje k ní komerční licence, tak je její použití velmi omezené, protože většinu webů, které dělám jsou zakázky a tam tu komponentu využít nemůžu.

Proto např. Texy! pod GPL licencí nelze použít v komerčních projektech a je potřeba pro ně zakoupit komerční licenci.

Editoval Jan Tvrdík (28. 8. 2009 14:37)

buff
Člen | 63
+
0
-

Jan Tvrdík napsal(a):
Ano, je to tak, svůj předchozí výrok jsem upřesnil. Bohužel to nic nemění na tom, že pakliže je komponenta pod GPL licencí a neexistuje k ní komerční licence, tak je její použití velmi omezené, protože většinu webů, které dělám jsou zakázky a tam tu komponentu využít nemůžu.

Podle mě můžeš, jen prostě musíš dát zdrojáky tomu, pro koho ten web děláš.

Ondřej Brejla
Člen | 746
+
0
-

Přesně tak, GPL upravuje to, že pokud poskytuješ sw třetí osobě, musíš poskytovat zdrojáky…to, jestli si za to necháš platit nebo ne, je GPL jedno. Komerčnost nekomerčnost neřeší.

Ola
Člen | 385
+
0
-

Podle mě ty zdrojáky musíš dát k dispozici všem, nikoliv pouze klientovi.

Ondřej Brejla
Člen | 746
+
0
-

Jasně, píšu…musíš poskytovat zdrojáky tak jsem to myslel.

Ola
Člen | 385
+
0
-

Já jsem spíš reagoval na uživatele buff – zapomněl jsem na citaci.

buff
Člen | 63
+
0
-

Ola napsal(a):

Podle mě ty zdrojáky musíš dát k dispozici všem, nikoliv pouze klientovi.

Já si to nemyslím, nic takového jsem nenašel. A prosím opravte mě s citací, pokud se mýlím. Podle mě GPL upravuje práva příjemce toho produktu, je to end-user licence. A tvrdí, že tento příjemce má právo obdržet s produktem zdrojové kódy. Přijde mi ale divné, aby licence nutila distributora poskytnout produkt komukoliv.

//Edit: kromě práva na zdrojové kódy je tam taky to právo příjemce produkt dále distribuovat, modifikovat, atd., v tom je zajištěna ta svoboda.

Editoval buff (28. 8. 2009 15:00)

redhead
Člen | 1313
+
0
-

No, musím se přiznat – o licencích toho vím asi tolik, kolik čajový lístek ví o Východoindické společnosti. Nicméně (pokud to není nějaký problém??) můžu tu licenci změnit.

Takže co by bylo nejlepší? Ta New BSD/MIT ??

Jan Tvrdík
Nette guru | 2595
+
0
-

Za ideální volbu považuji New BSD license nebo MIT. Jmenují se různě, ale jejich význam je stejný.

redhead
Člen | 1313
+
0
-

Změnil jsem to tedy na New BSD Licence.

Ještě by mě zajímalo, jestli na vliv licenci téhle komponenty nemá vliv licence Nette, protože ten kód je jen přeupravený nativní ClientScript z distribuce.

Editoval redhead (28. 8. 2009 15:48)

buff
Člen | 63
+
0
-

Já to taky vítám, tu změnu, nerozumějte mi špatně. Ale stejně mi trochu vadí, že nezmizí ta místní z mého pohledu iracionální obava z GPL. Podle mě je i na komerční webové aplikace dost dobře použitelná.

xificurk
Člen | 121
+
0
-

Lidi, nepište tu prosím bludy… raději si přečtěte odpovědi přímo u zdroje:
http://www.gnu.org/…2.0-faq.html#…
http://www.gnu.org/…2.0-faq.html#…

Ano, pokud použijete GPL komponentu, musí být celá aplikace pod GPL, ale… konkrétně pro webové aplikace v PHP (stejně se distribuují v podobě zdrojového kódu) vidím jen jednu nevýhodu (pro vývojáře) – jakmile aplikaci předám, už dále z principu nemůžu mít kontrolu nad tím, co se s ní bude dít, tedy nelze např. uzavřít exkluzivní smlouvu na budoucí úpravy aplikace.

Můj názor tedy je, že v případě PHP web aplikací, je celkem šumák, jakou licenci kdo použije, většina těch restriktivnějších podmínek, je totiž splněna automaticky.

Obecně ale platí, že pokud mi je jedno, kdo a na co použije můj kód (třeba ho vezme, přejmenuje, uzavře a začne prodávat), je vhodné použít třeba new BSD licenci. GPL, příp. další podobné licence, fungují na virálním principu – „tady je můj kód, použijte si ho kde a jak chcete, ale pokud ho začnete distribuovat, musíte svým uživatelům dát stejná práva jako dávám teď já vám“.

redhead
Člen | 1313
+
0
-

Myslel jsem že už není co vylepšovat na téhle třídě, ale ukázalo se že je!

Představuji verzi 0.8, která vylepšuje některé funkce a dává trochu více možností pro programátory:

Features

  • option proměnné
    • JS kód při jakékoliv chybě po odeslání formu (jako echo uživateli, že ještě je někde chyba, hodí se např pro velké formuláře, kde by to nebylo zřejmé; ukázáno v DEMU)
    • validovat Form::FILLED operace až pouze po submitu (takže ne tak live)
    • validovat při keyup eventu (nebude to řvát už při psaní)
    • komprese JS kódu do jedné řádky (ukázáno v DEMU)
  • tabulátor při keyup eventu nespouští validaci
  • lepší provázání validace více elementů (Condition a ConditionOn)
  • provázané validace elementů se spouští až po tom co je uživatel „prošel“ (přešel TABem, vyplnil správně/špatně), takže to neřve že 2. heslo nesouhlasí když ještě vyplňujete to první

Demo + Download

Protože stále(!) nefungují stránky nette, hodil jsem odkaz k downloadu k Demu ZDE

Matúš Matula
Člen | 257
+
0
-

Este som to neskusal, ale len tak letmo, co som pozereal demo, tak som si vsimol taku drobnost: ked sa snazim viacnasobne odoslat zle vyplneny formular, tak hlaska o tom [‚Špatně vyplněný formulář!‘] sa pridava kazdym pokusom o odoslanie

Inak pekna komponentka ;-)

redhead
Člen | 1313
+
0
-

Aha!
Děkuji, opravím.

_Martin_
Generous Backer | 679
+
0
-

A mohl bys k tomu demu přidat validaci na platný email?

redhead
Člen | 1313
+
0
-

Ona tam je, ale musíš zaškrtnout Posílat notifikace. :)

Vím, vím, logicky je to hloupost..

_Martin_
Generous Backer | 679
+
0
-

redhead napsal(a):

Ona tam je, ale musíš zaškrtnout Posílat notifikace. :)

Vím, vím, logicky je to hloupost..

Tak co tam dát tu fičurku toogle, aby to políčko na mail nebylo vidět, když není zaškrtnuto posílání notifikací?

redhead
Člen | 1313
+
0
-

_Martin_ napsal(a):

Tak co tam dát tu fičurku toogle, aby to políčko na mail nebylo vidět, když není zaškrtnuto posílání notifikací?

Dal sem to tam, ale je tam takovej malej workaround, jak se tam zobrazuje i ta zelená ikonka, tak aby nebyla vidět když je to schované, protože Chromák posílá eventy v trochu jiném pořádí než FF, takže to úplně nešlo. Holt až si budete přepisovat JS na tohle musíte dávat pozor.


Jinak jsem zapomněl skoro na jednu z hlavních feature nové verze!

  • zabalování funkcí pro validaci (a toggle) do JS objektu. Například pro MyForm se vytvoří object MyForm a fce se volají MyForm.validate(), atd…
David Grudl
Nette Core | 8227
+
0
-

Pokusil jsem se upravit InstantClientScript, aby se na něj dala live validace navázat i bez nutnosti modifikovat PHP kód. Pokud bys měl redheade chuť, zkusil bys, jestli by šlo tvé řešení na to navázat?

redhead
Člen | 1313
+
0
-

určitě, až bude čas, snad dnes večer..

Klokan
Člen | 47
+
0
-

Ahoj, včera po pádu DB se mi dotaz smazal, tak to zkusím ještě jednou.
Chtěl jsem poprosit, jestli by bylo možné jako ukázku scriptík upravit tak, aby hlášky zobrazoval v sekci „errors“ formuláře. Mám totiž formulář kde jsou komponenty naskládané vodorovně a chyby bych chtěl zobrazovat nad tím. Asi to bude jednoduché pomocí JS, ale nejsem v tom zrovna jednička :o). Díky alespoň za nakopmutí. Jinak komponenta funguje skvěle a chtěl bych za ni poděkovat.

redhead
Člen | 1313
+
0
-

tady je přepsáná metoda na vytvoření chybové zprávy, ale musíš si to upravit sám. Pracuje tak, že pokud první element formu není <ul> seznam, tak ho vytvoří a do něj pak vloží nový <li> (do které se potom vpíše chybová zpráva). Musím ale říct, že je to dosti otravné řešení, no uvidíš sám..

<script>
function errorMessageElement(id, sender)
{
    var ul = sender.form.firstElementChild;		//ul seznam
    if(ul.tagName.toLowerCase() != 'ul') {		//neni to seznam?
      var new_ul = document.createElement('ul');	//vytvorime ho
      new_ul.className = 'errors';			//vlozime css class
      sender.form.insertBefore(new_ul, ul);		//vlozime do stromu DOM
      ul = new_ul;
    }
    var el = document.getElementById(id);		//chybova hlaska, pokud uz byla vytvorena
    if(!el)						//existuje?
    {
        el = document.createElement('li');		//vytvori novou polozku <li>
        el.id = id;

        ul.appendChild(el);				//vlozi do stromu DOM
    }
    else
    {
        el.style.display = 'list-item';			//pokud existuje zobrazit ji
    }
    return el;
}
</script>

Stačí stejnojmennou funkci v LiveFormValidation.js přepsat tímto.

Editoval redhead (10. 12. 2009 17:51)

Klokan
Člen | 47
+
0
-

Jdu si s tim pohrat :o). Urcite dam vedet, jak jsem dopadl. Zatim dekuju mockrat.

brabo
Člen | 19
+
0
-

Ahoj všici. Mám trochu problém s validací RadioListů. Ve zdrojácích jsem koukal se s tím nějak počítá, ale prakticky mi to padá při odeslání formuláře, protože se tam volá

<script>
validateHostingFormControl(document.getElementById('frmhostingForm-CLOSED'))
</script>

čili jakoby podle hlavního ID. Jenže jak jsem zkoumal HTML, tak tam jsou jenom IDčka pro jednolivé radio prvky „frmhostingForm-CLOSED-0“ a „frmhostingForm-CLOSED-1“, čili podle výše uvedeného IDčka to nic nenajde, padne to JS chybou a dojde tak k pádu validace a odeslání formuláře, protože se nevrátí false.

redhead
Člen | 1313
+
0
-

Koukám, že to není problém Live validace, ale je to bug přímo v Nette. Reportnu to na github

Zajímavé..

iguana007
Člen | 970
+
0
-

Díval jsem se na GitHUB a tam to vypada, ze je to fixed …

https://github.com/…sues/unreads#…

a

https://github.com/…dccb3a619163

Ale me pripada, ze to porad nefunguje … live validace mi proste dovoli form odeslat i kdyz mam formular uplne prazdny…

Mam nette: 0.9.3-dev ae8347e released on 2010–01–20

redhead
Člen | 1313
+
0
-

Moje chyba, ve frameworku to funguje správně, špatně to je v tom pluginu. Jdu to fixnout..

redhead
Člen | 1313
+
0
-

Fixnuto, je to v Addonech

iguana007
Člen | 970
+
0
-

Thx ;)

igi

Panda
Člen | 569
+
0
-

Chybička se vloudila: https://forum.nette.org/…iewtopic.php?….

Patch: LiveClientScript.patch.
//Doplnění: patch aktualizován.

Editoval Panda (19. 2. 2010 11:18)

iguana007
Člen | 970
+
0
-

Asi jsem našel bug.
Týká se to pouze IE – popíšu problém:

Mám formulář na jehož konci je povinný checkbox (tj. pokud není zaškrtnutý, tak se nesmí form odeslat – souhlas s použitím osobních dat).

A hned za ním je submit.

Problém je v tom, že když neproběhne focus na další prvek formu, tak neproběhne live validace a form se v IE musí odesílat na 2× (1. klik na submit se zvaliduje checkbox ana 2. klik se form odešle).

Vyřešeno jQuery kódem, který donutí provést validaci při kliku na daný checkbox:

$(".pravidla input:checkbox").click(function() {
    RegisterUserForm.validateControl(this);
});
despiq
Člen | 320
+
0
-
<?php
function errorMessageElement(id, sender)
{
    var el = document.getElementById(id);
    if(!el)
    {
        el = document.createElement('span');
        el.id = id;
        var parent = sender.parentNode;

        if(parent.lastchild == sender) {
            parent.appendChild(el);
        } else {
            parent.insertBefore(el, sender.nextSibling);
        }
    }
    else
    {
        el.style.display = 'inline';
    }
    return el;
}
?>

Proc je tady napevno display inline?
Kdyz kliknu poprve do kontrolovaneho pole a napriklad ma byt filled a kliknu jinam tak se error ukaze s nadefinovanym stylem, kdyz ale do onoho pole kliknu znovu a pak zase pryc tak se erroru prida prave display inline, muze to rozhodit pak to nastylovani a tak se jen ptam jestli to ma nejaky vyznam ktery nevidim?

redhead
Člen | 1313
+
0
-

No má, protože pokud uděláš poprvé chybu vytvoří se element, pokud chybu odstraníš ten element v DOMu zůstává, jen se skryje pomocí css (display: none), aby se opět objevil s nějakou novou chybou, musí se display:none zrušit a protože se defaultně používá span (který jest inline elementem), tak se přiřadí dislay: inline.

Jinak ten javascript je naprosto na tobě, jak si ho upravíš. Můžeš si tam přiřadit klidně block nebo si aktuální hodnotu někam uložit nebo si to přepsat úplně, že se ten element odstraní a bude se vkládat vždy nový.. A třeba s podporou jQuery nebo Prototype (definuji tam totiž vlastní a špatné metody pro přiřazení/odebrání css tříd). Je to opravdu na tobě, ten soubor tam je jen proto, aby to fungovalo od začátku, bez nějakých zásahů, ale upravit si ho není zakázané ;)

despiq
Člen | 320
+
0
-

uz na to koukam ze jsem nebyl zas tak proziravy
 dik

SquirrelCZE
Člen | 15
+
0
-

zdravim, bylo by mozne dat nekam zdroj.kod DEMA? :)
co se tyce nette tak jsem zacatecnik takze by se mi to hodilo, ono moje formulare jeste nejsou eno nuno a chtel bych se podivat :)

redhead
Člen | 1313
+
0
-

SquirrelCZE napsal(a):

zdravim, bylo by mozne dat nekam zdroj.kod DEMA? :)
co se tyce nette tak jsem zacatecnik takze by se mi to hodilo, ono moje formulare jeste nejsou eno nuno a chtel bych se podivat :)

Je to tam, ještě jsem to upravoval, tak snad to funguje:

http://www.utf-8.cz/…tionDemo.zip

bazo
Člen | 620
+
0
-

ahoj,

narazil som na podivnu chybu. ak renderujem form cez makro {widget formName}, tak script funguje bez problemov. akonahle pouzijem manualny render tak dostavam chybu sender is null vo firebugu a pod tym nahodny kus kodu html alebo js.
aj ked vygenerujem uplne totozne html s automaticky renderovanym formom, tak to nejde.

netusite kde by mohol byt problem?

redhead
Člen | 1313
+
0
-

Hmm, a renderuješ opravdu všechny prvky z formuláře? Nebo nepřejmenováváš někde atribut id u prvku?

Chtělo by to vědět, který prvek to způsobuje, tzn. debugovat javascript.

Jinak pokud to chceš vyřešit tak bych doporučoval přidat před řádek:

if(typeof(sender) != 'string');
...

kontrolu zda-li je sender null a vrátit true:

if(!sender)
	return true;
if(typeof(sender) != 'string');
...

Teď to bohužel neopravím, tak si to kdyžtaj uprav v LiveClientScript.php (měl by to být řádek 162)

cmelis
Člen | 26
+
0
-

čau,

neplánuješ prosím tento plugin přepsat do php 5.3 s namespaces? Začínám s nette a používám php 5.3 ale nějak se mi to nedaří rozchodit.

případně děkuji předem :)

redhead
Člen | 1313
+
0
-

cmelis napsal(a):

neplánuješ prosím tento plugin přepsat do php 5.3 s namespaces? Začínám s nette a používám php 5.3 ale nějak se mi to nedaří rozchodit.

To už si druhý během dneška :D No, musím se přiznat, že o namespacech toho moc nevím (resp. nikdy jsem s nimi nepsal). Je to ale je jen jedna třída, nemůže to být složité to přepsat, nechceš to zkusit? Nemám zrovna teď moc čas.