Skip to content

Commit 5c47a9e

Browse files
committed
netteForms.js: refactoring
1 parent 932fc34 commit 5c47a9e

File tree

1 file changed

+49
-43
lines changed

1 file changed

+49
-43
lines changed

src/assets/netteForms.js

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/**
22
* NetteForms - simple form validation.
33
*
4-
* This file is part of the Nette Framework.
5-
* Copyright (c) 2004, 2014 David Grudl (http://davidgrudl.com)
4+
* This file is part of the Nette Framework (http://nette.org)
5+
* Copyright (c) 2004 David Grudl (http://davidgrudl.com)
66
*/
77

88
var Nette = Nette || {};
@@ -54,7 +54,9 @@ Nette.getValue = function(elem) {
5454
return Nette.getValue([elem]);
5555

5656
} else if (elem.tagName.toLowerCase() === 'select') {
57-
var index = elem.selectedIndex, options = elem.options, values = [];
57+
var index = elem.selectedIndex,
58+
options = elem.options,
59+
values = [];
5860

5961
if (elem.type === 'select-one') {
6062
return index < 0 ? null : options[index].value;
@@ -100,26 +102,23 @@ Nette.getEffectiveValue = function(elem) {
100102
* Validates form element against given rules.
101103
*/
102104
Nette.validateControl = function(elem, rules, onlyCheck) {
103-
if (!elem.tagName) { // RadioNodeList
104-
elem = elem[0];
105-
}
105+
elem = elem.tagName ? elem : elem[0]; // RadioNodeList
106106
rules = rules || Nette.parseJSON(elem.getAttribute('data-nette-rules'));
107107

108108
for (var id = 0, len = rules.length; id < len; id++) {
109-
var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
109+
var rule = rules[id],
110+
op = rule.op.match(/(~)?([^?]+)/),
111+
curElem = rule.control ? elem.form.elements[rule.control] : elem;
112+
110113
rule.neg = op[1];
111114
rule.op = op[2];
112115
rule.condition = !!rule.rules;
113-
var el = rule.control ? elem.form.elements[rule.control] : elem;
114-
if (!el.tagName) { // RadioNodeList
115-
el = el[0];
116-
}
116+
curElem = curElem.tagName ? curElem : curElem[0]; // RadioNodeList
117117

118-
var success = Nette.validateRule(el, rule.op, rule.arg);
118+
var success = Nette.validateRule(curElem, rule.op, rule.arg);
119119
if (success === null) {
120120
continue;
121-
}
122-
if (rule.neg) {
121+
} else if (rule.neg) {
123122
success = !success;
124123
}
125124

@@ -128,15 +127,15 @@ Nette.validateControl = function(elem, rules, onlyCheck) {
128127
return false;
129128
}
130129
} else if (!rule.condition && !success) {
131-
if (Nette.isDisabled(el)) {
130+
if (Nette.isDisabled(curElem)) {
132131
continue;
133132
}
134133
if (!onlyCheck) {
135-
var arr = Nette.isArray(rule.arg) ? rule.arg : [rule.arg];
136-
var message = rule.msg.replace(/%(value|\d+)/g, function(foo, m) {
137-
return Nette.getValue(m === 'value' ? el : elem.form.elements[arr[m].control]);
138-
});
139-
Nette.addError(el, message);
134+
var arr = Nette.isArray(rule.arg) ? rule.arg : [rule.arg],
135+
message = rule.msg.replace(/%(value|\d+)/g, function(foo, m) {
136+
return Nette.getValue(m === 'value' ? curElem : elem.form.elements[arr[m].control]);
137+
});
138+
Nette.addError(curElem, message);
140139
}
141140
return false;
142141
}
@@ -149,7 +148,9 @@ Nette.validateControl = function(elem, rules, onlyCheck) {
149148
* Validates whole form.
150149
*/
151150
Nette.validateForm = function(sender) {
152-
var form = sender.form || sender, scope = false;
151+
var form = sender.form || sender,
152+
scope = false;
153+
153154
if (form['nette-submittedBy'] && form['nette-submittedBy'].getAttribute('formnovalidate') !== null) {
154155
var scopeArr = Nette.parseJSON(form['nette-submittedBy'].getAttribute('data-nette-validation-scope'));
155156
if (scopeArr.length) {
@@ -219,9 +220,9 @@ Nette.addError = function(elem, message) {
219220
/**
220221
* Expand rule argument.
221222
*/
222-
Nette.expandRuleArgument = function(elem, arg) {
223+
Nette.expandRuleArgument = function(form, arg) {
223224
if (arg && arg.control) {
224-
arg = Nette.getEffectiveValue(elem.form.elements[arg.control]);
225+
arg = Nette.getEffectiveValue(form.elements[arg.control]);
225226
}
226227
return arg;
227228
};
@@ -241,9 +242,11 @@ Nette.validateRule = function(elem, op, arg) {
241242

242243
var arr = Nette.isArray(arg) ? arg.slice(0) : [arg];
243244
for (var i = 0, len = arr.length; i < len; i++) {
244-
arr[i] = Nette.expandRuleArgument(elem, arr[i]);
245+
arr[i] = Nette.expandRuleArgument(elem.form, arr[i]);
245246
}
246-
return Nette.validators[op] ? Nette.validators[op](elem, Nette.isArray(arg) ? arr : arr[0], val) : null;
247+
return Nette.validators[op]
248+
? Nette.validators[op](elem, Nette.isArray(arg) ? arr : arr[0], val)
249+
: null;
247250
};
248251

249252

@@ -263,7 +266,6 @@ Nette.validators = {
263266
},
264267

265268
equal: function(elem, arg, val) {
266-
/* jshint eqeqeq: false */
267269
if (arg === undefined) {
268270
return null;
269271
}
@@ -272,6 +274,7 @@ Nette.validators = {
272274
loop:
273275
for (var i1 = 0, len1 = val.length; i1 < len1; i1++) {
274276
for (var i2 = 0, len2 = arg.length; i2 < len2; i2++) {
277+
/* jshint eqeqeq: false */
275278
if (val[i1] == arg[i2]) {
276279
continue loop;
277280
}
@@ -392,27 +395,30 @@ Nette.toggleForm = function(form, elem) {
392395
*/
393396
Nette.toggleControl = function(elem, rules, topSuccess, firsttime) {
394397
rules = rules || Nette.parseJSON(elem.getAttribute('data-nette-rules'));
395-
var has = false, hasProp = Object.prototype.hasOwnProperty, handler = function () {
396-
Nette.toggleForm(elem.form, elem);
397-
}, handled = [];
398+
399+
var has = false,
400+
success = topSuccess,
401+
handled = [],
402+
handler = function () {
403+
Nette.toggleForm(elem.form, elem);
404+
};
398405

399406
for (var id = 0, len = rules.length; id < len; id++) {
400-
var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
401-
rule.neg = op[1];
402-
rule.op = op[2];
403-
rule.condition = !!rule.rules;
404-
if (!rule.condition) {
407+
var rule = rules[id],
408+
op = rule.op.match(/(~)?([^?]+)/),
409+
curElem = rule.control ? elem.form.elements[rule.control] : elem;
410+
411+
if (!rule.rules) {
405412
continue;
406413
}
407414

408-
var el = rule.control ? elem.form.elements[rule.control] : elem;
409-
var success = topSuccess;
410415
if (success !== false) {
411-
success = Nette.validateRule(el, rule.op, rule.arg);
416+
rule.neg = op[1];
417+
rule.op = op[2];
418+
success = Nette.validateRule(curElem, rule.op, rule.arg);
412419
if (success === null) {
413420
continue;
414-
}
415-
if (rule.neg) {
421+
} else if (rule.neg) {
416422
success = !success;
417423
}
418424
}
@@ -421,17 +427,17 @@ Nette.toggleControl = function(elem, rules, topSuccess, firsttime) {
421427
has = true;
422428
if (firsttime) {
423429
var oldIE = !document.addEventListener, // IE < 9
424-
els = el.tagName ? [el] : el; // is radiolist?
430+
els = curElem.tagName ? [curElem] : curElem; // is radiolist?
425431

426432
for (var i = 0; i < els.length; i++) {
427433
if (!Nette.inArray(handled, els[i])) {
428-
Nette.addEvent(els[i], oldIE && el.type in {checkbox: 1, radio: 1} ? 'click' : 'change', handler);
434+
Nette.addEvent(els[i], oldIE && curElem.type in {checkbox: 1, radio: 1} ? 'click' : 'change', handler);
429435
handled.push(els[i]);
430436
}
431437
}
432438
}
433439
for (var id2 in rule.toggle || []) {
434-
if (hasProp.call(rule.toggle, id2)) {
440+
if (Object.prototype.hasOwnProperty.call(rule.toggle, id2)) {
435441
Nette.toggles[id2] = Nette.toggles[id2] || (rule.toggle[id2] ? success : !success);
436442
}
437443
}
@@ -500,7 +506,7 @@ Nette.isArray = function(arg) {
500506
* Search for a specified value within an array.
501507
*/
502508
Nette.inArray = function(arr, val) {
503-
if (Array.prototype.indexOf) {
509+
if ([].indexOf) {
504510
return arr.indexOf(val) > -1;
505511
} else {
506512
for (var i = 0; i < arr.length; i++) {

0 commit comments

Comments
 (0)