\r
.ui-timepicker-inline { display: inline; }\r
\r
-#ui-timepicker-div { padding: 0.2em }\r
+#ui-timepicker-div { padding: 0.2em; background-color: #fff; }\r
.ui-timepicker-table { display: inline-table; width: 0; }\r
.ui-timepicker-table table { margin:0.15em 0 0 0; border-collapse: collapse; }\r
\r
<!DOCTYPE html>\r
<html lang="en">\r
<head>\r
+ <!-- Around the world, around the world -->\r
+ <!-- Around the world, around the world -->\r
+ <!-- Around the world, around the world -->\r
+ <!-- Around the world, around the world -->\r
+\r
<meta charset="utf-8">\r
<title>Internationalisation page for the jquery ui timepicker</title>\r
\r
<style>\r
#timepicker { font-size: 10px }\r
</style>\r
-\r
+ <script src='jquery.ui.timepicker-cs.js'></script>\r
<script src='jquery.ui.timepicker-de.js'></script>\r
+ <script src='jquery.ui.timepicker-es.js'></script>\r
+\r
<script src='jquery.ui.timepicker-fr.js'></script>\r
+ <script src='jquery.ui.timepicker-hr.js'></script>\r
+ <script src='jquery.ui.timepicker-it.js'></script>\r
<script src='jquery.ui.timepicker-ja.js'></script>\r
+ <script src='jquery.ui.timepicker-nl.js'></script>\r
+ <script src='jquery.ui.timepicker-pl.js'></script>\r
+ <script src='jquery.ui.timepicker-pt-BR.js'></script>\r
+ <script src='jquery.ui.timepicker-sl.js'></script>\r
+ <script src='jquery.ui.timepicker-sv.js'></script>\r
+ <script src='jquery.ui.timepicker-tr.js'></script>\r
</head>\r
<body>\r
\r
showDeselectButton: true\r
});\r
\r
- $('#locale').change(function() {\r
- $('#timepicker').timepicker( "option",\r
- $.timepicker.regional[ $( this ).val() ] );\r
- });\r
+ $('#locale').change(updateLocale).keyup(updateLocale);\r
+\r
});\r
+\r
+ function updateLocale()\r
+ {\r
+ $('#timepicker').timepicker( "option",\r
+ $.timepicker.regional[ $( '#locale' ).val() ] );\r
+ }\r
+\r
</script>\r
\r
Select a localisation :\r
<select id='locale'>\r
- <option value='fr'>Français</option>\r
- <option value='de'>Deutsch</option>\r
+ <option>Select a localisation</option>\r
+ \r
+ <option value='hr'>Croatian/Bosnian</option>\r
+ <option value='cs'>Czech</option>\r
+ <option value='de'>German (Deutsch)</option>\r
+ <option value='nl'>Dutch (Nederlands)</option>\r
+ <option value='fr'>Français</option>\r
+ <option value='it'>Italian</option>\r
<option value='ja'>Japanese</option>\r
+ <option value='pl'>Polish</option>\r
+ <option value="pt-BR">Portuguese/Brazilian</option>\r
+ <option value='sl'>Slovenian</option>\r
+ <option value='es'>Spanish</option>\r
+ <option value='sv'>Swedish</option>\r
+ <option value='tr'>Turkish</option>\r
</select>\r
\r
<br>\r
\r
List of localisations : \r
<ul>\r
+\r
<li>\r
- <a href="jquery.ui.timepicker-de.js">Deutsch (jquery.ui.timepicker-de.js</a>\r
+ <a href="jquery.ui.timepicker-hr.js">Croatian/Bosnian (jquery.ui.timepicker.hr.js)</a>\r
</li>\r
- \r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-cs.js">Czech (jquery.ui.timepicker-cs.js</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-de.js">German (Deutsch) (jquery.ui.timepicker-de.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-nl.js">Dutch (Nederlands) (jquery.ui.timepicker-nl.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-fr.js">Français (jquery.ui.timepicker-fr.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-it.js">Italian (jquery.ui.timepicker-it.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-ja.js">Japanese (jquery.ui.timepicker-ja.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-pl.js">Polish (jquery.ui.timepicker-pl.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-pt-BR.js">Portuguese/Brazilian (jquery.ui.timepicker-pt-BR.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-sl.js">Slovenian (jquery.ui.timepicker-sl.js)</a>\r
+ </li>\r
+\r
+ <li>\r
+ <a href="jquery.ui.timepicker-sv.js">Swedish (jquery.ui.timepicker-sv.js)</a>\r
+ </li>\r
+\r
<li>\r
- <a href="jquery.ui.timepicker-fr.js">Français (jquery.ui.timepicker-fr.js</a>\r
+ <a href="jquery.ui.timepicker-es.js">Spanish (jquery.ui.timepicker-es.js)</a>\r
</li>\r
\r
<li>\r
- <a href="jquery.ui.timepicker-ja.js">Japanese (jquery.ui.timepicker-ja.js</a>\r
+ <a href="jquery.ui.timepicker-sv.js">Turkish (jquery.ui.timepicker-tr.js)</a>\r
</li>\r
\r
</ul>\r
\r
-</body>
\ No newline at end of file
+</body>\r
+</html>
\ No newline at end of file
--- /dev/null
+/* Czech initialisation for the timepicker plugin */\r
+/* Written by David Spohr (spohr.david at gmail). */\r
+jQuery(function($){\r
+ $.timepicker.regional['cs'] = {\r
+ hourText: 'Hodiny',\r
+ minuteText: 'Minuty',\r
+ amPmText: ['AM', 'PM'] ,\r
+ closeButtonText: 'Zavřít',\r
+ nowButtonText: 'Nyní',\r
+ deselectButtonText: 'Odoznačit' }\r
+ $.timepicker.setDefaults($.timepicker.regional['cs']);\r
+});
\ No newline at end of file
-/* Deutsch initialisation for the timepicker plugin */\r
-/* Written by Bernd Plagge (bplagge@choicenet.ne.jp). */\r
+/* German initialisation for the timepicker plugin */\r
+/* Written by Lowie Hulzinga. */\r
jQuery(function($){\r
$.timepicker.regional['de'] = {\r
hourText: 'Stunde',\r
minuteText: 'Minuten',\r
- amPmText: ['AM', 'PM'] }\r
+ amPmText: ['AM', 'PM'] ,\r
+ closeButtonText: 'Beenden',\r
+ nowButtonText: 'Aktuelle Zeit',\r
+ deselectButtonText: 'Wischen' }\r
$.timepicker.setDefaults($.timepicker.regional['de']);\r
-});
\ No newline at end of file
+});\r
--- /dev/null
+/* Spanish initialisation for the jQuery time picker plugin. */\r
+/* Writen by Jandro González (agonzalezalves@gmail.com) */\r
+jQuery(function($){\r
+ $.timepicker.regional['es'] = {\r
+ hourText: 'Hora',\r
+ minuteText: 'Minuto',\r
+ amPmText: ['AM', 'PM'],\r
+ closeButtonText: 'Aceptar',\r
+ nowButtonText: 'Ahora',\r
+ deselectButtonText: 'Deseleccionar' }\r
+ $.timepicker.setDefaults($.timepicker.regional['es']);\r
+});\r
--- /dev/null
+/* Croatian/Bosnian initialisation for the timepicker plugin */\r
+/* Written by Rene Brakus (rene.brakus@infobip.com). */\r
+jQuery(function($){\r
+ $.timepicker.regional['hr'] = {\r
+ hourText: 'Sat',\r
+ minuteText: 'Minuta',\r
+ amPmText: ['Prijepodne', 'Poslijepodne'],\r
+ closeButtonText: 'Zatvoriti',\r
+ nowButtonText: 'Sada',\r
+ deselectButtonText: 'Poništite'}\r
+\r
+ $.timepicker.setDefaults($.timepicker.regional['hr']);\r
+});
\ No newline at end of file
--- /dev/null
+/* Italian initialisation for the jQuery time picker plugin. */\r
+/* Written by Serge Margarita (serge.margarita@gmail.com) */\r
+jQuery(function($){\r
+ $.timepicker.regional['it'] = {\r
+ hourText: 'Ore',\r
+ minuteText: 'Minuti',\r
+ amPmText: ['AM', 'PM'],\r
+ closeButtonText: 'Chiudi',\r
+ nowButtonText: 'Adesso',\r
+ deselectButtonText: 'Svuota' }\r
+ $.timepicker.setDefaults($.timepicker.regional['it']);\r
+});
\ No newline at end of file
$.timepicker.regional['ja'] = {\r
hourText: '時間',\r
minuteText: '分',\r
- amPmText: ['午前', '午後'] }\r
+ amPmText: ['午前', '午後'],\r
+ closeButtonText: '閉じる',\r
+ nowButtonText: '現時',\r
+ deselectButtonText: '選択解除' }\r
$.timepicker.setDefaults($.timepicker.regional['ja']);\r
});\r
--- /dev/null
+/* Nederlands initialisation for the timepicker plugin */\r
+/* Written by Lowie Hulzinga. */\r
+jQuery(function($){\r
+ $.timepicker.regional['nl'] = {\r
+ hourText: 'Uren',\r
+ minuteText: 'Minuten',\r
+ amPmText: ['AM', 'PM'],\r
+ closeButtonText: 'Sluiten',\r
+ nowButtonText: 'Actuele tijd',\r
+ deselectButtonText: 'Wissen' }\r
+ $.timepicker.setDefaults($.timepicker.regional['nl']);\r
+});
\ No newline at end of file
--- /dev/null
+/* Polish initialisation for the timepicker plugin */\r
+/* Written by Mateusz Wadolkowski (mw@pcdoctor.pl). */\r
+jQuery(function($){\r
+ $.timepicker.regional['pl'] = {\r
+ hourText: 'Godziny',\r
+ minuteText: 'Minuty',\r
+ amPmText: ['', ''],\r
+ closeButtonText: 'Zamknij',\r
+ nowButtonText: 'Teraz',\r
+ deselectButtonText: 'Odznacz'}\r
+ $.timepicker.setDefaults($.timepicker.regional['pl']);\r
+});
\ No newline at end of file
--- /dev/null
+/* Brazilan initialisation for the timepicker plugin */\r
+/* Written by Daniel Almeida (quantodaniel@gmail.com). */\r
+jQuery(function($){\r
+ $.timepicker.regional['pt-BR'] = {\r
+ hourText: 'Hora',\r
+ minuteText: 'Minuto',\r
+ amPmText: ['AM', 'PM'],\r
+ closeButtonText: 'Fechar',\r
+ nowButtonText: 'Agora',\r
+ deselectButtonText: 'Limpar' }\r
+ $.timepicker.setDefaults($.timepicker.regional['pt-BR']);\r
+});
\ No newline at end of file
--- /dev/null
+/* Slovenian localization for the jQuery time picker plugin. */\r
+/* Written by Blaž Maležič (blaz@malezic.si) */\r
+jQuery(function($){\r
+ $.timepicker.regional['sl'] = {\r
+ hourText: 'Ure',\r
+ minuteText: 'Minute',\r
+ amPmText: ['AM', 'PM'],\r
+ closeButtonText: 'Zapri',\r
+ nowButtonText: 'Zdaj',\r
+ deselectButtonText: 'Pobriši' }\r
+ $.timepicker.setDefaults($.timepicker.regional['sl']);\r
+});\r
--- /dev/null
+/* Swedish initialisation for the timepicker plugin */
+/* Written by Björn Westlin (bjorn.westlin@su.se). */
+jQuery(function($){
+ $.timepicker.regional['sv'] = {
+ hourText: 'Timme',
+ minuteText: 'Minut',
+ amPmText: ['AM', 'PM'] ,
+ closeButtonText: 'Stäng',
+ nowButtonText: 'Nu',
+ deselectButtonText: 'Rensa' }
+ $.timepicker.setDefaults($.timepicker.regional['sv']);
+});
--- /dev/null
+/* Turkish initialisation for the jQuery time picker plugin. */\r
+/* Written by Mutlu Tevfik Koçak (mtkocak@gmail.com) */\r
+jQuery(function($){\r
+ $.timepicker.regional['tr'] = {\r
+ hourText: 'Saat',\r
+ minuteText: 'Dakika',\r
+ amPmText: ['AM', 'PM'],\r
+ closeButtonText: 'Kapat',\r
+ nowButtonText: 'Şu anda',\r
+ deselectButtonText: 'Seçimi temizle' }\r
+ $.timepicker.setDefaults($.timepicker.regional['tr']);\r
+});
\ No newline at end of file
/*\r
- * jQuery UI Timepicker 0.2.9\r
+ * jQuery UI Timepicker 0.3.1\r
*\r
* Copyright 2010-2011, Francois Gelinas\r
* Dual licensed under the MIT or GPL Version 2 licenses.\r
->T-Rex<-\r
*/\r
\r
-(function ($, undefined) {\r
+(function ($) {\r
\r
- $.extend($.ui, { timepicker: { version: "0.2.9"} });\r
+ $.extend($.ui, { timepicker: { version: "0.3.1"} });\r
\r
- var PROP_NAME = 'timepicker';\r
- var tpuuid = new Date().getTime();\r
+ var PROP_NAME = 'timepicker',\r
+ tpuuid = new Date().getTime();\r
\r
/* Time picker manager.\r
Use the singleton instance of this class, $.timepicker, to interact with the time picker.\r
function Timepicker() {\r
this.debug = true; // Change this to true to start debugging\r
this._curInst = null; // The current instance in use\r
- this._isInline = false; // true if the instance is displayed inline\r
this._disabledInputs = []; // List of time picker inputs that have been disabled\r
this._timepickerShowing = false; // True if the popup picker is showing , false if not\r
this._inDialog = false; // True if showing within a "dialog", false if not\r
input[isRTL ? 'before' : 'after'](inst.append);\r
}\r
input.unbind('focus.timepicker', this._showTimepicker);\r
+ input.unbind('click.timepicker', this._adjustZIndex);\r
+\r
if (inst.trigger) { inst.trigger.remove(); }\r
\r
var showOn = this._get(inst, 'showOn');\r
if (showOn == 'focus' || showOn == 'both') { // pop-up time picker when in the marked field\r
input.bind("focus.timepicker", this._showTimepicker);\r
+ input.bind("click.timepicker", this._adjustZIndex);\r
}\r
if (showOn == 'button' || showOn == 'both') { // pop-up time picker when 'button' element is clicked\r
var button = this._get(inst, 'button');\r
$(button).bind("click.timepicker", function () {\r
- if ($.timepicker._timepickerShowing && $.timepicker._lastInput == input[0]) { $.timepicker._hideTimepicker(); }\r
- else { $.timepicker._showTimepicker(input[0]); }\r
+ if ($.timepicker._timepickerShowing && $.timepicker._lastInput == input[0]) {\r
+ $.timepicker._hideTimepicker();\r
+ } else if (!inst.input.is(':disabled')) {\r
+ $.timepicker._showTimepicker(input[0]);\r
+ }\r
return false;\r
});\r
\r
inst.tpDiv.show();\r
},\r
\r
+ _adjustZIndex: function(input) {\r
+ input = input.target || input;\r
+ var inst = $.timepicker._getInst(input);\r
+ inst.tpDiv.css('zIndex', $.timepicker._getZIndex(input) +1);\r
+ },\r
+\r
/* Pop-up the time picker for a given input field.\r
@param input element - the input field attached to the time picker or\r
event - if triggered by focus */\r
_showTimepicker: function (input) {\r
input = input.target || input;\r
if (input.nodeName.toLowerCase() != 'input') { input = $('input', input.parentNode)[0]; } // find from button/image trigger\r
+\r
if ($.timepicker._isDisabledTimepicker(input) || $.timepicker._lastInput == input) { return; } // already here\r
\r
// fix v 0.0.8 - close current timepicker before showing another one\r
};\r
\r
// Fixed the zIndex problem for real (I hope) - FG - v 0.2.9\r
- inst.tpDiv.css('zIndex', $.timepicker._getZIndex(input) +1);\r
+ $.timepicker._adjustZIndex(input);\r
+ //inst.tpDiv.css('zIndex', $.timepicker._getZIndex(input) +1);\r
\r
if ($.effects && $.effects[showAnim]) {\r
inst.tpDiv.show(showAnim, $.timepicker._get(inst, 'showOptions'), duration, postProcess);\r
}\r
},\r
\r
+ /* Refresh the time picker\r
+ @param target element - The target input field or inline container element. */\r
+ _refreshTimepicker: function(target) {\r
+ var inst = this._getInst(target);\r
+ if (inst) {\r
+ this._updateTimepicker(inst);\r
+ }\r
+ },\r
+\r
+\r
/* Generate the time picker content. */\r
_updateTimepicker: function (inst) {\r
inst.tpDiv.empty().append(this._generateHTML(inst));\r
.find('.' + this._dayOverClass + ' a')\r
.trigger('mouseover')\r
.end()\r
- .find('.ui-timepicker-now').bind("click",function(e) {\r
+ .find('.ui-timepicker-now').bind("click", function(e) {\r
$.timepicker.selectNow(e);\r
}).end()\r
.find('.ui-timepicker-deselect').bind("click",function(e) {\r
},\r
\r
\r
+ /* Detach a timepicker from its control.\r
+ @param target element - the target input field or division or span */\r
+ _destroyTimepicker: function(target) {\r
+ var $target = $(target);\r
+ var inst = $.data(target, PROP_NAME);\r
+ if (!$target.hasClass(this.markerClassName)) {\r
+ return;\r
+ }\r
+ var nodeName = target.nodeName.toLowerCase();\r
+ $.removeData(target, PROP_NAME);\r
+ if (nodeName == 'input') {\r
+ inst.append.remove();\r
+ inst.trigger.remove();\r
+ $target.removeClass(this.markerClassName)\r
+ .unbind('focus.timepicker', this._showTimepicker)\r
+ .unbind('click.timepicker', this._adjustZIndex);\r
+ } else if (nodeName == 'div' || nodeName == 'span')\r
+ $target.removeClass(this.markerClassName).empty();\r
+ },\r
+\r
/* Enable the date picker to a jQuery selection.\r
@param target element - the target input field or division or span */\r
_enableTimepicker: function(target) {\r
var nodeName = target.nodeName.toLowerCase();\r
if (nodeName == 'input') {\r
target.disabled = false;\r
+ var button = this._get(inst, 'button');\r
+ $(button).removeClass('ui-state-disabled').disabled = false;\r
inst.trigger.filter('button').\r
each(function() { this.disabled = false; }).end();\r
}\r
else if (nodeName == 'div' || nodeName == 'span') {\r
var inline = $target.children('.' + this._inlineClass);\r
inline.children().removeClass('ui-state-disabled');\r
+ inline.find('button').each(\r
+ function() { this.disabled = false }\r
+ )\r
}\r
this._disabledInputs = $.map(this._disabledInputs,\r
function(value) { return (value == target_id ? null : value); }); // delete entry\r
}\r
var nodeName = target.nodeName.toLowerCase();\r
if (nodeName == 'input') {\r
+ var button = this._get(inst, 'button');\r
+\r
+ $(button).addClass('ui-state-disabled').disabled = true;\r
target.disabled = true;\r
\r
inst.trigger.filter('button').\r
else if (nodeName == 'div' || nodeName == 'span') {\r
var inline = $target.children('.' + this._inlineClass);\r
inline.children().addClass('ui-state-disabled');\r
+ inline.find('button').each(\r
+ function() { this.disabled = true }\r
+ )\r
+\r
}\r
this._disabledInputs = $.map(this._disabledInputs,\r
function(value) { return (value == target ? null : value); }); // delete entry\r
(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);\r
}\r
if (!showAnim) { postProcess(); }\r
- var onClose = this._get(inst, 'onClose');\r
- if (onClose) {\r
- onClose.apply(\r
- (inst.input ? inst.input[0] : null),\r
- [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback\r
- }\r
+\r
this._timepickerShowing = false;\r
+\r
this._lastInput = null;\r
if (this._inDialog) {\r
this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });\r
}\r
}\r
this._inDialog = false;\r
+\r
+ var onClose = this._get(inst, 'onClose');\r
+ if (onClose) {\r
+ onClose.apply(\r
+ (inst.input ? inst.input[0] : null),\r
+ [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback\r
+ }\r
+\r
}\r
},\r
\r
return retVal;\r
},\r
\r
- selectNow: function(e) {\r
-\r
- var id = $(e.target).attr("data-timepicker-instance-id"),\r
+ selectNow: function(event) {\r
+ var id = $(event.target).attr("data-timepicker-instance-id"),\r
$target = $(id),\r
inst = this._getInst($target[0]);\r
-\r
//if (!inst || (input && inst != $.data(input, PROP_NAME))) { return; }\r
var currentTime = new Date();\r
inst.hours = currentTime.getHours();\r
this._hideTimepicker();\r
},\r
\r
- deselectTime: function(e) {\r
- var id = $(e.target).attr("data-timepicker-instance-id"),\r
+ deselectTime: function(event) {\r
+ var id = $(event.target).attr("data-timepicker-instance-id"),\r
$target = $(id),\r
inst = this._getInst($target[0]);\r
inst.hours = -1;\r
selectHours: function (event) {\r
var $td = $(event.currentTarget),\r
id = $td.attr("data-timepicker-instance-id"),\r
- newHours = $td.attr("data-hour"),\r
+ newHours = parseInt($td.attr("data-hour")),\r
fromDoubleClick = event.data.fromDoubleClick,\r
$target = $(id),\r
inst = this._getInst($target[0]),\r
selectMinutes: function (event) {\r
var $td = $(event.currentTarget),\r
id = $td.attr("data-timepicker-instance-id"),\r
- newMinutes = $td.attr("data-minute"),\r
+ newMinutes = parseInt($td.attr("data-minute")),\r
fromDoubleClick = event.data.fromDoubleClick,\r
$target = $(id),\r
inst = this._getInst($target[0]),\r
return '';\r
}\r
\r
- if ((inst.hours < 0) || (inst.hours > 23)) { inst.hours = 12; }\r
- if ((inst.minutes < 0) || (inst.minutes > 59)) { inst.minutes = 0; }\r
+ // default to 0 AM if hours is not valid\r
+ if ((inst.hours < inst.hours.starts) || (inst.hours > inst.hours.ends )) { inst.hours = 0; }\r
+ // default to 0 minutes if minute is not valid\r
+ if ((inst.minutes < inst.minutes.starts) || (inst.minutes > inst.minutes.ends)) { inst.minutes = 0; }\r
\r
var period = "",\r
showPeriod = (this._get(inst, 'showPeriod') == true),\r
$.timepicker.initialized = true;\r
}\r
\r
+\r
+\r
var otherArgs = Array.prototype.slice.call(arguments, 1);\r
if (typeof options == 'string' && (options == 'getTime' || options == 'getHour' || options == 'getMinute' ))\r
return $.timepicker['_' + options + 'Timepicker'].\r
$.timepicker = new Timepicker(); // singleton instance\r
$.timepicker.initialized = false;\r
$.timepicker.uuid = new Date().getTime();\r
- $.timepicker.version = "0.2.9";\r
+ $.timepicker.version = "0.3.1";\r
\r
// Workaround for #4055\r
// Add another global to avoid noConflict issues with inline event handlers\r
+Release 0.3.0 - 27 March 2012\r
+Fixed a zIndex problem in jQuery Dialog when the user clicked on the input while the timepicker was still visible.\r
+Added Czech translation, thanks David Spohr\r
+Added Swedish translation, thanks Björn Westlin\r
+Added Dutch translation, thanks Lowie Hulzinga\r
+Prevent showing the timepicker dialog with the button when disabled(Thanks ruhley. ref #38)\r
+Add ui-state-disabled class to button trigger when disabled.\r
+Fixed onClose function on first time passes the hours variable as string (Thanks Zanisimo, ref #39)\r
+Added "refresh" method $('selector').timepicker('refresh');\r
+\r
Release 0.2.9 - November 13, 2011\r
Fixed the zIndex problem and removed the zIndex option (Thanks everyone who reported the problem)\r
Fix a bug where repeatedly clicking on hour cells made the timepicker very slow.\r