diff --git a/.gitignore b/.gitignore index ea546a7..6fa6656 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules bower_components -npm-debug.log \ No newline at end of file +npm-debug.log +.idea \ No newline at end of file diff --git a/demo/index.htm b/demo/index.htm index 9b0743d..7af9af9 100644 --- a/demo/index.htm +++ b/demo/index.htm @@ -1,7 +1,7 @@
- + diff --git a/directive.js b/directive.js index 8dff3f4..e013261 100644 --- a/directive.js +++ b/directive.js @@ -4,22 +4,23 @@ 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 RsmDate() { + this.dayRange = [1, 31]; + this.months = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ]; + } function changeDate (date) { if(date.day > 28) { @@ -30,41 +31,51 @@ date.month--; return date; } - }; + } - return { + RsmDate.prototype = { 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)); - + 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]++); + checkMonth: function (date) { + if (!angular.isNumber(date.month)) { + return false; + } + + this.dayRange[1] = (new Date(date.year || (new Date()).getYear(), date.month + 1, 0)).getDate(); + }, + getDays: function () { + var days = [], + start = this.dayRange[0]; + while (start <= this.dayRange[1]) { + days.push(start++); } return days; - }()), - months: (function () { + }, + getMonths: function () { var lst = [], - mLen = months.length; + mLen = this.months.length; for (var i = 0; i < mLen; i++) { lst.push({ value: i, - name: months[i] + name: this.months[i] }); } return lst; - }()) + } }; + + return new RsmDate(); }) dd.directive('rsmdatedropdowns', ['rsmdateutils', function (rsmdateutils) { @@ -73,11 +84,13 @@ replace: true, require: 'ngModel', scope: { - model: '=ngModel' + model: '=ngModel', + change: '&ngChange' }, controller: ['$scope', 'rsmdateutils', function ($scope, rsmDateUtils) { - $scope.days = rsmDateUtils.days; - $scope.months = rsmDateUtils.months; + + $scope.days = rsmDateUtils.getDays(); + $scope.months = rsmDateUtils.getMonths(); $scope.dateFields = {}; @@ -99,21 +112,33 @@ if (date) { $scope.model = date; } + $scope.change({value : date}); + }; + + $scope.checkMonth = function () { + rsmDateUtils.checkMonth($scope.dateFields); + $scope.days = rsmDateUtils.getDays(); }; }], template: - '