UNPKG

md-time-picker

Version:
1 lines 9.82 kB
if("undefined"==typeof jQuery)throw new Error("MDTimePicker: This plugin requires jQuery");!function(l){function k(e,t){this.hour=e,this.minute=t,this.format=function(e,i){var s=this,r=1<(e.match(/h/g)||[]).length;return l.trim(e.replace(/(hh|h|mm|ss|tt|t)/g,function(e){switch(e.toLowerCase()){case"h":var t=s.getHour(!0);return i&&t<10?"0"+t:t;case"hh":return s.hour<10?"0"+s.hour:s.hour;case"mm":return s.minute<10?"0"+s.minute:s.minute;case"ss":return"00";case"t":return r?"":s.getT().toLowerCase();case"tt":return r?"":s.getT()}}))},this.setHour=function(e){this.hour=e},this.getHour=function(e){return e?0<=[0,12].indexOf(this.hour)?12:this.hour%12:this.hour},this.invert=function(){"AM"===this.getT()?this.setHour(this.getHour()+12):this.setHour(this.getHour()-12)},this.setMinutes=function(e){this.minute=e},this.getMinutes=function(e){return this.minute},this.getT=function(){return this.hour<12?"AM":"PM"}}function a(e,t){var i=this;this.visible=!1,this.activeView="hours",this.hTimeout=null,this.mTimeout=null,this.input=l(e),this.config=t,this.time=new k(0,0),this.selected=new k(0,0),this.timepicker={overlay:l('<div class="mdtimepicker hidden"></div>'),wrapper:l('<div class="mdtp__wrapper"></div>'),timeHolder:{wrapper:l('<section class="mdtp__time_holder"></section>'),hour:l('<span class="mdtp__time_h">12</span>'),dots:l('<span class="mdtp__timedots">:</span>'),minute:l('<span class="mdtp__time_m">00</span>'),am_pm:l('<span class="mdtp__ampm">AM</span>')},clockHolder:{wrapper:l('<section class="mdtp__clock_holder"></section>'),am:l('<span class="mdtp__am">AM</span>'),pm:l('<span class="mdtp__pm">PM</span>'),clock:{wrapper:l('<div class="mdtp__clock"></div>'),dot:l('<span class="mdtp__clock_dot"></span>'),hours:l('<div class="mdtp__hour_holder"></div>'),minutes:l('<div class="mdtp__minute_holder"></div>')},buttonsHolder:{wrapper:l('<div class="mdtp__buttons">'),btnClear:l('<span class="mdtp__button clear-btn">Clear</span>'),btnOk:l('<span class="mdtp__button ok">Ok</span>'),btnCancel:l('<span class="mdtp__button cancel">Cancel</span>')}}};var s,r=i.timepicker;i.setup(r).appendTo("body"),r.clockHolder.am.click(function(){"AM"!==i.selected.getT()&&i.setT("am")}),r.clockHolder.pm.click(function(){"PM"!==i.selected.getT()&&i.setT("pm")}),r.timeHolder.hour.click(function(){"hours"!==i.activeView&&i.switchView("hours")}),r.timeHolder.minute.click(function(){"minutes"!==i.activeView&&i.switchView("minutes")}),r.clockHolder.buttonsHolder.btnOk.click(function(){i.setValue(i.selected);var e=i.getFormattedTime();i.triggerChange({time:e.time,value:e.value}),i.hide()}),r.clockHolder.buttonsHolder.btnCancel.click(function(){i.hide()}),i.config.clearBtn&&r.clockHolder.buttonsHolder.btnClear.click(function(){i.input.val("").attr("data-time",null).attr("value",""),i.triggerChange({time:null,value:""}),i.hide()}),i.input.on("keydown",function(e){return 13===e.keyCode&&i.show(),!(n.indexOf(e.which)<0&&i.config.readOnly)}).on("click",function(){i.show()}).prop("readonly",i.config.readOnly),""!==i.input.val()?(s=i.parseTime(i.input.val(),i.config.format),i.setValue(s)):(s=i.getSystemTime(),i.time=new k(s.hour,s.minute)),i.resetSelected(),i.switchView(i.activeView)}var o="mdtimepicker",n=[9,112,113,114,115,116,117,118,119,120,121,122,123];a.prototype={constructor:a,setup:function(e){if(void 0===e)throw new Error("Expecting a value.");var s=this,t=e.overlay,i=e.wrapper,r=e.timeHolder,n=e.clockHolder;this.config.is24Hour||r.wrapper.append(r.am_pm),r.wrapper.append(r.hour).append(r.dots).append(r.minute).appendTo(i);for(var a=0;a<12;a++){(c=l('<div class="mdtp__digit rotate-'+(120+30*a)%360+'" data-hour="'+(o=a+1)+'"><span>'+o+"</span></div>")).find("span").click(function(){var e=parseInt(l(this).parent().data("hour")),t=s.selected.getT(),i=(e+("PM"===t&&e<12||"AM"===t&&12===e?12:0))%24;s.setHour(i),s.switchView("minutes")}),n.clock.hours.append(c)}if(this.config.is24Hour)for(var o,c,a=12;a<24;a++){(c=l('<div class="mdtp__digit h24 rotate-'+(120+30*a)%360+'" data-hour="'+(o=a+1==24?0:a+1)+'"><span>'+o+"</span></div>")).find("span").click(function(){var e=parseInt(l(this).parent().data("hour"));s.setHour(e),s.switchView("minutes")}),n.clock.hours.append(c)}for(a=0;a<60;a++){var u=a<10?"0"+a:a,d=l('<div class="mdtp__digit rotate-'+(90+6*a)%360+'" data-minute="'+a+'"></div>');a%5==0?d.addClass("marker").html("<span>"+u+"</span>"):d.html("<span></span>"),d.find("span").click(function(){s.setMinute(l(this).parent().data("minute"))}),n.clock.minutes.append(d)}return this.config.is24Hour||n.clock.wrapper.append(n.am).append(n.pm),n.clock.wrapper.append(n.clock.dot).append(n.clock.hours).append(n.clock.minutes).appendTo(n.wrapper),s.config.clearBtn&&n.buttonsHolder.wrapper.append(n.buttonsHolder.btnClear),n.buttonsHolder.wrapper.append(n.buttonsHolder.btnCancel).append(n.buttonsHolder.btnOk).appendTo(n.wrapper),n.wrapper.appendTo(i),i.attr("data-theme",s.config.theme||l.fn.mdtimepicker.defaults.theme),i.appendTo(t),t},setHour:function(e){if(void 0===e)throw new Error("Expecting a value.");var r=this;this.selected.setHour(e),this.timepicker.timeHolder.hour.text(this.selected.getHour(!r.config.is24Hour)),this.timepicker.clockHolder.clock.hours.children("div").each(function(e,t){var i=l(t),s=i.data("hour");i[s===r.selected.getHour(!r.config.is24Hour)?"addClass":"removeClass"]("active")})},setMinute:function(r){if(void 0===r)throw new Error("Expecting a value.");this.selected.setMinutes(r),this.timepicker.timeHolder.minute.text(r<10?"0"+r:r),this.timepicker.clockHolder.clock.minutes.children("div").each(function(e,t){var i=l(t),s=i.data("minute");i[s===r?"addClass":"removeClass"]("active")})},setT:function(e){if(void 0===e)throw new Error("Expecting a value.");this.selected.getT()!==e.toUpperCase()&&this.selected.invert();var t=this.selected.getT();this.timepicker.timeHolder.am_pm.text(t),this.timepicker.clockHolder.am["AM"===t?"addClass":"removeClass"]("active"),this.timepicker.clockHolder.pm["PM"===t?"addClass":"removeClass"]("active")},setValue:function(e){if(void 0===e)throw new Error("Expecting a value.");var t="string"==typeof e?this.parseTime(e,this.config.format):e;this.time=new k(t.hour,t.minute);var i=this.getFormattedTime();this.input.val(i.value).attr("data-time",i.time).attr("value",i.value)},resetSelected:function(){this.setHour(this.time.hour),this.setMinute(this.time.minute),this.setT(this.time.getT())},getFormattedTime:function(){return{time:this.time.format(this.config.timeFormat,!1),value:this.time.format(this.config.format,this.config.hourPadding)}},getSystemTime:function(){var e=new Date;return new k(e.getHours(),e.getMinutes())},parseTime:function(e,t){var i,s,r=void 0===t?this.config.format:t,n=1<(r.match(/h/g)||[]).length,a=(r.match(/m/g),(r.match(/t/g)||[]).length),o=e.length,c=r.indexOf("h"),u=r.lastIndexOf("h"),d="",l="";d=this.config.hourPadding||n?e.substr(c,2):(i=r.substring(c-1,c),s=r.substring(u+1,u+2),u===r.length-1?e.substring(e.indexOf(i,c-1)+1,o):0===c?e.substring(0,e.indexOf(s,c)):e.substring(e.indexOf(i,c-1)+1,e.indexOf(s,c+1)));var m=(r=r.replace(/(hh|h)/g,d)).indexOf("m"),p=r.lastIndexOf("m"),h=r.indexOf("t"),v=r.substring(m-1,m),l=(r.substring(p+1,p+2),p===r.length-1?e.substring(e.indexOf(v,m-1)+1,o):0===m?e.substring(0,2):e.substr(m,2)),f="pm"===(n?11<parseInt(d)?1<a?"PM":"pm":1<a?"AM":"am":e.substr(h,2)).toLowerCase(),g=new k(parseInt(d),parseInt(l));return(f&&parseInt(d)<12||!f&&12===parseInt(d))&&g.invert(),g},switchView:function(e){var t=this,i=this.timepicker;"hours"!==e&&"minutes"!==e||(t.activeView=e,i.timeHolder.hour["hours"===e?"addClass":"removeClass"]("active"),i.timeHolder.minute["hours"===e?"removeClass":"addClass"]("active"),i.clockHolder.clock.hours.addClass("animate"),"hours"===e&&i.clockHolder.clock.hours.removeClass("hidden"),clearTimeout(t.hTimeout),t.hTimeout=setTimeout(function(){"hours"!==e&&i.clockHolder.clock.hours.addClass("hidden"),i.clockHolder.clock.hours.removeClass("animate")},"hours"===e?20:350),i.clockHolder.clock.minutes.addClass("animate"),"minutes"===e&&i.clockHolder.clock.minutes.removeClass("hidden"),clearTimeout(t.mTimeout),t.mTimeout=setTimeout(function(){"minutes"!==e&&i.clockHolder.clock.minutes.addClass("hidden"),i.clockHolder.clock.minutes.removeClass("animate")},"minutes"===e?20:350))},show:function(){var e,t=this;""===t.input.val()&&(e=t.getSystemTime(),this.time=new k(e.hour,e.minute)),t.resetSelected(),l("body").attr("mdtimepicker-display","on"),t.timepicker.wrapper.addClass("animate"),t.timepicker.overlay.removeClass("hidden").addClass("animate"),setTimeout(function(){t.timepicker.overlay.removeClass("animate"),t.timepicker.wrapper.removeClass("animate"),t.visible=!0,t.input.blur()},10)},hide:function(){var e=this;e.timepicker.overlay.addClass("animate"),e.timepicker.wrapper.addClass("animate"),setTimeout(function(){e.switchView("hours"),e.timepicker.overlay.addClass("hidden").removeClass("animate"),e.timepicker.wrapper.removeClass("animate"),l("body").removeAttr("mdtimepicker-display"),e.visible=!1,e.input.focus()},300)},destroy:function(){this.input.removeData(o).unbind("keydown").unbind("click").removeProp("readonly"),this.timepicker.overlay.remove()},triggerChange:function(e){this.input.trigger(l.Event("timechanged",e)).trigger("onchange").trigger("change")}},l.fn.mdtimepicker=function(){var r=arguments,n=r[0];return l(this).each(function(e,t){var i=l(this),s=l(this).data(o);options=l.extend({},l.fn.mdtimepicker.defaults,i.data(),"object"==typeof n&&n),s||i.data(o,s=new a(this,options)),"string"==typeof n&&s[n].apply(s,Array.prototype.slice.call(r).slice(1)),l(document).on("keydown",function(e){27===e.keyCode&&s.visible&&s.hide()})})},l.fn.mdtimepicker.defaults={timeFormat:"hh:mm:ss.000",is24Hour:!0,format:"h:mm tt",theme:"blue",readOnly:!0,hourPadding:!1,clearBtn:!1}}(jQuery);