diff --git a/bower.json b/bower.json index f0856c9..e0ac72f 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "ngComboDatePicker", - "version": "1.5.1", + "version": "1.6.0", "authors": [ "jfmdev " ], diff --git a/demo/index.html b/demo/index.html index aaa5a80..31041d1 100644 --- a/demo/index.html +++ b/demo/index.html @@ -254,7 +254,7 @@

Disable all

Choose a date:

Disable combo boxes

- +

Disable one by one

@@ -263,7 +263,28 @@

Disable one by one

Disable month

Disable year

- + +

Change event

+ + +
+

Choose a date:

+

+ The date was + never changed + last changed on {{ lastChange | date:'medium' }} +

+
+ diff --git a/package.json b/package.json index 13d268a..add1722 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ng-combo-date-picker", - "version": "1.5.1", + "version": "1.6.0", "description": "An Angular directive to select dates using combo boxes", "main": "source/ngComboDatePicker.js", "scripts": { diff --git a/source/ngComboDatePicker.js b/source/ngComboDatePicker.js index 3cd0715..27a2b34 100644 --- a/source/ngComboDatePicker.js +++ b/source/ngComboDatePicker.js @@ -1,5 +1,5 @@ /* - * ngComboDatePicker v1.5.1 + * ngComboDatePicker v1.6.0 * http://github.com/jfmdev/ngComboDatePicker * «Copyright 2015 Jose F. Maldonado» * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -84,7 +84,8 @@ angular.module("ngComboDatePicker", []) ngYearOrder: '@', ngPlaceholder: '@', ngPlaceholderEnabled: '@', - ngRequired: '@' + ngRequired: '@', + ngChange: '=' }, require: 'ngModel', controller: ['$scope', function($scope) { @@ -217,6 +218,13 @@ angular.module("ngComboDatePicker", []) $scope.dates.push({value:i, name:i}); } }; + + // Listen on changes on ngModel for trigger ngChange event. + $scope.$watch('ngModel', function(newValue, oldValue) { + if(newValue !== oldValue && $scope.ngChange) { + $scope.ngChange(newValue, oldValue); + } + }); } ], link: function(scope, element, attrs, ngModelCtrl) { diff --git a/source/ngComboDatePicker.min.js b/source/ngComboDatePicker.min.js index 41c4202..b19f78b 100644 --- a/source/ngComboDatePicker.min.js +++ b/source/ngComboDatePicker.min.js @@ -1,7 +1,7 @@ /* - * ngComboDatePicker v1.5.1 + * ngComboDatePicker v1.6.0 * http://github.com/jfmdev/ngComboDatePicker * «Copyright 2015 Jose F. Maldonado» * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -angular.module("ngComboDatePicker",[]).directive("ngComboDatePicker",function(){function maxDate(e,n){var t=31;return null!=e&&(4!=e&&6!=e&&9!=e&&11!=e||(t=30),null!=n&&2==e&&(t=n%4==0&&n%100!=0||n%400==0?29:28)),t}function adjustTimezone(e,n){var t=isNaN(n)?(new Date).getTimezoneOffset():60*parseFloat(n);return new Date(e.getTime()+60*t*1e3)}function parseDate(e,n){var t=null;return void 0!==e&&null!==e&&(e instanceof Date?t=e:"number"!=typeof e&&"string"!=typeof e||(t=new Date(isNaN(e)?e:parseInt(e,10)),t=adjustTimezone(t,n))),t}function parseIntStrict(e){return null!==e&&""!==e&&NaN!=parseInt(e)?parseInt(e):null}function parseJsonPlus(e){var n=null;if(null!=e){try{n=JSON.parse(e)}catch(e){}if(null==n)try{n=JSON.parse(e.replace(/'/g,'"'))}catch(e){}}return n}return{restrict:"AEC",scope:{ngModel:"=",ngDate:"@",ngMinDate:"@",ngMaxDate:"@",ngMinModel:"=?",ngMaxModel:"=?",ngMonths:"@",ngTimezone:"@",ngOrder:"@",ngAttrsDate:"@",ngAttrsMonth:"@",ngAttrsYear:"@",ngDisabled:"=?",ngYearOrder:"@",ngPlaceholder:"@",ngPlaceholderEnabled:"@",ngRequired:"@"},require:"ngModel",controller:["$scope",function(e){e.ngModel=parseDate(e.ngModel,e.ngTimezone),e.ngMinModel=parseDate(e.ngMinModel,e.ngTimezone),e.ngMaxModel=parseDate(e.ngMaxModel,e.ngTimezone),e.ngAttrsDate=parseJsonPlus(e.ngAttrsDate),e.ngAttrsMonth=parseJsonPlus(e.ngAttrsMonth),e.ngAttrsYear=parseJsonPlus(e.ngAttrsYear);var n=parseDate(e.ngDate,e.ngTimezone);if(null!=n&&(e.ngModel=n),"string"!=typeof e.ngOrder?e.ngOrder="dmy":e.ngOrder=e.ngOrder.toLowerCase(),e.ngMinDate&&(e.ngMinModel=parseDate(e.ngMinDate,e.ngTimezone)),!e.ngMinModel){var t=new Date;e.ngMinModel=new Date(t.getFullYear()-100,t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds())}if(e.ngMaxDate&&(e.ngMaxModel=parseDate(e.ngMaxDate,e.ngTimezone)),e.ngMaxModel||(e.ngMaxModel=new Date),e.$watch("[ngMinModel, ngMaxModel]",function(){if(e.ngMinModel&&e.ngMaxModel){e.years=[];for(var n=e.ngMinModel.getFullYear();n<=e.ngMaxModel.getFullYear();n++)e.years.push({value:n,name:n});"string"==typeof e.ngYearOrder&&0==e.ngYearOrder.indexOf("des")&&e.years.reverse(),e.placeHolders&&e.years.unshift(e.placeHolders[0])}e.ngModel&&e.ngMinModel&&e.ngModele.ngMaxModel&&(e.ngModel=e.ngMaxModel)}),e.placeHolders=null,void 0!==e.ngPlaceholder&&null!==e.ngPlaceholder&&("string"==typeof e.ngPlaceholder||Array.isArray(e.ngPlaceholder))){var a="string"==typeof e.ngPlaceholder?e.ngPlaceholder.split(","):e.ngPlaceholder;if(3==a.length){e.placeHolders=[];for(var l=0;la?a:n.date,l,r,o,s)}return e.placeHolders&&angular.isUndefined(e.ngPlaceholderEnabled)&&(""!=e.year&&(e.placeHolders[0].disabled=!0),""!=e.month&&(e.placeHolders[1].disabled=!0),""!=e.date&&(e.placeHolders[2].disabled=!0)),e.updateMonthList(n.year),e.updateDateList(n.month,n.year),t}),e.touched=function(){a.$touched=!0,a.$untouched=!1}},template:function(element,attrs){for(var strAttrs=["","",""],attrNames=["ngAttrsDate","ngAttrsMonth","ngAttrsYear"],i=0;i<3;i++)try{if(attrs&&attrs[attrNames[i]]){eval("var attrsAux= "+attrs[attrNames[i]]);for(var key in attrsAux){var value=attrsAux[key];"boolean"==typeof value?value&&(strAttrs[i]+=key+" "):("string"==typeof value&&value.indexOf('"')>0&&(value=value.replace(/"/g,""")),strAttrs[i]+=key+'="'+value+'" ')}}}catch(e){console.log(e)}var html='';return html}}}); \ No newline at end of file +angular.module("ngComboDatePicker",[]).directive("ngComboDatePicker",function(){function maxDate(e,n){var t=31;return null!=e&&(4!=e&&6!=e&&9!=e&&11!=e||(t=30),null!=n&&2==e&&(t=n%4==0&&n%100!=0||n%400==0?29:28)),t}function adjustTimezone(e,n){var t=isNaN(n)?(new Date).getTimezoneOffset():60*parseFloat(n);return new Date(e.getTime()+60*t*1e3)}function parseDate(e,n){var t=null;return void 0!==e&&null!==e&&(e instanceof Date?t=e:"number"!=typeof e&&"string"!=typeof e||(t=adjustTimezone(t=new Date(isNaN(e)?e:parseInt(e,10)),n))),t}function parseIntStrict(e){return null!==e&&""!==e&&NaN!=parseInt(e)?parseInt(e):null}function parseJsonPlus(e){var n=null;if(null!=e){try{n=JSON.parse(e)}catch(e){}if(null==n)try{n=JSON.parse(e.replace(/'/g,'"'))}catch(e){}}return n}return{restrict:"AEC",scope:{ngModel:"=",ngDate:"@",ngMinDate:"@",ngMaxDate:"@",ngMinModel:"=?",ngMaxModel:"=?",ngMonths:"@",ngTimezone:"@",ngOrder:"@",ngAttrsDate:"@",ngAttrsMonth:"@",ngAttrsYear:"@",ngDisabled:"=?",ngYearOrder:"@",ngPlaceholder:"@",ngPlaceholderEnabled:"@",ngRequired:"@",ngChange:"="},require:"ngModel",controller:["$scope",function(e){e.ngModel=parseDate(e.ngModel,e.ngTimezone),e.ngMinModel=parseDate(e.ngMinModel,e.ngTimezone),e.ngMaxModel=parseDate(e.ngMaxModel,e.ngTimezone),e.ngAttrsDate=parseJsonPlus(e.ngAttrsDate),e.ngAttrsMonth=parseJsonPlus(e.ngAttrsMonth),e.ngAttrsYear=parseJsonPlus(e.ngAttrsYear);var n=parseDate(e.ngDate,e.ngTimezone);if(null!=n&&(e.ngModel=n),"string"!=typeof e.ngOrder?e.ngOrder="dmy":e.ngOrder=e.ngOrder.toLowerCase(),e.ngMinDate&&(e.ngMinModel=parseDate(e.ngMinDate,e.ngTimezone)),!e.ngMinModel){var t=new Date;e.ngMinModel=new Date(t.getFullYear()-100,t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds())}if(e.ngMaxDate&&(e.ngMaxModel=parseDate(e.ngMaxDate,e.ngTimezone)),e.ngMaxModel||(e.ngMaxModel=new Date),e.$watch("[ngMinModel, ngMaxModel]",function(){if(e.ngMinModel&&e.ngMaxModel){e.years=[];for(var n=e.ngMinModel.getFullYear();n<=e.ngMaxModel.getFullYear();n++)e.years.push({value:n,name:n});"string"==typeof e.ngYearOrder&&0==e.ngYearOrder.indexOf("des")&&e.years.reverse(),e.placeHolders&&e.years.unshift(e.placeHolders[0])}e.ngModel&&e.ngMinModel&&e.ngModele.ngMaxModel&&(e.ngModel=e.ngMaxModel)}),e.placeHolders=null,void 0!==e.ngPlaceholder&&null!==e.ngPlaceholder&&("string"==typeof e.ngPlaceholder||Array.isArray(e.ngPlaceholder))){var a="string"==typeof e.ngPlaceholder?e.ngPlaceholder.split(","):e.ngPlaceholder;if(3==a.length){e.placeHolders=[];for(var l=0;la?a:n.date,l,r,o,s)}return e.placeHolders&&angular.isUndefined(e.ngPlaceholderEnabled)&&(""!=e.year&&(e.placeHolders[0].disabled=!0),""!=e.month&&(e.placeHolders[1].disabled=!0),""!=e.date&&(e.placeHolders[2].disabled=!0)),e.updateMonthList(n.year),e.updateDateList(n.month,n.year),t}),e.touched=function(){a.$touched=!0,a.$untouched=!1}},template:function(element,attrs){for(var strAttrs=["","",""],attrNames=["ngAttrsDate","ngAttrsMonth","ngAttrsYear"],i=0;i<3;i++)try{if(attrs&&attrs[attrNames[i]]){eval("var attrsAux= "+attrs[attrNames[i]]);for(var key in attrsAux){var value=attrsAux[key];"boolean"==typeof value?value&&(strAttrs[i]+=key+" "):("string"==typeof value&&value.indexOf('"')>0&&(value=value.replace(/"/g,""")),strAttrs[i]+=key+'="'+value+'" ')}}}catch(e){console.log(e)}var html='';return html}}}); \ No newline at end of file