{"version":3,"sources":["angular-material-datetimepicker.js"],"names":["ngMaterialDatePicker","moment","moduleName","VIEW_STATES","DATE","HOUR","MINUTE","css","el","name","angular","element","window","getComputedStyle","template","module","factory","default_params","date","time","minutes","seconds","format","minDate","maxDate","currentDate","lang","navigator","userLanguage","language","weekStart","shortTime","cancelText","okText","amText","pmText","todayBtn","todayText","disableDates","weekDays","disableParentScroll","autoOk","editInput","clickOutsideToClose","minuteSteps","showIcon","showClear","templateUrl","targetEvent","openFrom","closeTo","dayOfWeekLen","hasBackdrop","params","i","hasOwnProperty","directive","$mdDialog","$timeout","$compile","$parse","restrict","require","scope","ngModelOptions","ngChange","showTodaysDate","link","attrs","ngModel","isOn","offset","dateOfTheDay","undefined","isString","*","debounce","version","major","minor","$options","createChild","getOption","timezone","$formatters","push","value","m","isValid","$parsers","utcOffset","_tzm","$setValidity","isBefore","isAfter","_isUTC","toDate","openCalendar","e","preventDefault","blur","parent","removeClass","options","isUndefined","dialogOptions","controller","PluginController","controllerAs","locals","document","body","bindToController","skipHide","multiple","show","then","v","$setViewValue","$setDirty","isSame","on","addClass","calendarButton","ngDisabled","clearButton","after","openCalendarDiag","clear","$render","focus","$q","deferred","defer","resolve","reject","promise","mdcDefaultParams","this","currentView","_dialog","_attachedEvents","VIEWS","copy","meridien","extend","init","$inject","prototype","timeMode","dateMode","initDates","start","currentNearestMinute","nearestMin","Math","round","minute","second","millisecond","that","_dateParam","input","fallback","ret","isDefined","locale","isDate","x","getTime","isMoment","map","selectDate","initDate","initHours","initMinutes","initSeconds","SECOND","isAfterMinDate","checkHour","checkMinute","_return","_minDate","_date","hour","parseInt","isBeforeMaxDate","checkTime","_maxDate","isInDisableDates","dut","indexOf","isWeekDay","isoWeekday","calendarStart","isPM","incrementMonth","amount","isNextMonthVisible","isPreviousMonthVisible","add","incrementYear","isNextYearVisible","isPreviousYearVisible","openMenu","$mdMenu","ev","open","monthsAvailable","monthsArr","curMonth","month","endOf","startOf","selectMonth","yearsAvailable","len","startYear","yearsArr","year","selectYear","isHourAvailable","convertHours","isMinuteAvailable","_curmin","isSecondAvailable","today","ok","hide","cancel","selectMonthBefore","subtract","selectMonthAfter","selectYearBefore","selectYearAfter","selectAM","selectPM","h","okBtn","MONTHS_IN_ALL","Date","getFullYear","MONTHS","currentMonthIndex","low","picker","$scope","calendar","$onInit","days","length","toString","week","high","months","slice","topIndex","getItemAtIndex","index","floor","monthObj","generateMonthCalendar","$watch","val2","val1","nDate","startOfMonth","iNumDay","daysInMonth","iWeek","daysTmp","slices","ceil","j","toDay","substring","isInRange","isSelectedDay","isDateOfTheDay","buildCalendarContent","tbody","querySelector","cal","tbodyHtml","forEach","weekDay","scopeRef","html","join","idx","oldIdx","minuteMode","mode","secondMode","componentRoot","isTouchSupported","EVENTS","POINTER_DOWN","POINTER_UP","POINTER_MOVE","onMoveEvent","closestTarget","currentTarget","closest","clientRect","getClientRects","changedTouches","offsetWidth","pageX","left","y","pageY","top","offsetHeight","ray","sqrt","pow","deg","atan2","PI","val","divider","pointAvailable","setTimeDegRay","off","$on","animateHands","s","rotateElement","WebkitTransform","-moz-transform","-ms-transform","transform","setCurrentValue","nbH","currentValue","tmp","setTime","point","unWatcher","querySelectorAll","clock","pickerEl","w","pL","replace","pR","pT","mL","mR","mT","clockWidth","r","points","sin","cos","style","margin-left","margin-top","display","points24","j24","h24","left24","top24","clockCenter","centerWidth","centerHeight","_hL","_mL","_sL","height","marginTop","exec","isElectron","process","type","define","amd","exports","global"],"mappings":"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","file":"angular-material-datetimepicker.min.js","sourcesContent":["(function () {\r\n 'use strict';\r\n\r\n function ngMaterialDatePicker(moment) {\r\n var moduleName = \"ngMaterialDatePicker\";\r\n var mdAccesTime = 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMDAwMDAwIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiLz4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIuNSA3SDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ii8+PC9zdmc+';\r\n var mdCalendar = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTkgM2gtMVYxaC0ydjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY4aDE0djExek03IDEwaDV2NUg3eiIvPjwvc3ZnPg==';\r\n var VIEW_STATES = {DATE: 0, HOUR: 1, MINUTE: 2};\r\n\r\n var css = function (el, name) {\r\n el = angular.element(el);\r\n return ('getComputedStyle' in window) ? window.getComputedStyle(el[0])[name] : el.css(name);\r\n };\r\n\r\n var template =\r\n '' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
{{picker.currentNearestMinute().format(\"dddd\")}}
' +\r\n '
{{picker.params.shortTime?picker.currentDate.format(\"A\"):\" \"}}
' +\r\n '
' +\r\n ' ×' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
{{picker.currentDate.format(\"MMM\")|uppercase}}
' +\r\n ' ' +\r\n ' ' +\r\n ' {{itemMonth}}' +\r\n ' ' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
{{picker.currentDate.format(\"DD\")}}
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
{{picker.currentDate.format(\"YYYY\")}}
' +\r\n ' ' +\r\n ' ' +\r\n ' {{itemYear}}' +\r\n ' ' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
'+\r\n '
' + //start time\r\n '
' +\r\n '
' +\r\n ' {{picker.currentNearestMinute().format(picker.params.shortTime ? \"hh\":\"HH\")}}:{{picker.currentNearestMinute().format(\"mm\")}}'+\r\n ' {{picker.currentNearestMinute().format(picker.params.shortTime ? \"hh\":\"HH\")}}:{{picker.currentNearestMinute().format(\"mm\")}}:{{picker.currentNearestMinute().format(\"ss\")}}'+\r\n ' {{picker.currentDate.format(\"A\")}}'+\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' {{::picker.params.amText}}' +\r\n '
' +\r\n '
' +\r\n ' {{picker.currentNearestMinute().format(picker.params.shortTime?\"hh\":\"HH\")}}:{{picker.currentNearestMinute().format(\"mm\")}}' +\r\n '
' +\r\n '
' +\r\n ' {{picker.currentNearestMinute().format(picker.params.shortTime?\"hh\":\"HH\")}}:{{picker.currentNearestMinute().format(\"mm\")}}:{{picker.currentNearestMinute().format(\"ss\")}}' +\r\n '
' +\r\n '
' +\r\n ' {{::picker.params.pmText}}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n ' {{::picker.params.todayText}}' +\r\n ' {{::picker.params.cancelText}}' +\r\n ' {{::picker.params.okText}}' +\r\n ' ' +\r\n '
';\r\n\r\n angular.module(moduleName, ['ngMaterial'])\r\n .factory('mdcDefaultParams', function () {\r\n var default_params = {\r\n date: true,\r\n time: true,\r\n minutes: true,\r\n seconds: false,\r\n format: 'YYYY-MM-DD',\r\n minDate: null,\r\n maxDate: null,\r\n currentDate: null,\r\n lang: window.navigator.userLanguage || window.navigator.language || 'en',\r\n weekStart: 0,\r\n shortTime: false,\r\n cancelText: 'Cancel',\r\n okText: 'OK',\r\n amText: 'AM',\r\n pmText: 'PM',\r\n todayBtn: true,\r\n todayText: 'Today',\r\n disableDates: [],\r\n weekDays: false,\r\n disableParentScroll: false,\r\n autoOk: false,\r\n editInput: false,\r\n clickOutsideToClose: false,\r\n minuteSteps: 5,\r\n showIcon: false,\r\n showClear: true,\r\n template: template,\r\n templateUrl: '',\r\n targetEvent: null,\r\n openFrom: null,\r\n closeTo: null,\r\n dayOfWeekLen: 1,\r\n hasBackdrop: true,\r\n };\r\n\r\n return function (params) {\r\n if (params) {\r\n for (var i in params) {\r\n if (default_params.hasOwnProperty(i) && params.hasOwnProperty(i)) default_params[i] = params[i];\r\n }\r\n }\r\n return default_params;\r\n };\r\n })\r\n .directive('mdcDatetimePicker', ['$mdDialog', '$timeout', '$compile', '$parse',\r\n function ($mdDialog, $timeout, $compile, $parse) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n scope: {\r\n currentDate: '=ngModel',\r\n ngModelOptions: '=',\r\n ngChange: '&',\r\n time: '=',\r\n date: '=',\r\n minutes: '=',\r\n seconds: '=',\r\n minDate: '=',\r\n maxDate: '=',\r\n disableDates: '=',\r\n weekDays: '=',\r\n shortTime: '=',\r\n weekStart: '=',\r\n format: '@',\r\n cancelText: '@',\r\n okText: '@',\r\n lang: '@',\r\n amText: '@',\r\n pmText: '@',\r\n showTodaysDate: '@',\r\n todayBtn: '=',\r\n todayText: '@',\r\n disableParentScroll: '=',\r\n autoOk: '=',\r\n editInput: '=',\r\n clickOutsideToClose: '=',\r\n minuteSteps: '=',\r\n showIcon: '=',\r\n showClear: '=',\r\n templateUrl: '@',\r\n dayOfWeekLen: '=',\r\n hasBackdrop: '='\r\n },\r\n link: function (scope, element, attrs, ngModel) {\r\n var isOn = false;\r\n if (!scope.format) {\r\n if (scope.date && scope.time && scope.seconds) scope.format = 'YYYY-MM-DD HH:mm:ss';\r\n else if (scope.date && scope.time) scope.format = 'YYYY-MM-DD HH:mm';\r\n else if (scope.date) scope.format = 'YYYY-MM-DD';\r\n else scope.format = 'HH:mm';\r\n }\r\n\r\n var dateOfTheDay = null;\r\n if (scope.showTodaysDate !== undefined && scope.showTodaysDate !== \"false\") {\r\n dateOfTheDay = moment();\r\n }\r\n\r\n if (angular.isString(scope.currentDate) && scope.currentDate !== '') {\r\n scope.currentDate = moment(scope.currentDate, scope.format);\r\n }\r\n\r\n var offset;\r\n if (ngModel) {\r\n var ngModelOptions = {'*': '$inherit', debounce: 500};\r\n if (angular.version.major === 1 && angular.version.minor > 5) {\r\n ngModel.$options = ngModel.$options.createChild(ngModelOptions);\r\n if (ngModel.$options.getOption('timezone')) offset = ngModel.$options.getOption('timezone');\r\n } else {\r\n if (scope.ngModelOptions && scope.ngModelOptions.timezone) ngModelOptions.timezone = scope.ngModelOptions.timezone;\r\n ngModel.$options = ngModelOptions;\r\n if (ngModel.$options.timezone) offset = ngModel.$options.timezone;\r\n }\r\n if (offset==='utc' || offset==='UTC') offset = 0;\r\n \r\n ngModel.$formatters.push(function (value) {\r\n if (typeof value === 'undefined') return;\r\n var m = moment(value);\r\n return m.isValid() ? m.format(scope.format) : '';\r\n });\r\n \r\n ngModel.$parsers.push(function (value) {\r\n if (typeof value === 'undefined') return;\r\n \r\n var m = moment(value, scope.format);\r\n if (offset !== undefined) m.utcOffset(offset, m._tzm === undefined);\r\n if (scope.minDate) ngModel.$setValidity('min', !m.isBefore(scope.minDate));\r\n if (scope.maxDate) ngModel.$setValidity('max', !m.isAfter(scope.maxDate));\r\n ngModel.$setValidity('format', moment(value, scope.format, true).isValid());\r\n\r\n return m.isValid() ? (m._isUTC ? m : m.toDate()) : '';\r\n });\r\n \r\n }\r\n\r\n function openCalendar(e) {\r\n e.preventDefault();\r\n element.blur();\r\n element.parent().removeClass('md-input-focused');\r\n if (isOn) {\r\n return;\r\n }\r\n isOn = true;\r\n var options = {};\r\n for (var i in attrs) {\r\n if (scope.hasOwnProperty(i) && !angular.isUndefined(scope[i])) {\r\n options[i] = scope[i];\r\n }\r\n }\r\n options.currentDate = scope.currentDate;\r\n options.showTodaysDate = dateOfTheDay;\r\n\r\n var dialogOptions = {\r\n controller: PluginController,\r\n controllerAs: 'picker',\r\n locals: {options: options},\r\n openFrom: element,\r\n closeTo: element,\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n clickOutsideToClose: options.clickOutsideToClose || false,\r\n disableParentScroll: options.disableParentScroll || false,\r\n hasBackdrop: options.hasBackdrop === undefined ? true : options.hasBackdrop,\r\n skipHide: true,\r\n multiple: true,\r\n };\r\n\r\n if (!options.templateUrl) dialogOptions.template = template;\r\n else dialogOptions.templateUrl = options.templateUrl;\r\n \r\n $mdDialog.show(dialogOptions).then(function(v) {\r\n\r\n if (offset !== undefined) v.utcOffset(offset, true);\r\n\r\n scope.currentDate = v && !v._isUTC ? v.toDate() : v;\r\n ngModel.$setValidity('format', true);\r\n ngModel.$setViewValue(scope.currentDate);\r\n ngModel.$setDirty();\r\n isOn = false;\r\n\r\n if (!moment(scope.currentDate).isSame(options.currentDate)) {\r\n $timeout(scope.ngChange, 0);\r\n }\r\n\r\n element.parent().removeClass('md-input-focused');\r\n }, function () {\r\n isOn = false;\r\n element.parent().removeClass('md-input-focused');\r\n });\r\n }\r\n\r\n if (!scope.editInput) {\r\n if (scope.showIcon) {\r\n element.on('click', openCalendar);\r\n } else {\r\n element.on('focus', openCalendar);\r\n }\r\n }\r\n \r\n if (scope.showIcon) {\r\n element.addClass('dtp-no-msclear dtp-input');\r\n var calendarButton =\r\n '' +\r\n '' +\r\n '', clearButton = '';\r\n\r\n if (scope.showClear === undefined || scope.showClear) {\r\n clearButton = '';\r\n }\r\n \r\n element.after($compile(calendarButton + clearButton)(scope));\r\n\r\n scope.openCalendarDiag = function(e) {\r\n openCalendar(e);\r\n };\r\n\r\n scope.clear = function() {\r\n ngModel.$setViewValue(null);\r\n scope.currentDate = null;\r\n ngModel.$render();\r\n $timeout(function() {\r\n scope.ngChange();\r\n element[0].focus();\r\n }, 0, false);\r\n };\r\n }\r\n }\r\n };\r\n }])\r\n // Returns a service that opens a dialog when the attribute shown is called\r\n .factory('mdcDateTimeDialog', [\"$mdDialog\", \"$q\", function ($mdDialog, $q) {\r\n var service = {\r\n show: function (options) {\r\n var deferred = $q.defer();\r\n\r\n if (options.showTodaysDate !== undefined && options.showTodaysDate !== \"false\") options.showTodaysDate = moment();\r\n\r\n var dialogOptions = {\r\n controller: PluginController,\r\n controllerAs: 'picker',\r\n locals: {options: options},\r\n parent: angular.element(document.body),\r\n bindToController: true,\r\n clickOutsideToClose: options.clickOutsideToClose || false,\r\n disableParentScroll: options.disableParentScroll || false,\r\n skipHide: true,\r\n multiple: true,\r\n hasBackdrop: options.hasBackdrop === undefined ? true : options.hasBackdrop,\r\n targetEvent: options.targetEvent,\r\n openFrom: options.openFrom,\r\n closeTo: options.closeTo,\r\n };\r\n\r\n if (!options.templateUrl) dialogOptions.template = template;\r\n else dialogOptions.templateUrl = options.templateUrl;\r\n\r\n $mdDialog.show(dialogOptions).then(function (v) {\r\n deferred.resolve(v && !v._isUTC ? v.toDate() : v);\r\n }, function () {\r\n deferred.reject();\r\n });\r\n return deferred.promise;\r\n }\r\n };\r\n\r\n return service;\r\n }])\r\n ;\r\n\r\n var PluginController = function ($mdDialog, mdcDefaultParams) {\r\n this.currentView = VIEW_STATES.DATE;\r\n this._dialog = $mdDialog;\r\n\r\n this._attachedEvents = [];\r\n this.VIEWS = VIEW_STATES;\r\n this.params = angular.copy(mdcDefaultParams());\r\n this.meridien = 'AM';\r\n this.params = angular.extend(this.params, this.options);\r\n\r\n this.init();\r\n };\r\n\r\n PluginController.$inject = ['$mdDialog', 'mdcDefaultParams'];\r\n PluginController.prototype = {\r\n init: function () {\r\n this.timeMode = this.params.time && !this.params.date;\r\n this.dateMode = this.params.date;\r\n this.initDates();\r\n this.start();\r\n },\r\n currentNearestMinute: function () {\r\n var nearestMin = this.params.minuteSteps;\r\n if (nearestMin < 1 || nearestMin > 59) nearestMin = 1;\r\n\r\n var date = this.currentDate || moment();\r\n var minutes = (nearestMin * Math.round(date.minute() / nearestMin));\r\n if (minutes >= 60) minutes = 60 - nearestMin;\r\n\r\n var seconds;\r\n if (this.params.seconds) {\r\n seconds = date.second();\r\n if (seconds >= 60) seconds = 60 - 1;\r\n } else seconds = 0;\r\n\r\n return moment(date).minutes(minutes).seconds(seconds).millisecond(0);\r\n },\r\n initDates: function () {\r\n var that = this;\r\n var _dateParam = function (input, fallback) {\r\n var ret = null;\r\n if (angular.isDefined(input) && input !== null && input !== '') {\r\n if (angular.isString(input)) {\r\n if (typeof(that.params.format) !== 'undefined' && that.params.format !== null) {\r\n ret = moment(input, that.params.format).locale(that.params.lang);\r\n }\r\n else {\r\n ret = moment(input).locale(that.params.lang);\r\n }\r\n } else if (typeof input === 'number') {\r\n ret = moment(input).locale(that.params.lang);\r\n } else {\r\n if (angular.isDate(input)) {\r\n var x = input.getTime();\r\n ret = moment(x, \"x\").locale(that.params.lang);\r\n } else if (moment.isMoment(input)) {\r\n if (input.isValid()) ret = input;\r\n else ret = fallback;\r\n }\r\n }\r\n } else {\r\n ret = fallback;\r\n }\r\n return ret;\r\n };\r\n\r\n this.currentDate = _dateParam(this.params.currentDate, moment());\r\n this.currentDate = this.currentNearestMinute();\r\n this.minDate = _dateParam(this.params.minDate);\r\n this.maxDate = _dateParam(this.params.maxDate);\r\n this.disableDates = this.params.disableDates.map(function (x) {\r\n return moment(x).format('MMMM Do YYYY');\r\n });\r\n this.selectDate(this.currentDate);\r\n this.weekDays = this.params.weekDays;\r\n },\r\n initDate: function () {\r\n this.currentView = VIEW_STATES.DATE;\r\n },\r\n initHours: function () {\r\n this.currentView = VIEW_STATES.HOUR;\r\n },\r\n initMinutes: function () {\r\n this.currentView = VIEW_STATES.MINUTE;\r\n },\r\n initSeconds: function () {\r\n this.currentView = VIEW_STATES.SECOND;\r\n },\r\n isAfterMinDate: function (date, checkHour, checkMinute) {\r\n var _return = true;\r\n\r\n if (typeof(this.minDate) !== 'undefined' && this.minDate !== null) {\r\n var _minDate = moment(this.minDate);\r\n var _date = moment(date);\r\n\r\n if (!checkHour && !checkMinute) {\r\n _minDate.hour(0);\r\n _minDate.minute(0);\r\n\r\n _date.hour(0);\r\n _date.minute(0);\r\n }\r\n\r\n _minDate.second(0);\r\n _date.second(0);\r\n _minDate.millisecond(0);\r\n _date.millisecond(0);\r\n\r\n if (!checkMinute) {\r\n _date.minute(0);\r\n _minDate.minute(0);\r\n\r\n _return = (parseInt(_date.format(\"X\")) >= parseInt(_minDate.format(\"X\")));\r\n }\r\n else {\r\n _return = (parseInt(_date.format(\"X\")) >= parseInt(_minDate.format(\"X\")));\r\n }\r\n }\r\n\r\n return _return;\r\n },\r\n isBeforeMaxDate: function (date, checkTime, checkMinute) {\r\n var _return = true;\r\n\r\n if (typeof(this.maxDate) !== 'undefined' && this.maxDate !== null) {\r\n var _maxDate = moment(this.maxDate);\r\n var _date = moment(date);\r\n\r\n if (!checkTime && !checkMinute) {\r\n _maxDate.hour(0);\r\n _maxDate.minute(0);\r\n\r\n _date.hour(0);\r\n _date.minute(0);\r\n }\r\n\r\n _maxDate.second(0);\r\n _date.second(0);\r\n _maxDate.millisecond(0);\r\n _date.millisecond(0);\r\n\r\n if (!checkMinute) {\r\n _date.minute(0);\r\n _maxDate.minute(0);\r\n\r\n _return = (parseInt(_date.format(\"X\")) <= parseInt(_maxDate.format(\"X\")));\r\n }\r\n else {\r\n _return = (parseInt(_date.format(\"X\")) <= parseInt(_maxDate.format(\"X\")));\r\n }\r\n }\r\n\r\n return _return;\r\n },\r\n isInDisableDates: function (date) {\r\n var dut = date.format('MMMM Do YYYY');\r\n if (this.disableDates.indexOf(dut) > -1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isWeekDay: function(date) {\r\n if (this.weekDays) {\r\n if (date.isoWeekday() <= 5) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return true;\r\n },\r\n selectDate: function (date) {\r\n if (date) {\r\n this.currentDate = moment(date);\r\n if (!this.isAfterMinDate(this.currentDate, true, true)) {\r\n this.currentDate = moment(this.minDate);\r\n }\r\n\r\n if (!this.isBeforeMaxDate(this.currentDate, true, true)) {\r\n this.currentDate = moment(this.maxDate);\r\n }\r\n this.currentDate.locale(this.params.lang);\r\n this.calendarStart = moment(this.currentDate);\r\n this.meridien = this.currentDate.hour() >= 12 ? 'PM' : 'AM';\r\n }\r\n },\r\n isPM: function () {\r\n return this.meridien === 'PM';\r\n },\r\n incrementMonth: function (amount) {\r\n if ((amount === 1 && this.isNextMonthVisible()) || (amount === -1 && this.isPreviousMonthVisible())) {\r\n this.selectDate(this.currentDate.add(amount, 'month'));\r\n }\r\n },\r\n incrementYear: function (amount) {\r\n if ((amount === 1 && this.isNextYearVisible()) || (amount === -1 && this.isPreviousYearVisible())) {\r\n this.selectDate(this.currentDate.add(amount, 'year'));\r\n }\r\n },\r\n openMenu: function ($mdMenu, ev) {\r\n $mdMenu.open(ev); \r\n },\r\n monthsAvailable: function () {\r\n var monthsArr = [], _date = moment(this.currentDate);\r\n\r\n for (var m = 0; m < 12; m++) {\r\n var curMonth = _date.month(m);\r\n if (this.isAfterMinDate(curMonth.endOf('month')) && this.isBeforeMaxDate(curMonth.startOf('month'))) {\r\n monthsArr.push(curMonth.format('MMMM'));\r\n }\r\n }\r\n return monthsArr;\r\n },\r\n selectMonth: function (month) {\r\n this.selectDate(this.currentDate.month(month));\r\n },\r\n yearsAvailable: function () {\r\n var _minDate, _maxDate, len, startYear, yearsArr = [],\r\n _date = this.currentDate.year();\r\n\r\n if (typeof(this.minDate) !== 'undefined' && this.minDate !== null) {\r\n _minDate = moment(this.minDate).year();\r\n }\r\n if (typeof(this.maxDate) !== 'undefined' && this.maxDate !== null) {\r\n _maxDate = moment(this.maxDate).year();\r\n }\r\n\r\n if (_maxDate && _minDate) {\r\n len = _maxDate - _minDate;\r\n startYear = _minDate;\r\n } else if (_minDate) {\r\n len = 115;\r\n startYear = _minDate;\r\n } else if (_maxDate) {\r\n len = 30;\r\n startYear = _maxDate - len;\r\n } else {\r\n len = 60;\r\n startYear = _date - len/2;\r\n }\r\n \r\n for (var i=0; i <= len; i++) {\r\n yearsArr.push(startYear+i);\r\n }\r\n return yearsArr;\r\n },\r\n selectYear: function (year) {\r\n this.selectDate(this.currentDate.year(year));\r\n },\r\n isPreviousMonthVisible: function () {\r\n return this.calendarStart && this.isAfterMinDate(moment(this.calendarStart).startOf('month'), false, false);\r\n },\r\n isNextMonthVisible: function () {\r\n return this.calendarStart && this.isBeforeMaxDate(moment(this.calendarStart).endOf('month'), false, false);\r\n },\r\n isPreviousYearVisible: function () {\r\n return this.calendarStart && this.isAfterMinDate(moment(this.calendarStart).startOf('year'), false, false);\r\n },\r\n isNextYearVisible: function () {\r\n return this.calendarStart && this.isBeforeMaxDate(moment(this.calendarStart).endOf('year'), false, false);\r\n },\r\n isHourAvailable: function (hour) {\r\n var _date = moment(this.currentDate);\r\n if (this.params.shortTime) {\r\n _date.hour(this.convertHours(hour)).minute(0).second(0);\r\n } else {\r\n _date.hour(hour).minute(0).second(0);\r\n }\r\n return this.isAfterMinDate(_date, true, false) && this.isBeforeMaxDate(_date, true, false);\r\n },\r\n isMinuteAvailable: function (minute) {\r\n var _date = moment(this.currentDate);\r\n _date.minute(minute).second(0);\r\n\r\n var nearestMin = this.params.minuteSteps;\r\n if (nearestMin > 1 && 5 % nearestMin !== 0){\r\n var _curmin = _date.minute();\r\n var minutes = (nearestMin * Math.round(_curmin / nearestMin));\r\n if (minutes >= 60) minutes = 60 - nearestMin;\r\n if (minutes !== _curmin) return false;\r\n }\r\n\r\n return this.isAfterMinDate(_date, true, true) && this.isBeforeMaxDate(_date, true, true);\r\n },\r\n isSecondAvailable: function (second) {\r\n return true;\r\n },\r\n start: function () {\r\n this.currentView = VIEW_STATES.DATE;\r\n if (this.params.date) {\r\n this.initDate();\r\n } else {\r\n if (this.params.time) {\r\n this.initHours();\r\n }\r\n }\r\n },\r\n today: function () {\r\n var nearestMin = this.params.minuteSteps;\r\n var date = moment();\r\n var minutes = (nearestMin * Math.round(date.minute() / nearestMin));\r\n if (minutes >= 60) minutes = 60 - nearestMin;\r\n\r\n var seconds;\r\n if (this.params.seconds) {\r\n seconds = date.second();\r\n if (seconds >= 60) seconds = 60 - 1;\r\n } else seconds = 0;\r\n\r\n this.selectDate(moment(date).minutes(minutes).seconds(seconds).millisecond(0));\r\n },\r\n ok: function () {\r\n switch (this.currentView) {\r\n case VIEW_STATES.DATE:\r\n if (this.params.time === true) {\r\n this.initHours();\r\n } else {\r\n this.hide(true);\r\n }\r\n break;\r\n case VIEW_STATES.HOUR:\r\n if (this.params.minutes === true) {\r\n this.initMinutes();\r\n } else {\r\n this.hide(true);\r\n }\r\n break;\r\n case VIEW_STATES.MINUTE:\r\n if (this.params.seconds === true) {\r\n this.initSeconds();\r\n } else {\r\n this.hide(true);\r\n }\r\n break;\r\n case VIEW_STATES.SECOND:\r\n this.hide(true);\r\n break;\r\n }\r\n },\r\n cancel: function () {\r\n if (this.params.time) {\r\n switch (this.currentView) {\r\n case VIEW_STATES.DATE:\r\n this.hide();\r\n break;\r\n case VIEW_STATES.HOUR:\r\n if (this.params.date) {\r\n this.initDate();\r\n }\r\n else {\r\n this.hide();\r\n }\r\n break;\r\n case VIEW_STATES.MINUTE:\r\n this.initHours();\r\n break;\r\n case VIEW_STATES.SECOND:\r\n this.initMinutes();\r\n break;\r\n }\r\n }\r\n else {\r\n this.hide();\r\n }\r\n },\r\n selectMonthBefore: function () {\r\n this.calendarStart.subtract(1, 'months');\r\n },\r\n selectMonthAfter: function () {\r\n this.calendarStart.add(1, 'months');\r\n },\r\n selectYearBefore: function () {\r\n this.calendarStart.subtract(1, 'years');\r\n },\r\n selectYearAfter: function () {\r\n this.calendarStart.add(1, 'years');\r\n },\r\n selectAM: function () {\r\n if (this.isHourAvailable(0) || this.isHourAvailable(12)) {\r\n if (this.currentDate.hour() >= 12) {\r\n this.selectDate(this.currentDate.subtract(12, 'hours'));\r\n }\r\n if (!this.isHourAvailable(this.currentDate.hour())) {\r\n this.selectDate(this.currentDate.hour(this.minDate.hour()));\r\n }\r\n if (!this.isMinuteAvailable(this.currentDate.minute())) {\r\n this.selectDate(this.currentDate.minute(this.minDate.minute()));\r\n }\r\n }\r\n },\r\n selectPM: function () {\r\n if (this.isHourAvailable(12) || this.isHourAvailable(24)) {\r\n if (this.currentDate.hour() < 12) {\r\n this.selectDate(this.currentDate.add(12, 'hours'));\r\n }\r\n if (!this.isHourAvailable(this.currentDate.hour())) {\r\n this.selectDate(this.currentDate.hour(this.maxDate.hour()));\r\n }\r\n if (!this.isMinuteAvailable(this.currentDate.minute())) {\r\n this.selectDate(this.currentDate.minute(this.maxDate.minute()));\r\n }\r\n }\r\n },\r\n convertHours: function (h) {\r\n var _return = h;\r\n if (h < 12 && this.isPM()) _return += 12;\r\n\r\n return _return;\r\n },\r\n hide: function (okBtn) {\r\n if (okBtn) this._dialog.hide(this.currentDate);\r\n else this._dialog.cancel();\r\n }\r\n };\r\n\r\n angular.module(moduleName)\r\n .directive('mdcDatetimePickerCalendar', [\r\n function () {\r\n\r\n var YEAR_MIN = 1920,\r\n YEAR_MAX = new Date().getFullYear() + 30,\r\n MONTHS_IN_ALL = (YEAR_MAX - YEAR_MIN + 1) * 12,\r\n MONTHS = [];\r\n for (var i = 0; i < MONTHS_IN_ALL; i++) {\r\n MONTHS.push(i);\r\n }\r\n\r\n var currentMonthIndex = function (date, low) {\r\n low = low ? low : 0;\r\n return (((date.year() - YEAR_MIN) * 12) + date.month() - 1) - low;\r\n };\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n picker: '=',\r\n date: '='\r\n },\r\n bindToController: true,\r\n controllerAs: 'cal',\r\n controller: ['$scope', function ($scope) {\r\n var calendar = this, picker;\r\n\r\n this.$onInit = function () {\r\n picker = this.picker;\r\n\r\n var days = [];\r\n for (var i = picker.params.weekStart; days.length < 7; i++) {\r\n if (i > 6) i = 0;\r\n days.push(i.toString());\r\n }\r\n calendar.week = days;\r\n\r\n if (!picker.maxDate && !picker.minDate) {\r\n calendar.months = MONTHS;\r\n } else {\r\n var low = picker.minDate ? currentMonthIndex(picker.minDate) : 0;\r\n var high = picker.maxDate ? (currentMonthIndex(picker.maxDate) +1) : MONTHS_IN_ALL;\r\n calendar.months = MONTHS.slice(low, high);\r\n }\r\n\r\n calendar.topIndex = currentMonthIndex(picker.currentDate) - calendar.months[0];\r\n };\r\n\r\n if (angular.version.major === 1 && angular.version.minor < 5) this.$onInit();\r\n \r\n calendar.getItemAtIndex = function (index) {\r\n var month = ((index + 1) % 12) || 12;\r\n var year = YEAR_MIN + Math.floor(index / 12);\r\n var monthObj = moment(picker.currentDate).year(year).month(month);\r\n return generateMonthCalendar(monthObj);\r\n };\r\n\r\n $scope.$watch(function () {\r\n return picker.currentDate ? picker.currentDate.format('YYYY-MM') : '';\r\n }, function (val2, val1) {\r\n if (val2 != val1) {\r\n var nDate = moment(val2, 'YYYY-MM');\r\n var low = picker.minDate ? currentMonthIndex(picker.minDate): 0;\r\n var index = currentMonthIndex(nDate, low);\r\n if (calendar.topIndex != index) {\r\n calendar.topIndex = index;\r\n }\r\n }\r\n });\r\n\r\n var generateMonthCalendar = function (date) {\r\n var month = {};\r\n if (date !== null) {\r\n month.name = date.format('MMMM YYYY');\r\n var startOfMonth = moment(date).locale(picker.params.lang).startOf('month')\r\n .hour(date.hour())\r\n .minute(date.minute());\r\n var iNumDay = startOfMonth.format('d');\r\n month.days = [];\r\n for (var i = startOfMonth.date(); i <= startOfMonth.daysInMonth(); i++) {\r\n if (i === startOfMonth.date()) {\r\n var iWeek = calendar.week.indexOf(iNumDay.toString());\r\n if (iWeek > 0) {\r\n for (var x = 0; x < iWeek; x++) {\r\n month.days.push(0);\r\n }\r\n }\r\n }\r\n month.days.push(moment(startOfMonth).locale(picker.params.lang).date(i));\r\n }\r\n\r\n var daysInAWeek = 7, daysTmp = [], slices = Math.ceil(month.days.length / daysInAWeek);\r\n for (var j = 0; j < slices; j++) {\r\n daysTmp.push(month.days.slice(j * daysInAWeek, (j + 1) * daysInAWeek));\r\n }\r\n month.days = daysTmp;\r\n return month;\r\n }\r\n\r\n };\r\n\r\n calendar.toDay = function (i) {\r\n return moment(parseInt(i), \"d\")\r\n .locale(picker.params.lang)\r\n .format(\"ddd\")\r\n .substring(0, picker.params.dayOfWeekLen);\r\n };\r\n\r\n calendar.isInRange = function (date) {\r\n return picker.isAfterMinDate(moment(date), false, false) &&\r\n picker.isBeforeMaxDate(moment(date), false, false) &&\r\n picker.isWeekDay(moment(date)) &&\r\n picker.isInDisableDates(moment(date));\r\n };\r\n\r\n calendar.selectDate = function (date) {\r\n if (date) {\r\n if (calendar.isSelectedDay(date)) {\r\n return picker.ok();\r\n }\r\n picker.selectDate(moment(date).hour(calendar.date.hour()).minute(calendar.date.minute()));\r\n if (picker.params.autoOk) {\r\n picker.ok();\r\n }\r\n }\r\n };\r\n\r\n calendar.isSelectedDay = function (m) {\r\n return m && calendar.date.date() === m.date() && calendar.date.month() === m.month() && calendar.date.year() === m.year();\r\n };\r\n\r\n calendar.isDateOfTheDay = function (m) {\r\n var today = calendar.picker.options.showTodaysDate;\r\n if (!today) {\r\n return false;\r\n }\r\n\r\n return m && today.date() === m.date() && today.month() === m.month() && today.year() === m.year();\r\n };\r\n }],\r\n template: \r\n '' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
'\r\n };\r\n }])\r\n .directive('mdcDatetimePickerCalendarMonth', ['$compile',\r\n function ($compile) {\r\n var buildCalendarContent = function (element, scope) {\r\n var tbody = angular.element(element[0].querySelector('tbody'));\r\n var calendar = scope.cal, month = scope.month;\r\n\r\n var tbodyHtml = [];\r\n\r\n month.days.forEach(function (weekDays, i) {\r\n tbodyHtml.push('');\r\n weekDays.forEach(function (weekDay, j) {\r\n tbodyHtml.push('');\r\n if (weekDay) {\r\n if (calendar.isInRange(weekDay)) {\r\n //build a\r\n var scopeRef = 'month[\\'days\\'][' + i + '][' + j + ']';\r\n\r\n tbodyHtml.push('');\r\n tbodyHtml.push(weekDay.format('D'));\r\n tbodyHtml.push('');\r\n } else {\r\n tbodyHtml.push('');\r\n tbodyHtml.push(weekDay.format('D'));\r\n tbodyHtml.push('');\r\n }\r\n }\r\n tbodyHtml.push('');\r\n });\r\n tbodyHtml.push('');\r\n });\r\n\r\n tbody.html(tbodyHtml.join(''));\r\n $compile(tbody)(scope);\r\n };\r\n\r\n return {\r\n scope: {\r\n idx: '='\r\n },\r\n require: '^mdcDatetimePickerCalendar',\r\n restrict: 'AE',\r\n template: \r\n '
{{month.name}}
' +\r\n '' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n '
{{cal.toDay(day)}}
',\r\n link: function (scope, element, attrs, calendar) {\r\n scope.cal = calendar;\r\n scope.month = calendar.getItemAtIndex(parseInt(scope.idx));\r\n buildCalendarContent(element, scope);\r\n scope.$watch(function () {\r\n return scope.idx;\r\n }, function (idx, oldIdx) {\r\n if (idx != oldIdx) {\r\n scope.month = calendar.getItemAtIndex(parseInt(scope.idx));\r\n buildCalendarContent(element, scope);\r\n }\r\n });\r\n }\r\n };\r\n }\r\n ])\r\n ;\r\n\r\n angular.module(moduleName)\r\n .directive('mdcDtpNoclick', function () {\r\n return {\r\n link: function (scope, el) {\r\n el.on('click', function (e) {\r\n e.preventDefault();\r\n });\r\n }\r\n };\r\n });\r\n angular.module(moduleName)\r\n .directive('mdcDatetimePickerClock', ['$timeout',\r\n function ($timeout) {\r\n\r\n var template = \r\n '
 ' +\r\n '
' +\r\n ' {{point.display}}' +\r\n ' {{point.display}}' +\r\n '
' +\r\n '
' +\r\n ' {{point24.display}}' +\r\n ' {{point24.display}}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
';\r\n\r\n return {\r\n restrict: 'E',\r\n template: template,\r\n link: function (scope, element, attrs) {\r\n var minuteMode = attrs.mode === 'minutes';\r\n var secondMode = attrs.mode === 'seconds';\r\n var picker = scope.picker;\r\n //banking on the fact that there will only be one at a time\r\n var componentRoot = document.querySelector('md-dialog.dtp');\r\n\r\n var setTimeDegRay = function(deg, ray) {\r\n var val = 0;\r\n deg = deg >= 360 ? 0 : deg;\r\n if (deg !== 0) {\r\n var divider = minuteMode||secondMode ? 60 : 12;\r\n val = Math.round(divider / 360 * deg);\r\n }\r\n\r\n if (minuteMode) {\r\n var nearestMin = picker.params.minuteSteps;\r\n if (nearestMin < 1 || nearestMin > 59) nearestMin = 1;\r\n var minutes = (nearestMin * Math.round(val / nearestMin));\r\n if (minutes >= 60) minutes = 60 - nearestMin;\r\n if (!scope.pointAvailable({value: val})) return;\r\n picker.currentDate.minute(minutes);\r\n } else if (!secondMode){\r\n if (val === 12) val = 0;\r\n if (!picker.params.shortTime) picker.meridien = ray > 84 ? 'AM' : 'PM';\r\n if (picker.isPM()) val += 12;\r\n if (!scope.pointAvailable({value: val})) return;\r\n picker.currentDate.hour(val);\r\n } else {\r\n if (val >= 60) val = 0;\r\n if (!scope.pointAvailable({value: val})) return;\r\n picker.currentDate.second(val);\r\n }\r\n };\r\n\r\n var isTouchSupported = ('ontouchstart' in window) ? true : false,\r\n EVENTS = {\r\n POINTER_DOWN : isTouchSupported ? 'touchstart' : 'mousedown',\r\n POINTER_UP : isTouchSupported ? 'touchend' : 'mouseup',\r\n POINTER_MOVE : isTouchSupported ? 'touchmove' : 'mousemove'\r\n };\r\n\r\n var onMoveEvent = function(e) {\r\n e.preventDefault();\r\n\r\n var closestTarget = e.currentTarget.closest('div'),\r\n clientRect = closestTarget.getClientRects()[0];\r\n\r\n if (isTouchSupported) e = e.changedTouches[0];\r\n \r\n var x = ((closestTarget.offsetWidth / 2) - (e.pageX - clientRect.left)),\r\n y = ((e.pageY - clientRect.top) - (closestTarget.offsetHeight / 2));\r\n\r\n var ray = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)),\r\n deg = Math.round((Math.atan2(x, y) * (180 / Math.PI)));\r\n\r\n $timeout(function() {\r\n setTimeDegRay(deg+180, ray);\r\n });\r\n };\r\n\r\n element.on(EVENTS.POINTER_DOWN, function() {\r\n element.on(EVENTS.POINTER_MOVE, onMoveEvent);\r\n });\r\n\r\n element.on(EVENTS.POINTER_UP, function() {\r\n element.off(EVENTS.POINTER_MOVE);\r\n });\r\n\r\n scope.$on(\"$destroy\", function() {\r\n element.off(EVENTS.POINTER_MOVE, onMoveEvent); \r\n });\r\n\r\n var exec = function () {\r\n var clock = angular.element(element[0].querySelector('.dtp-picker-clock')),\r\n pickerEl = angular.element(componentRoot.querySelector('.dtp-picker'));\r\n\r\n var w = componentRoot.querySelector('.dtp-content').offsetWidth;\r\n var pL = parseInt(css(pickerEl, 'paddingLeft').replace('px', '')) || 0;\r\n var pR = parseInt(css(pickerEl, 'paddingRight').replace('px', '')) || 0;\r\n var pT = parseInt(css(pickerEl, 'paddingTop').replace('px', '')) || 0;\r\n var mL = parseInt(css(clock, 'marginLeft').replace('px', '')) || 0;\r\n var mR = parseInt(css(clock, 'marginRight').replace('px', '')) || 0;\r\n var mT = parseInt(css(clock, 'marginTop').replace('px', '')) || 0;\r\n\r\n //set width\r\n var clockWidth = (w - (mL + mR + pL + pR));\r\n clock.css('width', (clockWidth) + 'px');\r\n\r\n var r = (clockWidth / 2);\r\n var j = r / 1.2; // radius for low number\r\n\r\n var points = [];\r\n\r\n for (var h = 0; h < 12; ++h) {\r\n var x = j * Math.sin(Math.PI * 2 * (h / 12));\r\n var y = j * Math.cos(Math.PI * 2 * (h / 12));\r\n var left = (r + x + pL / 2) - (pL + mL);\r\n var top = (r - y - mT / 2) - (pT + mT);\r\n\r\n var hour = {\r\n left: left,\r\n top: top,\r\n value: (minuteMode||secondMode ? (h * 5) : h), //5 for minute 60/12\r\n style: {'margin-left': left + 'px', 'margin-top': top + 'px'}\r\n };\r\n\r\n if (minuteMode || secondMode) {\r\n hour.display = hour.value < 10 ? ('0' + hour.value) : hour.value;\r\n } else {\r\n if (picker.params.shortTime) {\r\n hour.display = h === 0 ? 12 : h;\r\n } else {\r\n hour.display = h;\r\n }\r\n }\r\n\r\n points.push(hour);\r\n }\r\n scope.points = points;\r\n\r\n if (!picker.params.shortTime && !minuteMode && !secondMode) {\r\n var points24 = [];\r\n\r\n var j24 = r / 1.8; // radius for high number\r\n for (var h24 = 12; h24 < 24; ++h24) {\r\n var x24 = j24 * Math.sin(Math.PI * 2 * (h24 / 12));\r\n var y24 = j24 * Math.cos(Math.PI * 2 * (h24 / 12));\r\n var left24 = (r + x24 + pL / 2) - (pL + mL);\r\n var top24 = (r - y24 - mT / 2) - (pT + mT);\r\n\r\n points24.push({\r\n left: left24,\r\n top: top24,\r\n value: h24,\r\n display: h24,\r\n style: {'margin-left': left24 + 'px', 'margin-top': top24 + 'px'}\r\n });\r\n }\r\n scope.points24 = points24;\r\n }\r\n\r\n scope.mode = attrs.mode;\r\n setCurrentValue();\r\n clock.css('height', clockWidth + 'px');\r\n\r\n var clockCenter = element[0].querySelector('.dtp-clock-center');\r\n var centerWidth = (clockCenter.offsetWidth / 2) || 7.5;\r\n var centerHeight = (clockCenter.offsetHeight / 2) || 7.5;\r\n var _hL = r / (picker.params.shortTime ? 1.8 : 2.3);\r\n var _mL = r / 1.4;\r\n var _sL = r;\r\n\r\n angular.element(element[0].querySelector('.dtp-hour-hand')).css({\r\n left: r + (mL * 1.5) + 'px',\r\n height: _hL + 'px',\r\n marginTop: (r - _hL - pL) + 'px'\r\n }).addClass(!minuteMode && !secondMode ? 'on' : '');\r\n\r\n angular.element(element[0].querySelector('.dtp-minute-hand')).css({\r\n left: r + (mL * 1.5) + 'px',\r\n height: _mL + 'px',\r\n marginTop: r - _mL - pL + 'px'\r\n }).addClass(minuteMode ? 'on' : '');\r\n\r\n angular.element(element[0].querySelector('.dtp-second-hand')).css({\r\n left: r + (mL * 1.5) + 'px',\r\n height: _sL + 'px',\r\n marginTop: r - _sL - pL + 'px'\r\n }).addClass(secondMode ? 'on' : '');\r\n\r\n angular.element(clockCenter).css({\r\n left: r + pL + mL - centerWidth + 'px',\r\n marginTop: (r - (mL / 2)) - centerHeight + 'px'\r\n });\r\n animateHands();\r\n };\r\n\r\n var animateHands = function () {\r\n var _date = picker.currentNearestMinute();\r\n var h = _date.hour(), m = _date.minute(), s = _date.second();\r\n\r\n rotateElement(angular.element(element[0].querySelector('.dtp-hour-hand')), 30 * h);\r\n rotateElement(angular.element(element[0].querySelector('.dtp-minute-hand')), 6 * m);\r\n rotateElement(angular.element(element[0].querySelector('.dtp-second-hand')), 6 * s);\r\n };\r\n\r\n var rotateElement = function (el, deg) {\r\n angular.element(el).css({\r\n WebkitTransform: 'rotate(' + deg + 'deg)',\r\n '-moz-transform': 'rotate(' + deg + 'deg)',\r\n '-ms-transform': 'rotate(' + deg + 'deg)',\r\n 'transform': 'rotate(' + deg + 'deg)'\r\n });\r\n };\r\n\r\n\r\n var setCurrentValue = function () {\r\n var date = picker.currentNearestMinute();\r\n var nbH = picker.params.shortTime ? 12 : 24;\r\n if (minuteMode) scope.currentValue = date.minute();\r\n else if (secondMode) scope.currentValue = date.second();\r\n else scope.currentValue = date.hour() % nbH;\r\n };\r\n\r\n scope.$watch(function () {\r\n var tmp = picker.currentNearestMinute();\r\n return tmp ? tmp.format('HH:mm:ss') : '';\r\n }, function () {\r\n setCurrentValue();\r\n animateHands();\r\n });\r\n\r\n scope.setTime = function (val) {\r\n if (!minuteMode && !secondMode) {\r\n if (val === scope.currentValue && !picker.params.autoOk) picker.ok(); // double click\r\n\r\n if (picker.params.shortTime) {\r\n picker.currentDate.hour(picker.isPM() ? (val + 12) : val);\r\n } else {\r\n picker.currentDate.hour(val);\r\n if (val >= 12) picker.meridien = 'PM';\r\n else picker.meridien = 'AM';\r\n }\r\n\r\n if (picker.params.autoOk) picker.ok(); // single click\r\n } else if (!secondMode) {\r\n if (val === scope.currentValue && !picker.params.seconds) picker.ok(); // double click\r\n \r\n picker.currentDate.minute(val);\r\n if (!picker.params.seconds) {\r\n picker.currentDate.second(0);\r\n } else if (picker.params.autoOk) picker.ok(); // single click\r\n } else {\r\n if (val === scope.currentValue) picker.ok(); // double click\r\n picker.currentDate.second(val);\r\n }\r\n };\r\n\r\n scope.pointAvailable = function (point) {\r\n if (minuteMode) return picker.isMinuteAvailable(point.value);\r\n else if (secondMode) return picker.isSecondAvailable(point.value);\r\n else return picker.isHourAvailable(point.value);\r\n };\r\n\r\n var unWatcher = scope.$watch(function () {\r\n return element[0].querySelectorAll('div').length;\r\n }, function () {\r\n exec();\r\n unWatcher();\r\n });\r\n }\r\n };\r\n }]);\r\n return moduleName;\r\n }\r\n\r\n var isElectron = window && window.process && window.process.type;\r\n if (typeof define === 'function' && define.amd) {\r\n define(['moment'], ngMaterialDatePicker);\r\n } else if (typeof module !== 'undefined' && module && module.exports && (typeof require === 'function') && !isElectron) {\r\n module.exports = ngMaterialDatePicker(require('moment'));\r\n } else {\r\n ngMaterialDatePicker((typeof global !== 'undefined' ? global : window).moment);\r\n }\r\n})();\r\n"]}