Skip to content

Commit bfaaeea

Browse files
committed
netteForms: fixed toggleControl(), synced with validateControl()
Supports addEmail()->addConditionOn(...)->toggle(), ie. condition after rule
1 parent 1b06057 commit bfaaeea

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/assets/netteForms.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -586,9 +586,10 @@
586586
/**
587587
* Process toggles on form element.
588588
*/
589-
Nette.toggleControl = function(elem, rules, success, firsttime, value) {
589+
Nette.toggleControl = function(elem, rules, success, firsttime, value, emptyOptional) {
590590
rules = rules || JSON.parse(elem.getAttribute('data-nette-rules') || '[]');
591591
value = value === undefined ? {value: Nette.getEffectiveValue(elem)} : value;
592+
emptyOptional = emptyOptional === undefined ? !Nette.validateRule(elem, ':filled', null, value) : emptyOptional;
592593

593594
var has = false,
594595
handled = [],
@@ -602,27 +603,31 @@
602603
op = rule.op.match(/(~)?([^?]+)/),
603604
curElem = rule.control ? elem.form.elements.namedItem(rule.control) : elem;
604605

606+
rule.neg = op[1];
607+
rule.op = op[2];
608+
rule.condition = !!rule.rules;
609+
605610
if (!curElem) {
606611
continue;
612+
} else if (emptyOptional && !rule.condition && rule.op !== ':filled') {
613+
continue;
607614
}
608615

609616
curSuccess = success;
610617
if (success !== false) {
611-
rule.neg = op[1];
612-
rule.op = op[2];
613618
curSuccess = Nette.validateRule(curElem, rule.op, rule.arg, elem === curElem ? value : undefined);
614619
if (curSuccess === null) {
615620
continue;
616621

617622
} else if (rule.neg) {
618623
curSuccess = !curSuccess;
619624
}
620-
if (!rule.rules) {
625+
if (!rule.condition) {
621626
success = curSuccess;
622627
}
623628
}
624629

625-
if ((rule.rules && Nette.toggleControl(elem, rule.rules, curSuccess, firsttime, value)) || rule.toggle) {
630+
if ((rule.condition && Nette.toggleControl(elem, rule.rules, curSuccess, firsttime, value, rule.op === ':blank' ? false : emptyOptional)) || rule.toggle) {
626631
has = true;
627632
if (firsttime) {
628633
var name = curElem.tagName ? curElem.name : curElem[0].name,

0 commit comments

Comments
 (0)