xdan-datetimepicker-rails 2.5.1 → 2.5.2
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.
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            /**
         | 
| 2 | 
            -
             * @preserve jQuery DateTimePicker plugin v2.5. | 
| 2 | 
            +
             * @preserve jQuery DateTimePicker plugin v2.5.2
         | 
| 3 3 | 
             
             * @homepage http://xdsoft.net/jqplugins/datetimepicker/
         | 
| 4 4 | 
             
             * @author Chupurnov Valeriy (<chupurnov@gmail.com>)
         | 
| 5 5 | 
             
             */
         | 
| @@ -515,6 +515,15 @@ | |
| 515 515 | 
             
            					"Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda"
         | 
| 516 516 | 
             
            				]
         | 
| 517 517 | 
             
            			},
         | 
| 518 | 
            +
            			ka: { // Georgian
         | 
| 519 | 
            +
            				months: [
         | 
| 520 | 
            +
            					'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'
         | 
| 521 | 
            +
            				],
         | 
| 522 | 
            +
            				dayOfWeekShort: [
         | 
| 523 | 
            +
            					"კვ", "ორშ", "სამშ", "ოთხ", "ხუთ", "პარ", "შაბ"
         | 
| 524 | 
            +
            				],
         | 
| 525 | 
            +
            				dayOfWeek: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"]
         | 
| 526 | 
            +
            			},
         | 
| 518 527 | 
             
            		},
         | 
| 519 528 | 
             
            		value: '',
         | 
| 520 529 | 
             
            		rtl: false,
         | 
| @@ -604,31 +613,31 @@ | |
| 604 613 | 
             
            		beforeShowDay: null,
         | 
| 605 614 |  | 
| 606 615 | 
             
            		enterLikeTab: true,
         | 
| 607 | 
            -
             | 
| 616 | 
            +
            		showApplyButton: false
         | 
| 608 617 | 
             
            	};
         | 
| 609 618 |  | 
| 610 619 | 
             
            	var dateHelper = null,
         | 
| 611 620 | 
             
            		globalLocaleDefault = 'en',
         | 
| 612 621 | 
             
            		globalLocale = 'en';
         | 
| 613 | 
            -
             | 
| 622 | 
            +
             | 
| 614 623 | 
             
            	var dateFormatterOptionsDefault = {
         | 
| 615 624 | 
             
            		meridiem: ['AM', 'PM']
         | 
| 616 625 | 
             
            	};
         | 
| 617 | 
            -
             | 
| 626 | 
            +
             | 
| 618 627 | 
             
            	var initDateFormatter = function(){
         | 
| 619 628 | 
             
            		var locale = default_options.i18n[globalLocale],
         | 
| 620 629 | 
             
            			opts = {
         | 
| 621 630 | 
             
            				days: locale.dayOfWeek,
         | 
| 622 631 | 
             
            				daysShort: locale.dayOfWeekShort,
         | 
| 623 632 | 
             
            				months: locale.months,
         | 
| 624 | 
            -
            				monthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) }), | 
| 633 | 
            +
            				monthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) }),
         | 
| 625 634 | 
             
            			};
         | 
| 626 | 
            -
             | 
| 635 | 
            +
             | 
| 627 636 | 
             
            	 	dateHelper = new DateFormatter({
         | 
| 628 637 | 
             
            			dateSettings: $.extend({}, dateFormatterOptionsDefault, opts)
         | 
| 629 638 | 
             
            		});
         | 
| 630 639 | 
             
            	};
         | 
| 631 | 
            -
             | 
| 640 | 
            +
             | 
| 632 641 | 
             
            	// for locale settings
         | 
| 633 642 | 
             
            	$.datetimepicker = {
         | 
| 634 643 | 
             
            		setLocale: function(locale){
         | 
| @@ -639,6 +648,9 @@ | |
| 639 648 | 
             
            				initDateFormatter();
         | 
| 640 649 | 
             
            			}
         | 
| 641 650 | 
             
            		},
         | 
| 651 | 
            +
            		setDateFormatter: function(dateFormatter) {
         | 
| 652 | 
            +
            			dateHelper = dateFormatter;
         | 
| 653 | 
            +
            		},
         | 
| 642 654 | 
             
            		RFC_2822: 'D, d M Y H:i:s O',
         | 
| 643 655 | 
             
            		ATOM: 'Y-m-d\TH:i:sP',
         | 
| 644 656 | 
             
            		ISO_8601: 'Y-m-d\TH:i:sO',
         | 
| @@ -649,7 +661,7 @@ | |
| 649 661 | 
             
            		RSS: 'D, d M Y H:i:s O',
         | 
| 650 662 | 
             
            		W3C: 'Y-m-d\TH:i:sP'
         | 
| 651 663 | 
             
            	};
         | 
| 652 | 
            -
             | 
| 664 | 
            +
             | 
| 653 665 | 
             
            	// first init date formatter
         | 
| 654 666 | 
             
            	initDateFormatter();
         | 
| 655 667 |  | 
| @@ -700,7 +712,6 @@ | |
| 700 712 | 
             
            					}
         | 
| 701 713 | 
             
            					return out;
         | 
| 702 714 | 
             
            				},
         | 
| 703 | 
            -
            				move = 0,
         | 
| 704 715 | 
             
            				timebox,
         | 
| 705 716 | 
             
            				parentHeight,
         | 
| 706 717 | 
             
            				height,
         | 
| @@ -770,7 +781,7 @@ | |
| 770 781 | 
             
            							calcOffset(event);
         | 
| 771 782 | 
             
            						}
         | 
| 772 783 | 
             
            					})
         | 
| 773 | 
            -
            					.on('touchend touchcancel', function ( | 
| 784 | 
            +
            					.on('touchend touchcancel', function () {
         | 
| 774 785 | 
             
            						touchStart =  false;
         | 
| 775 786 | 
             
            						startTopScroll = 0;
         | 
| 776 787 | 
             
            					});
         | 
| @@ -832,7 +843,7 @@ | |
| 832 843 | 
             
            					}
         | 
| 833 844 | 
             
            				});
         | 
