|
124 | 124 | /**
|
125 | 125 | * Returns the effective value of form element.
|
126 | 126 | */
|
127 |
| - Nette.getEffectiveValue = function(elem) { |
| 127 | + Nette.getEffectiveValue = function(elem, filter) { |
128 | 128 | var val = Nette.getValue(elem);
|
129 | 129 | if (elem.getAttribute) {
|
130 | 130 | if (val === elem.getAttribute('data-nette-empty-value')) {
|
131 | 131 | val = '';
|
132 | 132 | }
|
133 | 133 | }
|
| 134 | + if (filter) { |
| 135 | + var ref = {value: val}; |
| 136 | + Nette.validateControl(elem, null, true, ref); |
| 137 | + val = ref.value; |
| 138 | + } |
134 | 139 | return val;
|
135 | 140 | };
|
136 | 141 |
|
|
162 | 167 | }
|
163 | 168 |
|
164 | 169 | curElem = curElem.tagName ? curElem : curElem[0]; // RadioNodeList
|
165 |
| - var curValue = elem === curElem ? value : {value: Nette.getEffectiveValue(curElem)}, |
166 |
| - success = Nette.validateRule(curElem, rule.op, rule.arg, curValue); |
| 170 | + var success = Nette.validateRule(curElem, rule.op, rule.arg, elem === curElem ? value : undefined); |
167 | 171 |
|
168 | 172 | if (success === null) {
|
169 | 173 | continue;
|
|
306 | 310 | };
|
307 | 311 |
|
308 | 312 |
|
309 |
| - /** |
310 |
| - * Expand rule argument. |
311 |
| - */ |
312 |
| - Nette.expandRuleArgument = function(form, arg) { |
313 |
| - if (arg && arg.control) { |
314 |
| - var control = form.elements.namedItem(arg.control), |
315 |
| - value = {value: Nette.getEffectiveValue(control)}; |
316 |
| - Nette.validateControl(control, null, true, value); |
317 |
| - arg = value.value; |
318 |
| - } |
319 |
| - return arg; |
320 |
| - }; |
321 |
| - |
322 |
| - |
323 | 313 | var preventFiltering = false;
|
324 | 314 |
|
325 | 315 | /**
|
326 | 316 | * Validates single rule.
|
327 | 317 | */
|
328 | 318 | Nette.validateRule = function(elem, op, arg, value) {
|
329 |
| - value = value === undefined ? {value: Nette.getEffectiveValue(elem)} : value; |
| 319 | + value = value === undefined ? {value: Nette.getEffectiveValue(elem, true)} : value; |
330 | 320 |
|
331 | 321 | if (op.charAt(0) === ':') {
|
332 | 322 | op = op.substr(1);
|
|
338 | 328 | if (!preventFiltering) {
|
339 | 329 | preventFiltering = true;
|
340 | 330 | for (var i = 0, len = arr.length; i < len; i++) {
|
341 |
| - arr[i] = Nette.expandRuleArgument(elem.form, arr[i]); |
| 331 | + if (arr[i] && arr[i].control) { |
| 332 | + var control = elem.form.elements.namedItem(arr[i].control); |
| 333 | + arr[i] = control === elem ? value.value : Nette.getEffectiveValue(control, true); |
| 334 | + } |
342 | 335 | }
|
343 | 336 | preventFiltering = false;
|
344 | 337 | }
|
|
590 | 583 | if (success !== false) {
|
591 | 584 | rule.neg = op[1];
|
592 | 585 | rule.op = op[2];
|
593 |
| - var curValue = elem === curElem ? value : {value: Nette.getEffectiveValue(curElem)}; |
594 |
| - curSuccess = Nette.validateRule(curElem, rule.op, rule.arg, curValue); |
| 586 | + curSuccess = Nette.validateRule(curElem, rule.op, rule.arg, elem === curElem ? value : undefined); |
595 | 587 | if (curSuccess === null) {
|
596 | 588 | continue;
|
597 | 589 |
|
|
0 commit comments