|
586 | 586 | /** |
587 | 587 | * Process toggles on form element. |
588 | 588 | */ |
589 | | - Nette.toggleControl = function(elem, rules, success, firsttime, value) { |
| 589 | + Nette.toggleControl = function(elem, rules, success, firsttime, value, emptyOptional) { |
590 | 590 | rules = rules || JSON.parse(elem.getAttribute('data-nette-rules') || '[]'); |
591 | 591 | value = value === undefined ? {value: Nette.getEffectiveValue(elem)} : value; |
| 592 | + emptyOptional = emptyOptional === undefined ? !Nette.validateRule(elem, ':filled', null, value) : emptyOptional; |
592 | 593 |
|
593 | 594 | var has = false, |
594 | 595 | handled = [], |
|
602 | 603 | op = rule.op.match(/(~)?([^?]+)/), |
603 | 604 | curElem = rule.control ? elem.form.elements.namedItem(rule.control) : elem; |
604 | 605 |
|
| 606 | + rule.neg = op[1]; |
| 607 | + rule.op = op[2]; |
| 608 | + rule.condition = !!rule.rules; |
| 609 | + |
605 | 610 | if (!curElem) { |
606 | 611 | continue; |
| 612 | + } else if (emptyOptional && !rule.condition && rule.op !== ':filled') { |
| 613 | + continue; |
607 | 614 | } |
608 | 615 |
|
609 | 616 | curSuccess = success; |
610 | 617 | if (success !== false) { |
611 | | - rule.neg = op[1]; |
612 | | - rule.op = op[2]; |
613 | 618 | curSuccess = Nette.validateRule(curElem, rule.op, rule.arg, elem === curElem ? value : undefined); |
614 | 619 | if (curSuccess === null) { |
615 | 620 | continue; |
616 | 621 |
|
617 | 622 | } else if (rule.neg) { |
618 | 623 | curSuccess = !curSuccess; |
619 | 624 | } |
620 | | - if (!rule.rules) { |
| 625 | + if (!rule.condition) { |
621 | 626 | success = curSuccess; |
622 | 627 | } |
623 | 628 | } |
624 | 629 |
|
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) { |
626 | 631 | has = true; |
627 | 632 | if (firsttime) { |
628 | 633 | var name = curElem.tagName ? curElem.name : curElem[0].name, |
|
0 commit comments