@@ -131,7 +131,7 @@ Nette.getEffectiveValue = function(elem) {
131131/**
132132 * Validates form element against given rules.
133133 */
134- Nette . validateControl = function ( elem , rules , onlyCheck , value ) {
134+ Nette . validateControl = function ( elem , rules , onlyCheck , value , emptyOptional ) {
135135 elem = elem . tagName ? elem : elem [ 0 ] ; // RadioNodeList
136136 rules = rules || Nette . parseJSON ( elem . getAttribute ( 'data-nette-rules' ) ) ;
137137 value = value === undefined ? { value : Nette . getEffectiveValue ( elem ) } : value ;
@@ -141,15 +141,20 @@ Nette.validateControl = function(elem, rules, onlyCheck, value) {
141141 op = rule . op . match ( / ( ~ ) ? ( [ ^ ? ] + ) / ) ,
142142 curElem = rule . control ? elem . form . elements . namedItem ( rule . control ) : elem ;
143143
144+ rule . neg = op [ 1 ] ;
145+ rule . op = op [ 2 ] ;
146+ rule . condition = ! ! rule . rules ;
147+
144148 if ( ! curElem ) {
145149 continue ;
150+ } else if ( rule . op === 'optional' ) {
151+ emptyOptional = ! Nette . validateRule ( elem , ':filled' , null , value ) ;
152+ continue ;
153+ } else if ( emptyOptional && ! rule . condition && rule . op !== ':filled' ) {
154+ return true ;
146155 }
147156
148- rule . neg = op [ 1 ] ;
149- rule . op = op [ 2 ] ;
150- rule . condition = ! ! rule . rules ;
151157 curElem = curElem . tagName ? curElem : curElem [ 0 ] ; // RadioNodeList
152-
153158 var curValue = elem === curElem ? value : { value : Nette . getEffectiveValue ( curElem ) } ,
154159 success = Nette . validateRule ( curElem , rule . op , rule . arg , curValue ) ;
155160
@@ -160,7 +165,7 @@ Nette.validateControl = function(elem, rules, onlyCheck, value) {
160165 }
161166
162167 if ( rule . condition && success ) {
163- if ( ! Nette . validateControl ( elem , rule . rules , onlyCheck , value ) ) {
168+ if ( ! Nette . validateControl ( elem , rule . rules , onlyCheck , value , rule . op === ':blank' ? false : emptyOptional ) ) {
164169 return false ;
165170 }
166171 } else if ( ! rule . condition && ! success ) {
0 commit comments