{"version":3,"sources":["mdPickers.min.js"],"names":["DatePickerCtrl","$scope","$mdDialog","$mdMedia","$timeout","currentDate","options","self","this","date","moment","minDate","isValid","maxDate","displayFormat","dateFilter","angular","isFunction","selectingYear","isBefore","add","isAfter","yearItems","currentIndex_","PAGE_SIZE","START","year","END","getItemAtIndex","index","getLength","Math","min","floor","abs","selectYear","animate","showYear","yearTopIndex","showCalendar","clear","hide","cancel","confirm","toDate","animating","noop","then","CalendarCtrl","$onInit","daysInMonth","dow","localeData","firstDayOfWeek","weekDays","concat","weekdaysMin","slice","$watch","unix","newValue","oldValue","updateDaysInMonth","getDaysInMonth","days","firstDay","day","length","arr","i","value","enabled","isDayEnabled","push","selectDate","dom","nextMonth","prevMonth","subtract","formatValidator","format","isDate","compareDateValidator","otherDate","comparator","minDateValidator","d","md","isSameOrAfter","maxDateValidator","isSameOrBefore","filterValidator","filter","TimePickerCtrl","time","autoSwitch","ampm","VIEW_HOURS","VIEW_MINUTES","currentView","hoursFormat","minutesFormat","clockHours","parseInt","clockMinutes","switchView","setAM","hours","hour","setPM","ClockCtrl","TYPE_HOURS","TYPE_MINUTES","STEP_DEG","steps","CLOCK_TYPES","range","minutes","type","f","t","selected","getPointerStyle","divider","degrees","round","-webkit-transform","-ms-transform","transform","setTimeByDeg","deg","setTime","compareTimeValidator","otherTime","minTimeValidator","minTime","mt","maxTimeValidator","maxTime","module","config","$mdIconProvider","mdpIconsRegistry","forEach","icon","id","url","run","$templateCache","put","svg","constant","factory","$mdpLocale","okLabel","cancelLabel","timeFormat","noFloat","openOnClick","clearOnCancel","dateFormat","directive","$mdUtil","restrict","priority","compile","element","inputContainer","getClosest","toggleClass","provider","LABEL_OK","LABEL_CANCEL","LABEL_CLEAR","DISPLAY_FORMAT","PARENT_GETTER","setDisplayFormat","setOKButtonLabel","label","setCancelButtonLabel","setClearButtonLabel","setDialogParentGetter","fn","$get","datePicker","Date","now","isObject","labelOk","labelCancel","labelClear","clearLabel","show","controller","controllerAs","clickOutsideToClose","template","targetEvent","locals","multiple","parent","$animate","bindToController","link","scope","attrs","ctrl","animElements","querySelector","map","a","raised","direction","addClass","removeClass","$mdpDatePicker","require","transclude","isDefined","mdpNoFloat","mdpOpenOnClick","mdpDisabled","placeholder","disabled","inputName","pre","constollers","$transclude","post","controllers","updateInputElement","inputElement","inputContainerCtrl","setHasValue","ngModel","$isEmpty","updateDate","strValue","$setViewValue","$pristine","messages","hasClass","$render","onInputElementEvents","event","target","$viewVaue","form","opts","clone","append","model","isError","$invalid","$submitted","required","$formatters","unshift","strVal","$validators","modelValue","viewValue","isUndefined","$parsers","parsed","$modelValue","originalModel","month","showPicker","ev","error","on","$on","off","$validate","replace","timepickerCtrl","$parent","timepicker","onEvent","containerCoords","currentTarget","getClientRects","x","offsetWidth","pageX","left","y","pageY","top","offsetHeight","atan2","PI","indexOf","e","timePicker","$mdpTimePicker","updateTime","undefined","$error","setInvalid","Object","keys","seconds"],"mappings":"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","file":"mdPickers.min.js","sourcesContent":["(function() {\n\"use strict\";\n/* global moment, angular */\r\n\r\nvar module = angular.module(\"mdPickers\", [\r\n \"ngMaterial\",\r\n \"ngAnimate\",\r\n \"ngAria\"\r\n]);\r\n\r\nmodule.config([\"$mdIconProvider\", \"mdpIconsRegistry\", function($mdIconProvider, mdpIconsRegistry) {\r\n angular.forEach(mdpIconsRegistry, function(icon, index) {\r\n $mdIconProvider.icon(icon.id, icon.url);\r\n });\r\n}]);\r\n\r\nmodule.run([\"$templateCache\", \"mdpIconsRegistry\", function($templateCache, mdpIconsRegistry) {\r\n angular.forEach(mdpIconsRegistry, function(icon, index) {\r\n $templateCache.put(icon.url, icon.svg);\r\n });\r\n}]);\nmodule.constant(\"mdpIconsRegistry\", [\r\n {\r\n id: 'mdp-chevron-left',\r\n url: 'mdp-chevron-left.svg',\r\n svg: ''\r\n },\r\n {\r\n id: 'mdp-chevron-right',\r\n url: 'mdp-chevron-right.svg',\r\n svg: ''\r\n },\r\n {\r\n id: 'mdp-access-time',\r\n url: 'mdp-access-time.svg',\r\n svg: ''\r\n },\r\n {\r\n id: 'mdp-event',\r\n url: 'mdp-event.svg',\r\n svg: ''\r\n }\r\n]);\n/**\r\n * Created by Robin Thoni on 6/21/17.\r\n */\r\n\r\nmodule.factory('$mdpLocale', [function () {\r\n var $mdpLocale = {\r\n time: {\r\n minTime: null,\r\n maxTime: null,\r\n okLabel: \"OK\",\r\n cancelLabel: \"Cancel\",\r\n timeFormat: \"HH:mm\",\r\n noFloat: false,\r\n openOnClick: false,\r\n autoSwitch: false,\r\n ampm: true,\r\n clearOnCancel: false\r\n },\r\n date: {\r\n minDate: null,\r\n maxDate: null,\r\n okLabel: \"OK\",\r\n cancelLabel: \"Cancel\",\r\n dateFilter: null,\r\n dateFormat: \"YYYY-MM-DD\",\r\n displayFormat: \"ddd, MMM DD\",\r\n noFloat: false,\r\n openOnClick: false,\r\n clearOnCancel: false\r\n }\r\n };\r\n\r\n return $mdpLocale;\r\n}]);\r\n\nmodule.directive(\"ngMessage\", [\"$mdUtil\", function($mdUtil) {\r\n return {\r\n restrict: \"EA\",\r\n priority: 101,\r\n compile: function(element) {\r\n var inputContainer = $mdUtil.getClosest(element, \"mdp-time-picker\", true) ||\r\n $mdUtil.getClosest(element, \"mdp-date-picker\", true);\r\n\r\n // If we are not a child of an input container, don't do anything\r\n if (!inputContainer) return;\r\n\r\n // Add our animation class\r\n element.toggleClass('md-input-message-animation', true);\r\n\r\n return {};\r\n }\r\n }\r\n\r\n}]);\n/* global moment, angular */\r\n\r\nfunction DatePickerCtrl($scope, $mdDialog, $mdMedia, $timeout, currentDate, options) {\r\n var self = this;\r\n\r\n this.date = moment(currentDate);\r\n this.minDate = options.minDate && moment(options.minDate).isValid() ? moment(options.minDate) : null;\r\n this.maxDate = options.maxDate && moment(options.maxDate).isValid() ? moment(options.maxDate) : null;\r\n this.displayFormat = options.displayFormat || \"ddd, MMM DD\";\r\n this.dateFilter = angular.isFunction(options.dateFilter) ? options.dateFilter : null;\r\n this.selectingYear = false;\r\n\r\n // validate min and max date\r\n if (this.minDate && this.maxDate) {\r\n if (this.maxDate.isBefore(this.minDate)) {\r\n this.maxDate = moment(this.minDate).add(1, 'days');\r\n }\r\n }\r\n\r\n if (this.date) {\r\n // check min date\r\n if (this.minDate && this.date.isBefore(this.minDate)) {\r\n this.date = moment(this.minDate);\r\n }\r\n\r\n // check max date\r\n if (this.maxDate && this.date.isAfter(this.maxDate)) {\r\n this.date = moment(this.maxDate);\r\n }\r\n }\r\n\r\n this.yearItems = {\r\n currentIndex_: 0,\r\n PAGE_SIZE: 5,\r\n START: (self.minDate ? self.minDate.year() : 1900),\r\n END: (self.maxDate ? self.maxDate.year() : 0),\r\n getItemAtIndex: function(index) {\r\n if(this.currentIndex_ < index)\r\n this.currentIndex_ = index;\r\n\r\n return this.START + index;\r\n },\r\n getLength: function() {\r\n return Math.min(\r\n this.currentIndex_ + Math.floor(this.PAGE_SIZE / 2),\r\n Math.abs(this.START - this.END) + 1\r\n );\r\n }\r\n };\r\n\r\n $scope.$mdMedia = $mdMedia;\r\n $scope.year = this.date.year();\r\n\r\n this.selectYear = function(year) {\r\n self.date.year(year);\r\n $scope.year = year;\r\n self.selectingYear = false;\r\n self.animate();\r\n };\r\n\r\n this.showYear = function() {\r\n\r\n self.yearTopIndex = (self.date.year() - self.yearItems.START) + Math.floor(self.yearItems.PAGE_SIZE / 2);\r\n self.yearItems.currentIndex_ = (self.date.year() - self.yearItems.START) + 1;\r\n self.selectingYear = true;\r\n };\r\n\r\n this.showCalendar = function() {\r\n self.selectingYear = false;\r\n };\r\n\r\n this.clear = function () {\r\n var date = this.date;\r\n date = null;\r\n $mdDialog.hide(date);\r\n };\r\n\r\n this.cancel = function() {\r\n $mdDialog.cancel();\r\n };\r\n\r\n this.confirm = function() {\r\n var date = this.date;\r\n\r\n if (this.minDate && this.date.isBefore(this.minDate)) {\r\n date = moment(this.minDate);\r\n }\r\n\r\n if (this.maxDate && this.date.isAfter(this.maxDate)) {\r\n date = moment(this.maxDate);\r\n }\r\n\r\n $mdDialog.hide(date.toDate());\r\n };\r\n\r\n this.animate = function() {\r\n self.animating = true;\r\n $timeout(angular.noop).then(function() {\r\n self.animating = false;\r\n })\r\n\r\n };\r\n}\r\n\r\nmodule.provider(\"$mdpDatePicker\", function() {\r\n var LABEL_OK = \"OK\",\r\n LABEL_CANCEL = \"Cancel\",\r\n LABEL_CLEAR = \"Clear\",\r\n DISPLAY_FORMAT = \"ddd, MMM DD\",\r\n PARENT_GETTER = function() { return undefined };\r\n\r\n this.setDisplayFormat = function(format) {\r\n DISPLAY_FORMAT = format;\r\n\r\n };\r\n\r\n this.setOKButtonLabel = function(label) {\r\n LABEL_OK = label;\r\n };\r\n\r\n this.setCancelButtonLabel = function(label) {\r\n LABEL_CANCEL = label;\r\n };\r\n\r\n this.setClearButtonLabel = function (label) {\r\n LABEL_CLEAR = label;\r\n };\r\n \r\n this.setDialogParentGetter = function(fn) {\r\n PARENT_GETTER = fn;\r\n };\r\n\r\n this.$get = [\"$mdDialog\", \"$mdpLocale\", function($mdDialog, $mdpLocale) {\r\n var datePicker = function(currentDate, options) {\r\n if (!angular.isDate(currentDate)) currentDate = Date.now();\r\n if (!angular.isObject(options)) options = {};\r\n\r\n options.displayFormat = options.displayFormat || $mdpLocale.date.displayFormat || DISPLAY_FORMAT;\r\n\r\n var labelOk = options.okLabel || $mdpLocale.date.okLabel || LABEL_OK;\r\n var labelCancel = options.cancelLabel || $mdpLocale.date.cancelLabel || LABEL_CANCEL;\r\n var labelClear = options.clearLabel || $mdpLocale.date.clearLabel || LABEL_CLEAR;\r\n\r\n return $mdDialog.show({\r\n controller: ['$scope', '$mdDialog', '$mdMedia', '$timeout', 'currentDate', 'options', DatePickerCtrl],\r\n controllerAs: 'datepicker',\r\n clickOutsideToClose: true,\r\n template: '' +\r\n '' +\r\n '
' +\r\n '' +\r\n '{{ datepicker.date.format(\\'YYYY\\') }}' +\r\n '{{ datepicker.date.format(datepicker.displayFormat) }} ' +\r\n '' +\r\n\r\n '
' +\r\n\r\n '
' +\r\n\r\n '
' +\r\n '' +\r\n '
' +\r\n '{{ item }}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '' +\r\n '' +\r\n '' + labelClear + '' +\r\n '' + labelCancel + '' +\r\n '' + labelOk + '' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
',\r\n targetEvent: options.targetEvent,\r\n locals: {\r\n currentDate: currentDate,\r\n options: options\r\n },\r\n multiple: true,\r\n parent: PARENT_GETTER()\r\n });\r\n };\r\n\r\n return datePicker;\r\n }];\r\n});\r\n\r\nfunction CalendarCtrl($scope) {\r\n var self = this;\r\n\r\n this.$onInit = function () {\r\n self.daysInMonth = [];\r\n self.dow = moment.localeData().firstDayOfWeek();\r\n self.weekDays = [].concat(\r\n moment.weekdaysMin().slice(self.dow),\r\n moment.weekdaysMin().slice(0, self.dow)\r\n );\r\n $scope.$watch(function () {\r\n return self.date.unix()\r\n }, function (newValue, oldValue) {\r\n if (newValue && newValue !== oldValue)\r\n self.updateDaysInMonth();\r\n });\r\n self.updateDaysInMonth();\r\n };\r\n\r\n this.getDaysInMonth = function() {\r\n var days = self.date.daysInMonth(),\r\n firstDay = moment(self.date).date(1).day() - this.dow;\r\n\r\n if(firstDay < 0) firstDay = this.weekDays.length - 1;\r\n\r\n var arr = [];\r\n for(var i = 1; i <= (firstDay + days); i++) {\r\n var day = null;\r\n if(i > firstDay) {\r\n day = {\r\n value: (i - firstDay),\r\n enabled: self.isDayEnabled(moment(self.date).date(i - firstDay).toDate())\r\n };\r\n }\r\n arr.push(day);\r\n }\r\n\r\n return arr;\r\n };\r\n\r\n this.isDayEnabled = function(day) {\r\n return (!this.minDate || this.minDate <= day) &&\r\n\r\n (!this.maxDate || this.maxDate >= day) &&\r\n\r\n (!self.dateFilter || !self.dateFilter(day));\r\n };\r\n\r\n this.selectDate = function(dom) {\r\n self.date.date(dom);\r\n };\r\n\r\n this.nextMonth = function() {\r\n self.date.add(1, 'months');\r\n };\r\n\r\n this.prevMonth = function() {\r\n self.date.subtract(1, 'months');\r\n };\r\n\r\n this.updateDaysInMonth = function() {\r\n self.daysInMonth = self.getDaysInMonth();\r\n };\r\n\r\n $scope.$watch(function() { return self.date.unix() }, function(newValue, oldValue) {\r\n if(newValue && newValue !== oldValue)\r\n self.updateDaysInMonth();\r\n });\r\n}\r\n\r\nmodule.directive(\"mdpCalendar\", [\"$animate\", function($animate) {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n \"date\": \"=\",\r\n \"minDate\": \"=\",\r\n \"maxDate\": \"=\",\r\n \"dateFilter\": \"=\"\r\n },\r\n template: '
' +\r\n '
' +\r\n '' +\r\n '
{{ calendar.date.format(\"MMMM YYYY\") }}
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
{{ d }}
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '{{ day.value }}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n controller: [\"$scope\", CalendarCtrl],\r\n controllerAs: \"calendar\",\r\n link: function(scope, element, attrs, ctrl) {\r\n var animElements = [\r\n element[0].querySelector(\".mdp-calendar-week-days\"),\r\n element[0].querySelector('.mdp-calendar-days'),\r\n element[0].querySelector('.mdp-calendar-monthyear')\r\n ].map(function(a) {\r\n return angular.element(a);\r\n\r\n });\r\n\r\n scope.raised = false;\r\n\r\n scope.$watch(function() { return ctrl.date.format(\"YYYYMM\") }, function(newValue, oldValue) {\r\n var direction = null;\r\n\r\n if(newValue > oldValue)\r\n direction = \"mdp-animate-next\";\r\n else if(newValue < oldValue)\r\n direction = \"mdp-animate-prev\";\r\n\r\n if(direction) {\r\n for(var i in animElements) {\r\n animElements[i].addClass(direction);\r\n $animate.removeClass(animElements[i], direction);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n}]);\r\n\r\nfunction formatValidator(value, format) {\r\n return !value || angular.isDate(value) || moment(value, format, true).isValid();\r\n}\r\n\r\nfunction compareDateValidator(value, format, otherDate, comparator) {\r\n // take only the date part, not the time part\r\n if (angular.isDate(otherDate)) {\r\n otherDate = moment(otherDate).format(format);\r\n }\r\n otherDate = moment(otherDate, format, true);\r\n var date = angular.isDate(value) ? moment(value) : moment(value, format, true);\r\n\r\n return !value ||\r\n angular.isDate(value) ||\r\n !otherDate.isValid() ||\r\n comparator(date, otherDate);\r\n}\r\n\r\nfunction minDateValidator(value, format, minDate) {\r\n return compareDateValidator(value, format, minDate, function(d, md) { return d.isSameOrAfter(md); });\r\n}\r\n\r\nfunction maxDateValidator(value, format, maxDate) {\r\n return compareDateValidator(value, format, maxDate, function(d, md) { return d.isSameOrBefore(md); });\r\n}\r\n\r\nfunction filterValidator(value, format, filter) {\r\n var date = angular.isDate(value) ? moment(value) : moment(value, format, true);\r\n\r\n return !value ||\r\n angular.isDate(value) ||\r\n !angular.isFunction(filter) ||\r\n !filter(date.toDate());\r\n}\r\n\r\nfunction requiredValidator(value, ngModel) {\r\n return value\r\n}\r\n\r\nmodule.directive(\"mdpDatePicker\", [\"$mdpDatePicker\", \"$timeout\", \"$mdpLocale\", function($mdpDatePicker, $timeout, $mdpLocale) {\r\n return {\r\n restrict: 'E',\r\n require: ['ngModel', \"^^?form\"],\r\n transclude: true,\r\n template: function(element, attrs) {\r\n var noFloat = angular.isDefined(attrs.mdpNoFloat) || $mdpLocale.date.noFloat,\r\n openOnClick = angular.isDefined(attrs.mdpOpenOnClick) || $mdpLocale.date.openOnClick;\r\n\r\n return '
' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
';\r\n },\r\n scope: {\r\n \"minDate\": \"=mdpMinDate\",\r\n \"maxDate\": \"=mdpMaxDate\",\r\n \"okLabel\": \"@?mdpOkLabel\",\r\n \"cancelLabel\": \"@?mdpCancelLabel\",\r\n \"dateFilter\": \"=mdpDateFilter\",\r\n \"dateFormat\": \"@mdpFormat\",\r\n \"placeholder\": \"@mdpPlaceholder\",\r\n \"noFloat\": \"=mdpNoFloat\",\r\n \"openOnClick\": \"=mdpOpenOnClick\",\r\n \"disabled\": \"=?mdpDisabled\",\r\n \"inputName\": \"@?mdpInputName\",\r\n \"clearOnCancel\": \"=?mdpClearOnCancel\"\r\n },\r\n link: {\r\n pre: function(scope, element, attrs, constollers, $transclude) {\r\n\r\n },\r\n post: function(scope, element, attrs, controllers, $transclude) {\r\n var ngModel = controllers[0];\r\n var form = controllers[1];\r\n\r\n var opts = {\r\n get minDate() {\r\n return scope.minDate || $mdpLocale.date.minDate;\r\n },\r\n get maxDate() {\r\n return scope.maxDate || $mdpLocale.date.maxDate;\r\n },\r\n get dateFilter() {\r\n return scope.dateFilter || $mdpLocale.date.dateFilter;\r\n },\r\n get clearOnCancel() {\r\n return angular.isDefined(scope.clearOnCancel) ? scope.clearOnCancel : $mdpLocale.date.clearOnCancel;\r\n }\r\n };\r\n\r\n var inputElement = angular.element(element[0].querySelector('input')),\r\n inputContainer = angular.element(element[0].querySelector('md-input-container')),\r\n inputContainerCtrl = inputContainer.controller(\"mdInputContainer\");\r\n\r\n $transclude(function(clone) {\r\n inputContainer.append(clone);\r\n });\r\n\r\n var messages = angular.element(inputContainer[0].querySelector(\"[ng-messages]\"));\r\n\r\n scope.type = scope.dateFormat || $mdpLocale.date.dateFormat ? \"text\" : \"date\";\r\n scope.dateFormat = scope.dateFormat || $mdpLocale.date.dateFormat || \"YYYY-MM-DD\";\r\n scope.model = ngModel;\r\n\r\n scope.isError = function() {\r\n return !!ngModel.$invalid && (!ngModel.$pristine || (form != null && form.$submitted));\r\n };\r\n\r\n scope.required = function() {\r\n return !!attrs.required;\r\n };\r\n\r\n // update input element if model has changed\r\n ngModel.$formatters.unshift(function(value) {\r\n var date = angular.isDate(value) && moment(value);\r\n if(date && date.isValid()) {\r\n var strVal = date.format(scope.dateFormat);\r\n updateInputElement(strVal);\r\n return strVal;\r\n } else {\r\n updateInputElement(null);\r\n return null;\r\n }\r\n });\r\n\r\n ngModel.$validators.format = function(modelValue, viewValue) {\r\n return formatValidator(viewValue, scope.dateFormat);\r\n };\r\n\r\n ngModel.$validators.minDate = function(modelValue, viewValue) {\r\n return minDateValidator(viewValue, scope.dateFormat, opts.minDate);\r\n };\r\n\r\n ngModel.$validators.maxDate = function(modelValue, viewValue) {\r\n return maxDateValidator(viewValue, scope.dateFormat, opts.maxDate);\r\n };\r\n\r\n ngModel.$validators.filter = function(modelValue, viewValue) {\r\n return filterValidator(viewValue, scope.dateFormat, opts.dateFilter);\r\n };\r\n\r\n ngModel.$validators.required = function(modelValue, viewValue) {\r\n return angular.isUndefined(attrs.required) || attrs.required === false || !ngModel.$isEmpty(modelValue) || !ngModel.$isEmpty(viewValue);\r\n };\r\n\r\n ngModel.$parsers.unshift(function(value) {\r\n var parsed = moment(value, scope.dateFormat, true);\r\n if(parsed.isValid()) {\r\n if(angular.isDate(ngModel.$modelValue)) {\r\n var originalModel = moment(ngModel.$modelValue);\r\n originalModel.year(parsed.year());\r\n originalModel.month(parsed.month());\r\n originalModel.date(parsed.date());\r\n\r\n parsed = originalModel;\r\n }\r\n return parsed.toDate();\r\n\r\n } else\r\n return null;\r\n });\r\n\r\n // update input element value\r\n function updateInputElement(value) {\r\n inputElement[0].value = value;\r\n inputContainerCtrl.setHasValue(!ngModel.$isEmpty(value));\r\n }\r\n\r\n function updateDate(date) {\r\n var value = moment(date, angular.isDate(date) ? null : scope.dateFormat, true),\r\n strValue = value.format(scope.dateFormat);\r\n\r\n if(value.isValid()) {\r\n updateInputElement(strValue);\r\n ngModel.$setViewValue(strValue);\r\n } else {\r\n updateInputElement(date);\r\n ngModel.$setViewValue(date);\r\n }\r\n\r\n if(!ngModel.$pristine &&\r\n\r\n messages.hasClass(\"md-auto-hide\") &&\r\n\r\n inputContainer.hasClass(\"md-input-invalid\")) messages.removeClass(\"md-auto-hide\");\r\n\r\n ngModel.$render();\r\n }\r\n\r\n scope.showPicker = function(ev) {\r\n $mdpDatePicker(ngModel.$modelValue, {\r\n minDate: opts.minDate,\r\n maxDate: opts.maxDate,\r\n dateFilter: opts.dateFilter,\r\n okLabel: scope.okLabel,\r\n cancelLabel: scope.cancelLabel,\r\n targetEvent: ev\r\n }).then(function(time) {\r\n updateDate(time, true);\r\n }, function (error) {\r\n if (opts.clearOnCancel) {\r\n updateDate(null, true);\r\n }\r\n });\r\n };\r\n\r\n function onInputElementEvents(event) {\r\n if(event.target.value !== ngModel.$viewVaue)\r\n updateDate(event.target.value);\r\n }\r\n\r\n inputElement.on(\"reset input blur\", onInputElementEvents);\r\n\r\n scope.$on(\"$destroy\", function() {\r\n inputElement.off(\"reset input blur\", onInputElementEvents);\r\n });\r\n\r\n // revalidate on constraint change\r\n scope.$watch(\"minDate + maxDate\", function() {\r\n ngModel.$validate();\r\n });\r\n }\r\n }\r\n };\r\n}]);\r\n\r\nmodule.directive(\"mdpDatePicker\", [\"$mdpDatePicker\", \"$timeout\", function($mdpDatePicker, $timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n scope: {\r\n \"minDate\": \"@min\",\r\n \"maxDate\": \"@max\",\r\n \"okLabel\": \"@?mdpOkLabel\",\r\n \"cancelLabel\": \"@?mdpCancelLabel\",\r\n \"dateFilter\": \"=mdpDateFilter\",\r\n \"dateFormat\": \"@mdpFormat\"\r\n },\r\n link: function(scope, element, attrs, ngModel, $transclude) {\r\n scope.dateFormat = scope.dateFormat || \"YYYY-MM-DD\";\r\n\r\n ngModel.$validators.format = function(modelValue, viewValue) {\r\n return formatValidator(viewValue, scope.format);\r\n };\r\n\r\n ngModel.$validators.minDate = function(modelValue, viewValue) {\r\n return minDateValidator(viewValue, scope.format, scope.minDate);\r\n };\r\n\r\n ngModel.$validators.maxDate = function(modelValue, viewValue) {\r\n return maxDateValidator(viewValue, scope.format, scope.maxDate);\r\n };\r\n\r\n ngModel.$validators.filter = function(modelValue, viewValue) {\r\n return filterValidator(viewValue, scope.format, scope.dateFilter);\r\n };\r\n\r\n function showPicker(ev) {\r\n $mdpDatePicker(ngModel.$modelValue, {\r\n minDate: scope.minDate,\r\n maxDate: scope.maxDate,\r\n dateFilter: scope.dateFilter,\r\n okLabel: scope.okLabel,\r\n cancelLabel: scope.cancelLabel,\r\n targetEvent: ev\r\n }).then(function(time) {\r\n ngModel.$setViewValue(moment(time).format(scope.format));\r\n ngModel.$render();\r\n });\r\n };\r\n\r\n element.on(\"click\", showPicker);\r\n\r\n scope.$on(\"$destroy\", function() {\r\n element.off(\"click\", showPicker);\r\n });\r\n }\r\n }\r\n}]);\n/* global moment, angular */\r\n\r\nfunction TimePickerCtrl($scope, $mdDialog, time, autoSwitch, ampm, $mdMedia) {\r\n var self = this;\r\n this.VIEW_HOURS = 1;\r\n this.VIEW_MINUTES = 2;\r\n this.currentView = this.VIEW_HOURS;\r\n this.time = moment(time);\r\n this.autoSwitch = !!autoSwitch;\r\n this.ampm = !!ampm;\r\n\r\n this.hoursFormat = self.ampm ? \"h\" : \"H\";\r\n this.minutesFormat = \"mm\";\r\n\r\n this.clockHours = parseInt(this.time.format(this.hoursFormat));\r\n this.clockMinutes = parseInt(this.time.format(this.minutesFormat));\r\n\r\n $scope.$mdMedia = $mdMedia;\r\n\r\n this.switchView = function() {\r\n self.currentView = self.currentView == self.VIEW_HOURS ? self.VIEW_MINUTES : self.VIEW_HOURS;\r\n };\r\n\r\n this.setAM = function() {\r\n if(self.time.hours() >= 12)\r\n self.time.hour(self.time.hour() - 12);\r\n };\r\n\r\n this.setPM = function() {\r\n if(self.time.hours() < 12)\r\n self.time.hour(self.time.hour() + 12);\r\n };\r\n\r\n this.cancel = function() {\r\n $mdDialog.cancel();\r\n };\r\n\r\n this.confirm = function() {\r\n $mdDialog.hide(this.time.toDate());\r\n };\r\n}\r\n\r\nfunction ClockCtrl($scope) {\r\n var self = this;\r\n var TYPE_HOURS = \"hours\";\r\n var TYPE_MINUTES = \"minutes\";\r\n\r\n this.$onInit = function () {\r\n self.STEP_DEG = 360 / 12;\r\n self.steps = [];\r\n this.CLOCK_TYPES = {\r\n \"hours\": {\r\n range: self.ampm ? 12 : 24,\r\n },\r\n \"minutes\": {\r\n range: 60,\r\n }\r\n };\r\n self.type = self.type || \"hours\";\r\n\r\n switch (self.type) {\r\n case TYPE_HOURS:\r\n var f = self.ampm ? 1 : 2;\r\n var t = self.ampm ? 12 : 23;\r\n for(var i = f; i <= t; i+=f)\r\n self.steps.push(i);\r\n if (!self.ampm) self.steps.push(0);\r\n self.selected = self.time.hours() || 0;\r\n if(self.ampm && self.selected > 12) self.selected -= 12;\r\n\r\n break;\r\n case TYPE_MINUTES:\r\n for(var i = 5; i <= 55; i+=5)\r\n self.steps.push(i);\r\n self.steps.push(0);\r\n self.selected = self.time.minutes() || 0;\r\n\r\n break;\r\n }\r\n };\r\n\r\n this.getPointerStyle = function() {\r\n var divider = 1;\r\n switch(self.type) {\r\n case TYPE_HOURS:\r\n divider = self.ampm ? 12 : 24;\r\n break;\r\n case TYPE_MINUTES:\r\n divider = 60;\r\n break;\r\n }\r\n\r\n var degrees = Math.round(self.selected * (360 / divider)) - 180;\r\n return {\r\n\r\n \"-webkit-transform\": \"rotate(\" + degrees + \"deg)\",\r\n \"-ms-transform\": \"rotate(\" + degrees + \"deg)\",\r\n \"transform\": \"rotate(\" + degrees + \"deg)\"\r\n }\r\n };\r\n\r\n this.setTimeByDeg = function(deg) {\r\n deg = deg >= 360 ? 0 : deg;\r\n var divider = 0;\r\n switch(self.type) {\r\n case TYPE_HOURS:\r\n divider = self.ampm ? 12 : 24;\r\n break;\r\n case TYPE_MINUTES:\r\n divider = 60;\r\n break;\r\n }\r\n\r\n self.setTime(\r\n Math.round(divider / 360 * deg)\r\n );\r\n };\r\n\r\n this.setTime = function(time, type) {\r\n this.selected = time;\r\n\r\n switch(self.type) {\r\n case TYPE_HOURS:\r\n if(self.ampm && self.time.format(\"A\") == \"PM\") time += 12;\r\n this.time.hours(time);\r\n break;\r\n case TYPE_MINUTES:\r\n if(time > 59) time -= 60;\r\n this.time.minutes(time);\r\n break;\r\n }\r\n\r\n };\r\n}\r\n\r\nmodule.directive(\"mdpClock\", [\"$animate\", \"$timeout\", function($animate, $timeout) {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n 'type': '@?',\r\n 'time': '=',\r\n 'autoSwitch': '=?',\r\n 'ampm': '=?'\r\n },\r\n replace: true,\r\n template: '' +\r\n '
' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '{{ step }}' +\r\n '
' +\r\n '
',\r\n controller: [\"$scope\", ClockCtrl],\r\n controllerAs: \"clock\",\r\n link: function(scope, element, attrs, ctrl) {\r\n var pointer = angular.element(element[0].querySelector(\".mdp-pointer\")),\r\n\t\t\t\ttimepickerCtrl = scope.$parent.timepicker;\r\n\t\t\t\t\r\n scope.raised = false;\r\n\r\n var onEvent = function(event) {\r\n var containerCoords = event.currentTarget.getClientRects()[0];\r\n var x = ((event.currentTarget.offsetWidth / 2) - (event.pageX - containerCoords.left)),\r\n y = ((event.pageY - containerCoords.top) - (event.currentTarget.offsetHeight / 2));\r\n\r\n var deg = Math.round((Math.atan2(x, y) * (180 / Math.PI)));\r\n $timeout(function() {\r\n ctrl.setTimeByDeg(deg + 180);\r\n if(ctrl.autoSwitch && [\"mouseup\", \"click\"].indexOf(event.type) !== -1 && timepickerCtrl) timepickerCtrl.switchView();\r\n });\r\n };\r\n\r\n element.on(\"mousedown\", function() {\r\n element.on(\"mousemove\", onEvent);\r\n });\r\n\r\n element.on(\"mouseup\", function(e) {\r\n element.off(\"mousemove\");\r\n });\r\n\r\n element.on(\"click\", onEvent);\r\n scope.$on(\"$destroy\", function() {\r\n element.off(\"click\", onEvent);\r\n element.off(\"mousemove\", onEvent);\r\n\r\n });\r\n }\r\n }\r\n}]);\r\n\r\nmodule.provider(\"$mdpTimePicker\", function() {\r\n var LABEL_OK = \"OK\",\r\n LABEL_CANCEL = \"Cancel\",\r\n PARENT_GETTER = function() { return undefined };\r\n\r\n this.setOKButtonLabel = function(label) {\r\n LABEL_OK = label;\r\n };\r\n\r\n this.setCancelButtonLabel = function(label) {\r\n LABEL_CANCEL = label;\r\n };\r\n\r\n this.setDialogParentGetter = function(fn) {\r\n PARENT_GETTER = fn;\r\n };\r\n\r\n this.$get = [\"$mdDialog\", \"$mdpLocale\", function($mdDialog, $mdpLocale) {\r\n var timePicker = function(time, options) {\r\n if(!angular.isDate(time)) time = Date.now();\r\n if (!angular.isObject(options)) options = {};\r\n\r\n var labelOk = options.okLabel || $mdpLocale.time.okLabel || LABEL_OK;\r\n var labelCancel = options.cancelLabel || $mdpLocale.time.cancelLabel || LABEL_CANCEL;\r\n\r\n return $mdDialog.show({\r\n controller: ['$scope', '$mdDialog', 'time', 'autoSwitch', 'ampm', '$mdMedia', TimePickerCtrl],\r\n controllerAs: 'timepicker',\r\n clickOutsideToClose: true,\r\n template: '' +\r\n '' +\r\n '' +\r\n '
' +\r\n '{{ timepicker.time.format(timepicker.hoursFormat) }}:' +\r\n\r\n '{{ timepicker.time.format(timepicker.minutesFormat) }}' +\r\n '
' +\r\n '
' +\r\n\r\n 'AM' +\r\n '= 12 }\">PM' +\r\n '
' +\r\n\r\n '
' +\r\n '' +\r\n '
' +\r\n '' +\r\n '' +\r\n '
' +\r\n\r\n '' +\r\n '' +\r\n '' + labelCancel + '' +\r\n '' + labelOk + '' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '
',\r\n targetEvent: options.targetEvent,\r\n locals: {\r\n time: time,\r\n autoSwitch: options.autoSwitch,\r\n ampm: angular.isDefined(options.ampm) ? options.ampm : $mdpLocale.time.ampm\r\n },\r\n multiple: true,\r\n parent: PARENT_GETTER()\r\n });\r\n };\r\n\r\n return timePicker;\r\n }];\r\n});\r\n\r\nfunction compareTimeValidator(value, format, otherTime, comparator) {\r\n // take only the date part, not the time part\r\n if (angular.isDate(otherTime)) {\r\n otherTime = moment(otherTime).format(format);\r\n }\r\n otherTime = moment(otherTime, format, true);\r\n var date = angular.isDate(value) ? moment(value) : moment(value, format, true);\r\n\r\n return !value ||\r\n angular.isDate(value) ||\r\n !otherTime.isValid() ||\r\n comparator(date, otherTime);\r\n}\r\n\r\nfunction minTimeValidator(value, format, minTime) {\r\n return compareTimeValidator(value, format, minTime, function(t, mt) { return t.isSameOrAfter(mt); });\r\n}\r\n\r\nfunction maxTimeValidator(value, format, maxTime) {\r\n return compareTimeValidator(value, format, maxTime, function(t, mt) { return t.isSameOrBefore(mt); });\r\n}\r\n\r\nmodule.directive(\"mdpTimePicker\", [\"$mdpTimePicker\", \"$timeout\", \"$mdpLocale\", function($mdpTimePicker, $timeout, $mdpLocale) {\r\n return {\r\n restrict: 'E',\r\n require: ['ngModel', \"^^?form\"],\r\n transclude: true,\r\n template: function(element, attrs) {\r\n var noFloat = angular.isDefined(attrs.mdpNoFloat) || $mdpLocale.time.noFloat,\r\n openOnClick = angular.isDefined(attrs.mdpOpenOnClick) || $mdpLocale.time.openOnClick;\r\n\r\n return '
' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
';\r\n },\r\n scope: {\r\n \"minTime\": \"=?mdpMinTime\",\r\n \"maxTime\": \"=?mdpMaxTime\",\r\n \"timeFormat\": \"@mdpFormat\",\r\n \"okLabel\": \"@?mdpOkLabel\",\r\n \"cancelLabel\": \"@?mdpCancelLabel\",\r\n \"placeholder\": \"@mdpPlaceholder\",\r\n \"autoSwitch\": \"=?mdpAutoSwitch\",\r\n \"disabled\": \"=?mdpDisabled\",\r\n \"ampm\": \"=?mdpAmpm\",\r\n \"inputName\": \"@?mdpInputName\",\r\n \"clearOnCancel\": \"=?mdpClearOnCancel\"\r\n },\r\n link: function(scope, element, attrs, controllers, $transclude) {\r\n var ngModel = controllers[0];\r\n var form = controllers[1];\r\n\r\n var opts = {\r\n get minTime() {\r\n return scope.minTime || $mdpLocale.time.minTime;\r\n },\r\n get maxTime() {\r\n return scope.maxTime || $mdpLocale.time.maxTime;\r\n },\r\n get clearOnCancel() {\r\n return angular.isDefined(scope.clearOnCancel) ? scope.clearOnCancel : $mdpLocale.time.clearOnCancel;\r\n }\r\n };\r\n\r\n var inputElement = angular.element(element[0].querySelector('input')),\r\n inputContainer = angular.element(element[0].querySelector('md-input-container')),\r\n inputContainerCtrl = inputContainer.controller(\"mdInputContainer\");\r\n\r\n $transclude(function(clone) {\r\n inputContainer.append(clone);\r\n });\r\n\r\n var messages = angular.element(inputContainer[0].querySelector(\"[ng-messages]\"));\r\n\r\n scope.type = scope.timeFormat || $mdpLocale.time.timeFormat ? \"text\" : \"time\";\r\n scope.timeFormat = scope.timeFormat || $mdpLocale.time.timeFormat || \"HH:mm\";\r\n scope.autoSwitch = scope.autoSwitch === undefined ? $mdpLocale.time.autoSwitch : scope.autoSwitch;\r\n scope.model = ngModel;\r\n\r\n scope.isError = function() {\r\n return !!ngModel.$invalid && (!ngModel.$pristine || (form != null && form.$submitted));\r\n };\r\n\r\n scope.required = function() {\r\n return !!attrs.required;\r\n };\r\n\r\n scope.$watch(function() { return ngModel.$error }, function(newValue, oldValue) {\r\n inputContainerCtrl.setInvalid(!ngModel.$pristine && !!Object.keys(ngModel.$error).length);\r\n }, true);\r\n\r\n // update input element if model has changed\r\n ngModel.$formatters.unshift(function(value) {\r\n var time = angular.isDate(value) && moment(value);\r\n if(time && time.isValid()) {\r\n var strVal = time.format(scope.timeFormat);\r\n updateInputElement(strVal);\r\n return strVal;\r\n } else {\r\n updateInputElement(null);\r\n return null;\r\n }\r\n });\r\n\r\n ngModel.$validators.format = function(modelValue, viewValue) {\r\n return !viewValue || angular.isDate(viewValue) || moment(viewValue, scope.timeFormat, true).isValid();\r\n };\r\n\r\n ngModel.$validators.required = function(modelValue, viewValue) {\r\n return angular.isUndefined(attrs.required) || attrs.required === false || !ngModel.$isEmpty(modelValue) || !ngModel.$isEmpty(viewValue);\r\n };\r\n \r\n ngModel.$validators.minTime = function(modelValue, viewValue) {\r\n return minTimeValidator(viewValue, scope.timeFormat, opts.minTime);\r\n };\r\n\r\n ngModel.$validators.maxTime = function(modelValue, viewValue) {\r\n return maxTimeValidator(viewValue, scope.timeFormat, opts.maxTime);\r\n };\r\n\r\n ngModel.$parsers.unshift(function(value) {\r\n var parsed = moment(value, scope.timeFormat, true);\r\n if(parsed.isValid()) {\r\n if(angular.isDate(ngModel.$modelValue)) {\r\n var originalModel = moment(ngModel.$modelValue);\r\n originalModel.minutes(parsed.minutes());\r\n originalModel.hours(parsed.hours());\r\n originalModel.seconds(parsed.seconds());\r\n\r\n parsed = originalModel;\r\n }\r\n return parsed.toDate();\r\n\r\n } else\r\n return null;\r\n });\r\n\r\n // update input element value\r\n function updateInputElement(value) {\r\n inputElement[0].value = value;\r\n inputContainerCtrl.setHasValue(!ngModel.$isEmpty(value));\r\n }\r\n\r\n function updateTime(time) {\r\n var value = moment(time, angular.isDate(time) ? null : scope.timeFormat, true),\r\n strValue = value.format(scope.timeFormat);\r\n\r\n if(value.isValid()) {\r\n updateInputElement(strValue);\r\n ngModel.$setViewValue(strValue);\r\n } else {\r\n updateInputElement(time);\r\n ngModel.$setViewValue(time);\r\n }\r\n\r\n if(!ngModel.$pristine &&\r\n\r\n messages.hasClass(\"md-auto-hide\") &&\r\n\r\n inputContainer.hasClass(\"md-input-invalid\")) messages.removeClass(\"md-auto-hide\");\r\n\r\n ngModel.$render();\r\n }\r\n\r\n scope.showPicker = function(ev) {\r\n $mdpTimePicker(ngModel.$modelValue, {\r\n targetEvent: ev,\r\n okLabel: scope.okLabel,\r\n cancelLabel: scope.cancelLabel,\r\n autoSwitch: scope.autoSwitch,\r\n ampm: scope.ampm\r\n }).then(function(time) {\r\n updateTime(time, true);\r\n }, function (error) {\r\n if (opts.clearOnCancel) {\r\n updateTime(null, true);\r\n }\r\n });\r\n };\r\n\r\n function onInputElementEvents(event) {\r\n if(event.target.value !== ngModel.$viewVaue)\r\n updateTime(event.target.value);\r\n }\r\n\r\n inputElement.on(\"reset input blur\", onInputElementEvents);\r\n\r\n scope.$on(\"$destroy\", function() {\r\n inputElement.off(\"reset input blur\", onInputElementEvents);\r\n });\r\n\r\n // revalidate on constraint change\r\n scope.$watch(\"minTime + maxTime\", function() {\r\n ngModel.$validate();\r\n });\r\n }\r\n };\r\n}]);\r\n\r\nmodule.directive(\"mdpTimePicker\", [\"$mdpTimePicker\", \"$timeout\", function($mdpTimePicker, $timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n scope: {\r\n \"timeFormat\": \"@mdpFormat\",\r\n \"okLabel\": \"@?mdpOkLabel\",\r\n \"cancelLabel\": \"@?mdpCancelLabel\",\r\n \"autoSwitch\": \"=?mdpAutoSwitch\",\r\n \"ampm\": \"=?mdpAmpm\"\r\n },\r\n link: function(scope, element, attrs, ngModel, $transclude) {\r\n scope.format = scope.format || \"HH:mm\";\r\n function showPicker(ev) {\r\n $mdpTimePicker(ngModel.$modelValue, {\r\n targetEvent: ev,\r\n autoSwitch: scope.autoSwitch,\r\n okLabel: scope.okLabel,\r\n cancelLabel: scope.cancelLabel,\r\n ampm: scope.ampm\r\n }).then(function(time) {\r\n ngModel.$setViewValue(moment(time).format(scope.format));\r\n ngModel.$render();\r\n });\r\n };\r\n\r\n element.on(\"click\", showPicker);\r\n\r\n scope.$on(\"$destroy\", function() {\r\n element.off(\"click\", showPicker);\r\n });\r\n }\r\n }\r\n}]);\r\n\n})();"]}