forked from jonthornton/jquery-timepicker
/
jquery.timepicker.min.js
6 lines (5 loc) · 6.99 KB
/
jquery.timepicker.min.js
1
2
3
4
5
6
/************************
jquery-timepicker
http://jonthornton.github.com/jquery-timepicker/
requires jQuery 1.6+
************************/!function(e){function o(t){var r=t.data("settings"),i=t.siblings(".ui-timepicker-list");i&&i.length&&i.remove(),i=e("<ul />"),i.attr("tabindex",-1),i.addClass("ui-timepicker-list"),r.className&&i.addClass(r.className);var s=t.css("zIndex");s=s+0==s?s+2:2,i.css({display:"none",position:"absolute",left:t.position().left,zIndex:s}),r.minTime!==null&&r.showDuration&&i.addClass("ui-timepicker-with-duration");var o=r.durationTime!==null?r.durationTime:r.minTime,u=r.minTime!==null?r.minTime:0,f=r.maxTime!==null?r.maxTime:u+n-1;f<=u&&(f+=n);var l;for(l=u;l<=f;l+=r.step*60){var d=l%n,v=e("<li />");v.data("time",d),v.text(p(d,r.timeFormat));if(r.minTime!==null&&r.showDuration){var m=e("<span />");m.addClass("ui-timepicker-duration"),m.text(" ("+h(l-o)+")"),v.append(m)}i.append(v)}if(l!=f){var v=e("<li />");v.data("time",f),v.text(p(f,r.timeFormat)),i.append(v)}t.after(i),a(t,i),i.delegate("li","click",{timepicker:t},function(n){t.addClass("ui-timepicker-hideme"),t[0].focus(),i.find("li").removeClass("ui-timepicker-selected"),e(this).addClass("ui-timepicker-selected"),c(t),i.hide()})}function u(t,n,r){if(!r&&r!==0)return!1;var i=t.data("settings"),s=!1;return n.find("li").each(function(t,n){var o=e(n);if(Math.abs(o.data("time")-r)<=i.step*30)return s=o,!1}),s}function a(e,t){var n=d(e.val()),r=u(e,t,n);r&&r.addClass("ui-timepicker-selected")}function f(){if(this.value=="")return;var t=e(this),n=p(d(this.value),t.data("settings").timeFormat);t.val(n)}function l(t){var n=e(this),r=n.siblings(".ui-timepicker-list");if(!r.is(":visible")){if(t.keyCode!=40)return!0;n.focus()}switch(t.keyCode){case 13:return c(n),s.hide.apply(this),t.preventDefault(),!1;case 38:var i=r.find(".ui-timepicker-selected");if(!i.length){var i;r.children().each(function(t,n){if(e(n).position().top>0)return i=e(n),!1}),i.addClass("ui-timepicker-selected")}else i.is(":first-child")||(i.removeClass("ui-timepicker-selected"),i.prev().addClass("ui-timepicker-selected"),i.prev().position().top<i.outerHeight()&&r.scrollTop(r.scrollTop()-i.outerHeight()));break;case 40:var i=r.find(".ui-timepicker-selected");if(i.length==0){var i;r.children().each(function(t,n){if(e(n).position().top>0)return i=e(n),!1}),i.addClass("ui-timepicker-selected")}else i.is(":last-child")||(i.removeClass("ui-timepicker-selected"),i.next().addClass("ui-timepicker-selected"),i.next().position().top+2*i.outerHeight()>r.outerHeight()&&r.scrollTop(r.scrollTop()+i.outerHeight()));break;case 27:r.find("li").removeClass("ui-timepicker-selected"),r.hide();break;case 9:case 16:case 17:case 18:case 19:case 20:case 33:case 34:case 35:case 36:case 37:case 39:case 45:return;default:r.find("li").removeClass("ui-timepicker-selected");return}}function c(e){var t=e.data("settings"),n=e.siblings(".ui-timepicker-list"),r=null,i=n.find(".ui-timepicker-selected");if(i.length)var r=i.data("time");else if(e.val()){var r=d(e.val());a(e,n)}if(r!==null){var s=p(r,t.timeFormat);e.attr("value",s)}e.trigger("change").trigger("changeTime")}function h(e){var t=Math.round(e/60),n;if(t<60)n=[t,i.mins];else if(t==60)n=["1",i.hr];else{var r=(t/60).toFixed(1);i.decimal!="."&&(r=r.replace(".",i.decimal)),n=[r,i.hrs]}return n.join(" ")}function p(e,n){var r=new Date(t.valueOf()+e*1e3),i="";for(var s=0;s<n.length;s++){var o=n.charAt(s);switch(o){case"a":i+=r.getHours()>11?"pm":"am";break;case"A":i+=r.getHours()>11?"PM":"AM";break;case"g":var u=r.getHours()%12;i+=u==0?"12":u;break;case"G":i+=r.getHours();break;case"h":var u=r.getHours()%12;u!=0&&u<10&&(u="0"+u),i+=u==0?"12":u;break;case"H":var u=r.getHours();i+=u>9?u:"0"+u;break;case"i":var a=r.getMinutes();i+=a>9?a:"0"+a;break;case"s":var e=r.getSeconds();i+=e>9?e:"0"+e;break;default:i+=o}}return i}function d(e){if(e=="")return null;if(e+0==e)return e;typeof e=="object"&&(e=e.getHours()+":"+e.getMinutes());var t=new Date(0),n=e.toLowerCase().match(/(\d+)(?::(\d\d))?\s*([pa]?)/);if(!n)return null;var r=parseInt(n[1]*1);if(n[3])if(r==12)var i=n[3]=="p"?12:0;else var i=r+(n[3]=="p"?12:0);else var i=r;var s=n[2]*1||0;return i*3600+s*60}var t=new Date;t.setHours(0),t.setMinutes(0),t.setSeconds(0);var n=86400,r={className:null,minTime:null,maxTime:null,durationTime:null,step:30,showDuration:!1,timeFormat:"g:ia",scrollDefaultNow:!1,scrollDefaultTime:!1,selectOnBlur:!1},i={decimal:".",mins:"mins",hr:"hr",hrs:"hrs"},s={init:function(t){return this.each(function(){var n=e(this);if(n[0].tagName=="SELECT"){var o=e("<input />"),u={type:"text",value:n.val()},a=n[0].attributes;for(var c=0;c<a.length;c++)u[a[c].nodeName]=a[c].nodeValue;o.attr(u),n.replaceWith(o),n=o}var h=e.extend({},r);t&&(h=e.extend(h,t)),h.minTime&&(h.minTime=d(h.minTime)),h.maxTime&&(h.maxTime=d(h.maxTime)),h.durationTime&&(h.durationTime=d(h.durationTime)),h.lang&&(i=e.extend(i,h.lang)),n.data("settings",h),n.attr("autocomplete","off"),n.click(s.show).focus(s.show).blur(f).keydown(l),n.addClass("ui-timepicker-input");if(n.val()){var v=p(d(n.val()),h.timeFormat);n.val(v)}var m=e('<span class="ui-timepicker-container" />');n.wrap(m),e("body").attr("tabindex",-1).focusin(function(t){e(t.target).closest(".ui-timepicker-container").length==0&&s.hide()})})},show:function(t){var n=e(this),r=n.siblings(".ui-timepicker-list");if(n.hasClass("ui-timepicker-hideme")){n.removeClass("ui-timepicker-hideme"),r.hide();return}if(r.is(":visible"))return;s.hide(),r.length==0&&(o(n),r=n.siblings(".ui-timepicker-list"));var i=parseInt(n.css("marginTop").slice(0,-2));n.offset().top+n.outerHeight(!0)+r.outerHeight()>e(window).height()+e(window).scrollTop()?r.css({top:n.position().top+i-r.outerHeight()}):r.css({top:n.position().top+i+n.outerHeight()}),r.show();var a=n.data("settings"),f=r.find(".ui-timepicker-selected");f.length||(n.val()?f=u(n,r,d(n.val())):a.minTime===null&&a.scrollDefaultNow?f=u(n,r,d(new Date)):a.scrollDefaultTime!==!1&&(f=u(n,r,d(a.scrollDefaultTime))));if(f&&f.length){var l=r.scrollTop()+f.position().top-f.outerHeight();r.scrollTop(l)}else r.scrollTop(0);n.trigger("showTimepicker")},hide:function(t){e(".ui-timepicker-list:visible").each(function(){var t=e(this),n=t.siblings(".ui-timepicker-input"),r=n.data("settings");r.selectOnBlur&&c(n),t.hide(),n.trigger("hideTimepicker")})},option:function(t,n){var r=e(this),i=r.data("settings"),s=r.siblings(".ui-timepicker-list");if(typeof t=="object")i=e.extend(i,t);else if(typeof t=="string"&&typeof n!="undefined")i[t]=n;else if(typeof t=="string")return i[t];i.minTime&&(i.minTime=d(i.minTime)),i.maxTime&&(i.maxTime=d(i.maxTime)),i.durationTime&&(i.durationTime=d(i.durationTime)),r.data("settings",i),s.remove()},getSecondsFromMidnight:function(){return d(e(this).val())},getTime:function(){return new Date(t.valueOf()+d(e(this).val())*1e3)},setTime:function(t){var n=e(this),r=p(d(t),n.data("settings").timeFormat);n.val(r)}};e.fn.timepicker=function(t){if(s[t])return s[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return s.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.timepicker")}}(jQuery);