if (typeof moment === 'undefined') {
if(typeof require === 'function') {
var moment = require('moment'); // Using nw.js or browserify?
} else {
throw new Error('Moment cannot be found by smdatetimerangepicker.');
}
}
(function() {
/* global moment */
(function(){
'use strict';
function Calender(picker){
return {
restrict : 'E',
replace:false,
require: ['^ngModel', 'smCalender'],
scope :{
minDate: '=',
maxDate: '=',
initialDate : '=',
format: '@',
mode: '@',
startView:'@',
weekStartDay:'@',
disableYearSelection:'@',
dateSelectCall : '&'
},
controller:['$scope', '$timeout', 'picker', '$mdMedia', CalenderCtrl],
controllerAs : 'vm',
templateUrl:'picker/calender-date.html',
link : function(scope, element, attr, ctrls){
var ngModelCtrl = ctrls[0];
var calCtrl = ctrls[1];
calCtrl.configureNgModel(ngModelCtrl);
}
};
}
var CalenderCtrl = function($scope, $timeout, picker, $mdMedia){
var self = this;
self.$scope = $scope;
self.$timeout = $timeout;
self.picker = picker;
self.dayHeader = self.picker.dayHeader;
self.colorIntention = picker.colorIntention;
self.initialDate = $scope.initialDate;
self.viewModeSmall = $mdMedia('xs');
self.startDay = angular.isUndefined($scope.weekStartDay) || $scope.weekStartDay==='' ? 'Sunday' : $scope.weekStartDay ;
self.minDate = $scope.minDate || undefined; //Minimum date
self.maxDate = $scope.maxDate || undefined; //Maximum date
self.mode = angular.isUndefined($scope.mode) ? 'DATE' : $scope.mode;
self.format = angular.isUndefined($scope.format)? picker.format : $scope.format;
self.restrictToMinDate = angular.isUndefined(self.minDate) ? false : true;
self.restrictToMaxDate = angular.isUndefined(self.maxDate) ? false : true;
self.stopScrollPrevious =false;
self.stopScrollNext = false;
self.disableYearSelection = $scope.disableYearSelection;
self.monthCells=[];
self.dateCellHeader= [];
self.dateCells = [];
self.monthList = moment.monthsShort();
self.moveCalenderAnimation='';
self.format = angular.isUndefined(self.format) ? 'MM-DD-YYYY': self.format;
self.initialDate = angular.isUndefined(self.initialDate) ? moment() : moment(self.initialDate, self.format);
self.currentDate = self.initialDate.clone();
self.minYear = 1900;
self.maxYear = 3000;
if(self.restrictToMinDate){
if(!moment.isMoment(self.minDate)){
self.minDate = moment(self.minDate, self.format);
}
/* the below code is giving some errors. It was added by Pablo Reyes, but I still need to check what
he intended to fix.
if(moment.isMoment(self.minDate)){
self.minDate = self.minDate.subtract(1, 'd').startOf('day');
}else{
self.minDate = moment(self.minDate, self.format).subtract(1, 'd').startOf('day');
}
self.minYear = self.minDate.year();
*/
}
if(self.restrictToMaxDate) {
if(!moment.isMoment(self.maxDate)){
self.maxDate = moment(self.maxDate, self.format).startOf('day');
self.maxYear = self.maxDate.year();
}
}
self.yearItems = {
currentIndex_: 1,
PAGE_SIZE: 7,
START: self.minYear,
getItemAtIndex: function(index) {
if(!this.START+ index<=(self.maxYear)) {
return (this.START+ index);
}else{
return this.START ;
}
if(this.currentIndex_ < index){
this.currentIndex_ = index;
return this.START + index;
}
if(this.currentIndex_ < index){
this.currentIndex_ = index;
}
return this.START + index;
},
getLength: function() {
return this.currentIndex_ + Math.floor(this.PAGE_SIZE / 2);
}
};
self.init();
};
CalenderCtrl.prototype.setInitDate = function(dt) {
var self = this;
self.initialDate =angular.isUndefined( dt) ? moment() : moment( dt, self.format);
};
CalenderCtrl.prototype.configureNgModel = function(ngModelCtrl) {
var self = this;
self.ngModelCtrl = ngModelCtrl;
self.ngModelCtrl.$formatters.push(function(dateValue) {
if(self.format){
if(dateValue){
if(moment.isMoment(dateValue)){
self.initialDate = dateValue;
}else{
self.initialDate = moment(dateValue, self.format);
}
}
self.currentDate = self.initialDate.clone();
self.buildDateCells();
}
});
};
CalenderCtrl.prototype.setNgModelValue = function(date) {
var self = this;
self.ngModelCtrl.$setViewValue(date);
self.ngModelCtrl.$render();
};
CalenderCtrl.prototype.init = function(){
var self = this;
self.buildDateCells();
self.buildDateCellHeader();
self.buildMonthCells();
self.setView();
self.showYear();
};
CalenderCtrl.prototype.setView = function(){
var self = this;
self.headerDispalyFormat = 'ddd, MMM DD';
switch(self.mode) {
case 'date-time':
self.view = 'DATE';
self.headerDispalyFormat = 'ddd, MMM DD HH:mm';
break;
case 'time':
self.view = 'HOUR';
self.headerDispalyFormat = 'HH:mm';
break;
default:
self.view = 'DATE';
}
};
CalenderCtrl.prototype.showYear = function() {
var self = this;
self.yearTopIndex = (self.initialDate.year() - self.yearItems.START) + Math.floor(self.yearItems.PAGE_SIZE / 2);
self.yearItems.currentIndex_ = (self.initialDate.year() - self.yearItems.START)-1;
};
CalenderCtrl.prototype.buildMonthCells = function(){
var self = this;
self.monthCells = moment.months();
};
CalenderCtrl.prototype.buildDateCells = function(){
var self = this;
var currentMonth = self.initialDate.month();
var calStartDate = self.initialDate.clone().date(0).day(self.startDay).startOf('day');
var lastDayOfMonth = self.initialDate.clone().endOf('month');
var weekend = false;
var isDisabledDate =false;
/*
Check if min date is greater than first date of month
if true than set stopScrollPrevious=true
*/
if(!angular.isUndefined(self.minDate)){
self.stopScrollPrevious = self.minDate.unix() >= calStartDate.unix();
}
self.dateCells =[];
for (var i = 0; i < 6; i++) {
var week = [];
for (var j = 0; j < 7; j++) {
var isCurrentMonth = (calStartDate.month()=== currentMonth);
isDisabledDate = isCurrentMonth? false:true;
//if(isCurrentMonth){isDisabledDate=false}else{isDisabledDate=true};
if(self.restrictToMinDate && !angular.isUndefined(self.minDate) && !isDisabledDate)
isDisabledDate = self.minDate.isAfter(calStartDate);
if(self.restrictToMaxDate && !angular.isUndefined(self.maxDate) && !isDisabledDate)
isDisabledDate = self.maxDate.isBefore(calStartDate);
var day = {
date : calStartDate.clone(),
dayNum: isCurrentMonth ? calStartDate.date() :'',
month : calStartDate.month(),
today: calStartDate.isSame(moment(), 'day') && calStartDate.isSame(moment(), 'month'),
year : calStartDate.year(),
dayName : calStartDate.format('dddd'),
isWeekEnd : weekend,
isDisabledDate : isDisabledDate,
isCurrentMonth : isCurrentMonth
};
week.push(day);
calStartDate.add(1, 'd');
}
self.dateCells.push(week);
}
/*
Check if max date is greater than first date of month
if true than set stopScrollPrevious=true
*/
if(self.restrictToMaxDate && !angular.isUndefined(self.maxDate)){
self.stopScrollNext = self.maxDate.isBefore(lastDayOfMonth);
}
if(self.dateCells[0][6].isDisabledDate && !self.dateCells[0][6].isCurrentMonth){
self.dateCells[0].splice(0);
}
};
CalenderCtrl.prototype.changePeriod = function(c){
var self = this;
if(c === 'p'){
if(self.stopScrollPrevious) return;
self.moveCalenderAnimation='slideLeft';
self.initialDate.subtract(1, 'M');
}else{
if(self.stopScrollNext) return;
self.moveCalenderAnimation='slideRight';
self.initialDate.add(1, 'M');
}
self.buildDateCells();
self.$timeout(function(){
self.moveCalenderAnimation='';
}, 500);
};
CalenderCtrl.prototype.selectDate = function(d, isDisabled){
var self = this;
if (isDisabled) {
return;
}
/* Related to issue #173. After chrome v73, the calendar started to fail. I did not find
any explanation yet but this delay fix the issue. */
self.$timeout(function(){
self.currentDate = d;
self.$scope.dateSelectCall({date:d});
/*
* No need to save the model yet. It must be stored until "save" is clicked.
* @see bug #147.
* self.setNgModelValue(d);
*/
self.$scope.$emit('calender:date-selected');
}, 0);
};
CalenderCtrl.prototype.buildDateCellHeader = function(startFrom) {
var self = this;
var daysByName = self.picker.daysNames;
var keys = [];
var key;
for (key in daysByName) {
keys.push(key);
}
var startIndex = moment().day(self.startDay).day(), count = 0;
for (key in daysByName) {
self.dateCellHeader.push(daysByName[ keys[ (count + startIndex) % (keys.length)] ]);
count++; // Don't forget to increase count.
}
};
/*
Month Picker
*/
CalenderCtrl.prototype.changeView = function(view){
var self = this;
if(self.disableYearSelection){
return;
}else{
if(view==='YEAR_MONTH'){
self.showYear();
}
self.view =view;
}
};
/*
Year Picker
*/
CalenderCtrl.prototype.changeYear = function(yr, mn){
var self = this;
self.initialDate.year(yr).month(mn);
self.buildDateCells();
self.view='DATE';
};
/*
Hour and Time
*/
CalenderCtrl.prototype.setHour = function(h){
var self = this;
self.currentDate.hour(h);
};
CalenderCtrl.prototype.setMinute = function(m){
var self = this;
self.currentDate.minute(m);
};
CalenderCtrl.prototype.selectedDateTime = function(){
var self = this;
self.setNgModelValue(self.currentDate);
if(self.mode === 'time')
self.view='HOUR';
else
self.view='DATE';
self.$scope.$emit('calender:close');
};
CalenderCtrl.prototype.closeDateTime = function(){
var self = this;
if(self.mode === 'time')
self.view='HOUR';
else
self.view='DATE';
self.$scope.$emit('calender:close');
};
Calender.$inject = ['picker'];
CalenderCtrl.prototype.isPreviousDate = function(yearToCheck, monthToCheck)
{
var self = this;
if(angular.isUndefined(self.minDate) || angular.isUndefined(yearToCheck) || angular.isUndefined(monthToCheck))
{
return false;
}
var _current_year = self.minDate.year();
if(yearToCheck < _current_year)
{
return true;
}else if(yearToCheck === _current_year)
{
if(monthToCheck < self.minDate.month())
{
return true;
}
}
return false;
};
var app = angular.module('smDateTimeRangePicker', []);
app.directive('smCalender', Calender);
})();
/* global moment */
(function(){
'use strict';
function TimePicker(){
return {
restrict : 'E',
replace:true,
require: ['^ngModel', 'smTime'],
scope :{
initialTime : '@',
format:'@',
timeSelectCall : '&'
},
controller:['$scope', 'picker', TimePickerCtrl],
controllerAs : 'vm',
templateUrl:'picker/calender-hour.html',
link : function(scope, element, att, ctrls){
var ngModelCtrl = ctrls[0];
var calCtrl = ctrls[1];
calCtrl.configureNgModel(ngModelCtrl);
}
}
}
var TimePickerCtrl = function($scope, picker){
var self = this;
self.uid = Math.random().toString(36).substr(2, 5);
self.$scope = $scope;
self.picker = picker;
self.initialDate = $scope.initialTime; //if calender to be initiated with specific date
self.colorIntention = picker.colorIntention;
self.format = $scope.format;
self.hourItems =[];
self.minuteCells =[];
self.format = angular.isUndefined(self.format) ? 'HH:mm': self.format;
self.initialDate = angular.isUndefined(self.initialDate)? moment() : moment(self.initialDate, self.format);
self.currentDate = self.initialDate.clone();
self.hourSet =false;
self.minuteSet = false;
self.show=true;
self.init();
}
TimePickerCtrl.prototype.init = function(){
var self = this;
self.buidHourCells();
self.buidMinuteCells();
self.headerDispalyFormat = 'HH:mm';
self.showHour();
};
TimePickerCtrl.prototype.showHour = function() {
var self = this;
self.hourTopIndex = 22;
self.minuteTopIndex = (self.initialDate.minute() -0) + Math.floor(7 / 2);
//self.yearTopIndex = (self.initialDate.year() - self.yearItems.START) + Math.floor(self.yearItems.PAGE_SIZE / 2);
// self.hourItems.currentIndex_ = (self.initialDate.hour() - self.hourItems.START) + 1;
};
TimePickerCtrl.prototype.configureNgModel = function(ngModelCtrl) {
this.ngModelCtrl = ngModelCtrl;
var self = this;
ngModelCtrl.$render = function() {
self.ngModelCtrl.$viewValue= self.currentDate;
};
};
TimePickerCtrl.prototype.setNgModelValue = function(date) {
var self = this;
self.ngModelCtrl.$setViewValue(date);
self.ngModelCtrl.$render();
};
TimePickerCtrl.prototype.buidHourCells = function(){
var self = this;
for (var i = 0 ; i <= 23; i++) {
var hour={
hour : i,
isCurrent :(self.initialDate.hour())=== i
}
self.hourItems.push(hour);
};
};
TimePickerCtrl.prototype.buidMinuteCells = function(){
var self = this;
self.minuteTopIndex = self.initialDate.minute();
for (var i = 0 ; i <= 59; i++) {
var minute = {
minute : i,
isCurrent : (self.initialDate.minute())=== i,
}
self.minuteCells.push(minute);
};
};
TimePickerCtrl.prototype.selectDate = function(d, isDisabled){
var self = this;
if (isDisabled) return;
self.currentDate = d;
self.$scope.$emit('calender:date-selected');
}
TimePickerCtrl.prototype.setHour = function(h){
var self = this;
self.currentDate.hour(h);
self.setNgModelValue(self.currentDate);
self.hourSet =true;
if(self.hourSet && self.minuteSet){
self.$scope.timeSelectCall({time: self.currentDate});
self.hourSet=false;
self.minuteSet=false;
}
}
TimePickerCtrl.prototype.setMinute = function(m){
var self = this;
self.currentDate.minute(m);
self.setNgModelValue(self.currentDate);
self.minuteSet =true;
if(self.hourSet && self.minuteSet){
self.$scope.timeSelectCall({time: self.currentDate});
self.hourSet=false;
self.minuteSet=false;
}
}
TimePickerCtrl.prototype.selectedDateTime = function(){
var self = this;
self.setNgModelValue(self.currentDate);
if(self.mode === 'time')
self.view='HOUR'
else
self.view='DATE';
self.$scope.$emit('calender:close');
}
var app = angular.module('smDateTimeRangePicker');
app.directive('smTime', ['$timeout', TimePicker]);
})();
/* global moment */
(function(){
'use strict';
function DatePickerDir($timeout, picker, $mdMedia, $window) {
return {
restrict : 'E',
require: ['^ngModel', 'smDatePicker'],
replace: false,
scope :{
initialDate : '=',
minDate :'=',
maxDate:'=',
format:'@',
mode:'@',
startDay:'@',
closeOnSelect:'@',
weekStartDay:'@',
disableYearSelection: '@',
onSelectCall : '&'
},
controller: ['$scope', 'picker', '$mdMedia', PickerCtrl],
controllerAs: 'vm',
bindToController:true,
templateUrl:'picker/date-picker.html',
link : function(scope, element, att, ctrls){
var ngModelCtrl = ctrls[0];
var calCtrl = ctrls[1];
calCtrl.configureNgModel(ngModelCtrl);
}
};
}
var PickerCtrl = function($scope, picker, $mdMedia){
var self = this;
self.scope = $scope;
self.okLabel = picker.okLabel;
self.cancelLabel = picker.cancelLabel;
self.picker = picker;
self.colorIntention = picker.colorIntention;
self.$mdMedia =$mdMedia;
self.init();
};
PickerCtrl.prototype.init = function() {
var self = this;
if(angular.isUndefined(self.mode) || self.mode ===''){
self.mode = 'date';
}
self.currentDate = isNaN(self.ngModelCtrl) ? moment(): self.ngModelCtrl.$viewValue ;
self.setViewMode(self.mode);
};
PickerCtrl.prototype.configureNgModel = function(ngModelCtrl) {
var self = this;
self.ngModelCtrl = ngModelCtrl;
self.ngModelCtrl.$render = function() {
self.ngModelCtrl.$viewValue= ngModelCtrl.$viewValue;
self.ngModelCtrl.$modelvalue= ngModelCtrl.$modelvalue;
self.initialDate = self.ngModelCtrl.$viewValue;
};
};
PickerCtrl.prototype.setViewMode = function(mode){
var self = this;
switch(mode) {
case 'date':
self.view = 'DATE';
self.headerDispalyFormat = self.picker.customHeader.date;
break;
case 'date-time':
self.view = 'DATE';
self.headerDispalyFormat = self.picker.customHeader.dateTime;
break;
case 'time':
self.view = 'TIME';
self.headerDispalyFormat = 'HH:mm';
break;
default:
self.headerDispalyFormat = 'ddd, MMM DD ';
self.view = 'DATE';
}
};
PickerCtrl.prototype.setNextView = function(){
var self = this;
switch (self.mode){
case 'date':
self.view = 'DATE';
break;
case 'date-time':
self.view = self.view==='DATE' ? 'TIME':'DATE';
break;
default:
self.view = 'DATE';
}
};
PickerCtrl.prototype.selectedDateTime = function(){
var self = this;
var date = moment(self.selectedDate, self.format);
if(!date.isValid()){
date = moment();
self.selectedDate =date;
}
if(!angular.isUndefined(self.selectedTime)){
date.hour(self.selectedTime.hour()).minute(self.selectedTime.minute());
}
self.setNgModelValue(date);
};
PickerCtrl.prototype.dateSelected = function(date){
var self = this;
self.currentDate.date(date.date()).month(date.month()).year(date.year());
self.selectedDate = self.currentDate;
if(self.closeOnSelect && self.mode==='date'){
self.selectedDateTime();
}else{
self.setNextView();
}
};
PickerCtrl.prototype.timeSelected = function(time){
var self = this;
self.currentDate.hours(time.hour()).minutes(time.minute());
self.selectedTime= self.currentDate;
if(self.closeOnSelect && self.mode==='date-time')
self.selectedDateTime();
else
self.setNextView();
};
PickerCtrl.prototype.setNgModelValue = function(date) {
var self = this;
self.onSelectCall({date: date});
self.ngModelCtrl.$setViewValue(date.format(self.format));
self.ngModelCtrl.$render();
self.closeDateTime();
};
PickerCtrl.prototype.closeDateTime = function(){
var self = this;
self.view = 'DATE';
self.scope.$emit('calender:close');
};
function TimePickerDir($timeout, picker, $mdMedia, $window) {
return {
restrict : 'E',
require: '^ngModel',
replace:true,
scope :{
initialDate : '@',
format:'@',
mode:'@',
closeOnSelect:'@'
},
templateUrl:'picker/time-picker.html',
link : function(scope, element, att, ngModelCtrl){
setViewMode(scope.mode);
scope.okLabel = picker.okLabel;
scope.cancelLabel = picker.cancelLabel;
scope.currentDate = isNaN(ngModelCtrl.$viewValue) ? moment(): ngModelCtrl.$viewValue ;
scope.$mdMedia =$mdMedia;
function setViewMode(mode){
switch(mode) {
case 'date-time':
scope.view = 'DATE';
scope.headerDispalyFormat = 'ddd, MMM DD HH:mm';
break;
case 'time':
scope.view = 'HOUR';
scope.headerDispalyFormat = 'HH:mm';
break;
default:
scope.view = 'DATE';
}
}
scope.$on('calender:date-selected', function(){
if(scope.closeOnSelect && (scope.mode!=='date-time' || scope.mode!=='time')){
var date = moment(scope.selectedDate, scope.format);
if(!date.isValid()){
date = moment();
scope.selectedDate =date;
}
if(!angular.isUndefined(scope.selectedTime)){
date.hour(scope.selectedTime.hour()).minute(scope.selectedTime.minute());
}
scope.currentDate =scope.selectedDate;
ngModelCtrl.$setViewValue(date.format(scope.format));
ngModelCtrl.$render();
setViewMode(scope.mode);
scope.$emit('calender:close');
}
});
scope.selectedDateTime = function(){
var date = moment(scope.selectedDate, scope.format);
if(!date.isValid()){
date = moment();
scope.selectedDate =date;
}
if(!angular.isUndefined(scope.selectedTime)){
date.hour(scope.selectedTime.hour()).minute(scope.selectedTime.minute());
}
scope.currentDate =scope.selectedDate;
ngModelCtrl.$setViewValue(date.format(scope.format));
ngModelCtrl.$render();
setViewMode(scope.mode);
scope.$emit('calender:close');
};
scope.closeDateTime = function(){
scope.$emit('calender:close');
};
}
};
}
var app = angular.module('smDateTimeRangePicker');
app.directive('smDatePicker', ['$timeout', 'picker', '$mdMedia', '$window', DatePickerDir]);
app.directive('smTimePicker', ['$timeout', 'picker', '$mdMedia', '$window', TimePickerDir]);
})();
/* global moment */
(function(){
'use strict';
var app = angular.module('smDateTimeRangePicker');
function DatePickerServiceCtrl($scope, $mdDialog, $mdMedia, $timeout, $mdUtil, picker){
var self = this;
if(!angular.isUndefined(self.options) && (angular.isObject(self.options))){
self.mode = isExist(self.options.mode, self.mode);
self.format = isExist(self.options.format, 'MM-DD-YYYY');
self.minDate = isExist(self.options.minDate, undefined);
self.maxDate = isExist(self.options.maxDate, undefined);
self.weekStartDay = isExist(self.options.weekStartDay, 'Sunday');
self.closeOnSelect =isExist(self.options.closeOnSelect, false);
}
if(!angular.isObject(self.initialDate)){
self.initialDate = moment(self.initialDate, self.format);
self.selectedDate = self.initialDate;
}
self.currentDate = self.initialDate;
self.viewDate = self.currentDate;
self.view = 'DATE';
self.$mdMedia = $mdMedia;
self.$mdUtil = $mdUtil;
self.okLabel = picker.okLabel;
self.cancelLabel = picker.cancelLabel;
setViewMode(self.mode);
function isExist(val, def){
return angular.isUndefined(val)? def:val;
}
function setViewMode(mode){
switch(mode) {
case 'date':
self.headerDispalyFormat = 'ddd, MMM DD ';
break;
case 'date-time':
self.headerDispalyFormat = 'ddd, MMM DD HH:mm';
break;
case 'time':
self.headerDispalyFormat = 'HH:mm';
break;
default:
self.headerDispalyFormat = 'ddd, MMM DD ';
}
}
self.autoClosePicker = function(){
if(self.closeOnSelect){
if(angular.isUndefined(self.selectedDate)){
self.selectedDate = self.initialDate;
}
//removeMask();
$mdDialog.hide(self.selectedDate.format(self.format));
}
}
self.dateSelected = function(date){
self.selectedDate = date;
self.viewDate = date;
if(self.mode==='date-time')
self.view = 'HOUR';
else
self.autoClosePicker();
}
self.timeSelected = function(time){
self.selectedDate.hour(time.hour()).minute(time.minute());
self.viewDate = self.selectedDate;
self.autoClosePicker();
}
self.closeDateTime = function(){
$mdDialog.cancel();
removeMask();
}
self.selectedDateTime = function(){
if(angular.isUndefined(self.selectedDate)){
self.selectedDate= self.currentDate;
}
$mdDialog.hide(self.selectedDate.format(self.format));
removeMask();
}
function removeMask(){
var ele = document.getElementsByClassName('md-scroll-mask');
if(ele.length!==0){
angular.element(ele).remove();
}
}
}
app.provider('smDateTimePicker', function() {
this.$get = ['$mdDialog', function($mdDialog) {
var datePicker = function(initialDate, options) {
if (angular.isUndefined(initialDate)) initialDate = moment();
if (!angular.isObject(options)) options = {};
return $mdDialog.show({
controller: ['$scope', '$mdDialog', '$mdMedia', '$timeout', '$mdUtil', 'picker', DatePickerServiceCtrl],
controllerAs: 'vm',
bindToController: true,
clickOutsideToClose: true,
targetEvent: options.targetEvent,
templateUrl: 'picker/date-picker-service.html',
locals: {
initialDate: initialDate,
options: options
},
skipHide: true
});
};
return datePicker;
}];
});
})();
/* global moment */
function DateTimePicker($mdUtil, $mdMedia, $document, picker) {
return {
restrict: 'E',
require: ['^ngModel', 'smDateTimePicker'],
scope: {
weekStartDay: '@',
startView: '@',
mode: '@',
format: '@',
minDate: '@',
maxDate: '@',
fname: '@',
label: '@',
isRequired: '@',
disable: '=',
noFloatingLabel: '=',
disableYearSelection: '@',
closeOnSelect: '@',
onDateSelectedCall: '&'
},
controller: ['$scope', '$element', '$mdUtil', '$mdMedia', '$document','$parse', SMDateTimePickerCtrl],
controllerAs: 'vm',
bindToController:true,
template: function (element, attributes){
var inputType = '';
if(attributes.hasOwnProperty('onFocus')) {
inputType = '' ;
} else {
inputType =
''
+ '