Skip to content

Commit 0e00e8b

Browse files
committed
Minor refactoring after code review
1 parent 8929e4a commit 0e00e8b

File tree

1 file changed

+85
-95
lines changed

1 file changed

+85
-95
lines changed

jquery-ui-timepicker-addon.js

Lines changed: 85 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -28,84 +28,6 @@ if ($.ui.timepicker.version) {
2828

2929
$.extend($.ui, { timepicker: { version: "1.0.1" } });
3030

31-
//#######################################################################################
32-
// Return regexp to parse possible am/pm time postfixes.
33-
// amNames, pmNames - arrays of strings
34-
//#######################################################################################
35-
var getPatternAmpm = function(amNames, pmNames) {
36-
var markers = [];
37-
if (amNames)
38-
$.merge(markers, amNames);
39-
if (pmNames)
40-
$.merge(markers, pmNames);
41-
markers = $.map(markers, function(val) { return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&'); });
42-
return '(' + markers.join('|') + ')?';
43-
}
44-
45-
var getFormatPositions = function( timeFormat ) {
46-
var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),
47-
orders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };
48-
49-
if (finds)
50-
for (var i = 0; i < finds.length; i++)
51-
if (orders[finds[i].toString().charAt(0)] == -1)
52-
orders[finds[i].toString().charAt(0)] = i + 1;
53-
54-
return orders;
55-
}
56-
57-
//#######################################################################################
58-
// Splits datetime string into date ans time substrings.
59-
// Throws exception when date can't be parsed
60-
// If only date is present, time substring eill be ''
61-
//#######################################################################################
62-
var splitDateTime = function(dateFormat, dateTimeString, dateSettings)
63-
{
64-
try {
65-
var date = $.datepicker._base_parseDate(dateFormat, dateTimeString, dateSettings);
66-
} catch (err) {
67-
if (err.indexOf(":") >= 0) {
68-
// Hack! The error message ends with a colon, a space, and
69-
// the "extra" characters. We rely on that instead of
70-
// attempting to perfectly reproduce the parsing algorithm.
71-
var dateStringLength = dateTimeString.length-(err.length-err.indexOf(':')-2);
72-
var timeString = dateTimeString.substring(dateStringLength);
73-
74-
return [dateTimeString.substring(0, dateStringLength), dateTimeString.substring(dateStringLength)]
75-
76-
} else {
77-
throw err;
78-
}
79-
}
80-
return [dateTimeString, ''];
81-
}
82-
83-
//#######################################################################################
84-
// Internal function to parse datetime interval
85-
// Returns: {date: Date, timeObj: Object}, where
86-
// date is parsed date withowt time (type Date)
87-
// timeObj = {hour: , minute: , second: , millisec: } - parsed time. Can be missed
88-
//#######################################################################################
89-
var parseDateTimeInternal = function(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings)
90-
{
91-
var date;
92-
var splitRes = splitDateTime(dateFormat, dateTimeString, dateSettings);
93-
date = $.datepicker._base_parseDate(dateFormat, splitRes[0], dateSettings);
94-
if (splitRes[1] != '')
95-
{
96-
var timeString = splitRes[1];
97-
var separator = timeSettings && timeSettings.separator ? timeSettings.separator : $.timepicker._defaults.separator;
98-
if ( timeString.indexOf(separator) != 0)
99-
throw 'Missing time separator';
100-
timeString = timeString.substring(separator.length);
101-
var parsedTime = $.datepicker.parseTime(timeFormat, timeString, timeSettings);
102-
if (parsedTime === null)
103-
throw 'Wrong time format';
104-
return {date: date, timeObj: parsedTime};
105-
}
106-
else
107-
return {date: date};
108-
}
10931
/* Time picker manager.
11032
Use the singleton instance of this class, $.timepicker, to interact with the time picker.
11133
Settings for (groups of) time pickers are maintained in an instance object,
@@ -332,21 +254,7 @@ $.extend(Timepicker.prototype, {
332254
return true;
333255
}
334256
},
335-
336-
//########################################################################
337-
// pattern for standard and localized AM/PM markers
338-
//########################################################################
339-
_getPatternAmpm: function() {
340-
return getPatternAmpm(this._defaults.amNames, this._defaults.pmNames);
341-
},
342-
343-
//########################################################################
344-
// figure out position of time elements.. cause js cant do named captures
345-
//########################################################################
346-
_getFormatPositions: function() {
347-
return getFormatPositions(this._defaults.timeFormat);
348-
},
349-
257+
350258
//########################################################################
351259
// generate and inject html for timepicker into ui datepicker
352260
//########################################################################
@@ -954,6 +862,35 @@ $.datepicker.parseDateTime = function(dateFormat, timeFormat, dateTimeString, da
954862
}
955863

956864
$.datepicker.parseTime = function(timeFormat, timeString, options) {
865+
866+
//########################################################################
867+
// pattern for standard and localized AM/PM markers
868+
//########################################################################
869+
var getPatternAmpm = function(amNames, pmNames) {
870+
var markers = [];
871+
if (amNames)
872+
$.merge(markers, amNames);
873+
if (pmNames)
874+
$.merge(markers, pmNames);
875+
markers = $.map(markers, function(val) { return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&'); });
876+
return '(' + markers.join('|') + ')?';
877+
}
878+
879+
//########################################################################
880+
// figure out position of time elements.. cause js cant do named captures
881+
//########################################################################
882+
var getFormatPositions = function( timeFormat ) {
883+
var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),
884+
orders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };
885+
886+
if (finds)
887+
for (var i = 0; i < finds.length; i++)
888+
if (orders[finds[i].toString().charAt(0)] == -1)
889+
orders[finds[i].toString().charAt(0)] = i + 1;
890+
891+
return orders;
892+
}
893+
957894
var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {});
958895

959896
var regstr = '^' + timeFormat.toString()
@@ -987,7 +924,7 @@ $.datepicker.parseTime = function(timeFormat, timeString, options) {
987924
if (ampm == 'AM' && treg[order.h] == '12')
988925
resTime.hour = 0; // 12am = 0 hour
989926
else if (ampm == 'PM' && treg[order.h] != '12')
990-
resTime.hour = Number(treg[order.h]) + 12; // 12pm = 12 hour, any other pm = hour + 12
927+
resTime.hour = parseInt(treg[order.h],10) + 12; // 12pm = 12 hour, any other pm = hour + 12
991928
else resTime.hour = Number(treg[order.h]);
992929
}
993930

@@ -1409,7 +1346,60 @@ function extendRemove(target, props) {
14091346
return target;
14101347
};
14111348

1349+
//#######################################################################################
1350+
// Splits datetime string into date ans time substrings.
1351+
// Throws exception when date can't be parsed
1352+
// If only date is present, time substring eill be ''
1353+
//#######################################################################################
1354+
var splitDateTime = function(dateFormat, dateTimeString, dateSettings)
1355+
{
1356+
try {
1357+
var date = $.datepicker._base_parseDate(dateFormat, dateTimeString, dateSettings);
1358+
} catch (err) {
1359+
if (err.indexOf(":") >= 0) {
1360+
// Hack! The error message ends with a colon, a space, and
1361+
// the "extra" characters. We rely on that instead of
1362+
// attempting to perfectly reproduce the parsing algorithm.
1363+
var dateStringLength = dateTimeString.length-(err.length-err.indexOf(':')-2);
1364+
var timeString = dateTimeString.substring(dateStringLength);
1365+
1366+
return [dateTimeString.substring(0, dateStringLength), dateTimeString.substring(dateStringLength)]
1367+
1368+
} else {
1369+
throw err;
1370+
}
1371+
}
1372+
return [dateTimeString, ''];
1373+
}
1374+
1375+
//#######################################################################################
1376+
// Internal function to parse datetime interval
1377+
// Returns: {date: Date, timeObj: Object}, where
1378+
// date - parsed date without time (type Date)
1379+
// timeObj = {hour: , minute: , second: , millisec: } - parsed time. Optional
1380+
//#######################################################################################
1381+
var parseDateTimeInternal = function(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings)
1382+
{
1383+
var date;
1384+
var splitRes = splitDateTime(dateFormat, dateTimeString, dateSettings);
1385+
date = $.datepicker._base_parseDate(dateFormat, splitRes[0], dateSettings);
1386+
if (splitRes[1] != '')
1387+
{
1388+
var timeString = splitRes[1];
1389+
var separator = timeSettings && timeSettings.separator ? timeSettings.separator : $.timepicker._defaults.separator;
1390+
if ( timeString.indexOf(separator) != 0)
1391+
throw 'Missing time separator';
1392+
timeString = timeString.substring(separator.length);
1393+
var parsedTime = $.datepicker.parseTime(timeFormat, timeString, timeSettings);
1394+
if (parsedTime === null)
1395+
throw 'Wrong time format';
1396+
return {date: date, timeObj: parsedTime};
1397+
}
1398+
else
1399+
return {date: date};
1400+
}
1401+
14121402
$.timepicker = new Timepicker(); // singleton instance
14131403
$.timepicker.version = "1.0.1";
14141404

1415-
})(jQuery);
1405+
})(jQuery);

0 commit comments

Comments
 (0)