diff --git a/js/jquery/jquery-ui-timepicker-addon.js b/js/jquery/jquery-ui-timepicker-addon.js index b8616da378..1a22b0cbb6 100644 --- a/js/jquery/jquery-ui-timepicker-addon.js +++ b/js/jquery/jquery-ui-timepicker-addon.js @@ -1,10 +1,10 @@ /* * jQuery timepicker addon * By: Trent Richardson [http://trentrichardson.com] - * Version 1.1.1 - * Last Modified: 11/07/2012 + * Version 1.3.1 + * Last Modified: 07/07/2013 * - * Copyright 2012 Trent Richardson + * Copyright 2013 Trent Richardson * You may use this project under MIT or GPL licenses. * http://trentrichardson.com/Impromptu/GPL-LICENSE.txt * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt @@ -27,7 +27,7 @@ */ $.extend($.ui, { timepicker: { - version: "1.1.1" + version: "1.3.1" } }); @@ -37,7 +37,7 @@ * Settings for (groups of) time pickers are maintained in an instance object, * allowing multiple different settings on the same page. */ - function Timepicker() { + var Timepicker = function() { this.regional = []; // Available regional settings, indexed by language code this.regional[''] = { // Default regional settings currentText: 'Now', @@ -52,37 +52,41 @@ minuteText: 'Minute', secondText: 'Second', millisecText: 'Millisecond', + microsecText: 'Microsecond', timezoneText: 'Time Zone', isRTL: false }; this._defaults = { // Global defaults for all the datetime picker instances showButtonPanel: true, timeOnly: false, - showHour: true, - showMinute: true, - showSecond: false, - showMillisec: false, - showTimezone: false, + showHour: null, + showMinute: null, + showSecond: null, + showMillisec: null, + showMicrosec: null, + showTimezone: null, showTime: true, stepHour: 1, stepMinute: 1, stepSecond: 1, stepMillisec: 1, + stepMicrosec: 1, hour: 0, minute: 0, second: 0, millisec: 0, + microsec: 0, timezone: null, - useLocalTimezone: false, - defaultTimezone: "+0000", hourMin: 0, minuteMin: 0, secondMin: 0, millisecMin: 0, + microsecMin: 0, hourMax: 23, minuteMax: 59, secondMax: 59, millisecMax: 999, + microsecMax: 999, minDateTime: null, maxDateTime: null, onSelect: null, @@ -90,6 +94,7 @@ minuteGrid: 0, secondGrid: 0, millisecGrid: 0, + microsecGrid: 0, alwaysSetTime: true, separator: ' ', altFieldTimeOnly: true, @@ -99,7 +104,6 @@ pickerTimeFormat: null, pickerTimeSuffix: null, showTimepicker: true, - timezoneIso8601: false, timezoneList: null, addSliderAccess: false, sliderAccessArgs: null, @@ -108,7 +112,7 @@ parse: 'strict' }; $.extend(this._defaults, this.regional['']); - } + }; $.extend(Timepicker.prototype, { $input: null, @@ -119,27 +123,31 @@ minute_slider: null, second_slider: null, millisec_slider: null, + microsec_slider: null, timezone_select: null, hour: 0, minute: 0, second: 0, millisec: 0, + microsec: 0, timezone: null, - defaultTimezone: "+0000", hourMinOriginal: null, minuteMinOriginal: null, secondMinOriginal: null, millisecMinOriginal: null, + microsecMinOriginal: null, hourMaxOriginal: null, minuteMaxOriginal: null, secondMaxOriginal: null, millisecMaxOriginal: null, + microsecMaxOriginal: null, ampm: '', formattedDate: '', formattedTime: '', formattedDateTime: '', timezoneList: null, - units: ['hour','minute','second','millisec'], + units: ['hour','minute','second','millisec', 'microsec'], + support: {}, control: null, /* @@ -155,11 +163,11 @@ /* * Create a new Timepicker instance */ - _newInst: function($input, o) { + _newInst: function($input, opts) { var tp_inst = new Timepicker(), inlineSettings = {}, - fns = {}, - overrides, i; + fns = {}, + overrides, i; for (var attrName in this._defaults) { if(this._defaults.hasOwnProperty(attrName)){ @@ -173,6 +181,7 @@ } } } + overrides = { beforeShow: function (input, dp_inst) { if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) { @@ -197,10 +206,11 @@ }; for (i in overrides) { if (overrides.hasOwnProperty(i)) { - fns[i] = o[i] || null; + fns[i] = opts[i] || null; } } - tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, overrides, { + + tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, { evnts:fns, timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker'); }); @@ -211,9 +221,15 @@ return val.toUpperCase(); }); + // detect which units are supported + tp_inst.support = detectSupport( + tp_inst._defaults.timeFormat + + (tp_inst._defaults.pickerTimeFormat? tp_inst._defaults.pickerTimeFormat:'') + + (tp_inst._defaults.altTimeFormat? tp_inst._defaults.altTimeFormat:'')); + // controlType is string - key to our this._controls if(typeof(tp_inst._defaults.controlType) === 'string'){ - if($.fn[tp_inst._defaults.controlType] === undefined){ + if(tp_inst._defaults.controlType == 'slider' && typeof(jQuery.ui.slider) === 'undefined'){ tp_inst._defaults.controlType = 'select'; } tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType]; @@ -223,29 +239,39 @@ tp_inst.control = tp_inst._defaults.controlType; } - if (tp_inst._defaults.timezoneList === null) { - var timezoneList = ['-1200', '-1100', '-1000', '-0930', '-0900', '-0800', '-0700', '-0600', '-0500', '-0430', '-0400', '-0330', '-0300', '-0200', '-0100', '+0000', - '+0100', '+0200', '+0300', '+0330', '+0400', '+0430', '+0500', '+0530', '+0545', '+0600', '+0630', '+0700', '+0800', '+0845', '+0900', '+0930', - '+1000', '+1030', '+1100', '+1130', '+1200', '+1245', '+1300', '+1400']; - - if (tp_inst._defaults.timezoneIso8601) { - timezoneList = $.map(timezoneList, function(val) { - return val == '+0000' ? 'Z' : (val.substring(0, 3) + ':' + val.substring(3)); - }); - } - tp_inst._defaults.timezoneList = timezoneList; + // prep the timezone options + var timezoneList = [-720,-660,-600,-570,-540,-480,-420,-360,-300,-270,-240,-210,-180,-120,-60, + 0,60,120,180,210,240,270,300,330,345,360,390,420,480,525,540,570,600,630,660,690,720,765,780,840]; + if (tp_inst._defaults.timezoneList !== null) { + timezoneList = tp_inst._defaults.timezoneList; } + var tzl=timezoneList.length,tzi=0,tzv=null; + if (tzl > 0 && typeof timezoneList[0] !== 'object') { + for(; tzi tp_inst._defaults.hourMax? tp_inst._defaults.hourMax : tp_inst._defaults.hour; + tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin? tp_inst._defaults.minuteMin : + tp_inst._defaults.minute > tp_inst._defaults.minuteMax? tp_inst._defaults.minuteMax : tp_inst._defaults.minute; + tp_inst.second = tp_inst._defaults.second < tp_inst._defaults.secondMin? tp_inst._defaults.secondMin : + tp_inst._defaults.second > tp_inst._defaults.secondMax? tp_inst._defaults.secondMax : tp_inst._defaults.second; + tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin? tp_inst._defaults.millisecMin : + tp_inst._defaults.millisec > tp_inst._defaults.millisecMax? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec; + tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin? tp_inst._defaults.microsecMin : + tp_inst._defaults.microsec > tp_inst._defaults.microsecMax? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec; tp_inst.ampm = ''; tp_inst.$input = $input; - if (o.altField) { - tp_inst.$altInput = $(o.altField).css({ + if (tp_inst._defaults.altField) { + tp_inst.$altInput = $(tp_inst._defaults.altField).css({ cursor: 'pointer' }).focus(function() { $input.trigger("focus"); @@ -307,7 +333,7 @@ } $.extend(this, parseRes.timeObj); } catch (err) { - $.datepicker.log("Error parsing the date/time string: " + err + + $.timepicker.log("Error parsing the date/time string: " + err + "\ndate/time string = " + timeString + "\ntimeFormat = " + this._defaults.timeFormat + "\ndateFormat = " + dp_dateFormat); @@ -333,9 +359,12 @@ tp_inst = this, litem = '', uitem = '', + show = null, max = {}, gridSize = {}, - size = null; + size = null, + i=0, + l=0; // Prevent displaying twice if ($dp.find("div.ui-timepicker-div").length === 0 && o.showTimepicker) { @@ -344,25 +373,27 @@ '
'; // Create the markup - for(var i=0,l=this.units.length; i' + o[litem +'Text'] + '' + - '
'; + html += '
' + o[litem +'Text'] + '
' + + '
'; - if (o['show'+uitem] && o[litem+'Grid'] > 0) { + if (show && o[litem+'Grid'] > 0) { html += '
'; if(litem == 'hour'){ for (var h = o[litem+'Min']; h <= max[litem]; h += parseInt(o[litem+'Grid'], 10)) { gridSize[litem]++; - var tmph = $.datepicker.formatTime(useAmpm(o.pickerTimeFormat || o.timeFormat)? 'hht':'HH', {hour:h}, o); + var tmph = $.datepicker.formatTime(this.support.ampm? 'hht':'HH', {hour:h}, o); html += ''; } } @@ -379,8 +410,9 @@ } // Timezone - html += '
' + o.timezoneText + '
'; - html += '
'; + var showTz = o.showTimezone !== null? o.showTimezone : this.support.timezone; + html += '
' + o.timezoneText + '
'; + html += '
'; // Create the elements from string html += ''; @@ -393,15 +425,16 @@ } // add sliders, adjust grids, add events - for(var i=0,l=tp_inst.units.length; i 0) { + if (show && o[litem+'Grid'] > 0) { size = 100 * gridSize[litem] * o[litem+'Grid'] / (max[litem] - o[litem+'Min']); $tp.find('.ui_tpicker_'+litem+' table').css({ width: size + "%", @@ -430,8 +463,7 @@ tp_inst._onTimeChange(); tp_inst._onSelectHandler(); - }) - .css({ + }).css({ cursor: 'pointer', width: (100 / gridSize[litem]) + '%', textAlign: 'center', @@ -447,23 +479,22 @@ return $("
' + tmph + '