UNPKG

consumerportal

Version:

mydna Custimised for you

252 lines (221 loc) 8.3 kB
(function () { 'use strict'; var dd = angular.module('rorymadden.date-dropdowns', []); dd.factory('rsmdateutils', function () { var that = this, dayRange = [1, 31], months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; function changeDate (date) { if(date.day > 28) { date.day--; return date; } else if (date.month > 11) { date.day = 31; date.month--; return date; } } //aDDED cODE function formatDate (date,format) { var day = date.getDate(); var month = date.getMonth(); var year = date.getFullYear(); if (day<10){ day = '0'+day; } if (month<10){ day = '0'+month; } if(format='dd/MM/yyyy') { return day+'/'+ month+'/'+year; } else { //'MM/dd/yyyy' return month+'/'+day+'/'+year; } } return { checkDate: function (date) { var d; if (!date.day || date.month === null || date.month === undefined || !date.year) return false; // d = new Date(Date.UTC(date.year, date.month, date.day)); d = new Date(date.year, date.month, date.day); if (d && (d.getMonth() === date.month && d.getDate() === Number(date.day))) { return d; } return this.checkDate(changeDate(date)); }, days: (function () { var days = []; while (dayRange[0] <= dayRange[1]) { days.push(dayRange[0]++); } return days; }()), months: (function () { var lst = [], mLen = months.length; for (var i = 0; i < mLen; i++) { lst.push({ value: i, name: months[i] }); } return lst; }()) , formatDate: function (date,format) { var day = date.getDate(); var month = date.getMonth()+1; var year = date.getFullYear(); if (day<10){ day = '0'+day; } if (month<10){ month = '0'+month; } if(format='dd/MM/yyyy') { return day+'/'+ month+'/'+year; } else { //'MM/dd/yyyy' return month+'/'+day+'/'+year; } } }; }); dd.directive('rsmdatedropdowns', ['rsmdateutils', function (rsmdateutils) { return { restrict: 'A', replace: true, require: 'ngModel', scope: { model: '=ngModel' }, controller: ['$scope', 'rsmdateutils','$filter', function ($scope, rsmDateUtils,$filter) { $scope.days = rsmDateUtils.days; $scope.months = rsmDateUtils.months; $scope.dateFields = {}; // $scope.dateFields.day = new Date($scope.model).getUTCDate(); // $scope.dateFields.month = new Date($scope.model).getUTCMonth(); // $scope.dateFields.year = new Date($scope.model).getUTCFullYear(); if ($scope.model!==undefined && $scope.model!=""){ var newDate = $scope.model; var dateParts = newDate.split("/"); $scope.dateFields.day = parseInt(dateParts[0]); $scope.dateFields.month = parseInt(dateParts[1])-1; $scope.dateFields.year = parseInt(dateParts[2]); }else{ $scope.dateFields.day = new Date($scope.model).getDate(); $scope.dateFields.month = new Date($scope.model).getMonth(); $scope.dateFields.year = new Date($scope.model).getFullYear(); } // Initialize with current date (if set) $scope.$watch('model', function (newDate) { if(newDate) { // $scope.dateFields.day = new Date(newDate).getUTCDate(); // $scope.dateFields.month = new Date(newDate).getUTCMonth(); // $scope.dateFields.year = new Date(newDate).getUTCFullYear(); if (newDate!==undefined && newDate!=""){ var dateParts = newDate.split("/"); $scope.dateFields.day = parseInt(dateParts[0]); $scope.dateFields.month = parseInt(dateParts[1])-1; $scope.dateFields.year = parseInt(dateParts[2]); }else{ $scope.dateFields.day = new Date(newDate).getDate(); $scope.dateFields.month = new Date(newDate).getMonth(); $scope.dateFields.year = new Date(newDate).getFullYear(); } } }); $scope.checkDate = function () { var date = rsmDateUtils.checkDate($scope.dateFields); if (date) { //$scope.model = date; $scope.model = rsmDateUtils.formatDate(date,$scope.dateFormat); } }; }], template: '<div class="form-inline">' + ' <div class="form-group col-xs-3">' + ' <select name="dateFields.day" data-ng-model="dateFields.day" placeholder="Day" class="form-control" ng-options="day for day in days" ng-change="checkDate()" ng-disabled="disableFields"></select>' + ' </div>' + ' <div class="form-group col-xs-5">' + ' <select name="dateFields.month" data-ng-model="dateFields.month" placeholder="Month" class="form-control" ng-options="month.value as month.name for month in months" value="{{ dateField.month }}" ng-change="checkDate()" ng-disabled="disableFields"></select>' + ' </div>' + ' <div class="form-group col-xs-4">' + ' <select ng-show="!yearText" name="dateFields.year" data-ng-model="dateFields.year" placeholder="Year" class="form-control" ng-options="year for year in years" ng-change="checkDate()" ng-disabled="disableFields"></select>' + // ' <input ng-show="yearText" type="text" name="dateFields.year" data-ng-model="dateFields.year" placeholder="Year" class="form-control" ng-disabled="disableFields">' + ' </div>' + '</div>', link: function (scope, element, attrs, ctrl) { var currentYear = parseInt(attrs.startingYear, 10) || new Date().getFullYear(), numYears = parseInt(attrs.numYears,10) || 100, oldestYear = currentYear - numYears, overridable = [ 'dayDivClass', 'dayClass', 'monthDivClass', 'monthClass', 'yearDivClass', 'yearClass' ], required; scope.dateFormat="MM/dd/yyyy"; scope.years = []; scope.yearText = attrs.yearText ? true : false; if (attrs.ngDisabled) { scope.$parent.$watch(attrs.ngDisabled, function (newVal) { scope.disableFields = newVal; }); } if (attrs.dateFormat) { scope.dateFormat = attrs.dateFormat; } if (attrs.required) { required = attrs.required.split(' '); ctrl.$parsers.push(function (value) { angular.forEach(required, function (elem) { if (!angular.isNumber(elem)) { ctrl.$setValidity('required', false); } }); ctrl.$setValidity('required', true); }); } for (var i = currentYear; i >= oldestYear; i--) { scope.years.push(i); } (function () { var oLen = overridable.length, oCurrent, childEle; while (oLen--) { oCurrent = overridable[oLen]; childEle = element[0].children[Math.floor(oLen / 2)]; if (oLen % 2 && oLen != 2) { childEle = childEle.children[0]; } if (attrs[oCurrent]) { angular.element(childEle).attr('class', attrs[oCurrent]); } } }()); } }; }]); }());