client_side_validations 3.2.0.beta.2 → 3.2.0.beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -75,11 +75,23 @@ module ClientSideValidations::ActionView::Helpers
|
|
75
75
|
if options[:html] && options[:html][:id]
|
76
76
|
var_name = options[:html][:id]
|
77
77
|
else
|
78
|
-
|
79
|
-
|
78
|
+
if Rails.version >= '3.2.0'
|
79
|
+
var_name = if object.respond_to?(:persisted?) && object.persisted?
|
80
|
+
options[:as] ? "edit_#{options[:as]}" : [options[:namespace], dom_id(object, :edit)].compact.join("_")
|
81
|
+
else
|
82
|
+
options[:as] ? "new_#{options[:as]}" : [options[:namespace], dom_id(object)].compact.join("_")
|
83
|
+
end
|
80
84
|
else
|
81
|
-
|
85
|
+
# This is to maintain backward compatibility with Rails 3.1
|
86
|
+
# see: https://github.com/rails/rails/commit/e29773f885fd500189ffd964550ae20061d745ba#commitcomment-948052
|
87
|
+
var_name = if object.respond_to?(:persisted?) && object.persisted?
|
88
|
+
options[:as] ? "#{options[:as]}_edit" : dom_id(object, :edit)
|
89
|
+
else
|
90
|
+
options[:as] ? "#{options[:as]}_new" : dom_id(object)
|
91
|
+
end
|
82
92
|
end
|
93
|
+
|
94
|
+
|
83
95
|
end
|
84
96
|
|
85
97
|
content_tag(:script) do
|
@@ -9,7 +9,7 @@ module ClientSideValidations::ActiveModel
|
|
9
9
|
|
10
10
|
self.class::MESSAGES.each do |option, message_type|
|
11
11
|
if count = options[option]
|
12
|
-
options[:message] = options[message_type]
|
12
|
+
options[:message] = options[message_type] if options[message_type].present?
|
13
13
|
options.delete(:message) if options[:message].nil?
|
14
14
|
hash[:messages][option] = model.errors.generate_message(attribute, message_type, options.merge(:count => count))
|
15
15
|
hash[option] = count
|
@@ -1,117 +1,149 @@
|
|
1
|
-
|
2
|
-
/*
|
3
|
-
Rails 3 Client Side Validations - v3.2.0.beta.2
|
4
|
-
https://github.com/bcardarella/client_side_validations
|
5
|
-
|
6
|
-
Copyright (c) 2012 Brian Cardarella
|
7
|
-
Licensed under the MIT license
|
8
|
-
http://www.opensource.org/licenses/mit-license.php
|
9
|
-
*/
|
10
|
-
|
11
1
|
(function() {
|
12
|
-
var $, validateElement, validateForm
|
2
|
+
var $, validateElement, validateForm,
|
3
|
+
__indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
13
4
|
|
14
5
|
$ = jQuery;
|
15
6
|
|
16
7
|
$.fn.validate = function() {
|
17
8
|
return this.filter('form[data-validate]').each(function() {
|
18
|
-
var addError, form, removeError, settings;
|
9
|
+
var addError, binding, event, form, removeError, settings, _ref, _ref2;
|
19
10
|
form = $(this);
|
20
|
-
settings = window
|
11
|
+
settings = window.ClientSideValidations.forms[form.attr('id')];
|
21
12
|
addError = function(element, message) {
|
22
13
|
return ClientSideValidations.formBuilders[settings.type].add(element, settings, message);
|
23
14
|
};
|
24
15
|
removeError = function(element) {
|
25
16
|
return ClientSideValidations.formBuilders[settings.type].remove(element, settings);
|
26
17
|
};
|
27
|
-
|
18
|
+
form.submit(function() {
|
28
19
|
return form.isValid(settings.validators);
|
29
|
-
})
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
20
|
+
});
|
21
|
+
_ref = {
|
22
|
+
'ajax:beforeSend': function(eventData) {
|
23
|
+
if (eventData.target === this) return form.isValid(settings.validators);
|
24
|
+
},
|
25
|
+
'form:validate:after': function(eventData) {
|
26
|
+
return ClientSideValidations.callbacks.form.after(form, eventData);
|
27
|
+
},
|
28
|
+
'form:validate:before': function(eventData) {
|
29
|
+
return ClientSideValidations.callbacks.form.before(form, eventData);
|
30
|
+
},
|
31
|
+
'form:validate:fail': function(eventData) {
|
32
|
+
return ClientSideValidations.callbacks.form.fail(form, eventData);
|
33
|
+
},
|
34
|
+
'form:validate:pass': function(eventData) {
|
35
|
+
return ClientSideValidations.callbacks.form.pass(form, eventData);
|
36
|
+
}
|
37
|
+
};
|
38
|
+
for (event in _ref) {
|
39
|
+
binding = _ref[event];
|
40
|
+
form.bind(event, binding);
|
41
|
+
}
|
42
|
+
_ref2 = {
|
43
|
+
'focusout': function() {
|
44
|
+
return $(this).isValid(settings.validators);
|
45
|
+
},
|
46
|
+
'change': function() {
|
47
|
+
return $(this).data('changed', true);
|
48
|
+
},
|
49
|
+
'element:validate:after': function(eventData) {
|
50
|
+
return ClientSideValidations.callbacks.element.after($(this), eventData);
|
51
|
+
},
|
52
|
+
'element:validate:before': function(eventData) {
|
53
|
+
return ClientSideValidations.callbacks.element.before($(this), eventData);
|
54
|
+
},
|
55
|
+
'element:validate:fail': function(eventData, message) {
|
56
|
+
var element;
|
57
|
+
element = $(this);
|
58
|
+
return ClientSideValidations.callbacks.element.fail(element, message, function() {
|
59
|
+
return addError(element, message);
|
60
|
+
}, eventData);
|
61
|
+
},
|
62
|
+
'element:validate:pass': function(eventData) {
|
63
|
+
var element;
|
64
|
+
element = $(this);
|
65
|
+
return ClientSideValidations.callbacks.element.pass(element, function() {
|
66
|
+
return removeError(element);
|
67
|
+
}, eventData);
|
68
|
+
}
|
69
|
+
};
|
70
|
+
for (event in _ref2) {
|
71
|
+
binding = _ref2[event];
|
72
|
+
form.find('[data-validate="true"]:input:enabled:not(:radio)').live(event, binding);
|
73
|
+
}
|
74
|
+
form.find('[data-validate="true"]:checkbox').live('click', function() {
|
60
75
|
return $(this).isValid(settings.validators);
|
61
|
-
})
|
62
|
-
|
76
|
+
});
|
77
|
+
return form.find('[id*=_confirmation]').each(function() {
|
78
|
+
var binding, confirmationElement, element, event, _ref3, _results;
|
63
79
|
confirmationElement = $(this);
|
64
80
|
element = form.find("#" + (this.id.match(/(.+)_confirmation/)[1]) + "[data-validate='true']:input");
|
65
81
|
if (element[0]) {
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
82
|
+
_ref3 = {
|
83
|
+
'focusout': function() {
|
84
|
+
return element.data('changed', true).isValid(settings.validators);
|
85
|
+
},
|
86
|
+
'keyup': function() {
|
87
|
+
return element.data('changed', true).isValid(settings.validators);
|
88
|
+
}
|
89
|
+
};
|
90
|
+
_results = [];
|
91
|
+
for (event in _ref3) {
|
92
|
+
binding = _ref3[event];
|
93
|
+
_results.push($("#" + (confirmationElement.attr('id'))).live(event, binding));
|
94
|
+
}
|
95
|
+
return _results;
|
71
96
|
}
|
72
97
|
});
|
73
98
|
});
|
74
99
|
};
|
75
100
|
|
76
101
|
$.fn.isValid = function(validators) {
|
77
|
-
|
78
|
-
|
102
|
+
var obj;
|
103
|
+
obj = $(this[0]);
|
104
|
+
if (obj.is('form')) {
|
105
|
+
return validateForm(obj, validators);
|
79
106
|
} else {
|
80
|
-
return validateElement(
|
107
|
+
return validateElement(obj, validators[this[0].name]);
|
81
108
|
}
|
82
109
|
};
|
83
110
|
|
84
111
|
validateForm = function(form, validators) {
|
85
112
|
var valid;
|
113
|
+
form.trigger('form:validate:before');
|
86
114
|
valid = true;
|
87
|
-
form.
|
88
|
-
if (
|
89
|
-
if (valid) {
|
90
|
-
form.trigger('form:validate:pass');
|
91
|
-
} else {
|
92
|
-
form.trigger('form:validate:fail');
|
93
|
-
}
|
94
|
-
return form.trigger('form:validate:after');
|
115
|
+
form.find('[data-validate="true"]:input:enabled').each(function() {
|
116
|
+
if ($(this).isValid(validators)) return valid = false;
|
95
117
|
});
|
118
|
+
if (valid) {
|
119
|
+
form.trigger('form:validate:pass');
|
120
|
+
} else {
|
121
|
+
form.trigger('form:validate:fail');
|
122
|
+
}
|
123
|
+
form.trigger('form:validate:after');
|
96
124
|
return valid;
|
97
125
|
};
|
98
126
|
|
99
127
|
validateElement = function(element, validators) {
|
100
|
-
var kind, message, valid;
|
128
|
+
var context, fn, kind, message, valid, _ref;
|
101
129
|
element.trigger('element:validate:before');
|
102
130
|
if (element.data('changed') !== false) {
|
103
131
|
valid = true;
|
104
132
|
element.data('changed', false);
|
105
|
-
|
106
|
-
|
133
|
+
context = ClientSideValidations.validators.local;
|
134
|
+
for (kind in context) {
|
135
|
+
fn = context[kind];
|
136
|
+
if (validators[kind] && (message = fn.call(context, element, validators[kind]))) {
|
107
137
|
element.trigger('element:validate:fail', message).data('valid', false);
|
108
138
|
valid = false;
|
109
139
|
break;
|
110
140
|
}
|
111
141
|
}
|
112
142
|
if (valid) {
|
113
|
-
|
114
|
-
|
143
|
+
context = ClientSideValidations.validators.remote;
|
144
|
+
for (kind in context) {
|
145
|
+
fn = context[kind];
|
146
|
+
if (validators[kind] && (message = fn.call(context, element, validators[kind]))) {
|
115
147
|
element.trigger('element:validate:fail', message).data('valid', false);
|
116
148
|
valid = false;
|
117
149
|
break;
|
@@ -122,13 +154,11 @@
|
|
122
154
|
element.data('valid', null);
|
123
155
|
element.trigger('element:validate:pass');
|
124
156
|
}
|
125
|
-
element.trigger('element:validate:after');
|
126
|
-
if (element.data('valid') === false) {
|
127
|
-
return false;
|
128
|
-
} else {
|
129
|
-
return true;
|
130
|
-
}
|
131
157
|
}
|
158
|
+
element.trigger('element:validate:after');
|
159
|
+
return (_ref = element.data('valid') === false) != null ? _ref : {
|
160
|
+
"false": true
|
161
|
+
};
|
132
162
|
};
|
133
163
|
|
134
164
|
$(function() {
|
@@ -139,35 +169,40 @@
|
|
139
169
|
forms: {},
|
140
170
|
validators: {
|
141
171
|
all: function() {
|
142
|
-
return
|
172
|
+
return jQuery.extend({}, ClientSideValidations.validators.local, ClientSideValidations.validators.remote);
|
143
173
|
},
|
144
174
|
local: {
|
145
175
|
presence: function(element, options) {
|
146
|
-
if (/^\s*$/.test(element.val() ||
|
176
|
+
if (/^\s*$/.test(element.val() || '')) return options.message;
|
147
177
|
},
|
148
178
|
acceptance: function(element, options) {
|
179
|
+
var _ref;
|
149
180
|
switch (element.attr('type')) {
|
150
181
|
case 'checkbox':
|
151
182
|
if (!element.attr('checked')) return options.message;
|
152
183
|
break;
|
153
184
|
case 'text':
|
154
|
-
if (element.val() !== (options.accept || '1')
|
185
|
+
if (element.val() !== (((_ref = options.accept) != null ? _ref.toString() : void 0) || '1')) {
|
155
186
|
return options.message;
|
156
187
|
}
|
157
188
|
}
|
158
189
|
},
|
159
190
|
format: function(element, options) {
|
160
191
|
var message;
|
161
|
-
|
192
|
+
message = this.presence(element, options);
|
193
|
+
if (message) {
|
194
|
+
if (options.allow_blank === true) return;
|
162
195
|
return message;
|
163
|
-
}
|
164
|
-
|
165
|
-
|
166
|
-
|
196
|
+
}
|
197
|
+
if (options["with"] && !options["with"].test(element.val())) {
|
198
|
+
return options.message;
|
199
|
+
}
|
200
|
+
if (options.without && options.without.test(element.val())) {
|
201
|
+
return options.message;
|
167
202
|
}
|
168
203
|
},
|
169
204
|
numericality: function(element, options) {
|
170
|
-
var CHECKS, check;
|
205
|
+
var CHECKS, check, fn, operator;
|
171
206
|
if (!/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d*)?$/.test(element.val())) {
|
172
207
|
return options.messages.numericality;
|
173
208
|
}
|
@@ -182,9 +217,10 @@
|
|
182
217
|
less_than_or_equal_to: '<='
|
183
218
|
};
|
184
219
|
for (check in CHECKS) {
|
185
|
-
|
186
|
-
|
187
|
-
|
220
|
+
operator = CHECKS[check];
|
221
|
+
if (!(options[check] != null)) continue;
|
222
|
+
fn = new Function("return " + (element.val()) + " " + operator + " " + options[check]);
|
223
|
+
if (!fn()) return options.messages[check];
|
188
224
|
}
|
189
225
|
if (options.odd && !(parseInt(element.val(), 10) % 2)) {
|
190
226
|
return options.messages.odd;
|
@@ -194,119 +230,135 @@
|
|
194
230
|
}
|
195
231
|
},
|
196
232
|
length: function(element, options) {
|
197
|
-
var CHECKS, blankOptions, check, message, tokenized_length, tokenizer;
|
198
|
-
|
233
|
+
var CHECKS, blankOptions, check, fn, message, operator, tokenized_length, tokenizer;
|
234
|
+
tokenizer = options.js_tokenizer || "split('')";
|
235
|
+
tokenized_length = new Function('element', "return (element.val()." + tokenizer + " || '').length")(element);
|
199
236
|
CHECKS = {
|
200
237
|
is: '==',
|
201
238
|
minimum: '>=',
|
202
239
|
maximum: '<='
|
203
240
|
};
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
blankOptions.message = options.messages.minimum;
|
210
|
-
}
|
211
|
-
if ((message = this.presence(element, blankOptions)) && options.allow_blank === true) {} else if (message) {
|
241
|
+
blankOptions = {};
|
242
|
+
blankOptions.message = options.is ? options.messages.is : options.minimum ? options.messages.minimum : void 0;
|
243
|
+
message = this.presence(element, blankOptions);
|
244
|
+
if (message) {
|
245
|
+
if (options.allow_blank === true) return;
|
212
246
|
return message;
|
213
|
-
}
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
247
|
+
}
|
248
|
+
for (check in CHECKS) {
|
249
|
+
operator = CHECKS[check];
|
250
|
+
if (!options[check]) continue;
|
251
|
+
fn = new Function("return " + tokenized_length + " " + operator + " " + options[check]);
|
252
|
+
if (!fn()) return options.messages[check];
|
219
253
|
}
|
220
254
|
},
|
221
255
|
exclusion: function(element, options) {
|
222
|
-
var lower, message, upper,
|
223
|
-
|
224
|
-
|
225
|
-
|
256
|
+
var lower, message, o, upper, _ref;
|
257
|
+
message = this.presence(element, options);
|
258
|
+
if (message) {
|
259
|
+
if (options.allow_blank === true) return;
|
226
260
|
return message;
|
227
|
-
}
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
return options.message;
|
261
|
+
}
|
262
|
+
if (options["in"]) {
|
263
|
+
if (_ref = element.val(), __indexOf.call((function() {
|
264
|
+
var _i, _len, _ref2, _results;
|
265
|
+
_ref2 = options["in"];
|
266
|
+
_results = [];
|
267
|
+
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
268
|
+
o = _ref2[_i];
|
269
|
+
_results.push(o.toString());
|
237
270
|
}
|
271
|
+
return _results;
|
272
|
+
})(), _ref) >= 0) {
|
273
|
+
return options.message;
|
274
|
+
}
|
275
|
+
}
|
276
|
+
if (options.range) {
|
277
|
+
lower = options.range[0];
|
278
|
+
upper = options.range[1];
|
279
|
+
if (element.val() >= lower && element.val() <= upper) {
|
280
|
+
return options.message;
|
238
281
|
}
|
239
282
|
}
|
240
283
|
},
|
241
284
|
inclusion: function(element, options) {
|
242
|
-
var lower, message, upper,
|
243
|
-
|
244
|
-
|
245
|
-
|
285
|
+
var lower, message, o, upper, _ref;
|
286
|
+
message = this.presence(element, options);
|
287
|
+
if (message) {
|
288
|
+
if (options.allow_blank === true) return;
|
246
289
|
return message;
|
247
|
-
}
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
if (element.val() >= lower && element.val() <= upper) {} else {
|
257
|
-
return options.message;
|
290
|
+
}
|
291
|
+
if (options["in"]) {
|
292
|
+
if (_ref = element.val(), __indexOf.call((function() {
|
293
|
+
var _i, _len, _ref2, _results;
|
294
|
+
_ref2 = options["in"];
|
295
|
+
_results = [];
|
296
|
+
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
297
|
+
o = _ref2[_i];
|
298
|
+
_results.push(o.toString());
|
258
299
|
}
|
300
|
+
return _results;
|
301
|
+
})(), _ref) >= 0) {
|
302
|
+
return;
|
259
303
|
}
|
304
|
+
return options.message;
|
305
|
+
}
|
306
|
+
if (options.range) {
|
307
|
+
lower = options.range[0];
|
308
|
+
upper = options.range[1];
|
309
|
+
if (element.val() >= lower && element.val() <= upper) return;
|
310
|
+
return options.message;
|
260
311
|
}
|
261
312
|
},
|
262
313
|
confirmation: function(element, options) {
|
263
|
-
if (element.val() !==
|
314
|
+
if (element.val() !== jQuery("#" + (element.attr('id')) + "_confirmation").val()) {
|
264
315
|
return options.message;
|
265
316
|
}
|
266
317
|
}
|
267
318
|
},
|
268
319
|
remote: {
|
269
320
|
uniqueness: function(element, options) {
|
270
|
-
var data, key, message, name, scoped_element;
|
271
|
-
|
321
|
+
var data, key, message, name, scope_value, scoped_element, scoped_name, _ref;
|
322
|
+
message = ClientSideValidations.validators.local.presence(element, options);
|
323
|
+
if (message) {
|
324
|
+
if (options.allow_blank === true) return;
|
272
325
|
return message;
|
273
|
-
}
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
326
|
+
}
|
327
|
+
data = {};
|
328
|
+
data.case_sensitive = !!options.case_sensitive;
|
329
|
+
if (options.id) data.id = options.id;
|
330
|
+
if (options.scope) {
|
331
|
+
data.scope = {};
|
332
|
+
_ref = options.scope;
|
333
|
+
for (key in _ref) {
|
334
|
+
scope_value = _ref[key];
|
335
|
+
scoped_name = element.attr('name').replace(/\[\w+\]$/, "[" + key + "]");
|
336
|
+
scoped_element = jQuery("[name='" + scoped_name + "']");
|
337
|
+
if (scoped_element[0] && scoped_element.val() !== scope_value) {
|
338
|
+
data.scope[key] = scoped_element.val();
|
339
|
+
scoped_element.unbind("change." + element.id).bind("change." + element.id, function() {
|
340
|
+
element.trigger('change');
|
341
|
+
return element.trigger('focusout');
|
342
|
+
});
|
343
|
+
} else {
|
344
|
+
data.scope[key] = scope_value;
|
291
345
|
}
|
292
346
|
}
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
return options.message;
|
309
|
-
}
|
347
|
+
}
|
348
|
+
if (/_attributes\]/.test(element.attr('name'))) {
|
349
|
+
name = element.attr('name').match(/\[\w+_attributes\]/g).pop().match(/\[(\w+)_attributes\]/).pop();
|
350
|
+
name += /(\[\w+\])$/.exec(element.attr('name'))[1];
|
351
|
+
} else {
|
352
|
+
name = element.attr('name');
|
353
|
+
}
|
354
|
+
if (options['class']) name = options['class'] + '[' + name.split('[')[1];
|
355
|
+
data[name] = element.val();
|
356
|
+
if (jQuery.ajax({
|
357
|
+
url: '/validators/uniqueness',
|
358
|
+
data: data,
|
359
|
+
async: false
|
360
|
+
}).status === 200) {
|
361
|
+
return options.message;
|
310
362
|
}
|
311
363
|
}
|
312
364
|
}
|
@@ -315,10 +367,10 @@
|
|
315
367
|
'ActionView::Helpers::FormBuilder': {
|
316
368
|
add: function(element, settings, message) {
|
317
369
|
var inputErrorField, label, labelErrorField;
|
318
|
-
if (element.data('valid') !== false &&
|
319
|
-
inputErrorField =
|
320
|
-
labelErrorField =
|
321
|
-
label =
|
370
|
+
if (element.data('valid') !== false && !(jQuery("label.message[for='" + (element.attr('id')) + "']")[0] != null)) {
|
371
|
+
inputErrorField = jQuery(settings.input_tag);
|
372
|
+
labelErrorField = jQuery(settings.label_tag);
|
373
|
+
label = jQuery("label[for='" + (element.attr('id')) + "']:not(.message)");
|
322
374
|
if (element.attr('autofocus')) element.attr('autofocus', false);
|
323
375
|
element.before(inputErrorField);
|
324
376
|
inputErrorField.find('span#input_tag').replaceWith(element);
|
@@ -327,13 +379,13 @@
|
|
327
379
|
label.replaceWith(labelErrorField);
|
328
380
|
labelErrorField.find('label#label_tag').replaceWith(label);
|
329
381
|
}
|
330
|
-
return
|
382
|
+
return jQuery("label.message[for='" + (element.attr('id')) + "']").text(message);
|
331
383
|
},
|
332
384
|
remove: function(element, settings) {
|
333
385
|
var errorFieldClass, inputErrorField, label, labelErrorField;
|
334
|
-
errorFieldClass =
|
386
|
+
errorFieldClass = jQuery(settings.input_tag).attr('class');
|
335
387
|
inputErrorField = element.closest("." + errorFieldClass);
|
336
|
-
label =
|
388
|
+
label = jQuery("label[for='" + (element.attr('id')) + "']:not(.message)");
|
337
389
|
labelErrorField = label.closest("." + errorFieldClass);
|
338
390
|
if (inputErrorField[0]) {
|
339
391
|
inputErrorField.find("#" + (element.attr('id'))).detach();
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: client_side_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.0.beta.
|
4
|
+
version: 3.2.0.beta.3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-04 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70115631263420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.2.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70115631263420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &70115631263000 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70115631263000
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mocha
|
38
|
-
requirement: &
|
38
|
+
requirement: &70115631262540 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70115631262540
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sinatra
|
49
|
-
requirement: &
|
49
|
+
requirement: &70115631262040 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '1.0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70115631262040
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: shotgun
|
60
|
-
requirement: &
|
60
|
+
requirement: &70115631261620 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70115631261620
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: thin
|
71
|
-
requirement: &
|
71
|
+
requirement: &70115651537880 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70115651537880
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: json
|
82
|
-
requirement: &
|
82
|
+
requirement: &70115651537460 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70115651537460
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: coffee-script
|
93
|
-
requirement: &
|
93
|
+
requirement: &70115651537040 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70115651537040
|
102
102
|
description: Client Side Validations
|
103
103
|
email:
|
104
104
|
- bcardarella@gmail.com
|
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
156
|
version: 1.3.1
|
157
157
|
requirements: []
|
158
158
|
rubyforge_project:
|
159
|
-
rubygems_version: 1.8.
|
159
|
+
rubygems_version: 1.8.15
|
160
160
|
signing_key:
|
161
161
|
specification_version: 3
|
162
162
|
summary: Client Side Validations
|