X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fspip-bonux%2Fformulaires%2Fdateur%2Fjquery.timePicker.js;fp=www%2Fplugins%2Fauto%2Fspip-bonux%2Fformulaires%2Fdateur%2Fjquery.timePicker.js;h=81fa98b31820542ad439785701179fa88daf0a9a;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hp=0000000000000000000000000000000000000000;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c;p=velocampus%2Fweb%2Fwww.git
diff --git a/www/plugins/auto/spip-bonux/formulaires/dateur/jquery.timePicker.js b/www/plugins/auto/spip-bonux/formulaires/dateur/jquery.timePicker.js
new file mode 100644
index 0000000..81fa98b
--- /dev/null
+++ b/www/plugins/auto/spip-bonux/formulaires/dateur/jquery.timePicker.js
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2006 Sam Collett (http://www.texotela.co.uk)
+ * Licensed under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+/*
+ * A time picker for jQuery
+ * Based on original timePicker by Sam Collet (http://www.texotela.co.uk)
+ * @name timePicker
+ * @version 0.1
+ * @author Anders Fajerson (http://perifer.se)
+ * @example $("#mytime").timePicker();
+ * @example $("#mytime").timePicker({step:30, startTime:"15:00", endTime:"18:00"});
+ */
+
+(function($){
+
+ $.fn.timePicker = function(options) {
+ // Build main options before element iteration
+ var settings = $.extend({}, $.fn.timePicker.defaults, options);
+
+ return this.each(function() {
+ $.timePicker(this, settings);
+ });
+ };
+
+ $.timePicker = function (elm, settings) {
+ var elm = $(elm)[0];
+ return elm.timePicker || (elm.timePicker = new jQuery._timePicker(elm, settings));
+ };
+
+ $._timePicker = function(elm, settings) {
+
+ var tpOver = false;
+ var startTime = normaliseTime(settings.startTime);
+ var endTime = normaliseTime(settings.endTime);
+
+ $(elm).attr('autocomplete', 'OFF'); // Disable browser autocomplete
+
+ var times = [];
+ var time = new Date(startTime); // Create a new date object.
+ while(time <= endTime) {
+ times[times.length] = formatTime(time, settings);
+ time = new Date(time.setMinutes(time.getMinutes() + settings.step));
+ }
+
+ var $tpDiv = $('
');
+ var $tpList = $('');
+
+ // Build the list.
+ for(var i = 0; i < times.length; i++) {
+ $tpList.append("" + times[i] + "");
+ }
+ $tpDiv.append($tpList);
+ // Store element offset.
+ var elmOffset = $(elm).offset();
+ // Append the timPicker to the body and position it.
+ $tpDiv.appendTo('body').css({'top':elmOffset.top, 'left':elmOffset.left}).hide();
+
+ $("li", $tpList).unbind().mouseover(function() {
+ $("li.selected", $tpDiv).removeClass("selected"); // TODO: only needs to run once.
+ $(this).addClass("selected");
+ }).mousedown(function() {
+ tpOver = true;
+ }).click(function() {
+ setTimeVal(elm, this, $tpDiv, settings);
+ tpOver = false;
+ });
+
+ // Store ananymous function in variable since it's used twice.
+ var showPicker = function() {
+ var elmOffset = $(elm).offset();
+ $tpDiv.css({'top':elmOffset.top, 'left':elmOffset.left}).show(); // Show picker.
+ $tpDiv.mouseover(function() { // Have to use mouseover instead of mousedown because of Opera
+ tpOver = true;
+ }).mouseout(function() {
+ tpOver = false;
+ });
+ $("li", $tpDiv).removeClass("selected");
+
+ // Try to find a time in the list that matches the entered time.
+ var time = this.value ? timeStringToDate(this.value, settings) : startTime;
+ var startMin = startTime.getHours() * 60 + startTime.getMinutes();
+ var min = (time.getHours() * 60 + time.getMinutes()) - startMin;
+ var steps = Math.round(min / settings.step);
+ var roundTime = normaliseTime(new Date(2001, 0, 0, 0, (steps * settings.step + (startMin)), 0));
+ roundTime = (startTime < roundTime && roundTime < endTime) ? roundTime : startTime;
+
+ var $matchedTime = $("li:contains(" + formatTime(roundTime, settings) + ")", $tpDiv);
+
+ if ($matchedTime.length) {
+ $matchedTime.addClass("selected");
+ // Scroll to matched time.
+ $tpDiv[0].scrollTop = $matchedTime[0].offsetTop;
+ }
+ };
+
+ $(elm).unbind().focus(showPicker).click(showPicker)
+ // Hide timepicker on blur
+ .blur(function() {
+ if (!tpOver && $tpDiv[0].parentNode) { // Don't remove when timePicker is clicked or when already removed
+ $tpDiv.hide();
+ }
+ })
+
+ // Key support
+ .keypress(function(e) {
+ switch (e.keyCode) {
+ case 38: // Up arrow.
+ case 63232: // Safari up arrow.
+ var $selected = $("li.selected", $tpList);
+ var prev = $selected.prev().addClass("selected")[0];
+ if (prev) {
+ $selected.removeClass("selected");
+ $tpDiv[0].scrollTop = prev.offsetTop;
+ }
+ return false;
+ break;
+ case 40: // Down arrow.
+ case 63233: // Safari down arrow.
+ var $selected = $("li.selected", $tpList);
+ var next = $selected.length ? $selected.next().addClass("selected")[0] : $("li:first").addClass("selected")[0];
+ if (next) {
+ $selected.removeClass("selected");
+ $tpDiv[0].scrollTop = next.offsetTop;
+ }
+ return false;
+ break;
+ case 13: // Enter
+ if (!$tpDiv.is(":hidden")) {
+ var sel = $("li.selected", $tpList)[0];
+ setTimeVal(elm, sel, $tpDiv, settings);
+ return false;
+ }
+ break;
+ }
+ });
+
+ // Helper function to get an inputs current time as Date object.
+ // Returns a Date object.
+ this.getTime = function() {
+ return timeStringToDate(elm.value, settings);
+ };
+ // Helper function to set a time input.
+ // Takes a Date object.
+ this.setTime = function(time) {
+ elm.value = formatTime(normaliseTime(time), settings);
+ // Trigger element's change events.
+ $(elm).change();
+ };
+
+ }; // End fn;
+
+ // Plugin defaults.
+ $.fn.timePicker.defaults = {
+ step:30,
+ startTime: new Date(0, 0, 0, 0, 0, 0),
+ endTime: new Date(0, 0, 0, 23, 30, 0),
+ separator: ':',
+ show24Hours: true
+ };
+
+ // Private functions.
+
+ function setTimeVal(elm, sel, $tpDiv, settings) {
+ // Update input field
+ elm.value = $(sel).text();
+ // Trigger element's change events.
+ $(elm).change();
+ // Keep focus for all but IE (which doesn't like it)
+ if (!$.browser.msie) {
+ elm.focus();
+ }
+ // Hide picker
+ $tpDiv.hide();
+ }
+
+ function formatTime(time, settings) {
+ var h = time.getHours();
+ var hours = settings.show24Hours ? h : (((h + 11) % 12) + 1);
+ var minutes = time.getMinutes();
+ return formatNumber(hours) + settings.separator + formatNumber(minutes) + (settings.show24Hours ? '' : ((h < 12) ? ' AM' : ' PM'));
+ }
+
+ function formatNumber(value) {
+ return (value < 10 ? '0' : '') + value;
+ }
+
+ function timeStringToDate(input, settings) {
+ if (input) {
+ var array = input.split(settings.separator);
+ var hours = parseFloat(array[0]);
+ var minutes = parseFloat(array[1]);
+ var time = new Date(0, 0, 0, hours, minutes, 0);
+ return normaliseTime(time);
+ }
+ return null;
+ }
+
+ /* Normalise time object to a common date. */
+ function normaliseTime(time) {
+ time.setFullYear(2001);
+ time.setMonth(0);
+ time.setDate(0);
+ return time;
+ }
+
+})(jQuery);