diff --git a/bower.json b/bower.json
index dc96134544..118c4b884b 100644
--- a/bower.json
+++ b/bower.json
@@ -37,7 +37,8 @@
"tablesorter": "jquery.tablesorter#^2.28.4",
"card": "^2.1.1",
"fullcalendar": "^3.5.1",
- "toastr": "^2.1.3"
+ "toastr": "^2.1.3",
+ "jt.timepicker": "jquery-timepicker-jt#^1.11.12"
},
"resolutions": {
"jquery": "~1.11"
diff --git a/gulpfile.js b/gulpfile.js
index cfd508490e..bb841eed09 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -67,6 +67,10 @@ elixir(function(mix) {
bowerDir + '/bootstrap-daterangepicker/daterangepicker.css'
], 'public/css/daterangepicker.css');
+ mix.styles([
+ bowerDir + '/jt.timepicker/jquery.timepicker.css'
+ ], 'public/css/jquery.timepicker.css');
+
mix.styles([
bowerDir + '/select2/dist/css/select2.css'
], 'public/css/select2.css');
@@ -99,6 +103,10 @@ elixir(function(mix) {
bowerDir + '/bootstrap-daterangepicker/daterangepicker.js'
], 'public/js/daterangepicker.min.js');
+ mix.scripts([
+ bowerDir + '/jt.timepicker/jquery.timepicker.js'
+ ], 'public/js/jquery.timepicker.js');
+
mix.scripts([
bowerDir + '/fullcalendar/dist/fullcalendar.js',
bowerDir + '/fullcalendar/dist/locale-all.js',
diff --git a/public/css/jquery.timepicker.css b/public/css/jquery.timepicker.css
new file mode 100755
index 0000000000..0bab13d987
--- /dev/null
+++ b/public/css/jquery.timepicker.css
@@ -0,0 +1,2 @@
+.ui-timepicker-wrapper{overflow-y:auto;max-height:150px;width:6.5em;background:#fff;border:1px solid #ddd;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);outline:0;z-index:10001;margin:0}.ui-timepicker-wrapper.ui-timepicker-with-duration{width:13em}.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-30,.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-60{width:11em}.ui-timepicker-list{margin:0;padding:0;list-style:none}.ui-timepicker-duration{margin-left:5px;color:#888}.ui-timepicker-list:hover .ui-timepicker-duration{color:#888}.ui-timepicker-list li{padding:3px 0 3px 5px;cursor:pointer;white-space:nowrap;color:#000;list-style:none;margin:0}.ui-timepicker-list:hover .ui-timepicker-selected{background:#fff;color:#000}.ui-timepicker-list .ui-timepicker-selected:hover,.ui-timepicker-list li:hover,li.ui-timepicker-selected{background:#1980EC;color:#fff}.ui-timepicker-list li:hover .ui-timepicker-duration,li.ui-timepicker-selected .ui-timepicker-duration{color:#ccc}.ui-timepicker-list li.ui-timepicker-disabled,.ui-timepicker-list li.ui-timepicker-disabled:hover,.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled{color:#888;cursor:default}.ui-timepicker-list li.ui-timepicker-disabled:hover,.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled{background:#f2f2f2}
+/*# sourceMappingURL=jquery.timepicker.css.map */
diff --git a/public/css/jquery.timepicker.css.map b/public/css/jquery.timepicker.css.map
new file mode 100644
index 0000000000..fbd1997e63
--- /dev/null
+++ b/public/css/jquery.timepicker.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery.timepicker.css"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"jquery.timepicker.css","sourcesContent":[".ui-timepicker-wrapper {\n\toverflow-y: auto;\n\tmax-height: 150px;\n\twidth: 6.5em;\n\tbackground: #fff;\n\tborder: 1px solid #ddd;\n\t-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);\n\t-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);\n\tbox-shadow:0 5px 10px rgba(0,0,0,0.2);\n\toutline: none;\n\tz-index: 10001;\n\tmargin: 0;\n}\n\n.ui-timepicker-wrapper.ui-timepicker-with-duration {\n\twidth: 13em;\n}\n\n.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-30,\n.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-60 {\n\twidth: 11em;\n}\n\n.ui-timepicker-list {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.ui-timepicker-duration {\n\tmargin-left: 5px; color: #888;\n}\n\n.ui-timepicker-list:hover .ui-timepicker-duration {\n\tcolor: #888;\n}\n\n.ui-timepicker-list li {\n\tpadding: 3px 0 3px 5px;\n\tcursor: pointer;\n\twhite-space: nowrap;\n\tcolor: #000;\n\tlist-style: none;\n\tmargin: 0;\n}\n\n.ui-timepicker-list:hover .ui-timepicker-selected {\n\tbackground: #fff; color: #000;\n}\n\nli.ui-timepicker-selected,\n.ui-timepicker-list li:hover,\n.ui-timepicker-list .ui-timepicker-selected:hover {\n\tbackground: #1980EC; color: #fff;\n}\n\nli.ui-timepicker-selected .ui-timepicker-duration,\n.ui-timepicker-list li:hover .ui-timepicker-duration {\n\tcolor: #ccc;\n}\n\n.ui-timepicker-list li.ui-timepicker-disabled,\n.ui-timepicker-list li.ui-timepicker-disabled:hover,\n.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled {\n\tcolor: #888;\n\tcursor: default;\n}\n\n.ui-timepicker-list li.ui-timepicker-disabled:hover,\n.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled {\n\tbackground: #f2f2f2;\n}\n"]}
\ No newline at end of file
diff --git a/public/js/jquery.timepicker.js b/public/js/jquery.timepicker.js
new file mode 100644
index 0000000000..9d16d4a746
--- /dev/null
+++ b/public/js/jquery.timepicker.js
@@ -0,0 +1,2 @@
+!function(e){"object"==typeof exports&&exports&&"object"==typeof module&&module&&module.exports===exports?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)}(function(e){function i(e){var i=e[0];return i.offsetWidth>0&&i.offsetHeight>0}function t(i){if(i.minTime&&(i.minTime=T(i.minTime)),i.maxTime&&(i.maxTime=T(i.maxTime)),i.durationTime&&"function"!=typeof i.durationTime&&(i.durationTime=T(i.durationTime)),"now"==i.scrollDefault)i.scrollDefault=function(){return i.roundingFunction(T(new Date),i)};else if(i.scrollDefault&&"function"!=typeof i.scrollDefault){var t=i.scrollDefault;i.scrollDefault=function(){return i.roundingFunction(T(t),i)}}else i.minTime&&(i.scrollDefault=function(){return i.roundingFunction(i.minTime,i)});if("string"===e.type(i.timeFormat)&&i.timeFormat.match(/[gh]/)&&(i._twelveHourTime=!0),i.showOnFocus===!1&&i.showOn.indexOf("focus")!=-1&&i.showOn.splice(i.showOn.indexOf("focus"),1),i.disableTimeRanges.length>0){for(var r in i.disableTimeRanges)i.disableTimeRanges[r]=[T(i.disableTimeRanges[r][0]),T(i.disableTimeRanges[r][1])];i.disableTimeRanges=i.disableTimeRanges.sort(function(e,i){return e[0]-i[0]});for(var r=i.disableTimeRanges.length-1;r>0;r--)i.disableTimeRanges[r][0]<=i.disableTimeRanges[r-1][1]&&(i.disableTimeRanges[r-1]=[Math.min(i.disableTimeRanges[r][0],i.disableTimeRanges[r-1][0]),Math.max(i.disableTimeRanges[r][1],i.disableTimeRanges[r-1][1])],i.disableTimeRanges.splice(r,1))}return i}function r(i){var t=i.data("timepicker-settings"),r=i.data("timepicker-list");if(r&&r.length&&(r.remove(),i.data("timepicker-list",!1)),t.useSelect){r=e("",{"class":"ui-timepicker-select"});var s=r}else{r=e("
",{"class":"ui-timepicker-list"});var s=e("",{"class":"ui-timepicker-wrapper",tabindex:-1});s.css({display:"none",position:"absolute"}).append(r)}if(t.noneOption)if(t.noneOption===!0&&(t.noneOption=t.useSelect?"Time...":"None"),e.isArray(t.noneOption)){for(var c in t.noneOption)if(parseInt(c,10)==c){var u=n(t.noneOption[c],t.useSelect);r.append(u)}}else{var u=n(t.noneOption,t.useSelect);r.append(u)}if(t.className&&s.addClass(t.className),(null!==t.minTime||null!==t.durationTime)&&t.showDuration){"function"==typeof t.step?"function":t.step;s.addClass("ui-timepicker-with-duration"),s.addClass("ui-timepicker-step-"+t.step)}var p=t.minTime;"function"==typeof t.durationTime?p=T(t.durationTime()):null!==t.durationTime&&(p=t.durationTime);var d=null!==t.minTime?t.minTime:0,f=null!==t.maxTime?t.maxTime:d+w-1;f",{value:R});S.text(R)}else{var S=e("");S.addClass(D%w",{"class":"ui-timepicker-duration"});F.text(" ("+M+")"),S.append(F)}}y=h[y][1]&&(y+=1),h[y]&&D>=h[y][0]&&D",{value:a,"class":n,text:r}):e("",{"class":n,text:r}).data("time",String(a))}function a(e,i){if(e=i.roundingFunction(e,i),null!==e)return v(e,i)}function s(i){if(i.target!=window){var t=e(i.target);t.closest(".ui-timepicker-input").length||t.closest(".ui-timepicker-wrapper").length||(H.hide(),e(document).unbind(".ui-timepicker"),e(window).unbind(".ui-timepicker"))}}function o(e){var i=e.data("timepicker-settings");return(window.navigator.msMaxTouchPoints||"ontouchstart"in document)&&i.disableTouchKeyboard}function c(i,t,r){if(!r&&0!==r)return!1;var n=i.data("timepicker-settings"),a=!1,r=n.roundingFunction(r,n);return t.find("li").each(function(i,t){var n=e(t);if("number"==typeof n.data("time"))return n.data("time")==r?(a=n,!1):void 0}),a}function l(e,i){i.find("li").removeClass("ui-timepicker-selected");var t=e.data("timepicker-settings"),r=T(p(e),t);if(null!==r){var n=c(e,i,r);if(n){var a=n.offset().top-i.offset().top;(a+n.outerHeight()>i.outerHeight()||a<0)&&i.scrollTop(i.scrollTop()+n.position().top-n.outerHeight()),(t.forceRoundTime||n.data("time")===r)&&n.addClass("ui-timepicker-selected")}}}function u(i,t){if("timepicker"!=t){var r=e(this);if(""===this.value)return void m(r,null,t);if(!r.is(":focus")||i&&"change"==i.type){var n=r.data("timepicker-settings"),a=T(this.value,n);if(null===a)return void r.trigger("timeFormatError");var s=!1;if(null!==n.minTime&&null!==n.maxTime&&(an.maxTime)&&(s=!0),e.each(n.disableTimeRanges,function(){if(a>=this[0]&&a0)return a=e(t),!1}),a.addClass("ui-timepicker-selected")),!1;case 40:return a=n.find(".ui-timepicker-selected"),0===a.length?(n.find("li").each(function(i,t){if(e(t).position().top>0)return a=e(t),!1}),a.addClass("ui-timepicker-selected")):a.is(":last-child")||(a.removeClass("ui-timepicker-selected"),a.next().addClass("ui-timepicker-selected"),a.next().position().top+2*a.outerHeight()>n.outerHeight()&&n.scrollTop(n.scrollTop()+a.outerHeight())),!1;case 27:n.find("li").removeClass("ui-timepicker-selected"),H.hide();break;case 9:H.hide();break;default:return!0}}function h(t){var r=e(this),n=r.data("timepicker-list"),a=r.data("timepicker-settings");if(!n||!i(n)||a.disableTextInput)return!0;if("paste"===t.type||"cut"===t.type)return void setTimeout(function(){a.typeaheadHighlight?l(r,n):n.hide()},0);switch(t.keyCode){case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:case 104:case 105:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 65:case 77:case 80:case 186:case 8:case 46:a.typeaheadHighlight?l(r,n):n.hide()}}function g(e){var i=e.data("timepicker-settings"),t=e.data("timepicker-list"),r=null,n=t.find(".ui-timepicker-selected");return!n.hasClass("ui-timepicker-disabled")&&(n.length&&(r=n.data("time")),null!==r&&("string"!=typeof r&&(r=v(r,i)),m(e,r,"select")),!0)}function k(e,i){e=Math.abs(e);var t,r,n=Math.round(e/60),a=[];return n<60?a=[n,y.mins]:(t=Math.floor(n/60),r=n%60,30==i&&30==r&&(t+=y.decimal+5),a.push(t),a.push(1==t?y.hr:y.hrs),30!=i&&r&&(a.push(r),a.push(y.mins))),a.join(" ")}function v(i,t){if("number"!=typeof i)return null;var r=parseInt(i%60),n=parseInt(i/60%60),a=parseInt(i/3600%24),s=new Date(1970,0,2,a,n,r,0);if(isNaN(s.getTime()))return null;if("function"===e.type(t.timeFormat))return t.timeFormat(s);for(var o,c,l="",u=0;u11?y.pm:y.am;break;case"A":l+=s.getHours()>11?y.PM:y.AM;break;case"g":o=s.getHours()%12,l+=0===o?"12":o;break;case"G":o=s.getHours(),i===w&&(o=t.show2400?24:0),l+=o;break;case"h":o=s.getHours()%12,0!==o&&o<10&&(o="0"+o),l+=0===o?"12":o;break;case"H":o=s.getHours(),i===w&&(o=t.show2400?24:0),l+=o>9?o:"0"+o;break;case"i":var n=s.getMinutes();l+=n>9?n:"0"+n;break;case"s":r=s.getSeconds(),l+=r>9?r:"0"+r;break;case"\\":u++,l+=t.timeFormat.charAt(u);break;default:l+=c}return l}function T(e,i){if(""===e||null===e)return null;if("object"==typeof e)return 3600*e.getHours()+60*e.getMinutes()+e.getSeconds();if("string"!=typeof e)return e;e=e.toLowerCase().replace(/[\s\.]/g,""),"a"!=e.slice(-1)&&"p"!=e.slice(-1)||(e+="m");var t="("+y.am.replace(".","")+"|"+y.pm.replace(".","")+"|"+y.AM.replace(".","")+"|"+y.PM.replace(".","")+")?",r=new RegExp("^"+t+"([0-9]?[0-9])\\W?([0-5][0-9])?\\W?([0-5][0-9])?"+t+"$"),n=e.match(r);if(!n)return null;var a=parseInt(1*n[2],10),s=n[1]||n[5],o=a,c=1*n[3]||0,l=1*n[4]||0;if(a<=12&&s){var u=s==y.pm||s==y.PM;o=12==a?u?12:0:a+(u?12:0)}else if(i){var p=3600*a+60*c+l;if(p>=w+(i.show2400?1:0)){if(i.wrapHours===!1)return null;o=a%24}}var m=3600*o+60*c+l;if(a<12&&!s&&i&&i._twelveHourTime&&i.scrollDefault){var d=m-i.scrollDefault();d<0&&d>=w/-2&&(m=(m+w/2)%w)}return m}function b(e,i){return e==w&&i.show2400?e:e%w}var w=86400,y={am:"am",pm:"pm",AM:"AM",PM:"PM",decimal:".",mins:"mins",hr:"hr",hrs:"hrs"},x={appendTo:"body",className:null,closeOnWindowScroll:!1,disableTextInput:!1,disableTimeRanges:[],disableTouchKeyboard:!1,durationTime:null,forceRoundTime:!1,maxTime:null,minTime:null,noneOption:!1,orientation:"l",roundingFunction:function(e,i){if(null===e)return null;if("number"!=typeof i.step)return e;var t=e%(60*i.step),r=i.minTime||0;return t-=r%(60*i.step),t>=30*i.step?e+=60*i.step-t:e-=t,b(e,i)},scrollDefault:null,selectOnBlur:!1,show2400:!1,showDuration:!1,showOn:["click","focus"],showOnFocus:!0,step:30,stopScrollPropagation:!1,timeFormat:"g:ia",typeaheadHighlight:!0,useSelect:!1,wrapHours:!0},H={init:function(i){return this.each(function(){var n=e(this),a=[];for(var s in x)n.data(s)&&(a[s]=n.data(s));var o=e.extend({},x,i,a);if(o.lang&&(y=e.extend(y,o.lang)),o=t(o),n.data("timepicker-settings",o),n.addClass("ui-timepicker-input"),o.useSelect)r(n);else{if(n.prop("autocomplete","off"),o.showOn)for(var c in o.showOn)n.on(o.showOn[c]+".timepicker",H.show);n.on("change.timepicker",u),n.on("keydown.timepicker",f),n.on("keyup.timepicker",h),o.disableTextInput&&n.on("keydown.timepicker",d),n.on("cut.timepicker",h),n.on("paste.timepicker",h),u.call(n.get(0),null,"initial")}})},show:function(t){var n=e(this),a=n.data("timepicker-settings");if(t&&t.preventDefault(),a.useSelect)return void n.data("timepicker-list").focus();o(n)&&n.blur();var u=n.data("timepicker-list");if(!n.prop("readonly")&&(u&&0!==u.length&&"function"!=typeof a.durationTime||(r(n),u=n.data("timepicker-list")),!i(u))){n.data("ui-timepicker-value",n.val()),l(n,u),H.hide(),u.show();var m={};a.orientation.match(/r/)?m.left=n.offset().left+n.outerWidth()-u.outerWidth()+parseInt(u.css("marginLeft").replace("px",""),10):m.left=n.offset().left+parseInt(u.css("marginLeft").replace("px",""),10);var d;d=a.orientation.match(/t/)?"t":a.orientation.match(/b/)?"b":n.offset().top+n.outerHeight(!0)+u.outerHeight()>e(window).height()+e(window).scrollTop()?"t":"b","t"==d?(u.addClass("ui-timepicker-positioned-top"),m.top=n.offset().top-u.outerHeight()+parseInt(u.css("marginTop").replace("px",""),10)):(u.removeClass("ui-timepicker-positioned-top"),m.top=n.offset().top+n.outerHeight()+parseInt(u.css("marginTop").replace("px",""),10)),u.offset(m);var f=u.find(".ui-timepicker-selected");if(!f.length){var h=T(p(n));null!==h?f=c(n,u,h):a.scrollDefault&&(f=c(n,u,a.scrollDefault()))}if(f.length&&!f.hasClass("ui-timepicker-disabled")||(f=u.find("li:not(.ui-timepicker-disabled):first")),f&&f.length){var g=u.scrollTop()+f.position().top-f.outerHeight();u.scrollTop(g)}else u.scrollTop(0);return a.stopScrollPropagation&&e(document).on("wheel.ui-timepicker",".ui-timepicker-wrapper",function(i){i.preventDefault();var t=e(this).scrollTop();e(this).scrollTop(t+i.originalEvent.deltaY)}),e(document).on("touchstart.ui-timepicker mousedown.ui-timepicker",s),e(window).on("resize.ui-timepicker",s),a.closeOnWindowScroll&&e(document).on("scroll.ui-timepicker",s),n.trigger("showTimepicker"),this}},hide:function(t){var r=e(this),n=r.data("timepicker-settings");return n&&n.useSelect&&r.blur(),e(".ui-timepicker-wrapper").each(function(){var t=e(this);if(i(t)){var r=t.data("timepicker-input"),n=r.data("timepicker-settings");n&&n.selectOnBlur&&g(r),t.hide(),r.trigger("hideTimepicker")}}),this},option:function(i,n){return"string"==typeof i&&"undefined"==typeof n?e(this).data("timepicker-settings")[i]:this.each(function(){var a=e(this),s=a.data("timepicker-settings"),o=a.data("timepicker-list");"object"==typeof i?s=e.extend(s,i):"string"==typeof i&&(s[i]=n),s=t(s),a.data("timepicker-settings",s),u.call(a.get(0),{type:"change"},"initial"),o&&(o.remove(),a.data("timepicker-list",!1)),s.useSelect&&r(a)})},getSecondsFromMidnight:function(){return T(p(this))},getTime:function(e){var i=this,t=p(i);if(!t)return null;var r=T(t);if(null===r)return null;e||(e=new Date);var n=new Date(e);return n.setHours(r/3600),n.setMinutes(r%3600/60),n.setSeconds(r%60),n.setMilliseconds(0),n},isVisible:function(){var e=this,t=e.data("timepicker-list");return!(!t||!i(t))},setTime:function(e){var i=this,t=i.data("timepicker-settings");if(t.forceRoundTime)var r=a(T(e),t);else var r=v(T(e),t);return e&&null===r&&t.noneOption&&(r=e),m(i,r,"initial"),u.call(i.get(0),{type:"change"},"initial"),i.data("timepicker-list")&&l(i,i.data("timepicker-list")),this},remove:function(){var e=this;if(e.hasClass("ui-timepicker-input")){var i=e.data("timepicker-settings");return e.removeAttr("autocomplete","off"),e.removeClass("ui-timepicker-input"),e.removeData("timepicker-settings"),e.off(".timepicker"),e.data("timepicker-list")&&e.data("timepicker-list").remove(),i.useSelect&&e.show(),e.removeData("timepicker-list"),this}}};e.fn.timepicker=function(i){return this.length?H[i]?this.hasClass("ui-timepicker-input")?H[i].apply(this,Array.prototype.slice.call(arguments,1)):this:"object"!=typeof i&&i?void e.error("Method "+i+" does not exist on jQuery.timepicker"):H.init.apply(this,arguments):this}});
+//# sourceMappingURL=jquery.timepicker.js.map
diff --git a/public/js/jquery.timepicker.js.map b/public/js/jquery.timepicker.js.map
new file mode 100644
index 0000000000..8a4f4de9c1
--- /dev/null
+++ b/public/js/jquery.timepicker.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery.timepicker.js"],"names":["factory","exports","module","require","define","amd","jQuery","$","_isVisible","elem","el","offsetWidth","offsetHeight","_parseSettings","settings","minTime","_time2int","maxTime","durationTime","scrollDefault","roundingFunction","Date","val","type","timeFormat","match","_twelveHourTime","showOnFocus","showOn","indexOf","splice","disableTimeRanges","length","i","sort","a","b","Math","min","max","_render","self","data","list","remove","useSelect","class","wrapped_list","tabindex","css","display","position","append","noneOption","isArray","parseInt","noneElement","_generateNoneElement","className","addClass","showDuration","step","durStart","start","end","_ONE_DAY","show2400","dr","drCur","drLen","stepFunc","j","timeInt","timeString","_int2time","row","value","text","_moduloSeconds","durationString","_int2duration","duration","prop","_roundAndFormatTime","on","this","trigger","_setTimeValue","hide","after","appendTo","_setSelected","e","off","methods","show","_hideKeyboard","focus","find","removeClass","_selectValue","optionValue","label","error","String","seconds","_closeHandler","target","window","closest","document","unbind","navigator","msMaxTouchPoints","disableTouchKeyboard","_findRow","out","each","obj","jObj","timeValue","_getTimeValue","selected","topDelta","offset","top","outerHeight","scrollTop","forceRoundTime","_formatValue","origin","is","rangeError","roundSeconds","prettyTime","source","_disableTextInputHandler","keyCode","preventDefault","_keydownhandler","call","get","apply","prev","next","_keyuphandler","disableTextInput","setTimeout","typeaheadHighlight","cursor","hasClass","abs","hours","mins","minutes","round","_lang","floor","decimal","push","hr","hrs","join","time","isNaN","getTime","hour","code","output","charAt","getHours","pm","am","PM","AM","getMinutes","getSeconds","toLowerCase","replace","slice","ampmRegex","pattern","RegExp","ampm","isPm","t","wrapHours","delta","_DEFAULTS","closeOnWindowScroll","orientation","selectOnBlur","stopScrollPropagation","init","options","attributeOptions","key","extend","lang","blur","listOffset","left","outerWidth","verticalOrientation","height","topOffset","currentScroll","originalEvent","deltaY","option","getSecondsFromMidnight","relative_date","time_string","setHours","setMinutes","setSeconds","setMilliseconds","isVisible","setTime","removeAttr","removeData","fn","timepicker","method","Array","prototype","arguments"],"mappings":"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","file":"jquery.timepicker.js","sourcesContent":["/*!\n * jquery-timepicker v1.11.12 - A jQuery timepicker plugin inspired by Google Calendar. It supports both mouse and keyboard navigation.\n * Copyright (c) 2015 Jon Thornton - http://jonthornton.github.com/jquery-timepicker/\n * License: MIT\n */\n\n\n(function (factory) {\n if (typeof exports === \"object\" && exports &&\n typeof module === \"object\" && module && module.exports === exports) {\n // Browserify. Attach to jQuery module.\n factory(require(\"jquery\"));\n } else if (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\tvar _ONE_DAY = 86400;\n\tvar _lang = {\n\t\tam: 'am',\n\t\tpm: 'pm',\n\t\tAM: 'AM',\n\t\tPM: 'PM',\n\t\tdecimal: '.',\n\t\tmins: 'mins',\n\t\thr: 'hr',\n\t\thrs: 'hrs'\n\t};\n\n\tvar _DEFAULTS = {\n\t\tappendTo: 'body',\n\t\tclassName: null,\n\t\tcloseOnWindowScroll: false,\n\t\tdisableTextInput: false,\n\t\tdisableTimeRanges: [],\n\t\tdisableTouchKeyboard: false,\n\t\tdurationTime: null,\n\t\tforceRoundTime: false,\n\t\tmaxTime: null,\n\t\tminTime: null,\n\t\tnoneOption: false,\n\t\torientation: 'l',\n\t\troundingFunction: function(seconds, settings) {\n\t\t\tif (seconds === null) {\n\t\t\t\treturn null;\n\t\t\t} else if (typeof settings.step !== \"number\") {\n\t\t\t\t// TODO: nearest fit irregular steps\n\t\t\t\treturn seconds;\n\t\t\t} else {\n\t\t\t\tvar offset = seconds % (settings.step*60); // step is in minutes\n\n\t\t\t\tvar start = settings.minTime || 0;\n\n // adjust offset by start mod step so that the offset is aligned not to 00:00 but to the start\n offset -= start % (settings.step * 60);\n\n\t\t\t\tif (offset >= settings.step*30) {\n\t\t\t\t\t// if offset is larger than a half step, round up\n\t\t\t\t\tseconds += (settings.step*60) - offset;\n\t\t\t\t} else {\n\t\t\t\t\t// round down\n\t\t\t\t\tseconds -= offset;\n\t\t\t\t}\n\n\t\t\t\treturn _moduloSeconds(seconds, settings);\n\t\t\t}\n\t\t},\n\t\tscrollDefault: null,\n\t\tselectOnBlur: false,\n\t\tshow2400: false,\n\t\tshowDuration: false,\n\t\tshowOn: ['click', 'focus'],\n\t\tshowOnFocus: true,\n\t\tstep: 30,\n\t\tstopScrollPropagation: false,\n\t\ttimeFormat: 'g:ia',\n\t\ttypeaheadHighlight: true,\n\t\tuseSelect: false,\n\t\twrapHours: true\n\t};\n\n\tvar methods = {\n\t\tinit: function(options)\n\t\t{\n\t\t\treturn this.each(function()\n\t\t\t{\n\t\t\t\tvar self = $(this);\n\n\t\t\t\t// pick up settings from data attributes\n\t\t\t\tvar attributeOptions = [];\n\t\t\t\tfor (var key in _DEFAULTS) {\n\t\t\t\t\tif (self.data(key)) {\n\t\t\t\t\t\tattributeOptions[key] = self.data(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar settings = $.extend({}, _DEFAULTS, options, attributeOptions);\n\n\t\t\t\tif (settings.lang) {\n\t\t\t\t\t_lang = $.extend(_lang, settings.lang);\n\t\t\t\t}\n\n\t\t\t\tsettings = _parseSettings(settings);\n\t\t\t\tself.data('timepicker-settings', settings);\n\t\t\t\tself.addClass('ui-timepicker-input');\n\n\t\t\t\tif (settings.useSelect) {\n\t\t\t\t\t_render(self);\n\t\t\t\t} else {\n\t\t\t\t\tself.prop('autocomplete', 'off');\n\t\t\t\t\tif (settings.showOn) {\n\t\t\t\t\t\tfor (var i in settings.showOn) {\n\t\t\t\t\t\t\tself.on(settings.showOn[i]+'.timepicker', methods.show);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself.on('change.timepicker', _formatValue);\n\t\t\t\t\tself.on('keydown.timepicker', _keydownhandler);\n\t\t\t\t\tself.on('keyup.timepicker', _keyuphandler);\n\t\t\t\t\tif (settings.disableTextInput) {\n\t\t\t\t\t\tself.on('keydown.timepicker', _disableTextInputHandler);\n\t\t\t\t\t}\n \t\t\tself.on('cut.timepicker', _keyuphandler);\n \t\t\tself.on('paste.timepicker', _keyuphandler);\n\n\t\t\t\t\t_formatValue.call(self.get(0), null, 'initial');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tshow: function(e)\n\t\t{\n\t\t\tvar self = $(this);\n\t\t\tvar settings = self.data('timepicker-settings');\n\n\t\t\tif (e) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tif (settings.useSelect) {\n\t\t\t\tself.data('timepicker-list').focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_hideKeyboard(self)) {\n\t\t\t\t// block the keyboard on mobile devices\n\t\t\t\tself.blur();\n\t\t\t}\n\n\t\t\tvar list = self.data('timepicker-list');\n\n\t\t\t// check if input is readonly\n\t\t\tif (self.prop('readonly')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// check if list needs to be rendered\n\t\t\tif (!list || list.length === 0 || typeof settings.durationTime === 'function') {\n\t\t\t\t_render(self);\n\t\t\t\tlist = self.data('timepicker-list');\n\t\t\t}\n\n\t\t\tif (_isVisible(list)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.data('ui-timepicker-value', self.val());\n\t\t\t_setSelected(self, list);\n\n\t\t\t// make sure other pickers are hidden\n\t\t\tmethods.hide();\n\n\t\t\t// position the dropdown relative to the input\n\t\t\tlist.show();\n\t\t\tvar listOffset = {};\n\n\t\t\tif (settings.orientation.match(/r/)) {\n\t\t\t\t// right-align the dropdown\n\t\t\t\tlistOffset.left = self.offset().left + self.outerWidth() - list.outerWidth() + parseInt(list.css('marginLeft').replace('px', ''), 10);\n\t\t\t} else {\n\t\t\t\t// left-align the dropdown\n\t\t\t\tlistOffset.left = self.offset().left + parseInt(list.css('marginLeft').replace('px', ''), 10);\n\t\t\t}\n\n\t\t\tvar verticalOrientation;\n\t\t\tif (settings.orientation.match(/t/)) {\n\t\t\t\tverticalOrientation = 't';\n\t\t\t} else if (settings.orientation.match(/b/)) {\n\t\t\t\tverticalOrientation = 'b';\n\t\t\t} else if ((self.offset().top + self.outerHeight(true) + list.outerHeight()) > $(window).height() + $(window).scrollTop()) {\n\t\t\t\tverticalOrientation = 't';\n\t\t\t} else {\n\t\t\t\tverticalOrientation = 'b';\n\t\t\t}\n\n\t\t\tif (verticalOrientation == 't') {\n\t\t\t\t// position the dropdown on top\n\t\t\t\tlist.addClass('ui-timepicker-positioned-top');\n\t\t\t\tlistOffset.top = self.offset().top - list.outerHeight() + parseInt(list.css('marginTop').replace('px', ''), 10);\n\t\t\t} else {\n\t\t\t\t// put it under the input\n\t\t\t\tlist.removeClass('ui-timepicker-positioned-top');\n\t\t\t\tlistOffset.top = self.offset().top + self.outerHeight() + parseInt(list.css('marginTop').replace('px', ''), 10);\n\t\t\t}\n\n\t\t\tlist.offset(listOffset);\n\n\t\t\t// position scrolling\n\t\t\tvar selected = list.find('.ui-timepicker-selected');\n\n\t\t\tif (!selected.length) {\n\t\t\t\tvar timeInt = _time2int(_getTimeValue(self));\n\t\t\t\tif (timeInt !== null) {\n\t\t\t\t\tselected = _findRow(self, list, timeInt);\n\t\t\t\t} else if (settings.scrollDefault) {\n\t\t\t\t\tselected = _findRow(self, list, settings.scrollDefault());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if not found or disabled, intelligently find first selectable element\n\t\t\tif (!selected.length || selected.hasClass('ui-timepicker-disabled')) {\n\t\t\t\tselected = list.find('li:not(.ui-timepicker-disabled):first');\n\t\t\t}\n\n\t\t\tif (selected && selected.length) {\n\t\t\t\tvar topOffset = list.scrollTop() + selected.position().top - selected.outerHeight();\n\t\t\t\tlist.scrollTop(topOffset);\n\t\t\t} else {\n\t\t\t\tlist.scrollTop(0);\n\t\t\t}\n\n\t\t\t// prevent scroll propagation\n\t\t\tif(settings.stopScrollPropagation) {\n\t\t\t\t$(document).on('wheel.ui-timepicker', '.ui-timepicker-wrapper', function(e){\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvar currentScroll = $(this).scrollTop();\n\t\t\t\t\t$(this).scrollTop(currentScroll + e.originalEvent.deltaY);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// attach close handlers\n\t\t\t$(document).on('touchstart.ui-timepicker mousedown.ui-timepicker', _closeHandler);\n\t\t\t$(window).on('resize.ui-timepicker', _closeHandler);\n\t\t\tif (settings.closeOnWindowScroll) {\n\t\t\t\t$(document).on('scroll.ui-timepicker', _closeHandler);\n\t\t\t}\n\n\t\t\tself.trigger('showTimepicker');\n\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(e)\n\t\t{\n\t\t\tvar self = $(this);\n\t\t\tvar settings = self.data('timepicker-settings');\n\n\t\t\tif (settings && settings.useSelect) {\n\t\t\t\tself.blur();\n\t\t\t}\n\n\t\t\t$('.ui-timepicker-wrapper').each(function() {\n\t\t\t\tvar list = $(this);\n\t\t\t\tif (!_isVisible(list)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar self = list.data('timepicker-input');\n\t\t\t\tvar settings = self.data('timepicker-settings');\n\n\t\t\t\tif (settings && settings.selectOnBlur) {\n\t\t\t\t\t_selectValue(self);\n\t\t\t\t}\n\n\t\t\t\tlist.hide();\n\t\t\t\tself.trigger('hideTimepicker');\n\t\t\t});\n\n\t\t\treturn this;\n\t\t},\n\n\t\toption: function(key, value)\n\t\t{\n\t\t\tif (typeof key == 'string' && typeof value == 'undefined') {\n\t\t\t\treturn $(this).data('timepicker-settings')[key];\n\t\t\t}\n\n\t\t\treturn this.each(function(){\n\t\t\t\tvar self = $(this);\n\t\t\t\tvar settings = self.data('timepicker-settings');\n\t\t\t\tvar list = self.data('timepicker-list');\n\n\t\t\t\tif (typeof key == 'object') {\n\t\t\t\t\tsettings = $.extend(settings, key);\n\t\t\t\t} else if (typeof key == 'string') {\n\t\t\t\t\tsettings[key] = value;\n\t\t\t\t}\n\n\t\t\t\tsettings = _parseSettings(settings);\n\n\t\t\t\tself.data('timepicker-settings', settings);\n\n\t\t\t\t_formatValue.call(self.get(0), {'type':'change'}, 'initial');\n\n\t\t\t\tif (list) {\n\t\t\t\t\tlist.remove();\n\t\t\t\t\tself.data('timepicker-list', false);\n\t\t\t\t}\n\n\t\t\t\tif (settings.useSelect) {\n\t\t\t\t\t_render(self);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tgetSecondsFromMidnight: function()\n\t\t{\n\t\t\treturn _time2int(_getTimeValue(this));\n\t\t},\n\n\t\tgetTime: function(relative_date)\n\t\t{\n\t\t\tvar self = this;\n\n\t\t\tvar time_string = _getTimeValue(self);\n\t\t\tif (!time_string) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar offset = _time2int(time_string);\n\t\t\tif (offset === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!relative_date) {\n\t\t\t\trelative_date = new Date();\n\t\t\t}\n\n\t\t\t// construct a Date from relative date, and offset's time\n\t\t\tvar time = new Date(relative_date);\n\t\t\ttime.setHours(offset / 3600);\n\t\t\ttime.setMinutes(offset % 3600 / 60);\n\t\t\ttime.setSeconds(offset % 60);\n\t\t\ttime.setMilliseconds(0);\n\n\t\t\treturn time;\n\t\t},\n\n\t\tisVisible: function() {\n\t\t\tvar self = this;\n\t\t\tvar list = self.data('timepicker-list');\n\t\t\treturn !!(list && _isVisible(list));\n\t\t},\n\n\t\tsetTime: function(value)\n\t\t{\n\t\t\tvar self = this;\n\t\t\tvar settings = self.data('timepicker-settings');\n\n\t\t\tif (settings.forceRoundTime) {\n\t\t\t\tvar prettyTime = _roundAndFormatTime(_time2int(value), settings)\n\t\t\t} else {\n\t\t\t\tvar prettyTime = _int2time(_time2int(value), settings);\n\t\t\t}\n\n\t\t\tif (value && prettyTime === null && settings.noneOption) {\n\t\t\t\tprettyTime = value;\n\t\t\t}\n\n\t\t\t_setTimeValue(self, prettyTime, 'initial');\n\t\t\t_formatValue.call(self.get(0), {'type':'change'}, 'initial');\n\n\t\t\tif (self.data('timepicker-list')) {\n\t\t\t\t_setSelected(self, self.data('timepicker-list'));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremove: function()\n\t\t{\n\t\t\tvar self = this;\n\n\t\t\t// check if this element is a timepicker\n\t\t\tif (!self.hasClass('ui-timepicker-input')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar settings = self.data('timepicker-settings');\n\t\t\tself.removeAttr('autocomplete', 'off');\n\t\t\tself.removeClass('ui-timepicker-input');\n\t\t\tself.removeData('timepicker-settings');\n\t\t\tself.off('.timepicker');\n\n\t\t\t// timepicker-list won't be present unless the user has interacted with this timepicker\n\t\t\tif (self.data('timepicker-list')) {\n\t\t\t\tself.data('timepicker-list').remove();\n\t\t\t}\n\n\t\t\tif (settings.useSelect) {\n\t\t\t\tself.show();\n\t\t\t}\n\n\t\t\tself.removeData('timepicker-list');\n\n\t\t\treturn this;\n\t\t}\n\t};\n\n\t// private methods\n\n\tfunction _isVisible(elem)\n\t{\n\t\tvar el = elem[0];\n\t\treturn el.offsetWidth > 0 && el.offsetHeight > 0;\n\t}\n\n\tfunction _parseSettings(settings)\n\t{\n\t\tif (settings.minTime) {\n\t\t\tsettings.minTime = _time2int(settings.minTime);\n\t\t}\n\n\t\tif (settings.maxTime) {\n\t\t\tsettings.maxTime = _time2int(settings.maxTime);\n\t\t}\n\n\t\tif (settings.durationTime && typeof settings.durationTime !== 'function') {\n\t\t\tsettings.durationTime = _time2int(settings.durationTime);\n\t\t}\n\n\t\tif (settings.scrollDefault == 'now') {\n\t\t\tsettings.scrollDefault = function() {\n\t\t\t\treturn settings.roundingFunction(_time2int(new Date()), settings);\n\t\t\t}\n\t\t} else if (settings.scrollDefault && typeof settings.scrollDefault != 'function') {\n\t\t\tvar val = settings.scrollDefault;\n\t\t\tsettings.scrollDefault = function() {\n\t\t\t\treturn settings.roundingFunction(_time2int(val), settings);\n\t\t\t}\n\t\t} else if (settings.minTime) {\n\t\t\tsettings.scrollDefault = function() {\n\t\t\t\treturn settings.roundingFunction(settings.minTime, settings);\n\t\t\t}\n\t\t}\n\n\t\tif ($.type(settings.timeFormat) === \"string\" && settings.timeFormat.match(/[gh]/)) {\n\t\t\tsettings._twelveHourTime = true;\n\t\t}\n\n\t\tif (settings.showOnFocus === false && settings.showOn.indexOf('focus') != -1) {\n\t\t\tsettings.showOn.splice(settings.showOn.indexOf('focus'), 1);\n\t\t}\n\n\t\tif (settings.disableTimeRanges.length > 0) {\n\t\t\t// convert string times to integers\n\t\t\tfor (var i in settings.disableTimeRanges) {\n\t\t\t\tsettings.disableTimeRanges[i] = [\n\t\t\t\t\t_time2int(settings.disableTimeRanges[i][0]),\n\t\t\t\t\t_time2int(settings.disableTimeRanges[i][1])\n\t\t\t\t];\n\t\t\t}\n\n\t\t\t// sort by starting time\n\t\t\tsettings.disableTimeRanges = settings.disableTimeRanges.sort(function(a, b){\n\t\t\t\treturn a[0] - b[0];\n\t\t\t});\n\n\t\t\t// merge any overlapping ranges\n\t\t\tfor (var i = settings.disableTimeRanges.length-1; i > 0; i--) {\n\t\t\t\tif (settings.disableTimeRanges[i][0] <= settings.disableTimeRanges[i-1][1]) {\n\t\t\t\t\tsettings.disableTimeRanges[i-1] = [\n\t\t\t\t\t\tMath.min(settings.disableTimeRanges[i][0], settings.disableTimeRanges[i-1][0]),\n\t\t\t\t\t\tMath.max(settings.disableTimeRanges[i][1], settings.disableTimeRanges[i-1][1])\n\t\t\t\t\t];\n\t\t\t\t\tsettings.disableTimeRanges.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn settings;\n\t}\n\n\tfunction _render(self)\n\t{\n\t\tvar settings = self.data('timepicker-settings');\n\t\tvar list = self.data('timepicker-list');\n\n\t\tif (list && list.length) {\n\t\t\tlist.remove();\n\t\t\tself.data('timepicker-list', false);\n\t\t}\n\n\t\tif (settings.useSelect) {\n\t\t\tlist = $('', { 'class': 'ui-timepicker-select' });\n\t\t\tvar wrapped_list = list;\n\t\t} else {\n\t\t\tlist = $('', { 'class': 'ui-timepicker-list' });\n\n\t\t\tvar wrapped_list = $('', { 'class': 'ui-timepicker-wrapper', 'tabindex': -1 });\n\t\t\twrapped_list.css({'display':'none', 'position': 'absolute' }).append(list);\n\t\t}\n\n\t\tif (settings.noneOption) {\n\t\t\tif (settings.noneOption === true) {\n\t\t\t\tsettings.noneOption = (settings.useSelect) ? 'Time...' : 'None';\n\t\t\t}\n\n\t\t\tif ($.isArray(settings.noneOption)) {\n\t\t\t\tfor (var i in settings.noneOption) {\n\t\t\t\t\tif (parseInt(i, 10) == i){\n\t\t\t\t\t\tvar noneElement = _generateNoneElement(settings.noneOption[i], settings.useSelect);\n\t\t\t\t\t\tlist.append(noneElement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar noneElement = _generateNoneElement(settings.noneOption, settings.useSelect);\n\t\t\t\tlist.append(noneElement);\n\t\t\t}\n\t\t}\n\n\t\tif (settings.className) {\n\t\t\twrapped_list.addClass(settings.className);\n\t\t}\n\n\t\tif ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {\n\t\t\tvar stepval = typeof settings.step == 'function' ? 'function' : settings.step;\n\t\t\twrapped_list.addClass('ui-timepicker-with-duration');\n\t\t\twrapped_list.addClass('ui-timepicker-step-'+settings.step);\n\t\t}\n\n\t\tvar durStart = settings.minTime;\n\t\tif (typeof settings.durationTime === 'function') {\n\t\t\tdurStart = _time2int(settings.durationTime());\n\t\t} else if (settings.durationTime !== null) {\n\t\t\tdurStart = settings.durationTime;\n\t\t}\n\t\tvar start = (settings.minTime !== null) ? settings.minTime : 0;\n\t\tvar end = (settings.maxTime !== null) ? settings.maxTime : (start + _ONE_DAY - 1);\n\n\t\tif (end < start) {\n\t\t\t// make sure the end time is greater than start time, otherwise there will be no list to show\n\t\t\tend += _ONE_DAY;\n\t\t}\n\n\t\tif (end === _ONE_DAY-1 && $.type(settings.timeFormat) === \"string\" && settings.show2400) {\n\t\t\t// show a 24:00 option when using military time\n\t\t\tend = _ONE_DAY;\n\t\t}\n\n\t\tvar dr = settings.disableTimeRanges;\n\t\tvar drCur = 0;\n\t\tvar drLen = dr.length;\n\n\t\tvar stepFunc = settings.step;\n\t\tif (typeof stepFunc != 'function') {\n\t\t\tstepFunc = function() {\n\t\t\t\treturn settings.step;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i=start, j=0; i <= end; j++, i += stepFunc(j)*60) {\n\t\t\tvar timeInt = i;\n\t\t\tvar timeString = _int2time(timeInt, settings);\n\n\t\t\tif (settings.useSelect) {\n\t\t\t\tvar row = $('', { 'value': timeString });\n\t\t\t\trow.text(timeString);\n\t\t\t} else {\n\t\t\t\tvar row = $('');\n\t\t\t\trow.addClass((timeInt % _ONE_DAY) < (_ONE_DAY / 2) ? 'ui-timepicker-am' : 'ui-timepicker-pm');\n\t\t\t\trow.data('time', _moduloSeconds(timeInt, settings));\n\t\t\t\trow.text(timeString);\n\t\t\t}\n\n\t\t\tif ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {\n\t\t\t\tvar durationString = _int2duration(i - durStart, settings.step);\n\t\t\t\tif (settings.useSelect) {\n\t\t\t\t\trow.text(row.text()+' ('+durationString+')');\n\t\t\t\t} else {\n\t\t\t\t\tvar duration = $('', { 'class': 'ui-timepicker-duration' });\n\t\t\t\t\tduration.text(' ('+durationString+')');\n\t\t\t\t\trow.append(duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (drCur < drLen) {\n\t\t\t\tif (timeInt >= dr[drCur][1]) {\n\t\t\t\t\tdrCur += 1;\n\t\t\t\t}\n\n\t\t\t\tif (dr[drCur] && timeInt >= dr[drCur][0] && timeInt < dr[drCur][1]) {\n\t\t\t\t\tif (settings.useSelect) {\n\t\t\t\t\t\trow.prop('disabled', true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow.addClass('ui-timepicker-disabled');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlist.append(row);\n\t\t}\n\n\t\twrapped_list.data('timepicker-input', self);\n\t\tself.data('timepicker-list', wrapped_list);\n\n\t\tif (settings.useSelect) {\n\t\t\tif (self.val()) {\n\t\t\t\tlist.val(_roundAndFormatTime(_time2int(self.val()), settings));\n\t\t\t}\n\n\t\t\tlist.on('focus', function(){\n\t\t\t\t$(this).data('timepicker-input').trigger('showTimepicker');\n\t\t\t});\n\t\t\tlist.on('blur', function(){\n\t\t\t\t$(this).data('timepicker-input').trigger('hideTimepicker');\n\t\t\t});\n\t\t\tlist.on('change', function(){\n\t\t\t\t_setTimeValue(self, $(this).val(), 'select');\n\t\t\t});\n\n\t\t\t_setTimeValue(self, list.val(), 'initial');\n\t\t\tself.hide().after(list);\n\t\t} else {\n\t\t\tvar appendTo = settings.appendTo;\n\t\t\tif (typeof appendTo === 'string') {\n\t\t\t\tappendTo = $(appendTo);\n\t\t\t} else if (typeof appendTo === 'function') {\n\t\t\t\tappendTo = appendTo(self);\n\t\t\t}\n\t\t\tappendTo.append(wrapped_list);\n\t\t\t_setSelected(self, list);\n\n\t\t\tlist.on('mousedown click', 'li', function(e) {\n\n\t\t\t\t// hack: temporarily disable the focus handler\n\t\t\t\t// to deal with the fact that IE fires 'focus'\n\t\t\t\t// events asynchronously\n\t\t\t\tself.off('focus.timepicker');\n\t\t\t\tself.on('focus.timepicker-ie-hack', function(){\n\t\t\t\t\tself.off('focus.timepicker-ie-hack');\n\t\t\t\t\tself.on('focus.timepicker', methods.show);\n\t\t\t\t});\n\n\t\t\t\tif (!_hideKeyboard(self)) {\n\t\t\t\t\tself[0].focus();\n\t\t\t\t}\n\n\t\t\t\t// make sure only the clicked row is selected\n\t\t\t\tlist.find('li').removeClass('ui-timepicker-selected');\n\t\t\t\t$(this).addClass('ui-timepicker-selected');\n\n\t\t\t\tif (_selectValue(self)) {\n\t\t\t\t\tself.trigger('hideTimepicker');\n\n\t\t\t\t\tlist.on('mouseup.timepicker click.timepicker', 'li', function(e) {\n\t\t\t\t\t\tlist.off('mouseup.timepicker click.timepicker');\n\t\t\t\t\t\twrapped_list.hide();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction _generateNoneElement(optionValue, useSelect)\n\t{\n\t\tvar label, className, value;\n\n\t\tif (typeof optionValue == 'object') {\n\t\t\tlabel = optionValue.label;\n\t\t\tclassName = optionValue.className;\n\t\t\tvalue = optionValue.value;\n\t\t} else if (typeof optionValue == 'string') {\n\t\t\tlabel = optionValue;\n\t\t} else {\n\t\t\t$.error('Invalid noneOption value');\n\t\t}\n\n\t\tif (useSelect) {\n\t\t\treturn $('', {\n\t\t\t\t\t'value': value,\n\t\t\t\t\t'class': className,\n\t\t\t\t\t'text': label\n\t\t\t\t});\n\t\t} else {\n\t\t\treturn $('', {\n\t\t\t\t\t'class': className,\n\t\t\t\t\t'text': label\n\t\t\t\t}).data('time', String(value));\n\t\t}\n\t}\n\n\tfunction _roundAndFormatTime(seconds, settings)\n\t{\n\t\tseconds = settings.roundingFunction(seconds, settings);\n\t\tif (seconds !== null) {\n\t\t\treturn _int2time(seconds, settings);\n\t\t}\n\t}\n\n\t// event handler to decide whether to close timepicker\n\tfunction _closeHandler(e)\n\t{\n\t\tif (e.target == window) {\n\t\t\t// mobile Chrome fires focus events against window for some reason\n\t\t\treturn;\n\t\t}\n\n\t\tvar target = $(e.target);\n\n\t\tif (target.closest('.ui-timepicker-input').length || target.closest('.ui-timepicker-wrapper').length) {\n\t\t\t// active timepicker was focused. ignore\n\t\t\treturn;\n\t\t}\n\n\t\tmethods.hide();\n\t\t$(document).unbind('.ui-timepicker');\n\t\t$(window).unbind('.ui-timepicker');\n\t}\n\n\tfunction _hideKeyboard(self)\n\t{\n\t\tvar settings = self.data('timepicker-settings');\n\t\treturn ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && settings.disableTouchKeyboard);\n\t}\n\n\tfunction _findRow(self, list, value)\n\t{\n\t\tif (!value && value !== 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar settings = self.data('timepicker-settings');\n\t\tvar out = false;\n\t\tvar value = settings.roundingFunction(value, settings);\n\n\t\t// loop through the menu items\n\t\tlist.find('li').each(function(i, obj) {\n\t\t\tvar jObj = $(obj);\n\t\t\tif (typeof jObj.data('time') != 'number') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (jObj.data('time') == value) {\n\t\t\t\tout = jObj;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn out;\n\t}\n\n\tfunction _setSelected(self, list)\n\t{\n\t\tlist.find('li').removeClass('ui-timepicker-selected');\n\n\t\tvar settings = self.data('timepicker-settings');\n\t\tvar timeValue = _time2int(_getTimeValue(self), settings);\n\t\tif (timeValue === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar selected = _findRow(self, list, timeValue);\n\t\tif (selected) {\n\n\t\t\tvar topDelta = selected.offset().top - list.offset().top;\n\n\t\t\tif (topDelta + selected.outerHeight() > list.outerHeight() || topDelta < 0) {\n\t\t\t\tlist.scrollTop(list.scrollTop() + selected.position().top - selected.outerHeight());\n\t\t\t}\n\n\t\t\tif (settings.forceRoundTime || selected.data('time') === timeValue) {\n\t\t\t\tselected.addClass('ui-timepicker-selected');\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction _formatValue(e, origin)\n\t{\n\t\tif (origin == 'timepicker') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar self = $(this);\n\n\t\tif (this.value === '') {\n\t\t\t_setTimeValue(self, null, origin);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.is(':focus') && (!e || e.type != 'change')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar settings = self.data('timepicker-settings');\n\t\tvar seconds = _time2int(this.value, settings);\n\n\t\tif (seconds === null) {\n\t\t\tself.trigger('timeFormatError');\n\t\t\treturn;\n\t\t}\n\n\t\tvar rangeError = false;\n\t\t// check that the time in within bounds\n\t\tif ((settings.minTime !== null && settings.maxTime !== null)\n\t\t\t&& (seconds < settings.minTime || seconds > settings.maxTime)) {\n\t\t\trangeError = true;\n\t\t}\n\n\t\t// check that time isn't within disabled time ranges\n\t\t$.each(settings.disableTimeRanges, function(){\n\t\t\tif (seconds >= this[0] && seconds < this[1]) {\n\t\t\t\trangeError = true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\tif (settings.forceRoundTime) {\n\t\t\tvar roundSeconds = settings.roundingFunction(seconds, settings);\n\t\t\tif (roundSeconds != seconds) {\n\t\t\t\tseconds = roundSeconds;\n\t\t\t\torigin = null;\n\t\t\t}\n\t\t}\n\n\t\tvar prettyTime = _int2time(seconds, settings);\n\n\t\tif (rangeError) {\n\t\t\tif (_setTimeValue(self, prettyTime, 'error') || e && e.type == 'change') {\n\t\t\t\tself.trigger('timeRangeError');\n\t\t\t}\n\t\t} else {\n\t\t\t_setTimeValue(self, prettyTime, origin);\n\t\t}\n\t}\n\n\tfunction _getTimeValue(self)\n\t{\n\t\tif (self.is('input')) {\n\t\t\treturn self.val();\n\t\t} else {\n\t\t\t// use the element's data attributes to store values\n\t\t\treturn self.data('ui-timepicker-value');\n\t\t}\n\t}\n\n\tfunction _setTimeValue(self, value, source)\n\t{\n\t\tif (self.is('input')) {\n\t\t\tself.val(value);\n\n\t\t\tvar settings = self.data('timepicker-settings');\n\t\t\tif (settings.useSelect && source != 'select') {\n\t\t\t\tself.data('timepicker-list').val(_roundAndFormatTime(_time2int(value), settings));\n\t\t\t}\n\t\t}\n\n\t\tif (self.data('ui-timepicker-value') != value) {\n\t\t\tself.data('ui-timepicker-value', value);\n\t\t\tif (source == 'select') {\n\t\t\t\tself.trigger('selectTime').trigger('changeTime').trigger('change', 'timepicker');\n\t\t\t} else if (['error', 'initial'].indexOf(source) == -1) {\n\t\t\t\tself.trigger('changeTime');\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tif (['error', 'initial'].indexOf(source) == -1) {\n\t\t\t\tself.trigger('selectTime');\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/*\n\t* Filter freeform input\n\t*/\n\tfunction _disableTextInputHandler(e)\n\t{\n\t\tswitch (e.keyCode) {\n\t\t\tcase 13: // return\n\t\t\tcase 9: //tab\n\t\t\t\treturn;\n\n\t\t\tdefault:\n\t\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\t/*\n\t* Keyboard navigation via arrow keys\n\t*/\n\tfunction _keydownhandler(e)\n\t{\n\t\tvar self = $(this);\n\t\tvar list = self.data('timepicker-list');\n\n\t\tif (!list || !_isVisible(list)) {\n\t\t\tif (e.keyCode == 40) {\n\t\t\t\t// show the list!\n\t\t\t\tmethods.show.call(self.get(0));\n\t\t\t\tlist = self.data('timepicker-list');\n\t\t\t\tif (!_hideKeyboard(self)) {\n\t\t\t\t\tself.focus();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\tcase 13: // return\n\t\t\t\tif (_selectValue(self)) {\n\t\t\t\t\t_formatValue.call(self.get(0), {'type':'change'});\n\t\t\t\t\tmethods.hide.apply(this);\n\t\t\t\t}\n\n\t\t\t\te.preventDefault();\n\t\t\t\treturn false;\n\n\t\t\tcase 38: // up\n\t\t\t\tvar selected = list.find('.ui-timepicker-selected');\n\n\t\t\t\tif (!selected.length) {\n\t\t\t\t\tlist.find('li').each(function(i, obj) {\n\t\t\t\t\t\tif ($(obj).position().top > 0) {\n\t\t\t\t\t\t\tselected = $(obj);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tselected.addClass('ui-timepicker-selected');\n\n\t\t\t\t} else if (!selected.is(':first-child')) {\n\t\t\t\t\tselected.removeClass('ui-timepicker-selected');\n\t\t\t\t\tselected.prev().addClass('ui-timepicker-selected');\n\n\t\t\t\t\tif (selected.prev().position().top < selected.outerHeight()) {\n\t\t\t\t\t\tlist.scrollTop(list.scrollTop() - selected.outerHeight());\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\tcase 40: // down\n\t\t\t\tselected = list.find('.ui-timepicker-selected');\n\n\t\t\t\tif (selected.length === 0) {\n\t\t\t\t\tlist.find('li').each(function(i, obj) {\n\t\t\t\t\t\tif ($(obj).position().top > 0) {\n\t\t\t\t\t\t\tselected = $(obj);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tselected.addClass('ui-timepicker-selected');\n\t\t\t\t} else if (!selected.is(':last-child')) {\n\t\t\t\t\tselected.removeClass('ui-timepicker-selected');\n\t\t\t\t\tselected.next().addClass('ui-timepicker-selected');\n\n\t\t\t\t\tif (selected.next().position().top + 2*selected.outerHeight() > list.outerHeight()) {\n\t\t\t\t\t\tlist.scrollTop(list.scrollTop() + selected.outerHeight());\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\tcase 27: // escape\n\t\t\t\tlist.find('li').removeClass('ui-timepicker-selected');\n\t\t\t\tmethods.hide();\n\t\t\t\tbreak;\n\n\t\t\tcase 9: //tab\n\t\t\t\tmethods.hide();\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\t/*\n\t*\tTime typeahead\n\t*/\n\tfunction _keyuphandler(e)\n\t{\n\t\tvar self = $(this);\n\t\tvar list = self.data('timepicker-list');\n\t\tvar settings = self.data('timepicker-settings');\n\n\t\tif (!list || !_isVisible(list) || settings.disableTextInput) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (e.type === 'paste' || e.type === 'cut') {\n\t\t \tsetTimeout(function () {\n\t\t\t\tif (settings.typeaheadHighlight) {\n\t\t\t \t\t_setSelected(self, list);\n\t\t\t\t} else {\n\t\t\t \t\tlist.hide();\n\t\t\t\t}\n\t\t \t}, 0);\n\t\t \treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\tcase 96: // numpad numerals\n\t\t\tcase 97:\n\t\t\tcase 98:\n\t\t\tcase 99:\n\t\t\tcase 100:\n\t\t\tcase 101:\n\t\t\tcase 102:\n\t\t\tcase 103:\n\t\t\tcase 104:\n\t\t\tcase 105:\n\t\t\tcase 48: // numerals\n\t\t\tcase 49:\n\t\t\tcase 50:\n\t\t\tcase 51:\n\t\t\tcase 52:\n\t\t\tcase 53:\n\t\t\tcase 54:\n\t\t\tcase 55:\n\t\t\tcase 56:\n\t\t\tcase 57:\n\t\t\tcase 65: // a\n\t\t\tcase 77: // m\n\t\t\tcase 80: // p\n\t\t\tcase 186: // colon\n\t\t\tcase 8: // backspace\n\t\t\tcase 46: // delete\n\t\t\t\tif (settings.typeaheadHighlight) {\n\t\t\t\t\t_setSelected(self, list);\n\t\t\t\t} else {\n\t\t\t\t\tlist.hide();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction _selectValue(self)\n\t{\n\t\tvar settings = self.data('timepicker-settings');\n\t\tvar list = self.data('timepicker-list');\n\t\tvar timeValue = null;\n\n\t\tvar cursor = list.find('.ui-timepicker-selected');\n\n\t\tif (cursor.hasClass('ui-timepicker-disabled')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (cursor.length) {\n\t\t\t// selected value found\n\t\t\ttimeValue = cursor.data('time');\n\t\t}\n\n\t\tif (timeValue !== null) {\n\t\t\tif (typeof timeValue != 'string') {\n\t\t\t\ttimeValue = _int2time(timeValue, settings);\n\t\t\t}\n\n\t\t\t_setTimeValue(self, timeValue, 'select');\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction _int2duration(seconds, step)\n\t{\n\t\tseconds = Math.abs(seconds);\n\t\tvar minutes = Math.round(seconds/60),\n\t\t\tduration = [],\n\t\t\thours, mins;\n\n\t\tif (minutes < 60) {\n\t\t\t// Only show (x mins) under 1 hour\n\t\t\tduration = [minutes, _lang.mins];\n\t\t} else {\n\t\t\thours = Math.floor(minutes/60);\n\t\t\tmins = minutes%60;\n\n\t\t\t// Show decimal notation (eg: 1.5 hrs) for 30 minute steps\n\t\t\tif (step == 30 && mins == 30) {\n\t\t\t\thours += _lang.decimal + 5;\n\t\t\t}\n\n\t\t\tduration.push(hours);\n\t\t\tduration.push(hours == 1 ? _lang.hr : _lang.hrs);\n\n\t\t\t// Show remainder minutes notation (eg: 1 hr 15 mins) for non-30 minute steps\n\t\t\t// and only if there are remainder minutes to show\n\t\t\tif (step != 30 && mins) {\n\t\t\t\tduration.push(mins);\n\t\t\t\tduration.push(_lang.mins);\n\t\t\t}\n\t\t}\n\n\t\treturn duration.join(' ');\n\t}\n\n\tfunction _int2time(timeInt, settings)\n\t{\n\t\tif (typeof timeInt != 'number') {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar seconds = parseInt(timeInt%60)\n\t\t\t, minutes = parseInt((timeInt/60)%60)\n\t\t\t, hours = parseInt((timeInt/(60*60))%24);\n\n\t\tvar time = new Date(1970, 0, 2, hours, minutes, seconds, 0);\n\n\t\tif (isNaN(time.getTime())) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ($.type(settings.timeFormat) === \"function\") {\n\t\t\treturn settings.timeFormat(time);\n\t\t}\n\n\t\tvar output = '';\n\t\tvar hour, code;\n\t\tfor (var i=0; i 11) ? _lang.pm : _lang.am;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'A':\n\t\t\t\t\toutput += (time.getHours() > 11) ? _lang.PM : _lang.AM;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'g':\n\t\t\t\t\thour = time.getHours() % 12;\n\t\t\t\t\toutput += (hour === 0) ? '12' : hour;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'G':\n\t\t\t\t\thour = time.getHours();\n\t\t\t\t\tif (timeInt === _ONE_DAY) hour = settings.show2400 ? 24 : 0;\n\t\t\t\t\toutput += hour;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'h':\n\t\t\t\t\thour = time.getHours() % 12;\n\n\t\t\t\t\tif (hour !== 0 && hour < 10) {\n\t\t\t\t\t\thour = '0'+hour;\n\t\t\t\t\t}\n\n\t\t\t\t\toutput += (hour === 0) ? '12' : hour;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'H':\n\t\t\t\t\thour = time.getHours();\n\t\t\t\t\tif (timeInt === _ONE_DAY) hour = settings.show2400 ? 24 : 0;\n\t\t\t\t\toutput += (hour > 9) ? hour : '0'+hour;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'i':\n\t\t\t\t\tvar minutes = time.getMinutes();\n\t\t\t\t\toutput += (minutes > 9) ? minutes : '0'+minutes;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 's':\n\t\t\t\t\tseconds = time.getSeconds();\n\t\t\t\t\toutput += (seconds > 9) ? seconds : '0'+seconds;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase '\\\\':\n\t\t\t\t\t// escape character; add the next character and skip ahead\n\t\t\t\t\ti++;\n\t\t\t\t\toutput += settings.timeFormat.charAt(i);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\toutput += code;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tfunction _time2int(timeString, settings)\n\t{\n\t\tif (timeString === '' || timeString === null) return null;\n\t\tif (typeof timeString == 'object') {\n\t\t\treturn timeString.getHours()*3600 + timeString.getMinutes()*60 + timeString.getSeconds();\n\t\t}\n\t\tif (typeof timeString != 'string') {\n\t\t\treturn timeString;\n\t\t}\n\n\t\ttimeString = timeString.toLowerCase().replace(/[\\s\\.]/g, '');\n\n\t\t// if the last character is an \"a\" or \"p\", add the \"m\"\n\t\tif (timeString.slice(-1) == 'a' || timeString.slice(-1) == 'p') {\n\t\t\ttimeString += 'm';\n\t\t}\n\n\t\tvar ampmRegex = '(' +\n\t\t\t_lang.am.replace('.', '')+'|' +\n\t\t\t_lang.pm.replace('.', '')+'|' +\n\t\t\t_lang.AM.replace('.', '')+'|' +\n\t\t\t_lang.PM.replace('.', '')+')?';\n\n\t\t// try to parse time input\n\t\tvar pattern = new RegExp('^'+ampmRegex+'([0-9]?[0-9])\\\\W?([0-5][0-9])?\\\\W?([0-5][0-9])?'+ampmRegex+'$');\n\n\t\tvar time = timeString.match(pattern);\n\t\tif (!time) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar hour = parseInt(time[2]*1, 10);\n\t\tvar ampm = time[1] || time[5];\n\t\tvar hours = hour;\n\t\tvar minutes = ( time[3]*1 || 0 );\n\t\tvar seconds = ( time[4]*1 || 0 );\n\n\t\tif (hour <= 12 && ampm) {\n\t\t\tvar isPm = (ampm == _lang.pm || ampm == _lang.PM);\n\n\t\t\tif (hour == 12) {\n\t\t\t\thours = isPm ? 12 : 0;\n\t\t\t} else {\n\t\t\t\thours = (hour + (isPm ? 12 : 0));\n\t\t\t}\n\t\t} else if (settings) {\n\t\t\tvar t = hour * 3600 + minutes * 60 + seconds;\n\t\t\tif (t >= _ONE_DAY + (settings.show2400 ? 1 : 0)) {\n\t\t\t\tif (settings.wrapHours === false) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\thours = hour % 24;\n\t\t\t}\n\t\t}\n\n\t\tvar timeInt = hours*3600 + minutes*60 + seconds;\n\n\t\t// if no am/pm provided, intelligently guess based on the scrollDefault\n\t\tif (hour < 12 && !ampm && settings && settings._twelveHourTime && settings.scrollDefault) {\n\t\t\tvar delta = timeInt - settings.scrollDefault();\n\t\t\tif (delta < 0 && delta >= _ONE_DAY / -2) {\n\t\t\t\ttimeInt = (timeInt + (_ONE_DAY / 2)) % _ONE_DAY;\n\t\t\t}\n\t\t}\n\n\t\treturn timeInt;\n\t}\n\n\tfunction _pad2(n) {\n\t\treturn (\"0\" + n).slice(-2);\n\t}\n\n\tfunction _moduloSeconds(seconds, settings) {\n\t\tif (seconds == _ONE_DAY && settings.show2400) {\n\t\t\treturn seconds;\n\t\t}\n\n\t\treturn seconds%_ONE_DAY;\n\t}\n\n\t// Plugin entry\n\t$.fn.timepicker = function(method)\n\t{\n\t\tif (!this.length) return this;\n\t\tif (methods[method]) {\n\t\t\t// check if this element is a timepicker\n\t\t\tif (!this.hasClass('ui-timepicker-input')) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t\telse if(typeof method === \"object\" || !method) { return methods.init.apply(this, arguments); }\n\t\telse { $.error(\"Method \"+ method + \" does not exist on jQuery.timepicker\"); }\n\t};\n}));\n"]}
\ No newline at end of file
diff --git a/resources/views/tasks/time_tracker.blade.php b/resources/views/tasks/time_tracker.blade.php
index 7c2cb2c3c2..9589b4c73f 100644
--- a/resources/views/tasks/time_tracker.blade.php
+++ b/resources/views/tasks/time_tracker.blade.php
@@ -4,6 +4,8 @@
@parent
+
+
@stop
@@ -108,13 +110,20 @@
bottom: 0;
width: 6px;
content: "";
- background-color: #36c157;
+ xbackground-color: #36c157; /* green */
+ background-color: orange; /* orange */
}
body {
margin-bottom: 60px;
}
+ .times-table td {
+ xmargin: 0px !important;
+ xpadding: 0px !important;
+ xpadding-bottom: 10px !important;
+ }
+
.footer {
position: fixed;
bottom: 0;
@@ -191,9 +200,62 @@
->data_bind("dropdown: selectedTask().project_id")
->label(trans('texts.project')) !!}
+
{!! Former::textarea('description')
->data_bind("value: selectedTask().description")
->rows(4) !!}
+
+
+
+
+
+
+
+
+
+ {!! Former::text('date')
+ ->data_bindx('timepicker: startTime')
+ ->raw() !!}
+ |
+
+ {!! Former::text('start_time')
+ ->data_bind('timepicker: startTime')
+ ->raw() !!}
+ |
+
+ {!! Former::text('end_time')
+ ->data_bind('timepicker: endTime')
+ ->raw() !!}
+ |
+
+ {!! Former::text('duration')
+ ->raw() !!}
+ |
+
+
+
+
+
@@ -393,6 +455,38 @@
}, 1000 * 60 * 15);
}
+ ko.bindingHandlers.timepicker = {
+ init: function (element, valueAccessor, allBindingsAccessor) {
+ var options = allBindingsAccessor().dropdownOptions|| {};
+ var value = ko.utils.unwrapObservable(valueAccessor());
+ var options = {
+ scrollDefault: 'now',
+ showDuration: true,
+ step: 15,
+ };
+ $(element).timepicker(options);
+
+ ko.utils.registerEventHandler(element, "change", function () {
+ var value = valueAccessor();
+ value($(element).val());
+ });
+
+ /*
+ var id = (value && value.public_id) ? value.public_id() : (value && value.id) ? value.id() : value ? value : false;
+ if (id) $(element).val(id);
+ */
+ },
+ update: function (element, valueAccessor) {
+ var value = ko.utils.unwrapObservable(valueAccessor());
+ var field = $(element).attr('name');
+ if (field == 'start_time') {
+ $input = $(element).closest('td').next('td').find('input').show();
+ $input.timepicker('option', 'durationTime', $(element).val());
+ }
+ }
+ };
+
+
$(function() {
// setup clients and project comboboxes