index.html 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
  5. <title>jQuery UI Time Picker by Francois Gelinas</title>
  6. <link rel="stylesheet" href="include/jquery-ui-1.8.14.custom.css" type="text/css" />
  7. <link rel="stylesheet" href="jquery.ui.timepicker.css?v=0.2.9" type="text/css" />
  8. <!-- uncomment to test with legacy jquery -->
  9. <!--
  10. <script type="text/javascript" src="jquery-1.2.6.js"></script>
  11. <script type="text/javascript" src="jquery.fix.for.1.2.6.js"></script>
  12. <script type="text/javascript" src="jquery.ui.1.6.all.js"></script>
  13. -->
  14. <script type="text/javascript" src="include/jquery-1.5.1.min.js"></script>
  15. <script type="text/javascript" src="include/jquery.ui.core.min.js"></script>
  16. <script type="text/javascript" src="include/jquery.ui.widget.min.js"></script>
  17. <script type="text/javascript" src="include/jquery.ui.tabs.min.js"></script>
  18. <script type="text/javascript" src="include/jquery.ui.position.min.js"></script>
  19. <script type="text/javascript" src="jquery.ui.timepicker.js?v=0.2.9"></script>
  20. <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
  21. <style type="text/css">
  22. /* some styling for the page */
  23. body { font-size: 10px; /* for the widget natural size */ }
  24. #content { font-size: 1.2em; /* for the rest of the page to show at a normal size */
  25. font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
  26. width: 950px; margin: auto;
  27. }
  28. .box { border: 1px solid #888; padding: 15px; margin:12px; }
  29. .code { margin: 6px; padding: 9px; background-color: #fdf5ce; border: 1px solid #c77405; }
  30. fieldset { padding: 0.5em 2em }
  31. hr { margin: 0.5em 0; clear: both }
  32. a { cursor: pointer; }
  33. #requirements li { line-height: 1.6em; }
  34. </style>
  35. <script type="text/javascript">
  36. var _gaq = _gaq || [];
  37. _gaq.push(['_setAccount', 'UA-24327002-1']);
  38. _gaq.push(['_trackPageview']);
  39. (function() {
  40. var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  41. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  42. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  43. })();
  44. function plusone_clicked() {
  45. $('#thankyou').fadeIn(300);
  46. }
  47. $(document).ready(function() {
  48. $('#floating_timepicker').timepicker({
  49. onSelect: function(time, inst) {
  50. $('#floating_selected_time').html('You selected ' + time);
  51. }
  52. });
  53. $('#tabs').tabs();
  54. });
  55. </script>
  56. </head>
  57. <body>
  58. <div id="content">
  59. <div style="float: right; padding: 20px 0 20px 20px; font-size: 10px;">
  60. <div id="floating_timepicker">
  61. </div>
  62. <span id="floating_selected_time">
  63. </span>
  64. </div>
  65. <h1>jQuery UI Timepicker
  66. <span style="color: #999; font-size:10px;">(By <a href="http://fgelinas.com">Fran&ccedil;ois G&eacute;linas</a>)</span>
  67. <g:plusone callback='plusone_clicked'></g:plusone>
  68. <span id="thankyou" style="display: none; font-size: 0.6em;" class="code">
  69. Thanks !! (:
  70. </span>
  71. </h1>
  72. <h2>What is this?</h2>
  73. <p style="font-size: 1.1em;">
  74. This is a jQuery UI time picker plugin build to match with other official jQuery UI widgets.
  75. Based on the existing date picker, it will blend nicely with your form and use your selected jQuery UI theme.
  76. The plugin is very easy to integrate in your form for you time (hours / minutes) inputs.
  77. </p>
  78. <p>
  79. Licensed under the same license as jQuery : <a href="http://docs.jquery.com/Licensing">MIT and GPL licenses</a>
  80. </p>
  81. <div style="clear: both"></div>
  82. <div id="tabs">
  83. <ul>
  84. <li><a href="#examples">Examples</a></li>
  85. <li><a href="#usage">Usage</a></li>
  86. <li><a href="#requirements">Requirements</a></li>
  87. <li><a href="#release_notes">Release notes</a></li>
  88. <li><a href="#get_timepicker">Get Timepicker version 0.2.9</a></li>
  89. </ul>
  90. <div id="examples">
  91. <div>
  92. Default time picker :
  93. <input type="text" style="width: 70px;" id="timepicker.[1]" value="" />
  94. <script type="text/javascript">
  95. $(document).ready(function() {
  96. $('#timepicker\\.\\[1\\]').timepicker();
  97. });
  98. </script>
  99. <a onclick="$('#script_1').toggle(200); return false;">[Show code]</a>
  100. <pre id="script_1" style="display: none" class="code">$('#timepicker').timepicker();</pre>
  101. </div>
  102. <hr />
  103. <div>
  104. Time picker with period (AM/PM) in input and with hours leading 0s :
  105. <input type="text" style="width: 70px;" id="timepicker_6" value="01:30 PM" />
  106. <script type="text/javascript">
  107. $(document).ready(function() {
  108. $('#timepicker_6').timepicker({
  109. showPeriod: true,
  110. showLeadingZero: true
  111. });
  112. });
  113. </script>
  114. <a onclick="$('#script_6').toggle(200)">[Show code]</a>
  115. <pre id="script_6" style="display: none" class="code">$('#timepicker').timepicker({
  116. showPeriod: true,
  117. showLeadingZero: true
  118. });</pre>
  119. </div>
  120. <hr />
  121. <div>
  122. Time picker with buttons and labels in another language (Fran&ccedil;ais) :
  123. <input type="text" style="width: 70px;" id="timepicker_locale" value="13h30" />
  124. <br>
  125. See the <a href="i18n/i18n.html">internationalisation page</a> for more information and details.
  126. <script type="text/javascript">
  127. $(document).ready(function() {
  128. $('#timepicker_locale').timepicker({
  129. hourText: 'Heures',
  130. minuteText: 'Minutes',
  131. amPmText: ['AM', 'PM'],
  132. timeSeparator: 'h',
  133. showLeadingZero: false,
  134. nowButtonText: 'Maintenant',
  135. showNowButton: true,
  136. closeButtonText: 'Fermer',
  137. showCloseButton: true,
  138. deselectButtonText: 'Désélectionner',
  139. showDeselectButton: true
  140. });
  141. });
  142. </script>
  143. <a onclick="$('#script_locale').toggle(200)">[Show code]</a>
  144. <pre id="script_locale" style="display: none" class="code">$('#timepicker').timepicker({
  145. hourText: 'Heures',
  146. minuteText: 'Minutes',
  147. amPmText: ['AM', 'PM'],
  148. timeSeparator: 'h',
  149. nowButtonText: 'Maintenant',
  150. showNowButton: true,
  151. closeButtonText: 'Fermer',
  152. showCloseButton: true,
  153. deselectButtonText: 'Désélectionner',
  154. showDeselectButton: true
  155. });</pre>
  156. </div>
  157. <hr />
  158. <div>
  159. Time picker with restricted (disabled) hours / minutes. 8:30 PM to 6:30 AM disabled :
  160. <input type="text" style="width: 70px" id="timepicker_7" value="01:30 PM" />
  161. <script type="text/javascript">
  162. $(document).ready(function() {
  163. $('#timepicker_7').timepicker({
  164. showPeriod: true,
  165. onHourShow: timepicker7OnHourShowCallback,
  166. onMinuteShow: timepicker7OnMinuteShowCallback
  167. });
  168. });
  169. function timepicker7OnHourShowCallback(hour) {
  170. if ((hour > 20) || (hour < 6)) {
  171. return false;
  172. }
  173. return true;
  174. }
  175. function timepicker7OnMinuteShowCallback(hour, minute) {
  176. if ((hour == 20) && (minute >= 30)) { return false; }
  177. if ((hour == 6) && (minute < 30)) { return false; }
  178. return true;
  179. }
  180. </script>
  181. <a onclick="$('#script_7').toggle(200)">[Show code]</a>
  182. <pre id="script_7" style="display: none" class="code">$('#timepicker').timepicker({
  183. showPeriod: true,
  184. onHourShow: OnHourShowCallback,
  185. onMinuteShow: OnMinuteShowCallback
  186. });
  187. function OnHourShowCallback(hour) {
  188. if ((hour > 20) || (hour < 6)) {
  189. return false; // not valid
  190. }
  191. return true; // valid
  192. }
  193. function OnMinuteShowCallback(hour, minute) {
  194. if ((hour == 20) && (minute >= 30)) { return false; } // not valid
  195. if ((hour == 6) && (minute < 30)) { return false; } // not valid
  196. return true; // valid
  197. }</pre>
  198. </div>
  199. <hr />
  200. <div>
  201. Define when the time picker is shown with the <kbd>showOn</kbd> option and set a trigger element with the <kbd>button</kbd> option
  202. <input type="text" style="width: 70px;" id="timepicker_showon" value="13h30" />
  203. <div class='timepicker_button_trigger'
  204. style="width: 16px; height:16px; background: url(include/ui-lightness/images/ui-icons_222222_256x240.png) -80px, -96px;
  205. display: inline-block; border-radius: 2px; border: 1px solid #222222; margin-top: 3px; cursor:pointer"></div>
  206. <button class='timepicker_button_trigger' id="btn_trigger_timepicker">Show</button>
  207. <script type="text/javascript">
  208. $(document).ready(function() {
  209. $('#timepicker_showon').timepicker({
  210. showOn: 'button',
  211. button: $('.timepicker_button_trigger'),
  212. showLeadingZero: false,
  213. timeSeparator: 'h'
  214. });
  215. });
  216. </script>
  217. <a onclick="$('#script_showhide').toggle(200)">[Show code]</a>
  218. <pre id="script_showhide" style="display: none" class="code">$('#timepicker').timepicker({
  219. showOn: 'button',
  220. button: '.timepicker_button_trigger'
  221. });
  222. </pre>
  223. </div>
  224. <hr />
  225. <div>
  226. Time picker without the AM/PM labels on the left (showPeriodLabels option set to false:
  227. <input type="text" style="width: 70px;" id="timepicker_noPeriodLabels" value="13:30" />
  228. <script type="text/javascript">
  229. $(document).ready(function() {
  230. $('#timepicker_noPeriodLabels').timepicker({
  231. showPeriodLabels: false
  232. });
  233. });
  234. </script>
  235. <a onclick="$('#script_noPeriodLabels').toggle(200)">[Show code]</a>
  236. <pre id="script_noPeriodLabels" style="display: none" class="code">$('#timepicker').timepicker({
  237. showPeriodLabels: false,
  238. });
  239. </pre>
  240. </div>
  241. <hr />
  242. <div>
  243. Custom defined hours range (Business hours 6am to 7pm) and minutes increment set to 15 instead of 5, on 3 rows
  244. <input type="text" style="width: 70px" id="timepicker_customrange" value="13:30">
  245. <script type="text/javascript">
  246. $(document).ready(function() {
  247. $('#timepicker_customrange').timepicker({
  248. hours: { starts: 6, ends: 19 },
  249. minutes: { interval: 15 },
  250. rows: 3,
  251. showPeriodLabels: true,
  252. minuteText: 'Min'
  253. })
  254. });
  255. </script>
  256. <a onclick="$('#script_2').toggle(200)">[Show code]</a>
  257. <pre id="script_2" style="display: none" class="code"> $('#timepicke').timepicker({
  258. hours: { starts: 6, ends: 19 },
  259. minutes: { interval: 15 },
  260. rows: 3
  261. showPeriodLabels: true,
  262. minuteText: 'Min'
  263. });
  264. </pre>
  265. </div>
  266. <hr />
  267. <div>
  268. Input for hours only :
  269. <input type="text" style="width: 70px" id="timepicker_hours" value="5 PM">
  270. , input for minutes only :
  271. <input type="text" style="width: 70px" id="timepicker_minutes" value="45">
  272. <script type="text/javascript">
  273. $(document).ready(function() {
  274. $('#timepicker_hours').timepicker({
  275. showMinutes: false,
  276. showPeriod: true,
  277. showLeadingZero: false
  278. });
  279. $('#timepicker_minutes').timepicker({
  280. showHours: false
  281. });
  282. })
  283. </script>
  284. <a onclick="$('#script_hoursminutesonly').toggle(200)">[Show code]</a>
  285. <pre id="script_hoursminutesonly" style="display: none" class="code">$('#timepicker_hours').timepicker({
  286. showMinutes: false,
  287. showPeriod: true,
  288. showLeadingZero: false
  289. });
  290. $('#timepicker_minutes').timepicker({
  291. showHours: false
  292. });</pre>
  293. </div>
  294. <hr />
  295. <div>
  296. Timepicker with the Now, Deselect and Close buttons
  297. <input type="text" style="width: 70px" id="timepicker_buttons" value="12:35">
  298. <script type="text/javascript">
  299. $(document).ready(function() {
  300. $('#timepicker_buttons').timepicker({
  301. showNowButton: true,
  302. showDeselectButton: true,
  303. defaultTime: '', // removes the highlighted time for when the input is empty.
  304. showCloseButton: true
  305. });
  306. })
  307. </script>
  308. <a onclick="$('#script_buttonpane').toggle(200)">[Show code]</a>
  309. <pre id="script_buttonpane" style="display: none" class="code">$('#timepicker_buttons').timepicker({
  310. showNowButton: true,
  311. showDeselectButton: true,
  312. defaultTime: '', // removes the highlighted time for when the input is empty.
  313. showCloseButton: true
  314. });</pre>
  315. </div>
  316. <hr />
  317. <div>
  318. onSelect (hours and minutes both trigger event), beforeShow and onClose events :
  319. <input type="text" style="width: 70px" id="timepicker_3" value="13:30" />
  320. <script type="text/javascript">
  321. $(document).ready(function() {
  322. $('#timepicker_3').timepicker({
  323. beforeShow: function(input, inst) {
  324. log_event('beforeShow triggered for instance id ' + inst.id);
  325. },
  326. onClose: function(time, inst) {
  327. log_event('onClose triggered with time : ' + time + ' for instance id : ' + inst.id);
  328. },
  329. onSelect: function(time, inst) {
  330. log_event('onSelect triggered with time : ' + time + ' for instance id : ' + inst.id);
  331. }
  332. });
  333. });
  334. function log_event(event) {
  335. $('#events_log').val(
  336. $('#events_log').val() + "\n" + event
  337. )
  338. }
  339. </script>
  340. <a onclick="$('#script_3').toggle(200)">[Show code]</a>
  341. <pre id="script_3" style="display: none" class="code">function log_event(event) {
  342. $('#events_log').val(
  343. $('#events_log').val() + "\n" + event
  344. )
  345. }
  346. $('#timepicker').timepicker({
  347. onClose: function(time, inst) {
  348. log_event('onClose triggered with time : ' + time + ' for instance id : ' + inst.id);
  349. },
  350. onSelect: function(time, inst) {
  351. log_event('onSelect triggered with time : ' + time + ' for instance id : ' + inst.id);
  352. }
  353. });
  354. </pre>
  355. <br />
  356. <textarea id="events_log" rows="4" cols="120" >events log :</textarea>
  357. </div>
  358. <hr />
  359. <div>
  360. <div style="float: left">
  361. Inline time picker :
  362. <span style="color: #888;">
  363. Alternate field :
  364. <input type="text" style="width: 70px" id="timepicker_alt" value="13:30" readonly="readonly" disabled="disabled"/>
  365. </span>
  366. <br />
  367. <input type="button" value="Change time to 16:55" onclick="javascript:$('#timepicker_inline_7').timepicker('setTime','16:55');">
  368. <br>
  369. <input type="button" id='tp7_getTime_button' value="Get selected time" onclick="javascript:tp7_getTime();" >
  370. <br>
  371. <input type="button" id="tp7_getHourMinute_button" value="Get hour and minute" onclick="javascript:tp7_getHourMinute();" >
  372. <br />
  373. <a onclick="$('#script_inline').toggle(200); return false;">[Show code]</a>
  374. </div>
  375. <div id="timepicker_inline_7" style="font-size: 10px; float: left; margin-left: 24px;"></div>
  376. <script type="text/javascript">
  377. $(document).ready(function() {
  378. $('#timepicker_inline_7').timepicker({
  379. altField: '#timepicker_alt',
  380. defaultTime: '13:30'
  381. });
  382. });
  383. function tp7_getTime() {
  384. $('#tp7_getTime_button').val('Selected time : ' + $('#timepicker_inline_7').timepicker('getTime'));
  385. }
  386. function tp7_getHourMinute() {
  387. $('#tp7_getHourMinute_button').val(
  388. 'Hour : ' + $('#timepicker_inline_7').timepicker('getHour')
  389. + ', ' +
  390. 'minute : ' + $('#timepicker_inline_7').timepicker('getMinute')
  391. );
  392. }
  393. </script>
  394. <div style="clear: both"></div>
  395. <pre class="code" id="script_inline" style="display: none">$('#timepicker_inline_div').timepicker({
  396. altField: '#timepicker_alt_input',
  397. defaultTime: '9:20'
  398. });
  399. function setNewTime() {
  400. $('#timepicker_inline_div').timepicker('setTime','16:55');
  401. }
  402. function getTime() {
  403. $('#getTime_button').val('Selected time : ' + $('#timepicker').timepicker('getTime'));
  404. }
  405. function getHourMinute() {
  406. $('#getHourMinute_button').val(
  407. 'Hour : ' + $('#timepicker').timepicker('getHour')
  408. + ', ' +
  409. 'minute : ' + $('#timepicker').timepicker('getMinute')
  410. );
  411. }
  412. </pre>
  413. </div>
  414. <hr />
  415. <div>
  416. Two timepickers to select chronological time range, the first timepicker is restricted to before the time selected in the second timepicker, and vice versa.
  417. <br>
  418. Start time :
  419. <input type="text" style="width: 70px" id="timepicker_start" value="9:15" />
  420. end time :
  421. <input type="text" style="width: 70px" id="timepicker_end" value="16:30" />
  422. <a onclick="$('#script_time_range').toggle(200); return false;">[Show code]</a>
  423. <script type="text/javascript">
  424. $(document).ready(function() {
  425. $('#timepicker_start').timepicker({
  426. showLeadingZero: false,
  427. onHourShow: tpStartOnHourShowCallback,
  428. onMinuteShow: tpStartOnMinuteShowCallback
  429. });
  430. $('#timepicker_end').timepicker({
  431. showLeadingZero: false,
  432. onHourShow: tpEndOnHourShowCallback,
  433. onMinuteShow: tpEndOnMinuteShowCallback
  434. });
  435. });
  436. function tpStartOnHourShowCallback(hour) {
  437. var tpEndHour = $('#timepicker_end').timepicker('getHour');
  438. // Check if proposed hour is prior or equal to selected end time hour
  439. if (hour <= tpEndHour) { return true; }
  440. // if hour did not match, it can not be selected
  441. return false;
  442. }
  443. function tpStartOnMinuteShowCallback(hour, minute) {
  444. var tpEndHour = $('#timepicker_end').timepicker('getHour');
  445. var tpEndMinute = $('#timepicker_end').timepicker('getMinute');
  446. // Check if proposed hour is prior to selected end time hour
  447. if (hour < tpEndHour) { return true; }
  448. // Check if proposed hour is equal to selected end time hour and minutes is prior
  449. if ( (hour == tpEndHour) && (minute < tpEndMinute) ) { return true; }
  450. // if minute did not match, it can not be selected
  451. return false;
  452. }
  453. function tpEndOnHourShowCallback(hour) {
  454. var tpStartHour = $('#timepicker_start').timepicker('getHour');
  455. // Check if proposed hour is after or equal to selected start time hour
  456. if (hour >= tpStartHour) { return true; }
  457. // if hour did not match, it can not be selected
  458. return false;
  459. }
  460. function tpEndOnMinuteShowCallback(hour, minute) {
  461. var tpStartHour = $('#timepicker_start').timepicker('getHour');
  462. var tpStartMinute = $('#timepicker_start').timepicker('getMinute');
  463. // Check if proposed hour is after selected start time hour
  464. if (hour > tpStartHour) { return true; }
  465. // Check if proposed hour is equal to selected start time hour and minutes is after
  466. if ( (hour == tpStartHour) && (minute > tpStartMinute) ) { return true; }
  467. // if minute did not match, it can not be selected
  468. return false;
  469. }
  470. </script>
  471. <pre class="code" id="script_time_range" style="display: none">
  472. $(document).ready(function() {
  473. $('#timepicker_start').timepicker({
  474. showLeadingZero: false,
  475. onHourShow: tpStartOnHourShowCallback,
  476. onMinuteShow: tpStartOnMinuteShowCallback
  477. });
  478. $('#timepicker_end').timepicker({
  479. showLeadingZero: false,
  480. onHourShow: tpEndOnHourShowCallback,
  481. onMinuteShow: tpEndOnMinuteShowCallback
  482. });
  483. });
  484. function tpStartOnHourShowCallback(hour) {
  485. var tpEndHour = $('#timepicker_end').timepicker('getHour');
  486. // Check if proposed hour is prior or equal to selected end time hour
  487. if (hour <= tpEndHour) { return true; }
  488. // if hour did not match, it can not be selected
  489. return false;
  490. }
  491. function tpStartOnMinuteShowCallback(hour, minute) {
  492. var tpEndHour = $('#timepicker_end').timepicker('getHour');
  493. var tpEndMinute = $('#timepicker_end').timepicker('getMinute');
  494. // Check if proposed hour is prior to selected end time hour
  495. if (hour < tpEndHour) { return true; }
  496. // Check if proposed hour is equal to selected end time hour and minutes is prior
  497. if ( (hour == tpEndHour) && (minute < tpEndMinute) ) { return true; }
  498. // if minute did not match, it can not be selected
  499. return false;
  500. }
  501. function tpEndOnHourShowCallback(hour) {
  502. var tpStartHour = $('#timepicker_start').timepicker('getHour');
  503. // Check if proposed hour is after or equal to selected start time hour
  504. if (hour >= tpStartHour) { return true; }
  505. // if hour did not match, it can not be selected
  506. return false;
  507. }
  508. function tpEndOnMinuteShowCallback(hour, minute) {
  509. var tpStartHour = $('#timepicker_start').timepicker('getHour');
  510. var tpStartMinute = $('#timepicker_start').timepicker('getMinute');
  511. // Check if proposed hour is after selected start time hour
  512. if (hour > tpStartHour) { return true; }
  513. // Check if proposed hour is equal to selected start time hour and minutes is after
  514. if ( (hour == tpStartHour) && (minute > tpStartMinute) ) { return true; }
  515. // if minute did not match, it can not be selected
  516. return false;
  517. }
  518. </pre>
  519. </div>
  520. <hr />
  521. <div>
  522. Example to disable and re-enable a timepicker.
  523. <br />
  524. <div id="timepicker_disable_inline" style="font-size: 10px; float: left;"></div>
  525. <input type="text" style="width: 70px" id="timepicker_disable" value="9:15" />
  526. <br />
  527. <button id="btn_disable_tp">Disable the time pickers</button>
  528. <br />
  529. <button id="btn_enable_tp">Re-enable the time pickers</button>
  530. <br />
  531. <a onclick="$('#script_tp_disable').toggle(200); return false;">[Show code]</a>
  532. <div style="clear: both"></div>
  533. <script type="text/javascript">
  534. $(document).ready(function() {
  535. $('#timepicker_disable_inline').timepicker();
  536. $('#timepicker_disable').timepicker({showLeadingZero: false });
  537. $('#btn_disable_tp').click(function() {
  538. $('#timepicker_disable_inline').timepicker('disable');
  539. $('#timepicker_disable').timepicker('disable');
  540. });
  541. $('#btn_enable_tp').click(function() {
  542. $('#timepicker_disable_inline').timepicker('enable');
  543. $('#timepicker_disable').timepicker('enable');
  544. });
  545. });
  546. </script>
  547. <pre class="code" style="display: none" id="script_tp_disable">
  548. $('#timepicker_disable_inline').timepicker();
  549. $('#timepicker_disable').timepicker({showLeadingZero: false });
  550. $('#btn_disable_tp').click(function() {
  551. $('#timepicker_disable_inline').timepicker('disable');
  552. $('#timepicker_disable').timepicker('disable');
  553. });
  554. $('#btn_enable_tp').click(function() {
  555. $('#timepicker_disable_inline').timepicker('enable');
  556. $('#timepicker_disable').timepicker('enable');
  557. });
  558. </pre>
  559. </div>
  560. </div>
  561. <!------------------------------------------------------------------------------------------------------------->
  562. <!------------------------------------------------------------------------------------------------------------->
  563. <!------------------------------------------------------------------------------------------------------------->
  564. <div id="usage">
  565. <h2><a name="documentation"></a>Usage:</h2>
  566. <pre class="code">$('#timepicker').timepicker({
  567. // Options
  568. timeSeparator: ':', // The character to use to separate hours and minutes. (default: ':')
  569. showLeadingZero: true, // Define whether or not to show a leading zero for hours < 10.
  570. (default: true)
  571. showMinutesLeadingZero: true, // Define whether or not to show a leading zero for minutes < 10.
  572. (default: true)
  573. showPeriod: false, // Define whether or not to show AM/PM with selected time. (default: false)
  574. showPeriodLabels: true, // Define if the AM/PM labels on the left are displayed. (default: true)
  575. periodSeparator: ' ', // The character to use to separate the time from the time period.
  576. altField: '#alternate_input', // Define an alternate input to parse selected time to
  577. defaultTime: '12:34', // Used as default time when input field is empty or for inline timePicker
  578. // (set to 'now' for the current time, '' for no highlighted time,
  579. default value: now)
  580. // trigger options
  581. showOn: 'focus', // Define when the timepicker is shown.
  582. // 'focus': when the input gets focus, 'button' when the button trigger element is clicked,
  583. // 'both': when the input gets focus and when the button is clicked.
  584. button: null, // jQuery selector that acts as button trigger. ex: '#trigger_button'
  585. // Localization
  586. hourText: 'Hour', // Define the locale text for "Hours"
  587. minuteText: 'Minute', // Define the locale text for "Minute"
  588. amPmText: ['AM', 'PM'], // Define the locale text for periods
  589. // Position
  590. myPosition: 'left top', // Corner of the dialog to position, used with the jQuery UI Position utility if present.
  591. atPosition: 'left bottom', // Corner of the input to position
  592. // Events
  593. beforeShow: beforeShowCallback, // Callback function executed before the timepicker is rendered and displayed.
  594. onSelect: onSelectCallback, // Define a callback function when an hour / minutes is selected.
  595. onClose: onCloseCallback, // Define a callback function when the timepicker is closed.
  596. onHourShow: onHourShow, // Define a callback to enable / disable certain hours. ex: function onHourShow(hour)
  597. onMinuteShow: onMinuteShow, // Define a callback to enable / disable certain minutes. ex: function onMinuteShow(hour, minute)
  598. // custom hours and minutes
  599. hours: {
  600. starts: 0, // First displayed hour
  601. ends: 23 // Last displayed hour
  602. },
  603. minutes: {
  604. starts: 0, // First displayed minute
  605. ends: 55, // Last displayed minute
  606. interval: 5 // Interval of displayed minutes
  607. },
  608. rows: 4, // Number of rows for the input tables, minimum 2, makes more sense if you use multiple of 2
  609. showHours: true, // Define if the hours section is displayed or not. Set to false to get a minute only dialog
  610. showMinutes: true, // Define if the minutes section is displayed or not. Set to false to get an hour only dialog
  611. // buttons
  612. showCloseButton: false, // shows an OK button to confirm the edit
  613. closeButtonText: 'Done', // Text for the confirmation button (ok button)
  614. showNowButton: false, // Shows the 'now' button
  615. nowButtonText: 'Now', // Text for the now button
  616. showDeselectButton: false, // Shows the deselect time button
  617. deselectButtonText: 'Deselect' // Text for the deselect button
  618. });</pre>
  619. </div>
  620. <!------------------------------------------------------------------------------------------------------------->
  621. <!------------------------------------------------------------------------------------------------------------->
  622. <!------------------------------------------------------------------------------------------------------------->
  623. <div id="requirements">
  624. <h2>Requirements : </h2>
  625. <ul>
  626. <li>
  627. <a href="http://jquery.com">
  628. jQuery 1.5.1 (probably works with previous versions)
  629. </a>
  630. </li>
  631. <li>
  632. <a href="http://jqueryui.com/">
  633. jQuery UI Core (included in jquery-ui-x.x.x.custom.min.js)
  634. </a>
  635. </li>
  636. <li>
  637. <a href="http://jqueryui.com/demos/position/">
  638. jQuery UI Position utility (optional for special position of the dialog)
  639. </a>
  640. </li>
  641. <li>
  642. <a href="http://jqueryui.com/">
  643. jQuery UI Theme.css (included in jquery-ui-x.x.x.custom.css)
  644. </a>
  645. </li>
  646. <li>
  647. <a href="jquery.ui.timepicker.js?v=0.2.9">
  648. jquery.ui.timepicker.js
  649. </a>
  650. </li>
  651. <li>
  652. <a href="jquery.ui.timepicker.css?v=0.2.9">
  653. jquery.ui.timepicker.css
  654. </a>
  655. </li>
  656. </ul>
  657. </div>
  658. <!------------------------------------------------------------------------------------------------------------->
  659. <!------------------------------------------------------------------------------------------------------------->
  660. <!------------------------------------------------------------------------------------------------------------->
  661. <div id="release_notes">
  662. <h2>Releases :</h2>
  663. <dl>
  664. <dt>Release 0.2.9 - November 13, 2011</dt>
  665. <dd>Fixed the zIndex problem and removed the zIndex option (Thanks everyone who reported the problem)</dd>
  666. <dd>Fix a bug where repeatedly clicking on hour cells made the timepicker very slow.</dd>
  667. <dd>Added Italian translation, thanks to Serge Margarita.</dd>
  668. <dt>Release 0.2.8 - October 28, 2011</dt>
  669. <dd>Updated defaultTime to allow for Date object (github issue #26)</dd>
  670. <dd>Fixed the now and deselect buttons in IE</dd>
  671. <dt>Release 0.2.7 - October 19, 2011</dt>
  672. <dd>Added option to omit minutes in parsed time when user select 0 for minutes. (Thanks tribalvibes, Github issue #23)</dd>
  673. <dd>Added support for internationalisation (fr, de and ja, Thanks Bernd Plagge).</dd>
  674. <dd>Added an <a href="i18n/i18n.html">internationalisation page</a></dd>
  675. <dt>0.2.6 - October 12, 2011</dt>
  676. <dd>Fixed a bug when input ID have more then one special char. (Thanks Jacqueline Krijnen)</dd>
  677. <dd>Fixed a bug when parsing hours only or minutes only time. (Thanks protron, <a href="https://github.com/fgelinas/timepicker/issues/20">github issue #20</a>)</dd>
  678. <dd>Added 'Now', 'Deselect' and 'Close' buttons. (Thanks Christian Grobmeier for the close button code, <a href="https://github.com/fgelinas/timepicker/issues/20">github issue #22</a>)</dd>
  679. <dt>0.2.5 - September 13, 2011</dt>
  680. <dd>Added support for disable and enable. (Suggested by danielrex, github issue #17)</dd>
  681. <dd>Added an example for 2 timepicker to behave as a period selector (start time and end time). (Thanks Bill Pellowe)</dd>
  682. <dd>Renamed the stylesheet to jquery.ui.timepicker.css to be more consistent with jQuery UI file name convention.</dd>
  683. <dt>0.2.4 - August 5, 2011</dt>
  684. <dd>Fixed the hand cursor in the css file. (Thanks Mike Neumegen)</dd>
  685. <dd>Added position option to use with the jquery ui position utility.</dd>
  686. <dd>Added option to display only hours or only minutes.</dd>
  687. <dt>0.2.3 - July 11, 2011 </dt>
  688. <dd>Fix github issue #3 : Bug when hours or minutes choices does not divide by number of rows (thanks wukimus).</dd>
  689. <dd>Changed default behavior of the defaultTime option, if set to '' and input is empty, there will be no highlighted time in the popup (Thanks Rasmus Schultz)</dd>
  690. <dd>Fix github issue #4 : Error when generating empty minute cell. (Thanks 123Haynes)</dd>
  691. <dd>Fix github issue #5 : Add functionality for "getTime" option. (Thanks edanuff)</dd>
  692. <dd>Added the periodSeparator option. (thanks jrchamp)</dd>
  693. <dd>Fixed "getTime" for inline timepickers. (thanks Mike Neumegen)</dd>
  694. <dd>Added "getHour" and "getMinute" to get individual values.</dd>
  695. <dd>New page interface, about time :)</dd>
  696. <dt>0.2.2 - June 16, 2011</dt>
  697. <dd>Fixed a "console.log" line that I forgot to remove before release 0.2.1. (Thanks Derek Lavine)</dd>
  698. <dt>0.2.1 - June 8, 2011</dt>
  699. <dd>Timepicker does not give the focus back to the input any more after time selection. This is similar to the datepicker behaviour and is more natural to the user because it shows the dialog again when the user click on the input again, as expected.</dd>
  700. <dd>Added options to customize the hours and minutes ranges and interval for more customization.</dd>
  701. <dt>0.2 - May 28, 2011</dt>
  702. <dd>In the last release, I messed up versions and lost some changes so I'm fixing all this up with release 0.2</dd>
  703. <dt>0.1.2 - May 26, 2011</dt>
  704. <dd>Fixed a bug with inline timepickers that would append a #timepickr hashtag when selecting hours and minutes.</dd>
  705. <dd>Fixed z-index problem with IE6 (Thanks Graham Bentley)</dd>
  706. <dd>Added selection of highlighted text when enter is pressed on the input field (Thanks Glen Chiacchieri)</dd>
  707. <dd>Adjusted some focus problems, now the input gets the focus back when the used click on hours / minutes.</dd>
  708. <dt>0.1.something aka the lost release - around April 11</dt>
  709. <dd>Fixed a bug for when input Id had a dot in it, it was getting double escaped when it should not. (Thanks Zdenek Machac)</dd>
  710. <dd>So in 0.1.1 I created a bug that made timepicker changes the location hash, well now it's fixed. (Thanks Lucas Falk)</dd>
  711. <dt>0.1.1 - April 6, 2011</dt>
  712. <dd>Changed the cells click and dblclick binding for faster rendering in IE6/7 (Thanks Blair Parsons)</dd>
  713. <dd>Fixed a class naming bug created in 0.1.0 (Thanks Morlion Peter)</dd>
  714. <dt>0.1.0 - March 23, 2011</dt>
  715. <dd>Fixed some bugs with version 0.0.9</dd>
  716. <dt>0.0.9 - March 22, 2011</dt>
  717. <dd>Added zIndex option (Thanks Frank Enderle)</dd>
  718. <dd>Added showPeriodLabels option (default: true) to show/hide AM/PM labels on the left (thanks Frank Enderle)</dd>
  719. <dd>Added showOn ['focus'|'button'|'both'] and button options for alternate trigger method</dd>
  720. <dt>0.0.8 - February 17, 2011</dt>
  721. <dd>Fixed close event not triggered when switching to another input with time picker (thanks Stuart Gregg)</dd>
  722. <dt>0.0.7 - February 10, 2011</dt>
  723. <dd>Added function to set time after initialisation :$('#timepicker').timepicker('setTime',newTime);</dd>
  724. <dd>Added support for disabled period of time : onHourShow and onMinuteShow (thanks Rene Felgenträger)</dd>
  725. <dt>0.0.6 - January 19, 2011</dt>
  726. <dd>Replaced some div with tables to : fix some display bugs in IE7, fix inline display and fix my headhake.</dd>
  727. <dd>Added standard "change" event being triggered on the input when the content changes. (Thanks Rasmus Schultz)</dd>
  728. <dd>Added support for inline timePicker, attached to div or span.</dd>
  729. <dd>Added altField that receive the parsed time value when selected time changes.</dd>
  730. <dd>Added defaultTime value to use when input field is missing (inline) or input value is empty. If defaultTime is missing then current time is used.</dd>
  731. <dt>0.0.5 - January 18, 2011</dt>
  732. <dd>Now updating time picker selected value when manually typing in the text field (thanks Rasmus Schultz)<br />
  733. <small>Another step toward inline time picker ?</small></dd>
  734. <dd>Fixed : with showPeriod: true and showLeadingZero: true, PM hours did not show leading zeros (thanks Chandler May)</dd>
  735. <dd>Fixed : with showPeriod: true and showLeadingZero: true, Selecting 12 AM shows as 00 AM in the input field, also parsing 12AM did not work correctly (thanks Rasmus Schultz)</dd>
  736. <dt>0.0.4 - January 10, 2011</dt>
  737. <dd>Changed showLeadingZero to affect only hours, added showMinutesLeadingZero for minutes display.</dd>
  738. <dd>Changed the default value of timeSeparator from 'h' to ':'.</dd>
  739. <dd>Removed width:100% on tables in the css, caused a bug in some browsers.</dd>
  740. <dt>0.0.3 - January 8, 2011</dt>
  741. <dd>Fixed a bug with the widget not displaying with some jQuery UI 1.8.7 css. (Thanks Alexander Fietz)</dd>
  742. <dd>Fixed a display bug on page load, a small empty div was visible at the bottom of pages. (Thanks Gertjan van Roekel)</dd>
  743. <dd>Modified the jquery-ui-timepicker.css to make the widget more dynamic to style and sizes changes.</dd>
  744. <dt>0.0.2 - January 4, 2011</dt>
  745. <dd>Added showPeriod: period (AM/PM) in input and showLeadingZero: to control display of number < 10. (big thanks Steve Commisso)</dd>
  746. <dt>0.0.1 - December 2010</dt>
  747. <dd>First release</dd>
  748. </dl>
  749. <hr />
  750. <h2>To Do : </h2>
  751. <ul>
  752. <li>
  753. Possibility to use the timepicker for hours only, or minutes only.
  754. </li>
  755. <li>
  756. Change the code style to use the jQuery widget framework.
  757. </li>
  758. <li>
  759. Detect a second click on the same cell and close the picker (ie: the user selected hours and do not want to select different minutes or vice versa, and click twice on the same cell instead)
  760. This is already simulated with the handling of the double click.
  761. </li>
  762. </ul>
  763. </div>
  764. <!------------------------------------------------------------------------------------------------------------->
  765. <!------------------------------------------------------------------------------------------------------------->
  766. <!------------------------------------------------------------------------------------------------------------->
  767. <div id="get_timepicker">
  768. <h2>Download Timepicker</h2>
  769. <p>
  770. Current version : 0.2.9 - released November 13, 2011
  771. </p>
  772. <p>
  773. <a href="http://github.com/fgelinas/timepicker">Get it on github</a>
  774. </p>
  775. <p>
  776. <a href="releases/jquery-ui-timepicker-0.2.9.zip">Download from here (.zip)</a>
  777. </p>
  778. <hr >
  779. <p>
  780. I put a lot of time and effort in this project. If you like it, please <span style="text-decoration: line-through">pay me a beer</span> donate
  781. <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
  782. <input type="hidden" name="cmd" value="_s-xclick">
  783. <input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----
  784. ">
  785. <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
  786. <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
  787. </form>
  788. </p>
  789. <hr />
  790. <p>
  791. Instruction for legacy jQuery integration (jQuery 1.2.6 and jQuery UI 1.6)
  792. <br>
  793. <ul>
  794. <li>
  795. <a href="releases/jquery-ui-timepicker-legacy_support.zip">Get the legacy package here</a>
  796. , built with jQuery Timepicker 0.2.4 but should work with newer versions
  797. </li>
  798. <li>
  799. Make sure to include jquery-1.2.6.js, jquery.fix.for.1.2.6.js and jquery.ui.1.6.all.js
  800. </li>
  801. <li>
  802. See the working example in index.html in the "legacy_1.2.6" folder.
  803. </li>
  804. <li>
  805. Support for previous versions of jquery is limited.
  806. </li>
  807. </ul>
  808. </p>
  809. </div>
  810. </div>
  811. <hr />
  812. <!-- =============================================================================================================== -->
  813. <div id="footer">
  814. <p>
  815. <strong>New! New!</strong> TimePicker is now 100% more social, on GitHub @ <a href="http://github.com/fgelinas/timepicker">http://github.com/fgelinas/timepicker</a>.
  816. </p>
  817. <p>
  818. Get the release package here : <a href="releases/jquery-ui-timepicker-0.2.9.zip">jquery-ui-timepicker-0.2.9.zip</a>
  819. </p>
  820. <hr />
  821. <p>
  822. <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
  823. I put a lot of time and effort in this project. If you like it, please <span style="text-decoration: line-through">pay me a beer</span> donate
  824. <input type="hidden" name="cmd" value="_s-xclick">
  825. <input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----
  826. ">
  827. <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
  828. <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
  829. </form>
  830. </p>
  831. <hr />
  832. Bug, ideas or comments : <a href="mailto:frank@fgelinas.com">frank@fgelinas.com</a>
  833. </div>
  834. </div>
  835. </body>
  836. </html>