| 834 845 |  | 
| 835 | 
            -
            				timeboxparent.on('touchend touchcancel', function ( | 
| 846 | 
            +
            				timeboxparent.on('touchend touchcancel', function () {
         | 
| 836 847 | 
             
            					start = false;
         | 
| 837 848 | 
             
            					startTop = 0;
         | 
| 838 849 | 
             
            				});
         | 
| @@ -843,7 +854,7 @@ | |
| 843 854 |  | 
| 844 855 | 
             
            	$.fn.datetimepicker = function (opt, opt2) {
         | 
| 845 856 | 
             
            		var result = this,
         | 
| 846 | 
            -
             | 
| 857 | 
            +
            			KEY0 = 48,
         | 
| 847 858 | 
             
            			KEY9 = 57,
         | 
| 848 859 | 
             
            			_KEY0 = 96,
         | 
| 849 860 | 
             
            			_KEY9 = 105,
         | 
| @@ -872,7 +883,7 @@ | |
| 872 883 |  | 
| 873 884 | 
             
            			lazyInit = function (input) {
         | 
| 874 885 | 
             
            				input
         | 
| 875 | 
            -
            					.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback( | 
| 886 | 
            +
            					.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback() {
         | 
| 876 887 | 
             
            						if (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {
         | 
| 877 888 | 
             
            							return;
         | 
| 878 889 | 
             
            						}
         | 
| @@ -901,20 +912,20 @@ | |
| 901 912 | 
             
            				timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
         | 
| 902 913 | 
             
            				timeboxparent = timepicker.find('.xdsoft_time_box').eq(0),
         | 
| 903 914 | 
             
            				timebox = $('<div class="xdsoft_time_variant"></div>'),
         | 
| 904 | 
            -
             | 
| 915 | 
            +
            				applyButton = $('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
         | 
| 905 916 |  | 
| 906 917 | 
             
            				monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
         | 
| 907 918 | 
             
            				yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
         | 
| 908 919 | 
             
            				triggerAfterOpen = false,
         | 
| 909 920 | 
             
            				XDSoft_datetime,
         | 
| 910 | 
            -
             | 
| 921 | 
            +
             | 
| 911 922 | 
             
            				xchangeTimer,
         | 
| 912 923 | 
             
            				timerclick,
         | 
| 913 924 | 
             
            				current_time_index,
         | 
| 914 925 | 
             
            				setPos,
         | 
| 915 926 | 
             
            				timer = 0,
         | 
| 916 | 
            -
            				 | 
| 917 | 
            -
            				 | 
| 927 | 
            +
            				_xdsoft_datetime,
         | 
| 928 | 
            +
            				forEachAncestorOf;
         | 
| 918 929 |  | 
| 919 930 | 
             
            			if (options.id) {
         | 
| 920 931 | 
             
            				datetimepicker.attr('id', options.id);
         | 
| @@ -977,7 +988,7 @@ | |
| 977 988 | 
             
            					event.stopPropagation();
         | 
| 978 989 | 
             
            					event.preventDefault();
         | 
| 979 990 | 
             
            				})
         | 
| 980 | 
            -
            				.on('touchstart mousedown.xdsoft', '.xdsoft_option', function ( | 
| 991 | 
            +
            				.on('touchstart mousedown.xdsoft', '.xdsoft_option', function () {
         | 
| 981 992 | 
             
            					if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
         | 
| 982 993 | 
             
            						_xdsoft_datetime.currentTime = _xdsoft_datetime.now();
         | 
| 983 994 | 
             
            					}
         | 
| @@ -1000,52 +1011,12 @@ | |
| 1000 1011 | 
             
            				});
         | 
| 1001 1012 |  | 
| 1002 1013 | 
             
            			datetimepicker.getValue = function () {
         | 
| 1003 | 
            -
             | 
| 1004 | 
            -
             | 
| 1014 | 
            +
            				return _xdsoft_datetime.getCurrentTime();
         | 
| 1015 | 
            +
            			};
         | 
| 1005 1016 |  | 
| 1006 1017 | 
             
            			datetimepicker.setOptions = function (_options) {
         | 
| 1007 | 
            -
            				var highlightedDates = {} | 
| 1008 | 
            -
             | 
| 1009 | 
            -
            						try {
         | 
| 1010 | 
            -
            							if (document.selection && document.selection.createRange) {
         | 
| 1011 | 
            -
            								var range = document.selection.createRange();
         | 
| 1012 | 
            -
            								return range.getBookmark().charCodeAt(2) - 2;
         | 
| 1013 | 
            -
            							}
         | 
| 1014 | 
            -
            							if (input.setSelectionRange) {
         | 
| 1015 | 
            -
            								return input.selectionStart;
         | 
| 1016 | 
            -
            							}
         | 
| 1017 | 
            -
            						} catch (e) {
         | 
| 1018 | 
            -
            							return 0;
         | 
| 1019 | 
            -
            						}
         | 
| 1020 | 
            -
            					},
         | 
| 1021 | 
            -
            					setCaretPos = function (node, pos) {
         | 
| 1022 | 
            -
            						node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
         | 
| 1023 | 
            -
            						if (!node) {
         | 
| 1024 | 
            -
            							return false;
         | 
| 1025 | 
            -
            						}
         | 
| 1026 | 
            -
            						if (node.createTextRange) {
         | 
| 1027 | 
            -
            							var textRange = node.createTextRange();
         | 
| 1028 | 
            -
            							textRange.collapse(true);
         | 
| 1029 | 
            -
            							textRange.moveEnd('character', pos);
         | 
| 1030 | 
            -
            							textRange.moveStart('character', pos);
         | 
| 1031 | 
            -
            							textRange.select();
         | 
| 1032 | 
            -
            							return true;
         | 
| 1033 | 
            -
            						}
         | 
| 1034 | 
            -
            						if (node.setSelectionRange) {
         | 
| 1035 | 
            -
            							node.setSelectionRange(pos, pos);
         | 
| 1036 | 
            -
            							return true;
         | 
| 1037 | 
            -
            						}
         | 
| 1038 | 
            -
            						return false;
         | 
| 1039 | 
            -
            					},
         | 
| 1040 | 
            -
            					isValidValue = function (mask, value) {
         | 
| 1041 | 
            -
            						var reg = mask
         | 
| 1042 | 
            -
            							.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
         | 
| 1043 | 
            -
            							.replace(/_/g, '{digit+}')
         | 
| 1044 | 
            -
            							.replace(/([0-9]{1})/g, '{digit$1}')
         | 
| 1045 | 
            -
            							.replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
         | 
| 1046 | 
            -
            							.replace(/\{digit[\+]\}/g, '[0-9_]{1}');
         | 
| 1047 | 
            -
            						return (new RegExp(reg)).test(value);
         | 
| 1048 | 
            -
            					};
         | 
| 1018 | 
            +
            				var highlightedDates = {};
         | 
| 1019 | 
            +
             | 
| 1049 1020 | 
             
            				options = $.extend(true, {}, options, _options);
         | 
| 1050 1021 |  | 
| 1051 1022 | 
             
            				if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {
         | 
| @@ -1063,7 +1034,7 @@ | |
| 1063 1034 | 
             
            				if (_options.allowDateRe && Object.prototype.toString.call(_options.allowDateRe)==="[object String]") {
         | 
| 1064 1035 | 
             
            					options.allowDateRe = new RegExp(_options.allowDateRe);
         | 
| 1065 1036 | 
             
            				}
         | 
| 1066 | 
            -
             | 
| 1037 | 
            +
             | 
| 1067 1038 | 
             
            				if (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {
         | 
| 1068 1039 | 
             
            					$.each(_options.highlightedDates, function (index, value) {
         | 
| 1069 1040 | 
             
            						var splitData = $.map(value.split(','), $.trim),
         | 
| @@ -1130,7 +1101,7 @@ | |
| 1130 1101 | 
             
            				}
         | 
| 1131 1102 |  | 
| 1132 1103 | 
             
            				if (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {
         | 
| 1133 | 
            -
             | 
| 1104 | 
            +
            					options.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);
         | 
| 1134 1105 | 
             
            				}
         | 
| 1135 1106 |  | 
| 1136 1107 | 
             
            				if ((options.open || options.opened) && (!options.inline)) {
         | 
| @@ -1199,84 +1170,13 @@ | |
| 1199 1170 | 
             
            					.find('.' + options.next)
         | 
| 1200 1171 | 
             
            						.css('visibility', !options.nextButton ? 'hidden' : 'visible');
         | 
| 1201 1172 |  | 
| 1202 | 
            -
            				 | 
| 1203 | 
            -
            					input.off('keydown.xdsoft');
         | 
| 1204 | 
            -
             | 
| 1205 | 
            -
            					if (options.mask === true) {
         | 
| 1206 | 
            -
            						options.mask = options.format
         | 
| 1207 | 
            -
            							.replace(/Y/g, '9999')
         | 
| 1208 | 
            -
            							.replace(/F/g, '9999')
         | 
| 1209 | 
            -
            							.replace(/m/g, '19')
         | 
| 1210 | 
            -
            							.replace(/d/g, '39')
         | 
| 1211 | 
            -
            							.replace(/H/g, '29')
         | 
| 1212 | 
            -
            							.replace(/i/g, '59')
         | 
| 1213 | 
            -
            							.replace(/s/g, '59');
         | 
| 1214 | 
            -
            					}
         | 
| 1215 | 
            -
             | 
| 1216 | 
            -
            					if ($.type(options.mask) === 'string') {
         | 
| 1217 | 
            -
            						if (!isValidValue(options.mask, input.val())) {
         | 
| 1218 | 
            -
            							input.val(options.mask.replace(/[0-9]/g, '_'));
         | 
| 1219 | 
            -
            							setCaretPos(input[0], 0);
         | 
| 1220 | 
            -
            						}
         | 
| 1221 | 
            -
             | 
| 1222 | 
            -
            						input.on('keydown.xdsoft', function (event) {
         | 
| 1223 | 
            -
            							var val = this.value,
         | 
| 1224 | 
            -
            								key = event.which,
         | 
| 1225 | 
            -
            								pos,
         | 
| 1226 | 
            -
            								digit;
         | 
| 1227 | 
            -
             | 
| 1228 | 
            -
            							if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
         | 
| 1229 | 
            -
            								pos = getCaretPos(this);
         | 
| 1230 | 
            -
            								digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';
         | 
| 1231 | 
            -
             | 
| 1232 | 
            -
            								if ((key === BACKSPACE || key === DEL) && pos) {
         | 
| 1233 | 
            -
            									pos -= 1;
         | 
| 1234 | 
            -
            									digit = '_';
         | 
| 1235 | 
            -
            								}
         | 
| 1236 | 
            -
             | 
| 1237 | 
            -
            								while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
         | 
| 1238 | 
            -
            									pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
         | 
| 1239 | 
            -
            								}
         | 
| 1240 | 
            -
             | 
| 1241 | 
            -
            								val = val.substr(0, pos) + digit + val.substr(pos + 1);
         | 
| 1242 | 
            -
            								if ($.trim(val) === '') {
         | 
| 1243 | 
            -
            									val = options.mask.replace(/[0-9]/g, '_');
         | 
| 1244 | 
            -
            								} else {
         | 
| 1245 | 
            -
            									if (pos === options.mask.length) {
         | 
| 1246 | 
            -
            										event.preventDefault();
         | 
| 1247 | 
            -
            										return false;
         | 
| 1248 | 
            -
            									}
         | 
| 1249 | 
            -
            								}
         | 
| 1250 | 
            -
             | 
| 1251 | 
            -
            								pos += (key === BACKSPACE || key === DEL) ? 0 : 1;
         | 
| 1252 | 
            -
            								while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
         | 
| 1253 | 
            -
            									pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
         | 
| 1254 | 
            -
            								}
         | 
| 1255 | 
            -
             | 
| 1256 | 
            -
            								if (isValidValue(options.mask, val)) {
         | 
| 1257 | 
            -
            									this.value = val;
         | 
| 1258 | 
            -
            									setCaretPos(this, pos);
         | 
| 1259 | 
            -
            								} else if ($.trim(val) === '') {
         | 
| 1260 | 
            -
            									this.value = options.mask.replace(/[0-9]/g, '_');
         | 
| 1261 | 
            -
            								} else {
         | 
| 1262 | 
            -
            									input.trigger('error_input.xdsoft');
         | 
| 1263 | 
            -
            								}
         | 
| 1264 | 
            -
            							} else {
         | 
| 1265 | 
            -
            								if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {
         | 
| 1266 | 
            -
            									return true;
         | 
| 1267 | 
            -
            								}
         | 
| 1268 | 
            -
            							}
         | 
| 1173 | 
            +
            				setMask(options);
         | 
| 1269 1174 |  | 
| 1270 | 
            -
            							event.preventDefault();
         | 
| 1271 | 
            -
            							return false;
         | 
| 1272 | 
            -
            						});
         | 
| 1273 | 
            -
            					}
         | 
| 1274 | 
            -
            				}
         | 
| 1275 1175 | 
             
            				if (options.validateOnBlur) {
         | 
| 1276 1176 | 
             
            					input
         | 
| 1277 1177 | 
             
            						.off('blur.xdsoft')
         | 
| 1278 1178 | 
             
            						.on('blur.xdsoft', function () {
         | 
| 1279 | 
            -
            							if (options.allowBlank && !$.trim($(this).val()).length) {
         | 
| 1179 | 
            +
            							if (options.allowBlank && (!$.trim($(this).val()).length || (typeof options.mask == "string" && $.trim($(this).val()) === options.mask.replace(/[0-9]/g, '_')))) {
         | 
| 1280 1180 | 
             
            								$(this).val(null);
         | 
| 1281 1181 | 
             
            								datetimepicker.data('xdsoft_datetime').empty();
         | 
| 1282 1182 | 
             
            							} else if (!dateHelper.parseDate($(this).val(), options.format)) {
         | 
| @@ -1298,6 +1198,7 @@ | |
| 1298 1198 | 
             
            							}
         | 
| 1299 1199 |  | 
| 1300 1200 | 
             
            							datetimepicker.trigger('changedatetime.xdsoft');
         | 
| 1201 | 
            +
            							datetimepicker.trigger('close.xdsoft');
         | 
| 1301 1202 | 
             
            						});
         | 
| 1302 1203 | 
             
            				}
         | 
| 1303 1204 | 
             
            				options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;
         | 
| @@ -1519,12 +1420,12 @@ | |
| 1519 1420 | 
             
            			_xdsoft_datetime = new XDSoft_datetime();
         | 
| 1520 1421 |  | 
| 1521 1422 | 
             
            			applyButton.on('touchend click', function (e) {//pathbrite
         | 
| 1522 | 
            -
             | 
| 1523 | 
            -
             | 
| 1524 | 
            -
             | 
| 1525 | 
            -
             | 
| 1526 | 
            -
             | 
| 1527 | 
            -
             | 
| 1423 | 
            +
            				e.preventDefault();
         | 
| 1424 | 
            +
            				datetimepicker.data('changed', true);
         | 
| 1425 | 
            +
            				_xdsoft_datetime.setCurrentTime(getCurrentValue());
         | 
| 1426 | 
            +
            				input.val(_xdsoft_datetime.str());
         | 
| 1427 | 
            +
            				datetimepicker.trigger('close.xdsoft');
         | 
| 1428 | 
            +
            			});
         | 
| 1528 1429 | 
             
            			mounth_picker
         | 
| 1529 1430 | 
             
            				.find('.xdsoft_today_button')
         | 
| 1530 1431 | 
             
            				.on('touchend mousedown.xdsoft', function () {
         | 
| @@ -1591,7 +1492,20 @@ | |
| 1591 1492 | 
             
            						} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {
         | 
| 1592 1493 | 
             
            							timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
         | 
| 1593 1494 | 
             
            						}
         | 
| 1594 | 
            -
             | 
| 1495 | 
            +
                                    /**
         | 
| 1496 | 
            +
                                     * Fixed bug:
         | 
| 1497 | 
            +
                                     * When using css3 transition, it will cause a bug that you cannot scroll the timepicker list.
         | 
| 1498 | 
            +
                                     * The reason is that the transition-duration time, if you set it to 0, all things fine, otherwise, this
         | 
| 1499 | 
            +
                                     * would cause a bug when you use jquery.css method.
         | 
| 1500 | 
            +
                                     * Let's say: * { transition: all .5s ease; }
         | 
| 1501 | 
            +
                                     * jquery timebox.css('marginTop') will return the original value which is before you clicking the next/prev button,
         | 
| 1502 | 
            +
                                     * meanwhile the timebox[0].style.marginTop will return the right value which is after you clicking the
         | 
| 1503 | 
            +
                                     * next/prev button.
         | 
| 1504 | 
            +
                                     * 
         | 
| 1505 | 
            +
                                     * What we should do:
         | 
| 1506 | 
            +
                                     * Replace timebox.css('marginTop') with timebox[0].style.marginTop.
         | 
| 1507 | 
            +
                                     */
         | 
| 1508 | 
            +
                                    timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox[0].style.marginTop, 10) / (height - pheight))]);
         | 
| 1595 1509 | 
             
            						period = (period > 10) ? 10 : period - 10;
         | 
| 1596 1510 | 
             
            						if (!stop) {
         | 
| 1597 1511 | 
             
            							timer = setTimeout(arguments_callee4, v || period);
         | 
| @@ -1684,11 +1598,11 @@ | |
| 1684 1598 | 
             
            							}
         | 
| 1685 1599 |  | 
| 1686 1600 | 
             
            							if(options.allowDateRe && Object.prototype.toString.call(options.allowDateRe) === "[object RegExp]"){
         | 
| 1687 | 
            -
            								if(!options.allowDateRe.test( | 
| 1601 | 
            +
            								if(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){
         | 
| 1688 1602 | 
             
            									classes.push('xdsoft_disabled');
         | 
| 1689 1603 | 
             
            								}
         | 
| 1690 1604 | 
             
            							} else if(options.allowDates && options.allowDates.length>0){
         | 
| 1691 | 
            -
            								if(options.allowDates.indexOf( | 
| 1605 | 
            +
            								if(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate)) === -1){
         | 
| 1692 1606 | 
             
            									classes.push('xdsoft_disabled');
         | 
| 1693 1607 | 
             
            								}
         | 
| 1694 1608 | 
             
            							} else if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {
         | 
| @@ -1696,7 +1610,9 @@ | |
| 1696 1610 | 
             
            							} else if (options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {
         | 
| 1697 1611 | 
             
            								classes.push('xdsoft_disabled');
         | 
| 1698 1612 | 
             
            							} else if (options.disabledWeekDays.indexOf(day) !== -1) {
         | 
| 1699 | 
            -
             | 
| 1613 | 
            +
            								classes.push('xdsoft_disabled');
         | 
| 1614 | 
            +
            							}else if (input.is('[readonly]')) {
         | 
| 1615 | 
            +
            								classes.push('xdsoft_disabled');
         | 
| 1700 1616 | 
             
            							}
         | 
| 1701 1617 |  | 
| 1702 1618 | 
             
            							if (customDateSettings && customDateSettings[1] !== "") {
         | 
| @@ -1770,11 +1686,12 @@ | |
| 1770 1686 | 
             
            							optionDateTime = new Date(_xdsoft_datetime.currentTime);
         | 
| 1771 1687 | 
             
            							optionDateTime.setHours(h);
         | 
| 1772 1688 | 
             
            							optionDateTime.setMinutes(m);
         | 
| 1773 | 
            -
            							classes = [];
         | 
| 1689 | 
            +
            							classes = [];			
         | 
| 1774 1690 | 
             
            							if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {
         | 
| 1775 1691 | 
             
            								classes.push('xdsoft_disabled');
         | 
| 1776 | 
            -
            							}
         | 
| 1777 | 
            -
             | 
| 1692 | 
            +
            							} else if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || ((options.disabledMinTime !== false && now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime()) && (options.disabledMaxTime !== false && now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))) {
         | 
| 1693 | 
            +
            								classes.push('xdsoft_disabled');
         | 
| 1694 | 
            +
            							} else if (input.is('[readonly]')) {
         | 
| 1778 1695 | 
             
            								classes.push('xdsoft_disabled');
         | 
| 1779 1696 | 
             
            							}
         | 
| 1780 1697 |  | 
| @@ -1928,7 +1845,6 @@ | |
| 1928 1845 | 
             
            					}
         | 
| 1929 1846 | 
             
            				});
         | 
| 1930 1847 |  | 
| 1931 | 
            -
             | 
| 1932 1848 | 
             
            			datepicker
         | 
| 1933 1849 | 
             
            				.on('mousewheel.xdsoft', function (event) {
         | 
| 1934 1850 | 
             
            					if (!options.scrollMonth) {
         | 
| @@ -1991,59 +1907,131 @@ | |
| 1991 1907 |  | 
| 1992 1908 | 
             
            			current_time_index = 0;
         | 
| 1993 1909 |  | 
| 1910 | 
            +
            			/**
         | 
| 1911 | 
            +
            			 * Runs the callback for each of the specified node's ancestors.
         | 
| 1912 | 
            +
            			 *
         | 
| 1913 | 
            +
            			 * Return FALSE from the callback to stop ascending.
         | 
| 1914 | 
            +
            			 *
         | 
| 1915 | 
            +
            			 * @param {DOMNode} node
         | 
| 1916 | 
            +
            			 * @param {Function} callback
         | 
| 1917 | 
            +
            			 * @returns {undefined}
         | 
| 1918 | 
            +
            			 */
         | 
| 1919 | 
            +
            			forEachAncestorOf = function (node, callback) {
         | 
| 1920 | 
            +
            				do {
         | 
| 1921 | 
            +
            					node = node.parentNode;
         | 
| 1922 | 
            +
             | 
| 1923 | 
            +
            					if (callback(node) === false) {
         | 
| 1924 | 
            +
            						break;
         | 
| 1925 | 
            +
            					}
         | 
| 1926 | 
            +
            				} while (node.nodeName !== 'HTML');
         | 
| 1927 | 
            +
            			};
         | 
| 1928 | 
            +
             | 
| 1929 | 
            +
            			/**
         | 
| 1930 | 
            +
            			 * Sets the position of the picker.
         | 
| 1931 | 
            +
            			 *
         | 
| 1932 | 
            +
            			 * @returns {undefined}
         | 
| 1933 | 
            +
            			 */
         | 
| 1994 1934 | 
             
            			setPos = function () {
         | 
| 1995 | 
            -
            				 | 
| 1996 | 
            -
             | 
| 1997 | 
            -
             | 
| 1998 | 
            -
             | 
| 1999 | 
            -
             | 
| 2000 | 
            -
             | 
| 2001 | 
            -
             | 
| 2002 | 
            -
             | 
| 2003 | 
            -
             | 
| 2004 | 
            -
             | 
| 2005 | 
            -
             | 
| 2006 | 
            -
             | 
| 2007 | 
            -
             | 
| 2008 | 
            -
             | 
| 2009 | 
            -
             | 
| 2010 | 
            -
             | 
| 2011 | 
            -
             | 
| 2012 | 
            -
             | 
| 2013 | 
            -
             | 
| 2014 | 
            -
             | 
| 2015 | 
            -
            				 | 
| 2016 | 
            -
             | 
| 1935 | 
            +
            				var dateInputOffset,
         | 
| 1936 | 
            +
            					dateInputElem,
         | 
| 1937 | 
            +
            					verticalPosition,
         | 
| 1938 | 
            +
            					left,
         | 
| 1939 | 
            +
            					position,
         | 
| 1940 | 
            +
            					datetimepickerElem,
         | 
| 1941 | 
            +
            					dateInputHasFixedAncestor,
         | 
| 1942 | 
            +
            					$dateInput,
         | 
| 1943 | 
            +
            					windowWidth,
         | 
| 1944 | 
            +
            					verticalAnchorEdge,
         | 
| 1945 | 
            +
            					datetimepickerCss,
         | 
| 1946 | 
            +
            					windowHeight,
         | 
| 1947 | 
            +
            					windowScrollTop;
         | 
| 1948 | 
            +
             | 
| 1949 | 
            +
            				$dateInput = datetimepicker.data('input');
         | 
| 1950 | 
            +
            				dateInputOffset = $dateInput.offset();
         | 
| 1951 | 
            +
            				dateInputElem = $dateInput[0];
         | 
| 1952 | 
            +
             | 
| 1953 | 
            +
            				verticalAnchorEdge = 'top';
         | 
| 1954 | 
            +
            				verticalPosition = (dateInputOffset.top + dateInputElem.offsetHeight) - 1;
         | 
| 1955 | 
            +
            				left = dateInputOffset.left;
         | 
| 1956 | 
            +
            				position = "absolute";
         | 
| 1957 | 
            +
             | 
| 1958 | 
            +
            				windowWidth = $(window).width();
         | 
| 1959 | 
            +
            				windowHeight = $(window).height();
         | 
| 1960 | 
            +
            				windowScrollTop = $(window).scrollTop();
         | 
| 1961 | 
            +
             | 
| 1962 | 
            +
            				if ((document.documentElement.clientWidth - dateInputOffset.left) < datepicker.parent().outerWidth(true)) {
         | 
| 1963 | 
            +
            					var diff = datepicker.parent().outerWidth(true) - dateInputElem.offsetWidth;
         | 
| 1964 | 
            +
            					left = left - diff;
         | 
| 1965 | 
            +
            				}
         | 
| 1966 | 
            +
             | 
| 1967 | 
            +
            				if ($dateInput.parent().css('direction') === 'rtl') {
         | 
| 1968 | 
            +
            					left -= (datetimepicker.outerWidth() - $dateInput.outerWidth());
         | 
| 1969 | 
            +
            				}
         | 
| 1970 | 
            +
             | 
| 2017 1971 | 
             
            				if (options.fixed) {
         | 
| 2018 | 
            -
            					 | 
| 1972 | 
            +
            					verticalPosition -= windowScrollTop;
         | 
| 2019 1973 | 
             
            					left -= $(window).scrollLeft();
         | 
| 2020 1974 | 
             
            					position = "fixed";
         | 
| 2021 1975 | 
             
            				} else {
         | 
| 2022 | 
            -
            					 | 
| 2023 | 
            -
             | 
| 1976 | 
            +
            					dateInputHasFixedAncestor = false;
         | 
| 1977 | 
            +
             | 
| 1978 | 
            +
            					forEachAncestorOf(dateInputElem, function (ancestorNode) {
         | 
| 1979 | 
            +
            						if (window.getComputedStyle(ancestorNode).getPropertyValue('position') === 'fixed') {
         | 
| 1980 | 
            +
            							dateInputHasFixedAncestor = true;
         | 
| 1981 | 
            +
            							return false;
         | 
| 1982 | 
            +
            						}
         | 
| 1983 | 
            +
            					});
         | 
| 1984 | 
            +
             | 
| 1985 | 
            +
            					if (dateInputHasFixedAncestor) {
         | 
| 1986 | 
            +
            						position = 'fixed';
         | 
| 1987 | 
            +
             | 
| 1988 | 
            +
            						//If the picker won't fit entirely within the viewport then display it above the date input.
         | 
| 1989 | 
            +
            						if (verticalPosition + datetimepicker.outerHeight() > windowHeight + windowScrollTop) {
         | 
| 1990 | 
            +
            							verticalAnchorEdge = 'bottom';
         | 
| 1991 | 
            +
            							verticalPosition = (windowHeight + windowScrollTop) - dateInputOffset.top;
         | 
| 1992 | 
            +
            						} else {
         | 
| 1993 | 
            +
            							verticalPosition -= windowScrollTop;
         | 
| 1994 | 
            +
            						}
         | 
| 1995 | 
            +
            					} else {
         | 
| 1996 | 
            +
            						if (verticalPosition + dateInputElem.offsetHeight > windowHeight + windowScrollTop) {
         | 
| 1997 | 
            +
            							verticalPosition = dateInputOffset.top - dateInputElem.offsetHeight + 1;
         | 
| 1998 | 
            +
            						}
         | 
| 2024 1999 | 
             
            					}
         | 
| 2025 | 
            -
             | 
| 2026 | 
            -
             | 
| 2000 | 
            +
             | 
| 2001 | 
            +
            					if (verticalPosition < 0) {
         | 
| 2002 | 
            +
            						verticalPosition = 0;
         | 
| 2027 2003 | 
             
            					}
         | 
| 2028 | 
            -
             | 
| 2029 | 
            -
             | 
| 2004 | 
            +
             | 
| 2005 | 
            +
            					if (left + dateInputElem.offsetWidth > windowWidth) {
         | 
| 2006 | 
            +
            						left = windowWidth - dateInputElem.offsetWidth;
         | 
| 2030 2007 | 
             
            					}
         | 
| 2031 2008 | 
             
            				}
         | 
| 2032 2009 |  | 
| 2033 | 
            -
            				 | 
| 2034 | 
            -
             | 
| 2035 | 
            -
             | 
| 2036 | 
            -
            					 | 
| 2037 | 
            -
             | 
| 2038 | 
            -
             | 
| 2010 | 
            +
            				datetimepickerElem = datetimepicker[0];
         | 
| 2011 | 
            +
             | 
| 2012 | 
            +
            				forEachAncestorOf(datetimepickerElem, function (ancestorNode) {
         | 
| 2013 | 
            +
            					var ancestorNodePosition;
         | 
| 2014 | 
            +
             | 
| 2015 | 
            +
            					ancestorNodePosition = window.getComputedStyle(ancestorNode).getPropertyValue('position');
         | 
| 2016 | 
            +
             | 
| 2017 | 
            +
            					if (ancestorNodePosition === 'relative' && windowWidth >= ancestorNode.offsetWidth) {
         | 
| 2018 | 
            +
            						left = left - ((windowWidth - ancestorNode.offsetWidth) / 2);
         | 
| 2019 | 
            +
            						return false;
         | 
| 2039 2020 | 
             
            					}
         | 
| 2040 | 
            -
            				} while (node.nodeName !== 'HTML');
         | 
| 2041 | 
            -
            				datetimepicker.css({
         | 
| 2042 | 
            -
            					left: left,
         | 
| 2043 | 
            -
            					top: top,
         | 
| 2044 | 
            -
            					position: position
         | 
| 2045 2021 | 
             
            				});
         | 
| 2022 | 
            +
             | 
| 2023 | 
            +
            				datetimepickerCss = {
         | 
| 2024 | 
            +
            					position: position,
         | 
| 2025 | 
            +
            					left: left,
         | 
| 2026 | 
            +
            					top: '',  //Initialize to prevent previous values interfering with new ones.
         | 
| 2027 | 
            +
            					bottom: ''  //Initialize to prevent previous values interfering with new ones.
         | 
| 2028 | 
            +
            				};
         | 
| 2029 | 
            +
             | 
| 2030 | 
            +
            				datetimepickerCss[verticalAnchorEdge] = verticalPosition;
         | 
| 2031 | 
            +
             | 
| 2032 | 
            +
            				datetimepicker.css(datetimepickerCss);
         | 
| 2046 2033 | 
             
            			};
         | 
| 2034 | 
            +
             | 
| 2047 2035 | 
             
            			datetimepicker
         | 
| 2048 2036 | 
             
            				.on('open.xdsoft', function (event) {
         | 
| 2049 2037 | 
             
            					var onShow = true;
         | 
| @@ -2079,7 +2067,7 @@ | |
| 2079 2067 | 
             
            					}
         | 
| 2080 2068 | 
             
            					event.stopPropagation();
         | 
| 2081 2069 | 
             
            				})
         | 
| 2082 | 
            -
            				.on('toggle.xdsoft', function ( | 
| 2070 | 
            +
            				.on('toggle.xdsoft', function () {
         | 
| 2083 2071 | 
             
            					if (datetimepicker.is(':visible')) {
         | 
| 2084 2072 | 
             
            						datetimepicker.trigger('close.xdsoft');
         | 
| 2085 2073 | 
             
            					} else {
         | 
| @@ -2089,7 +2077,6 @@ | |
| 2089 2077 | 
             
            				.data('input', input);
         | 
| 2090 2078 |  | 
| 2091 2079 | 
             
            			timer = 0;
         | 
| 2092 | 
            -
            			timer1 = 0;
         | 
| 2093 2080 |  | 
| 2094 2081 | 
             
            			datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
         | 
| 2095 2082 | 
             
            			datetimepicker.setOptions(options);
         | 
| @@ -2122,11 +2109,139 @@ | |
| 2122 2109 | 
             
            				return ct || 0;
         | 
| 2123 2110 | 
             
            			}
         | 
| 2124 2111 |  | 
| 2112 | 
            +
            			function setMask(options) {
         | 
| 2113 | 
            +
             | 
| 2114 | 
            +
            				var isValidValue = function (mask, value) {
         | 
| 2115 | 
            +
            					var reg = mask
         | 
| 2116 | 
            +
            						.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
         | 
| 2117 | 
            +
            						.replace(/_/g, '{digit+}')
         | 
| 2118 | 
            +
            						.replace(/([0-9]{1})/g, '{digit$1}')
         | 
| 2119 | 
            +
            						.replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
         | 
| 2120 | 
            +
            						.replace(/\{digit[\+]\}/g, '[0-9_]{1}');
         | 
| 2121 | 
            +
            					return (new RegExp(reg)).test(value);
         | 
| 2122 | 
            +
            				},
         | 
| 2123 | 
            +
            				getCaretPos = function (input) {
         | 
| 2124 | 
            +
            					try {
         | 
| 2125 | 
            +
            						if (document.selection && document.selection.createRange) {
         | 
| 2126 | 
            +
            							var range = document.selection.createRange();
         | 
| 2127 | 
            +
            							return range.getBookmark().charCodeAt(2) - 2;
         | 
| 2128 | 
            +
            						}
         | 
| 2129 | 
            +
            						if (input.setSelectionRange) {
         | 
| 2130 | 
            +
            							return input.selectionStart;
         | 
| 2131 | 
            +
            						}
         | 
| 2132 | 
            +
            					} catch (e) {
         | 
| 2133 | 
            +
            						return 0;
         | 
| 2134 | 
            +
            					}
         | 
| 2135 | 
            +
            				},
         | 
| 2136 | 
            +
            				setCaretPos = function (node, pos) {
         | 
| 2137 | 
            +
            					node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
         | 
| 2138 | 
            +
            					if (!node) {
         | 
| 2139 | 
            +
            						return false;
         | 
| 2140 | 
            +
            					}
         | 
| 2141 | 
            +
            					if (node.createTextRange) {
         | 
| 2142 | 
            +
            						var textRange = node.createTextRange();
         | 
| 2143 | 
            +
            						textRange.collapse(true);
         | 
| 2144 | 
            +
            						textRange.moveEnd('character', pos);
         | 
| 2145 | 
            +
            						textRange.moveStart('character', pos);
         | 
| 2146 | 
            +
            						textRange.select();
         | 
| 2147 | 
            +
            						return true;
         | 
| 2148 | 
            +
            					}
         | 
| 2149 | 
            +
            					if (node.setSelectionRange) {
         | 
| 2150 | 
            +
            						node.setSelectionRange(pos, pos);
         | 
| 2151 | 
            +
            						return true;
         | 
| 2152 | 
            +
            					}
         | 
| 2153 | 
            +
            					return false;
         | 
| 2154 | 
            +
            				};
         | 
| 2155 | 
            +
            				if(options.mask) {
         | 
| 2156 | 
            +
            					input.off('keydown.xdsoft');
         | 
| 2157 | 
            +
            				}
         | 
| 2158 | 
            +
            				if (options.mask === true) {
         | 
| 2159 | 
            +
            														if (typeof moment != 'undefined') {
         | 
| 2160 | 
            +
            																	options.mask = options.format
         | 
| 2161 | 
            +
            																			.replace(/Y{4}/g, '9999')
         | 
| 2162 | 
            +
            																			.replace(/Y{2}/g, '99')
         | 
| 2163 | 
            +
            																			.replace(/M{2}/g, '19')
         | 
| 2164 | 
            +
            																			.replace(/D{2}/g, '39')
         | 
| 2165 | 
            +
            																			.replace(/H{2}/g, '29')
         | 
| 2166 | 
            +
            																			.replace(/m{2}/g, '59')
         | 
| 2167 | 
            +
            																			.replace(/s{2}/g, '59');
         | 
| 2168 | 
            +
            														} else {
         | 
| 2169 | 
            +
            																	options.mask = options.format
         | 
| 2170 | 
            +
            																			.replace(/Y/g, '9999')
         | 
| 2171 | 
            +
            																			.replace(/F/g, '9999')
         | 
| 2172 | 
            +
            																			.replace(/m/g, '19')
         | 
| 2173 | 
            +
            																			.replace(/d/g, '39')
         | 
| 2174 | 
            +
            																			.replace(/H/g, '29')
         | 
| 2175 | 
            +
            																			.replace(/i/g, '59')
         | 
| 2176 | 
            +
            																			.replace(/s/g, '59');
         | 
| 2177 | 
            +
            														}
         | 
| 2178 | 
            +
            				}
         | 
| 2179 | 
            +
             | 
| 2180 | 
            +
            				if ($.type(options.mask) === 'string') {
         | 
| 2181 | 
            +
            					if (!isValidValue(options.mask, input.val())) {
         | 
| 2182 | 
            +
            						input.val(options.mask.replace(/[0-9]/g, '_'));
         | 
| 2183 | 
            +
            						setCaretPos(input[0], 0);
         | 
| 2184 | 
            +
            					}
         | 
| 2185 | 
            +
             | 
| 2186 | 
            +
            					input.on('keydown.xdsoft', function (event) {
         | 
| 2187 | 
            +
            						var val = this.value,
         | 
| 2188 | 
            +
            							key = event.which,
         | 
| 2189 | 
            +
            							pos,
         | 
| 2190 | 
            +
            							digit;
         | 
| 2191 | 
            +
             | 
| 2192 | 
            +
            						if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
         | 
| 2193 | 
            +
            							pos = getCaretPos(this);
         | 
| 2194 | 
            +
            							digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';
         | 
| 2195 | 
            +
             | 
| 2196 | 
            +
            							if ((key === BACKSPACE || key === DEL) && pos) {
         | 
| 2197 | 
            +
            								pos -= 1;
         | 
| 2198 | 
            +
            								digit = '_';
         | 
| 2199 | 
            +
            							}
         | 
| 2200 | 
            +
             | 
| 2201 | 
            +
            							while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
         | 
| 2202 | 
            +
            								pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
         | 
| 2203 | 
            +
            							}
         | 
| 2204 | 
            +
             | 
| 2205 | 
            +
            							val = val.substr(0, pos) + digit + val.substr(pos + 1);
         | 
| 2206 | 
            +
            							if ($.trim(val) === '') {
         | 
| 2207 | 
            +
            								val = options.mask.replace(/[0-9]/g, '_');
         | 
| 2208 | 
            +
            							} else {
         | 
| 2209 | 
            +
            								if (pos === options.mask.length) {
         | 
| 2210 | 
            +
            									event.preventDefault();
         | 
| 2211 | 
            +
            									return false;
         | 
| 2212 | 
            +
            								}
         | 
| 2213 | 
            +
            							}
         | 
| 2214 | 
            +
             | 
| 2215 | 
            +
            							pos += (key === BACKSPACE || key === DEL) ? 0 : 1;
         | 
| 2216 | 
            +
            							while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
         | 
| 2217 | 
            +
            								pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
         | 
| 2218 | 
            +
            							}
         | 
| 2219 | 
            +
             | 
| 2220 | 
            +
            							if (isValidValue(options.mask, val)) {
         | 
| 2221 | 
            +
            								this.value = val;
         | 
| 2222 | 
            +
            								setCaretPos(this, pos);
         | 
| 2223 | 
            +
            							} else if ($.trim(val) === '') {
         | 
| 2224 | 
            +
            								this.value = options.mask.replace(/[0-9]/g, '_');
         | 
| 2225 | 
            +
            							} else {
         | 
| 2226 | 
            +
            								input.trigger('error_input.xdsoft');
         | 
| 2227 | 
            +
            							}
         | 
| 2228 | 
            +
            						} else {
         | 
| 2229 | 
            +
            							if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {
         | 
| 2230 | 
            +
            								return true;
         | 
| 2231 | 
            +
            							}
         | 
| 2232 | 
            +
            						}
         | 
| 2233 | 
            +
             | 
| 2234 | 
            +
            						event.preventDefault();
         | 
| 2235 | 
            +
            						return false;
         | 
| 2236 | 
            +
            					});
         | 
| 2237 | 
            +
            				}
         | 
| 2238 | 
            +
            			}
         | 
| 2239 | 
            +
             | 
| 2125 2240 | 
             
            			_xdsoft_datetime.setCurrentTime(getCurrentValue());
         | 
| 2126 2241 |  | 
| 2127 2242 | 
             
            			input
         | 
| 2128 2243 | 
             
            				.data('xdsoft_datetimepicker', datetimepicker)
         | 
| 2129 | 
            -
            				.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function ( | 
| 2244 | 
            +
            				.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function () {
         | 
| 2130 2245 | 
             
            					if (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {
         | 
| 2131 2246 | 
             
            						return;
         | 
| 2132 2247 | 
             
            					}
         | 
| @@ -2138,12 +2253,14 @@ | |
| 2138 2253 |  | 
| 2139 2254 | 
             
            						triggerAfterOpen = true;
         | 
| 2140 2255 | 
             
            						_xdsoft_datetime.setCurrentTime(getCurrentValue());
         | 
| 2141 | 
            -
             | 
| 2256 | 
            +
            						if(options.mask) {
         | 
| 2257 | 
            +
            							setMask(options);
         | 
| 2258 | 
            +
            						}
         | 
| 2142 2259 | 
             
            						datetimepicker.trigger('open.xdsoft');
         | 
| 2143 2260 | 
             
            					}, 100);
         | 
| 2144 2261 | 
             
            				})
         | 
| 2145 2262 | 
             
            				.on('keydown.xdsoft', function (event) {
         | 
| 2146 | 
            -
            					var  | 
| 2263 | 
            +
            					var elementSelector,
         | 
| 2147 2264 | 
             
            						key = event.which;
         | 
| 2148 2265 | 
             
            					if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {
         | 
| 2149 2266 | 
             
            						elementSelector = $("input:visible,textarea:visible,button:visible,a:visible");
         | 
| @@ -2155,6 +2272,9 @@ | |
| 2155 2272 | 
             
            						datetimepicker.trigger('close.xdsoft');
         | 
| 2156 2273 | 
             
            						return true;
         | 
| 2157 2274 | 
             
            					}
         | 
| 2275 | 
            +
            				})
         | 
| 2276 | 
            +
            				.on('blur.xdsoft', function () {
         | 
| 2277 | 
            +
            					datetimepicker.trigger('close.xdsoft');
         | 
| 2158 2278 | 
             
            				});
         | 
| 2159 2279 | 
             
            		};
         | 
| 2160 2280 | 
             
            		destroyDateTimePicker = function (input) {
         | 
| @@ -2184,8 +2304,8 @@ | |
| 2184 2304 | 
             
            					ctrlDown = false;
         | 
| 2185 2305 | 
             
            				}
         | 
| 2186 2306 | 
             
            			});
         | 
| 2187 | 
            -
             | 
| 2188 | 
            -
             | 
| 2307 | 
            +
             | 
| 2308 | 
            +
            		this.each(function () {
         | 
| 2189 2309 | 
             
            			var datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;
         | 
| 2190 2310 | 
             
            			if (datetimepicker) {
         | 
| 2191 2311 | 
             
            				if ($.type(opt) === 'string') {
         | 
| @@ -2214,10 +2334,10 @@ | |
| 2214 2334 | 
             
            						$input = datetimepicker.data('input');
         | 
| 2215 2335 | 
             
            						$input.trigger('blur.xdsoft');
         | 
| 2216 2336 | 
             
            						break;
         | 
| 2217 | 
            -
             | 
| 2218 | 
            -
             | 
| 2219 | 
            -
             | 
| 2220 | 
            -
             | 
| 2337 | 
            +
            					default:
         | 
| 2338 | 
            +
            						if (datetimepicker[opt] && $.isFunction(datetimepicker[opt])) {
         | 
| 2339 | 
            +
            							result = datetimepicker[opt](opt2);
         | 
| 2340 | 
            +
            						}
         | 
| 2221 2341 | 
             
            					}
         | 
| 2222 2342 | 
             
            				} else {
         | 
| 2223 2343 | 
             
            					datetimepicker
         | 
| @@ -2234,8 +2354,9 @@ | |
| 2234 2354 | 
             
            			}
         | 
| 2235 2355 | 
             
            		});
         | 
| 2236 2356 |  | 
| 2237 | 
            -
             | 
| 2357 | 
            +
            		return result;
         | 
| 2238 2358 | 
             
            	};
         | 
| 2359 | 
            +
             | 
| 2239 2360 | 
             
            	$.fn.datetimepicker.defaults = default_options;
         | 
| 2240 2361 |  | 
| 2241 2362 | 
             
            	function HighlightedDate(date, desc, style) {
         | 
| @@ -2244,5 +2365,4 @@ | |
| 2244 2365 | 
             
            		this.desc = desc;
         | 
| 2245 2366 | 
             
            		this.style = style;
         | 
| 2246 2367 | 
             
            	}
         | 
| 2247 | 
            -
             | 
| 2248 2368 | 
             
            }));
         |