2015-07-14 13:45:54 -07:00

9 lines
8.3 KiB
JavaScript

/**
* angular-strap
* @version v2.2.1 - 2015-03-10
* @link http://mgcrea.github.io/angular-strap
* @author Olivier Louvignes (olivier@mg-crea.com)
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
"use strict";angular.module("mgcrea.ngStrap.timepicker",["mgcrea.ngStrap.helpers.dateParser","mgcrea.ngStrap.helpers.dateFormatter","mgcrea.ngStrap.tooltip"]).provider("$timepicker",function(){var e=this.defaults={animation:"am-fade",prefixClass:"timepicker",placement:"bottom-left",template:"timepicker/timepicker.tpl.html",trigger:"focus",container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:"date",timeFormat:"shortTime",timezone:null,modelTimeFormat:null,autoclose:!1,minTime:-1/0,maxTime:+1/0,length:5,hourStep:1,minuteStep:5,roundDisplay:!1,iconUp:"glyphicon glyphicon-chevron-up",iconDown:"glyphicon glyphicon-chevron-down",arrowBehavior:"pager"};this.$get=["$window","$document","$rootScope","$sce","$dateFormatter","$tooltip","$timeout",function(t,n,a,i,o,r,u){function s(t,n,a){function i(e){var t=6e4*p.minuteStep;return new Date(Math.floor(e.getTime()/t)*t)}function s(e,n){if(t[0].createTextRange){var a=t[0].createTextRange();a.collapse(!0),a.moveStart("character",e),a.moveEnd("character",n),a.select()}else t[0].setSelectionRange?t[0].setSelectionRange(e,n):angular.isUndefined(t[0].selectionStart)&&(t[0].selectionStart=e,t[0].selectionEnd=n)}function m(){t[0].focus()}var c=r(t,angular.extend({},e,a)),g=a.scope,p=c.$options,$=c.$scope,f=p.lang,h=function(e,t,n){return o.formatDate(e,t,f,n)},w=0,v=p.roundDisplay?i(new Date):new Date,y=n.$dateValue||v,D={hour:y.getHours(),meridian:y.getHours()<12,minute:y.getMinutes(),second:y.getSeconds(),millisecond:y.getMilliseconds()},T=o.getDatetimeFormat(p.timeFormat,f),S=o.hoursFormat(T),V=o.timeSeparator(T),k=o.minutesFormat(T),M=o.showAM(T);$.$iconUp=p.iconUp,$.$iconDown=p.iconDown,$.$select=function(e,t){c.select(e,t)},$.$moveIndex=function(e,t){c.$moveIndex(e,t)},$.$switchMeridian=function(e){c.switchMeridian(e)},c.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())?(c.$date=e,angular.extend(D,{hour:e.getHours(),minute:e.getMinutes(),second:e.getSeconds(),millisecond:e.getMilliseconds()}),c.$build()):c.$isBuilt||c.$build()},c.select=function(e,t,a){(!n.$dateValue||isNaN(n.$dateValue.getTime()))&&(n.$dateValue=new Date(1970,0,1)),angular.isDate(e)||(e=new Date(e)),0===t?n.$dateValue.setHours(e.getHours()):1===t&&n.$dateValue.setMinutes(e.getMinutes()),n.$setViewValue(angular.copy(n.$dateValue)),n.$render(),p.autoclose&&!a&&u(function(){c.hide(!0)})},c.switchMeridian=function(e){if(n.$dateValue&&!isNaN(n.$dateValue.getTime())){var t=(e||n.$dateValue).getHours();n.$dateValue.setHours(12>t?t+12:t-12),n.$setViewValue(angular.copy(n.$dateValue)),n.$render()}},c.$build=function(){var e,t,n=$.midIndex=parseInt(p.length/2,10),a=[];for(e=0;e<p.length;e++)t=new Date(1970,0,1,D.hour-(n-e)*p.hourStep),a.push({date:t,label:h(t,S),selected:c.$date&&c.$isSelected(t,0),disabled:c.$isDisabled(t,0)});var i,o=[];for(e=0;e<p.length;e++)i=new Date(1970,0,1,0,D.minute-(n-e)*p.minuteStep),o.push({date:i,label:h(i,k),selected:c.$date&&c.$isSelected(i,1),disabled:c.$isDisabled(i,1)});var r=[];for(e=0;e<p.length;e++)r.push([a[e],o[e]]);$.rows=r,$.showAM=M,$.isAM=(c.$date||a[n].date).getHours()<12,$.timeSeparator=V,c.$isBuilt=!0},c.$isSelected=function(e,t){return c.$date?0===t?e.getHours()===c.$date.getHours():1===t?e.getMinutes()===c.$date.getMinutes():void 0:!1},c.$isDisabled=function(e,t){var n;return 0===t?n=e.getTime()+6e4*D.minute:1===t&&(n=e.getTime()+36e5*D.hour),n<1*p.minTime||n>1*p.maxTime},$.$arrowAction=function(e,t){"picker"===p.arrowBehavior?c.$setTimeByStep(e,t):c.$moveIndex(e,t)},c.$setTimeByStep=function(e,t){{var n=new Date(c.$date),a=n.getHours(),i=(h(n,S).length,n.getMinutes());h(n,k).length}0===t?n.setHours(a-parseInt(p.hourStep,10)*e):n.setMinutes(i-parseInt(p.minuteStep,10)*e),c.select(n,t,!0)},c.$moveIndex=function(e,t){var n;0===t?(n=new Date(1970,0,1,D.hour+e*p.length,D.minute),angular.extend(D,{hour:n.getHours()})):1===t&&(n=new Date(1970,0,1,D.hour,D.minute+e*p.length*p.minuteStep),angular.extend(D,{minute:n.getMinutes()})),c.$build()},c.$onMouseDown=function(e){if("input"!==e.target.nodeName.toLowerCase()&&e.preventDefault(),e.stopPropagation(),d){var t=angular.element(e.target);"button"!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler("click")}},c.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return c.hide(!0);var t=new Date(c.$date),n=t.getHours(),a=h(t,S).length,i=t.getMinutes(),o=h(t,k).length,r=/(37|39)/.test(e.keyCode),u=2+1*M;r&&(37===e.keyCode?w=1>w?u-1:w-1:39===e.keyCode&&(w=u-1>w?w+1:0));var l=[0,a];0===w?(38===e.keyCode?t.setHours(n-parseInt(p.hourStep,10)):40===e.keyCode&&t.setHours(n+parseInt(p.hourStep,10)),a=h(t,S).length,l=[0,a]):1===w?(38===e.keyCode?t.setMinutes(i-parseInt(p.minuteStep,10)):40===e.keyCode&&t.setMinutes(i+parseInt(p.minuteStep,10)),o=h(t,k).length,l=[a+1,a+1+o]):2===w&&(r||c.switchMeridian(),l=[a+1+o+1,a+1+o+3]),c.select(t,w,!0),s(l[0],l[1]),g.$digest()}};var b=c.init;c.init=function(){return l&&p.useNative?(t.prop("type","time"),void t.css("-webkit-appearance","textfield")):(d&&(t.prop("type","text"),t.attr("readonly","true"),t.on("click",m)),void b())};var N=c.destroy;c.destroy=function(){l&&p.useNative&&t.off("click",m),N()};var x=c.show;c.show=function(){x(),u(function(){c.$element.on(d?"touchstart":"mousedown",c.$onMouseDown),p.keyboard&&t.on("keydown",c.$onKeyDown)},0,!1)};var F=c.hide;return c.hide=function(e){c.$isShown&&(c.$element.off(d?"touchstart":"mousedown",c.$onMouseDown),p.keyboard&&t.off("keydown",c.$onKeyDown),F(e))},c}var l=(angular.element(t.document.body),/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)),d="createTouch"in t.document&&l;return e.lang||(e.lang=o.getDefaultLocale()),s.defaults=e,s}]}).directive("bsTimepicker",["$window","$parse","$q","$dateFormatter","$dateParser","$timepicker",function(e,t,n,a,i,o){{var r=o.defaults,u=/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent);e.requestAnimationFrame||e.setTimeout}return{restrict:"EAC",require:"ngModel",link:function(e,t,n,s){function l(e){if(angular.isDate(e)){var t=isNaN(m.minTime)||new Date(e.getTime()).setFullYear(1970,0,1)>=m.minTime,n=isNaN(m.maxTime)||new Date(e.getTime()).setFullYear(1970,0,1)<=m.maxTime,a=t&&n;s.$setValidity("date",a),s.$setValidity("min",t),s.$setValidity("max",n),a&&(s.$dateValue=e)}}function d(){return!s.$dateValue||isNaN(s.$dateValue.getTime())?"":$(s.$dateValue,m.timeFormat)}var m={scope:e,controller:s};angular.forEach(["placement","container","delay","trigger","keyboard","html","animation","template","autoclose","timeType","timeFormat","timezone","modelTimeFormat","useNative","hourStep","minuteStep","length","arrowBehavior","iconUp","iconDown","id"],function(e){angular.isDefined(n[e])&&(m[e]=n[e])});var c=/^(false|0|)$/;angular.forEach(["roundDisplay"],function(e){angular.isDefined(n[e])&&(m[e]=!c.test(n[e]))}),n.bsShow&&e.$watch(n.bsShow,function(e){g&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(timepicker),?/i)),e===!0?g.show():g.hide())}),u&&(m.useNative||r.useNative)&&(m.timeFormat="HH:mm");var g=o(t,s,m);m=g.$options;var p=m.lang,$=function(e,t,n){return a.formatDate(e,t,p,n)},f=i({format:m.timeFormat,lang:p});angular.forEach(["minTime","maxTime"],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){g.$options[e]=f.getTimeForAttribute(e,t),!isNaN(g.$options[e])&&g.$build(),l(s.$dateValue)})}),e.$watch(n.ngModel,function(){g.update(s.$dateValue)},!0),s.$parsers.unshift(function(e){var t;if(!e)return s.$setValidity("date",!0),null;var n=angular.isDate(e)?e:f.parse(e,s.$dateValue);return!n||isNaN(n.getTime())?void s.$setValidity("date",!1):(l(n),"string"===m.timeType?(t=f.timezoneOffsetAdjust(n,m.timezone,!0),$(t,m.modelTimeFormat||m.timeFormat)):(t=f.timezoneOffsetAdjust(s.$dateValue,m.timezone,!0),"number"===m.timeType?t.getTime():"unix"===m.timeType?t.getTime()/1e3:"iso"===m.timeType?t.toISOString():new Date(t)))}),s.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:"string"===m.timeType?f.parse(e,null,m.modelTimeFormat):new Date("unix"===m.timeType?1e3*e:e),s.$dateValue=f.timezoneOffsetAdjust(t,m.timezone),d()}),s.$render=function(){t.val(d())},e.$on("$destroy",function(){g&&g.destroy(),m=null,g=null})}}}]);
//# sourceMappingURL=timepicker.min.js.map