jQuery-Validation-Engine-rails 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTI1NjRmMjI1MTU2NDlmZjk5NjdkMGM3OTkyN2I3ZGMzYmY4Njc5NA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NTg1NWFmNDNiZDRhYzFlNTU0OGZlZTJkYTEzOWNhMzEyNGNlZGRmZA==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MzRlN2NkYzIxMmQzNDIzNTMzYTczYzQwOGFiZWMyYjc2Yzg1ZjI1MDU5OGRm
|
10
|
+
YmUzMGRkZDY0ZWU0NjliNjZmNmY2ZTljYzg3ZWJiMGUxZDgyMzc4OTY4MGYy
|
11
|
+
YWU3M2ZlMTNlYTU5M2JkNzhhMTcwODQ0YmZkNjdhN2M3MzgzMTA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
M2JiNWNlNmJiN2RkYWNlOTI5YzY0ZTlhODkyY2Q1N2JhM2I1ZjU4MTE0Njdh
|
14
|
+
NjNiOTA2ZjQ2YzI2MTE4YWNkOTIwOGUyNDMxYmU1MTFjMjczZjI3YTQ4ZDBm
|
15
|
+
N2E0MmNlNGFmMzc1MDY5MDEzZTRlMDcwZjY5N2VmMWQ3YzhjYjA=
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Inline Form Validation Engine 2.6.
|
2
|
+
* Inline Form Validation Engine 2.6.2, jQuery plugin
|
3
3
|
*
|
4
4
|
* Copyright(c) 2010, Cedric Dugas
|
5
5
|
* http://www.position-absolute.com
|
@@ -12,28 +12,28 @@
|
|
12
12
|
*/
|
13
13
|
(function($) {
|
14
14
|
|
15
|
-
|
15
|
+
"use strict";
|
16
16
|
|
17
|
-
|
17
|
+
var methods = {
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
19
|
+
/**
|
20
|
+
* Kind of the constructor, called before any action
|
21
|
+
* @param {Map} user options
|
22
|
+
*/
|
23
|
+
init: function(options) {
|
24
|
+
var form = this;
|
25
|
+
if (!form.data('jqv') || form.data('jqv') == null ) {
|
26
|
+
options = methods._saveOptions(form, options);
|
27
|
+
// bind all formError elements to close on click
|
28
|
+
$(document).on("click", ".formError", function() {
|
29
|
+
$(this).fadeOut(150, function() {
|
30
|
+
// remove prompt once invisible
|
31
|
+
$(this).parent('.formErrorOuter').remove();
|
32
|
+
$(this).remove();
|
33
|
+
});
|
34
|
+
});
|
35
|
+
}
|
36
|
+
return this;
|
37
37
|
},
|
38
38
|
/**
|
39
39
|
* Attachs jQuery.validationEngine to form.submit and field.blur events
|
@@ -42,11 +42,6 @@
|
|
42
42
|
*/
|
43
43
|
attach: function(userOptions) {
|
44
44
|
|
45
|
-
if(!$(this).is("form")) {
|
46
|
-
alert("Sorry, jqv.attach() only applies to a form");
|
47
|
-
return this;
|
48
|
-
}
|
49
|
-
|
50
45
|
var form = this;
|
51
46
|
var options;
|
52
47
|
|
@@ -58,10 +53,10 @@
|
|
58
53
|
options.validateAttribute = (form.find("[data-validation-engine*=validate]").length) ? "data-validation-engine" : "class";
|
59
54
|
if (options.binded) {
|
60
55
|
|
61
|
-
//
|
62
|
-
form.
|
63
|
-
form.
|
64
|
-
form.
|
56
|
+
// delegate fields
|
57
|
+
form.on(options.validationEventTrigger, "["+options.validateAttribute+"*=validate]:not([type=checkbox]):not([type=radio]):not(.datepicker)", methods._onFieldEvent);
|
58
|
+
form.on("click", "["+options.validateAttribute+"*=validate][type=checkbox],["+options.validateAttribute+"*=validate][type=radio]", methods._onFieldEvent);
|
59
|
+
form.on(options.validationEventTrigger,"["+options.validateAttribute+"*=validate][class*=datepicker]", {"delay": 300}, methods._onFieldEvent);
|
65
60
|
}
|
66
61
|
if (options.autoPositionUpdate) {
|
67
62
|
$(window).bind("resize", {
|
@@ -69,40 +64,34 @@
|
|
69
64
|
"formElem": form
|
70
65
|
}, methods.updatePromptsPosition);
|
71
66
|
}
|
67
|
+
form.on("click","a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']", methods._submitButtonClick);
|
68
|
+
form.removeData('jqv_submitButton');
|
69
|
+
|
72
70
|
// bind form.submit
|
73
|
-
form.
|
71
|
+
form.on("submit", methods._onSubmitEvent);
|
74
72
|
return this;
|
75
73
|
},
|
76
74
|
/**
|
77
75
|
* Unregisters any bindings that may point to jQuery.validaitonEngine
|
78
76
|
*/
|
79
77
|
detach: function() {
|
80
|
-
|
81
|
-
if(!$(this).is("form")) {
|
82
|
-
alert("Sorry, jqv.detach() only applies to a form");
|
83
|
-
return this;
|
84
|
-
}
|
85
78
|
|
86
79
|
var form = this;
|
87
80
|
var options = form.data('jqv');
|
88
81
|
|
89
82
|
// unbind fields
|
90
|
-
form.find("["+options.validateAttribute+"*=validate]").not("[type=checkbox]").
|
91
|
-
form.find("["+options.validateAttribute+"*=validate][type=checkbox],[class*=validate][type=radio]").
|
83
|
+
form.find("["+options.validateAttribute+"*=validate]").not("[type=checkbox]").off(options.validationEventTrigger, methods._onFieldEvent);
|
84
|
+
form.find("["+options.validateAttribute+"*=validate][type=checkbox],[class*=validate][type=radio]").off("click", methods._onFieldEvent);
|
92
85
|
|
93
86
|
// unbind form.submit
|
94
|
-
form.
|
95
|
-
|
96
|
-
// unbind live fields (kill)
|
97
|
-
form.find("["+options.validateAttribute+"*=validate]").not("[type=checkbox]").die(options.validationEventTrigger, methods._onFieldEvent);
|
98
|
-
form.find("["+options.validateAttribute+"*=validate][type=checkbox]").die("click", methods._onFieldEvent);
|
99
|
-
|
100
|
-
// unbind form.submit
|
101
|
-
form.die("submit", methods.onAjaxFormComplete);
|
87
|
+
form.off("submit", methods._onSubmitEvent);
|
102
88
|
form.removeData('jqv');
|
89
|
+
|
90
|
+
form.off("click", "a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']", methods._submitButtonClick);
|
91
|
+
form.removeData('jqv_submitButton');
|
103
92
|
|
104
93
|
if (options.autoPositionUpdate)
|
105
|
-
$(window).
|
94
|
+
$(window).off("resize", methods.updatePromptsPosition);
|
106
95
|
|
107
96
|
return this;
|
108
97
|
},
|
@@ -115,27 +104,34 @@
|
|
115
104
|
validate: function() {
|
116
105
|
var element = $(this);
|
117
106
|
var valid = null;
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
element.
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
107
|
+
|
108
|
+
if (element.is("form") || element.hasClass("validationEngineContainer")) {
|
109
|
+
if (element.hasClass('validating')) {
|
110
|
+
// form is already validating.
|
111
|
+
// Should abort old validation and start new one. I don't know how to implement it.
|
112
|
+
return false;
|
113
|
+
} else {
|
114
|
+
element.addClass('validating');
|
115
|
+
var options = element.data('jqv');
|
116
|
+
var valid = methods._validateFields(this);
|
117
|
+
|
118
|
+
// If the form doesn't validate, clear the 'validating' class before the user has a chance to submit again
|
119
|
+
setTimeout(function(){
|
120
|
+
element.removeClass('validating');
|
121
|
+
}, 100);
|
122
|
+
if (valid && options.onSuccess) {
|
123
|
+
options.onSuccess();
|
124
|
+
} else if (!valid && options.onFailure) {
|
125
|
+
options.onFailure();
|
126
|
+
}
|
131
127
|
}
|
132
|
-
} else if (element.is('form')) {
|
128
|
+
} else if (element.is('form') || element.hasClass('validationEngineContainer')) {
|
133
129
|
element.removeClass('validating');
|
134
130
|
} else {
|
135
131
|
// field validation
|
136
|
-
var form = element.closest('form')
|
137
|
-
|
138
|
-
|
132
|
+
var form = element.closest('form, .validationEngineContainer'),
|
133
|
+
options = (form.data('jqv')) ? form.data('jqv') : $.validationEngine.defaults,
|
134
|
+
valid = methods._validateField(element, options);
|
139
135
|
|
140
136
|
if (valid && options.onFieldSuccess)
|
141
137
|
options.onFieldSuccess();
|
@@ -143,6 +139,10 @@
|
|
143
139
|
options.onFieldFailure();
|
144
140
|
}
|
145
141
|
}
|
142
|
+
if(options.onValidationComplete) {
|
143
|
+
// !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing
|
144
|
+
return !!options.onValidationComplete(form, valid);
|
145
|
+
}
|
146
146
|
return valid;
|
147
147
|
},
|
148
148
|
/**
|
@@ -155,7 +155,7 @@
|
|
155
155
|
var noAnimation = event.data.noAnimation;
|
156
156
|
}
|
157
157
|
else
|
158
|
-
var form = $(this.closest('form'));
|
158
|
+
var form = $(this.closest('form, .validationEngineContainer'));
|
159
159
|
|
160
160
|
var options = form.data('jqv');
|
161
161
|
// No option, take default one
|
@@ -180,8 +180,7 @@
|
|
180
180
|
* @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight
|
181
181
|
*/
|
182
182
|
showPrompt: function(promptText, type, promptPosition, showArrow) {
|
183
|
-
|
184
|
-
var form = this.closest('form');
|
183
|
+
var form = this.closest('form, .validationEngineContainer');
|
185
184
|
var options = form.data('jqv');
|
186
185
|
// No option, take default one
|
187
186
|
if(!options)
|
@@ -197,12 +196,12 @@
|
|
197
196
|
* Closes form error prompts, CAN be invidual
|
198
197
|
*/
|
199
198
|
hide: function() {
|
200
|
-
var form = $(this).closest('form');
|
199
|
+
var form = $(this).closest('form, .validationEngineContainer');
|
201
200
|
var options = form.data('jqv');
|
202
201
|
var fadeDuration = (options && options.fadeDuration) ? options.fadeDuration : 0.3;
|
203
202
|
var closingtag;
|
204
203
|
|
205
|
-
if($(this).is("form")) {
|
204
|
+
if($(this).is("form") || $(this).hasClass("validationEngineContainer")) {
|
206
205
|
closingtag = "parentForm"+methods._getClassName($(this).attr("id"));
|
207
206
|
} else {
|
208
207
|
closingtag = methods._getClassName($(this).attr("id")) +"formError";
|
@@ -220,8 +219,8 @@
|
|
220
219
|
|
221
220
|
var form = this;
|
222
221
|
var options = form.data('jqv');
|
223
|
-
var duration = options ? options.fadeDuration:
|
224
|
-
$('.formError').fadeTo(duration,
|
222
|
+
var duration = options ? options.fadeDuration:300;
|
223
|
+
$('.formError').fadeTo(duration, 300, function() {
|
225
224
|
$(this).parent('.formErrorOuter').remove();
|
226
225
|
$(this).remove();
|
227
226
|
});
|
@@ -233,7 +232,7 @@
|
|
233
232
|
*/
|
234
233
|
_onFieldEvent: function(event) {
|
235
234
|
var field = $(this);
|
236
|
-
var form = field.closest('form');
|
235
|
+
var form = field.closest('form, .validationEngineContainer');
|
237
236
|
var options = form.data('jqv');
|
238
237
|
options.eventTrigger = "field";
|
239
238
|
// validate the current field
|
@@ -257,6 +256,18 @@
|
|
257
256
|
_onSubmitEvent: function() {
|
258
257
|
var form = $(this);
|
259
258
|
var options = form.data('jqv');
|
259
|
+
|
260
|
+
//check if it is trigger from skipped button
|
261
|
+
if (form.data("jqv_submitButton")){
|
262
|
+
var submitButton = $("#" + form.data("jqv_submitButton"));
|
263
|
+
if (submitButton){
|
264
|
+
if (submitButton.length > 0){
|
265
|
+
if (submitButton.hasClass("validate-skip") || submitButton.attr("data-validation-engine-skip") == "true")
|
266
|
+
return true;
|
267
|
+
}
|
268
|
+
}
|
269
|
+
}
|
270
|
+
|
260
271
|
options.eventTrigger = "submit";
|
261
272
|
|
262
273
|
// validate each field
|
@@ -328,9 +339,18 @@
|
|
328
339
|
errorFound |= methods._validateField(field, options);
|
329
340
|
if (errorFound && first_err==null)
|
330
341
|
if (field.is(":hidden") && options.prettySelect)
|
331
|
-
|
332
|
-
|
333
|
-
|
342
|
+
first_err = field = form.find("#" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);
|
343
|
+
else {
|
344
|
+
|
345
|
+
//Check if we need to adjust what element to show the prompt on
|
346
|
+
//and and such scroll to instead
|
347
|
+
if(field.data('jqv-prompt-at') instanceof jQuery ){
|
348
|
+
field = field.data('jqv-prompt-at');
|
349
|
+
} else if(field.data('jqv-prompt-at')) {
|
350
|
+
field = $(field.data('jqv-prompt-at'));
|
351
|
+
}
|
352
|
+
first_err=field;
|
353
|
+
}
|
334
354
|
if (options.doNotShowAllErrosOnSubmit)
|
335
355
|
return false;
|
336
356
|
names.push(field.attr('name'));
|
@@ -426,7 +446,11 @@
|
|
426
446
|
return options.onBeforeAjaxFormValidation(form, options);
|
427
447
|
},
|
428
448
|
error: function(data, transport) {
|
429
|
-
|
449
|
+
if (options.onFailure) {
|
450
|
+
options.onFailure(data, transport);
|
451
|
+
} else {
|
452
|
+
methods._ajaxError(data, transport);
|
453
|
+
}
|
430
454
|
},
|
431
455
|
success: function(json) {
|
432
456
|
if ((dataType == "json") && (json !== true)) {
|
@@ -497,7 +521,7 @@
|
|
497
521
|
++$.validationEngine.fieldIdCounter;
|
498
522
|
}
|
499
523
|
|
500
|
-
|
524
|
+
if (!options.validateNonVisibleFields && (field.is(":hidden") && !options.prettySelect || field.parent().is(":hidden")))
|
501
525
|
return false;
|
502
526
|
|
503
527
|
var rulesParsing = field.attr(options.validateAttribute);
|
@@ -523,7 +547,7 @@
|
|
523
547
|
limitErrors = true;
|
524
548
|
}
|
525
549
|
|
526
|
-
var form = $(field.closest("form"));
|
550
|
+
var form = $(field.closest("form, .validationEngineContainer"));
|
527
551
|
// Fix for adding spaces in the rules
|
528
552
|
for (var i = 0; i < rules.length; i++) {
|
529
553
|
rules[i] = rules[i].replace(" ", "");
|
@@ -684,14 +708,22 @@
|
|
684
708
|
}
|
685
709
|
}
|
686
710
|
// If the rules required is not added, an empty field is not validated
|
687
|
-
|
711
|
+
//the 3rd condition is added so that even empty password fields should be equal
|
712
|
+
//otherwise if one is filled and another left empty, the "equal" condition would fail
|
713
|
+
//which does not make any sense
|
714
|
+
if(!required && !(field.val()) && field.val().length < 1 && rules.indexOf("equals") < 0) options.isError = false;
|
688
715
|
|
689
716
|
// Hack for radio/checkbox group button, the validation go into the
|
690
717
|
// first radio/checkbox of the group
|
691
718
|
var fieldType = field.prop("type");
|
719
|
+
var positionType=field.data("promptPosition") || options.promptPosition;
|
692
720
|
|
693
721
|
if ((fieldType == "radio" || fieldType == "checkbox") && form.find("input[name='" + fieldName + "']").size() > 1) {
|
722
|
+
if(positionType === 'inline') {
|
723
|
+
field = $(form.find("input[name='" + fieldName + "'][type!=hidden]:last"));
|
724
|
+
} else {
|
694
725
|
field = $(form.find("input[name='" + fieldName + "'][type!=hidden]:first"));
|
726
|
+
}
|
695
727
|
options.showArrow = false;
|
696
728
|
}
|
697
729
|
|
@@ -720,6 +752,13 @@
|
|
720
752
|
|
721
753
|
methods._handleStatusCssClasses(field, options);
|
722
754
|
|
755
|
+
/* run callback function for each field */
|
756
|
+
if (options.isError && options.onFieldFailure)
|
757
|
+
options.onFieldFailure(field);
|
758
|
+
|
759
|
+
if (!options.isError && options.onFieldSuccess)
|
760
|
+
options.onFieldSuccess(field);
|
761
|
+
|
723
762
|
return options.isError;
|
724
763
|
},
|
725
764
|
/**
|
@@ -764,12 +803,18 @@
|
|
764
803
|
// If we are using the custon validation type, build the index for the rule.
|
765
804
|
// Otherwise if we are doing a function call, make the call and return the object
|
766
805
|
// that is passed back.
|
767
|
-
|
768
|
-
if (rule
|
769
|
-
var
|
770
|
-
|
771
|
-
rule
|
806
|
+
var rule_index = jQuery.inArray(rule, rules);
|
807
|
+
if (rule === "custom" || rule === "funcCall") {
|
808
|
+
var custom_validation_type = rules[rule_index + 1];
|
809
|
+
rule = rule + "[" + custom_validation_type + "]";
|
810
|
+
// Delete the rule from the rules array so that it doesn't try to call the
|
811
|
+
// same rule over again
|
812
|
+
delete(rules[rule_index]);
|
772
813
|
}
|
814
|
+
// Change the rule to the composite rule, if it was different from the original
|
815
|
+
var alteredRule = rule;
|
816
|
+
|
817
|
+
|
773
818
|
var element_classes = (field.attr("data-validation-engine")) ? field.attr("data-validation-engine") : field.attr("class");
|
774
819
|
var element_classes_array = element_classes.split(" ");
|
775
820
|
|
@@ -784,7 +829,7 @@
|
|
784
829
|
// If the original validation method returned an error and we have a custom error message,
|
785
830
|
// return the custom message instead. Otherwise return the original error message.
|
786
831
|
if (errorMsg != undefined) {
|
787
|
-
var custom_message = methods._getCustomErrorMessage($(field), element_classes_array,
|
832
|
+
var custom_message = methods._getCustomErrorMessage($(field), element_classes_array, alteredRule, options);
|
788
833
|
if (custom_message) errorMsg = custom_message;
|
789
834
|
}
|
790
835
|
return errorMsg;
|
@@ -792,7 +837,7 @@
|
|
792
837
|
},
|
793
838
|
_getCustomErrorMessage:function (field, classes, rule, options) {
|
794
839
|
var custom_message = false;
|
795
|
-
var validityProp = methods._validityProp[rule];
|
840
|
+
var validityProp = /^custom\[.*\]$/.test(rule) ? methods._validityProp["custom"] : methods._validityProp[rule];
|
796
841
|
// If there is a validityProp for this rule, check to see if the field has an attribute for it
|
797
842
|
if (validityProp != undefined) {
|
798
843
|
custom_message = field.attr("data-errormessage-"+validityProp);
|
@@ -867,9 +912,16 @@
|
|
867
912
|
case "select-one":
|
868
913
|
case "select-multiple":
|
869
914
|
default:
|
870
|
-
|
871
|
-
|
915
|
+
var field_val = $.trim( field.val() );
|
916
|
+
var dv_placeholder = $.trim( field.attr("data-validation-placeholder") );
|
917
|
+
var placeholder = $.trim( field.attr("placeholder") );
|
918
|
+
if (
|
919
|
+
( !field_val )
|
920
|
+
|| ( dv_placeholder && field_val == dv_placeholder )
|
921
|
+
|| ( placeholder && field_val == placeholder )
|
922
|
+
) {
|
872
923
|
return options.allrules[rules[i]].alertText;
|
924
|
+
}
|
873
925
|
break;
|
874
926
|
case "radio":
|
875
927
|
case "checkbox":
|
@@ -881,7 +933,7 @@
|
|
881
933
|
break;
|
882
934
|
}
|
883
935
|
// old validation style
|
884
|
-
var form = field.closest("form");
|
936
|
+
var form = field.closest("form, .validationEngineContainer");
|
885
937
|
var name = field.attr("name");
|
886
938
|
if (form.find("input[name='" + name + "']:checked").size() == 0) {
|
887
939
|
if (form.find("input[name='" + name + "']:visible").size() == 1)
|
@@ -906,7 +958,7 @@
|
|
906
958
|
var classGroup = "["+options.validateAttribute+"*=" +rules[i + 1] +"]";
|
907
959
|
var isValid = false;
|
908
960
|
// Check all fields from the group
|
909
|
-
field.closest("form").find(classGroup).each(function(){
|
961
|
+
field.closest("form, .validationEngineContainer").find(classGroup).each(function(){
|
910
962
|
if(!methods._required($(this), rules, i, options)){
|
911
963
|
isValid = true;
|
912
964
|
return false;
|
@@ -1098,7 +1150,7 @@
|
|
1098
1150
|
_past: function(form, field, rules, i, options) {
|
1099
1151
|
|
1100
1152
|
var p=rules[i + 1];
|
1101
|
-
var fieldAlt = $(form.find("
|
1153
|
+
var fieldAlt = $(form.find("*[name='" + p.replace(/^#+/, '') + "']"));
|
1102
1154
|
var pdate;
|
1103
1155
|
|
1104
1156
|
if (p.toLowerCase() == "now") {
|
@@ -1131,7 +1183,7 @@
|
|
1131
1183
|
_future: function(form, field, rules, i, options) {
|
1132
1184
|
|
1133
1185
|
var p=rules[i + 1];
|
1134
|
-
var fieldAlt = $(form.find("
|
1186
|
+
var fieldAlt = $(form.find("*[name='" + p.replace(/^#+/, '') + "']"));
|
1135
1187
|
var pdate;
|
1136
1188
|
|
1137
1189
|
if (p.toLowerCase() == "now") {
|
@@ -1333,7 +1385,7 @@
|
|
1333
1385
|
for (var i = 0; i < domIds.length; i++) {
|
1334
1386
|
var id = domIds[i];
|
1335
1387
|
if ($(id).length) {
|
1336
|
-
var inputValue = field.closest("form").find(id).val();
|
1388
|
+
var inputValue = field.closest("form, .validationEngineContainer").find(id).val();
|
1337
1389
|
var keyValue = id.replace('#', '') + '=' + escape(inputValue);
|
1338
1390
|
data[id.replace('#', '')] = inputValue;
|
1339
1391
|
}
|
@@ -1359,7 +1411,11 @@
|
|
1359
1411
|
options: options,
|
1360
1412
|
beforeSend: function() {},
|
1361
1413
|
error: function(data, transport) {
|
1362
|
-
|
1414
|
+
if (options.onFailure) {
|
1415
|
+
options.onFailure(data, transport);
|
1416
|
+
} else {
|
1417
|
+
methods._ajaxError(data, transport);
|
1418
|
+
}
|
1363
1419
|
},
|
1364
1420
|
success: function(json) {
|
1365
1421
|
|
@@ -1455,6 +1511,10 @@
|
|
1455
1511
|
var dateParts = d.split("-");
|
1456
1512
|
if(dateParts==d)
|
1457
1513
|
dateParts = d.split("/");
|
1514
|
+
if(dateParts==d) {
|
1515
|
+
dateParts = d.split(".");
|
1516
|
+
return new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
|
1517
|
+
}
|
1458
1518
|
return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
|
1459
1519
|
},
|
1460
1520
|
/**
|
@@ -1467,6 +1527,13 @@
|
|
1467
1527
|
* @param {Map} options user options
|
1468
1528
|
*/
|
1469
1529
|
_showPrompt: function(field, promptText, type, ajaxed, options, ajaxform) {
|
1530
|
+
//Check if we need to adjust what element to show the prompt on
|
1531
|
+
if(field.data('jqv-prompt-at') instanceof jQuery ){
|
1532
|
+
field = field.data('jqv-prompt-at');
|
1533
|
+
} else if(field.data('jqv-prompt-at')) {
|
1534
|
+
field = $(field.data('jqv-prompt-at'));
|
1535
|
+
}
|
1536
|
+
|
1470
1537
|
var prompt = methods._getPrompt(field);
|
1471
1538
|
// The ajax submit errors are not see has an error in the form,
|
1472
1539
|
// When the form errors are returned, the engine see 2 bubbles, but those are ebing closed by the engine at the same time
|
@@ -1495,7 +1562,7 @@
|
|
1495
1562
|
var prompt = $('<div>');
|
1496
1563
|
prompt.addClass(methods._getClassName(field.attr("id")) + "formError");
|
1497
1564
|
// add a class name to identify the parent form of the prompt
|
1498
|
-
prompt.addClass("parentForm"+methods._getClassName(field.
|
1565
|
+
prompt.addClass("parentForm"+methods._getClassName(field.closest('form, .validationEngineContainer').attr("id")));
|
1499
1566
|
prompt.addClass("formError");
|
1500
1567
|
|
1501
1568
|
switch (type) {
|
@@ -1514,13 +1581,16 @@
|
|
1514
1581
|
|
1515
1582
|
// create the prompt content
|
1516
1583
|
var promptContent = $('<div>').addClass("formErrorContent").html(promptText).appendTo(prompt);
|
1584
|
+
|
1585
|
+
// determine position type
|
1586
|
+
var positionType=field.data("promptPosition") || options.promptPosition;
|
1587
|
+
|
1517
1588
|
// create the css arrow pointing at the field
|
1518
1589
|
// note that there is no triangle on max-checkbox and radio
|
1519
1590
|
if (options.showArrow) {
|
1520
1591
|
var arrow = $('<div>').addClass("formErrorArrow");
|
1521
1592
|
|
1522
1593
|
//prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)
|
1523
|
-
var positionType=field.data("promptPosition") || options.promptPosition;
|
1524
1594
|
if (typeof(positionType)=='string')
|
1525
1595
|
{
|
1526
1596
|
var pos=positionType.indexOf(":");
|
@@ -1545,19 +1615,44 @@
|
|
1545
1615
|
if (options.addPromptClass)
|
1546
1616
|
prompt.addClass(options.addPromptClass);
|
1547
1617
|
|
1618
|
+
// Add custom prompt class defined in element
|
1619
|
+
var requiredOverride = field.attr('data-required-class');
|
1620
|
+
if(requiredOverride !== undefined) {
|
1621
|
+
prompt.addClass(requiredOverride);
|
1622
|
+
} else {
|
1623
|
+
if(options.prettySelect) {
|
1624
|
+
if($('#' + field.attr('id')).next().is('select')) {
|
1625
|
+
var prettyOverrideClass = $('#' + field.attr('id').substr(options.usePrefix.length).substring(options.useSuffix.length)).attr('data-required-class');
|
1626
|
+
if(prettyOverrideClass !== undefined) {
|
1627
|
+
prompt.addClass(prettyOverrideClass);
|
1628
|
+
}
|
1629
|
+
}
|
1630
|
+
}
|
1631
|
+
}
|
1632
|
+
|
1548
1633
|
prompt.css({
|
1549
|
-
"opacity": 0
|
1550
|
-
'position':'absolute'
|
1634
|
+
"opacity": 0
|
1551
1635
|
});
|
1552
|
-
|
1636
|
+
if(positionType === 'inline') {
|
1637
|
+
prompt.addClass("inline");
|
1638
|
+
if(typeof field.attr('data-prompt-target') !== 'undefined' && $('#'+field.attr('data-prompt-target')).length > 0) {
|
1639
|
+
prompt.appendTo($('#'+field.attr('data-prompt-target')));
|
1640
|
+
} else {
|
1641
|
+
field.after(prompt);
|
1642
|
+
}
|
1643
|
+
} else {
|
1644
|
+
field.before(prompt);
|
1645
|
+
}
|
1553
1646
|
|
1554
1647
|
var pos = methods._calculatePosition(field, prompt, options);
|
1555
1648
|
prompt.css({
|
1649
|
+
'position': positionType === 'inline' ? 'relative' : 'absolute',
|
1556
1650
|
"top": pos.callerTopPosition,
|
1557
1651
|
"left": pos.callerleftPosition,
|
1558
1652
|
"marginTop": pos.marginTopSize,
|
1559
1653
|
"opacity": 0
|
1560
1654
|
}).data("callerField", field);
|
1655
|
+
|
1561
1656
|
|
1562
1657
|
if (options.autoHidePrompt) {
|
1563
1658
|
setTimeout(function(){
|
@@ -1638,9 +1733,9 @@
|
|
1638
1733
|
* @return undefined or the error prompt (jqObject)
|
1639
1734
|
*/
|
1640
1735
|
_getPrompt: function(field) {
|
1641
|
-
var formId = $(field).closest('form').attr('id');
|
1736
|
+
var formId = $(field).closest('form, .validationEngineContainer').attr('id');
|
1642
1737
|
var className = methods._getClassName(field.attr("id")) + "formError";
|
1643
|
-
var match = $("." + methods._escapeExpression(className) + '.parentForm' + formId)[0];
|
1738
|
+
var match = $("." + methods._escapeExpression(className) + '.parentForm' + methods._getClassName(formId))[0];
|
1644
1739
|
if (match)
|
1645
1740
|
return $(match);
|
1646
1741
|
},
|
@@ -1767,6 +1862,11 @@
|
|
1767
1862
|
promptleftPosition = fieldLeft + fieldWidth - 30;
|
1768
1863
|
promptTopPosition = fieldTop + field.height() + 5;
|
1769
1864
|
marginTopSize = 0;
|
1865
|
+
break;
|
1866
|
+
case "inline":
|
1867
|
+
promptleftPosition = 0;
|
1868
|
+
promptTopPosition = 0;
|
1869
|
+
marginTopSize = 0;
|
1770
1870
|
};
|
1771
1871
|
|
1772
1872
|
|
@@ -1850,7 +1950,13 @@
|
|
1850
1950
|
return methods._required(field, ["required"], 0, options);
|
1851
1951
|
}
|
1852
1952
|
}
|
1853
|
-
}
|
1953
|
+
},
|
1954
|
+
|
1955
|
+
_submitButtonClick: function(event) {
|
1956
|
+
var button = $(this);
|
1957
|
+
var form = button.closest('form, .validationEngineContainer');
|
1958
|
+
form.data("jqv_submitButton", button.attr("id"));
|
1959
|
+
}
|
1854
1960
|
};
|
1855
1961
|
|
1856
1962
|
/**
|
@@ -1897,8 +2003,11 @@
|
|
1897
2003
|
focusFirstField:true,
|
1898
2004
|
// Show prompts, set to false to disable prompts
|
1899
2005
|
showPrompts: true,
|
2006
|
+
// Should we attempt to validate non-visible input fields contained in the form? (Useful in cases of tabbed containers, e.g. jQuery-UI tabs)
|
2007
|
+
validateNonVisibleFields: false,
|
1900
2008
|
// Opening box position, possible locations are: topLeft,
|
1901
|
-
// topRight, bottomLeft, centerRight, bottomRight
|
2009
|
+
// topRight, bottomLeft, centerRight, bottomRight, inline
|
2010
|
+
// inline gets inserted after the validated field or into an element specified in data-prompt-target
|
1902
2011
|
promptPosition: "topRight",
|
1903
2012
|
bindMethod:"bind",
|
1904
2013
|
// internal, automatically set to true when it parse a _ajax rule
|
@@ -1942,8 +2051,8 @@
|
|
1942
2051
|
onSuccess: false,
|
1943
2052
|
onFailure: false,
|
1944
2053
|
validateAttribute: "class",
|
1945
|
-
addSuccessCssClassToField:
|
1946
|
-
addFailureCssClassToField:
|
2054
|
+
addSuccessCssClassToField: "",
|
2055
|
+
addFailureCssClassToField: "",
|
1947
2056
|
|
1948
2057
|
// Auto-hide prompt
|
1949
2058
|
autoHidePrompt: false,
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jQuery-Validation-Engine-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- qichunren
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: jQuery-Validation-Engine jquery plugin for rails project.
|
15
14
|
email:
|
@@ -33,27 +32,26 @@ files:
|
|
33
32
|
- vendor/assets/stylesheets/validationEngine.jquery.css.scss
|
34
33
|
homepage: https://github.com/qichunren/jQuery-Validation-Engine-rails
|
35
34
|
licenses: []
|
35
|
+
metadata: {}
|
36
36
|
post_install_message:
|
37
37
|
rdoc_options: []
|
38
38
|
require_paths:
|
39
39
|
- lib
|
40
40
|
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
41
|
requirements:
|
43
42
|
- - ! '>='
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: '0'
|
46
45
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
46
|
requirements:
|
49
47
|
- - ! '>='
|
50
48
|
- !ruby/object:Gem::Version
|
51
49
|
version: '0'
|
52
50
|
requirements: []
|
53
51
|
rubyforge_project:
|
54
|
-
rubygems_version:
|
52
|
+
rubygems_version: 2.0.3
|
55
53
|
signing_key:
|
56
|
-
specification_version:
|
54
|
+
specification_version: 4
|
57
55
|
summary: jQuery-Validation-Engine jquery plugin for rails project.
|
58
56
|
test_files: []
|
59
57
|
has_rdoc:
|