PluginProbe
Booking Calendar / 10.10
Booking Calendar v10.10
11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 All 203 releases
booking / js / datepick / jquery.datepick-validation.js

jquery.datepick-validation.js in Booking Calendar 10.10, at js/datepick/jquery.datepick-validation.js

142 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* http://keith-wood.name/datepick.html
2 Datepicker Validation extension for jQuery 3.7.1.
3 Requires J�rn Zaefferer's Validation plugin (http://plugins.jquery.com/project/validate).
4 Written by Keith Wood (kbwood{at}iinet.com.au).
5 Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
6 MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
7 Please attribute the authors if you use it. */
8
9 (function($) { // Hide the namespace
10
11 /* Add validation methods if validation plugin available. */
12 if ($.fn.validate) {
13
14 $.datepick._selectDate2 = $.datepick._selectDate;
15
16 $.extend($.datepick.regional[''], {
17 validateDate: 'Please enter a valid date',
18 validateDateMin: 'Please enter a date on or after {0}',
19 validateDateMax: 'Please enter a date on or before {0}',
20 validateDateMinMax: 'Please enter a date between {0} and {1}'
21 });
22
23 $.extend($.datepick._defaults, $.datepick.regional['']);
24
25 $.extend($.datepick, {
26
27 /* Trigger a validation after updating the input field with the selected date.
28 @param id (string) the ID of the target field
29 @param dateStr (string) the chosen date */
30 _selectDate: function(id, dateStr) {
31 this._selectDate2(id, dateStr);
32 var inst = this._getInst($(id)[0]);
33 if (!inst.inline && $.fn.validate)
34 $(id).parents('form').validate().element(id);
35 },
36
37 /* Correct error placement for validation errors - after any trigger.
38 @param error (jQuery) the error message
39 @param element (jQuery) the field in error */
40 errorPlacement: function(error, element) {
41 var trigger = element.next('.' + $.datepick._triggerClass);
42 error.insertAfter(trigger.length > 0 ? trigger : element);
43 },
44
45 /* Format a validation error message involving dates.
46 @param source (string) the error message
47 @param params (Date[]) the dates
48 @return (string) the formatted message */
49 errorFormat: function(source, params) {
50 var format = ($.datepick._curInst ?
51 $.datepick._get($.datepick._curInst, 'dateFormat') :
52 $.datepick._defaults.dateFormat);
53 $.each(params, function(i, v) {
54 source = source.replace(new RegExp('\\{' + i + '\\}', 'g'),
55 $.datepick.formatDate(format, v) || 'nothing');
56 });
57 return source;
58 }
59 });
60
61 /* Apply a validation test to each date provided.
62 @param value (string) the current field value
63 @param element (element) the field control
64 @param test (function) the validation to apply
65 @return (boolean) true if OK, false if failed validation */
66 function validateEach(value, element, test) {
67 var inst = $.datepick._getInst(element);
68 var rangeSelect = $.datepick._get(inst, 'rangeSelect');
69 var multiSelect = $.datepick._get(inst, 'multiSelect');
70 var dates = (rangeSelect ? value.split($.datepick._get(inst, 'rangeSeparator')) :
71 multiSelect ? value.split($.datepick._get(inst, 'multiSeparator')) : [value]);
72 var ok = (rangeSelect && dates.length == 2) ||
73 (multiSelect && dates.length <= multiSelect) ||
74 (!rangeSelect && !multiSelect && dates.length == 1);
75 if (ok) {
76 try {
77 var dateFormat = $.datepick._get(inst, 'dateFormat');
78 var config = $.datepick._getFormatConfig(inst);
79 $.each(dates, function(i, v) {
80 dates[i] = $.datepick.parseDate(dateFormat, v, config);
81 ok = ok && test(dates[i]);
82 });
83 }
84 catch (e) {
85 ok = false;
86 }
87 }
88 if (ok && rangeSelect) {
89 ok = (dates[0].getTime() <= dates[1].getTime());
90 }
91 return ok;
92 }
93
94 /* Validate basic date format. */
95 $.validator.addMethod('dpDate', function(value, element) {
96 return this.optional(element) ||
97 validateEach(value, element, function(date) { return true; });
98 }, function(params) {
99 return $.datepick._defaults.validateDate;
100 });
101
102 /* Validate format and against a minimum date. */
103 $.validator.addMethod('dpMinDate', function(value, element, params) {
104 var inst = $.datepick._getInst(element);
105 params[0] = $.datepick._determineDate(inst, $.datepick._get(inst, 'minDate'), null);
106 return this.optional(element) ||
107 validateEach(value, element, function(date) {
108 return (!date || !params[0] || date >= params[0]);
109 });
110 }, function(params) {
111 return $.datepick.errorFormat($.datepick._defaults.validateDateMin, params);
112 });
113
114 /* Validate format and against a maximum date. */
115 $.validator.addMethod('dpMaxDate', function(value, element, params) {
116 var inst = $.datepick._getInst(element);
117 params[0] = $.datepick._determineDate(inst, $.datepick._get(inst, 'maxDate'), null);
118 return this.optional(element) ||
119 validateEach(value, element, function(date) {
120 return (!date || !params[0] || date <= params[0]);
121 });
122 }, function(params) {
123 return $.datepick.errorFormat($.datepick._defaults.validateDateMax, params);
124 });
125
126 /* Validate format and against minimum/maximum dates. */
127 $.validator.addMethod('dpMinMaxDate', function(value, element, params) {
128 var inst = $.datepick._getInst(element);
129 params[0] = $.datepick._determineDate(inst, $.datepick._get(inst, 'minDate'), null);
130 params[1] = $.datepick._determineDate(inst, $.datepick._get(inst, 'maxDate'), null);
131 return this.optional(element) ||
132 validateEach(value, element, function(date) {
133 return (!date || ((!params[0] || date >= params[0]) &&
134 (!params[1] || date <= params[1])));
135 });
136 }, function(params) {
137 return $.datepick.errorFormat($.datepick._defaults.validateDateMinMax, params);
138 });
139 }
140
141 })(jQuery);
142