From 96d6b6c2209d7774cc20599ff73fe5f9f9b5e903 Mon Sep 17 00:00:00 2001 From: Jose Date: Thu, 1 Dec 2016 13:22:53 -0300 Subject: [PATCH] Change how attributes are processed for add support to form validation --- bower.json | 2 +- demo/index.html | 69 +++++++++++++++++++++++++-------- package.json | 2 +- source/ngComboDatePicker.js | 40 +++++++++++++------ source/ngComboDatePicker.min.js | 4 +- 5 files changed, 86 insertions(+), 31 deletions(-) diff --git a/bower.json b/bower.json index 00230dd..36b6744 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "ngComboDatePicker", - "version": "1.2.4", + "version": "1.2.5", "authors": [ "jfmdev " ], diff --git a/demo/index.html b/demo/index.html index ef7f362..6ae028e 100644 --- a/demo/index.html +++ b/demo/index.html @@ -28,7 +28,7 @@

Basic example

Choose a date:

-

Current selection is: {{ basic }} +

Current selection is: {{ basic }}

@@ -40,7 +40,7 @@

Change order of combo boxes

Choose a date:

-

Current selection is: {{ change }} +

Current selection is: {{ change }}

@@ -55,7 +55,7 @@

To fixed value

Choose a date:

-

Current selection is: {{ fixed }} +

Current selection is: {{ fixed }}

@@ -63,19 +63,19 @@

To dynamic value

Choose a date:

-

Current selection is: {{ dynamic }} +

Current selection is: {{ dynamic }}

To empty value

Choose a date:

-

Current selection is: {{ emptyDate }} +

Current selection is: {{ emptyDate }}

@@ -87,7 +87,7 @@

Define minimum and maximum dates

Choose a date:

-

Current selection is: {{ range }} +

Current selection is: {{ range }}

@@ -99,7 +99,7 @@

Change strings for months

Choose a date:

-

Current selection is: {{ names }} +

Current selection is: {{ names }}

@@ -111,7 +111,7 @@

Define attributtes

Choose a date:

-

Current selection is: {{ attrs }} +

Current selection is: {{ attrs }}

@@ -123,26 +123,63 @@

Change years order

Choose a date:

-

Current selection is: {{ yearsOrder }} +

Current selection is: {{ yearsOrder }}

Timezones

Choose a date:

-

Current selection is: {{ timezone1 }} +

Current selection is: {{ timezone1 }}

Choose a date:

-

Current selection is: {{ timezone2 }} +

Current selection is: {{ timezone2 }}

Choose a date:

-

Current selection is: {{ timezone3 }} +

Current selection is: {{ timezone3 }}

Place holders

Choose a date:

-

Current selection is: {{ placeholder }} -

- +

Current selection is: {{ placeholder }}

+ + +

Form validation

+ +
+
+

Choose a date:

+

Current selection is: {{ formv }}

+

Form is valid: {{ myForm.$invalid? 'No' : 'Yes' }}

+ + + + + + + + + + + + + + + + + + + + + +
FieldPristineDirty
Date{{ myForm.formv_date.$pristine? 'Yes' : 'No' }}{{ myForm.formv_date.$dirty? 'Yes' : 'No' }}
Month{{ myForm.formv_month.$pristine? 'Yes' : 'No' }}{{ myForm.formv_month.$dirty? 'Yes' : 'No' }}
Year{{ myForm.formv_year.$pristine? 'Yes' : 'No' }}{{ myForm.formv_year.$dirty? 'Yes' : 'No' }}
+
+
+ + diff --git a/package.json b/package.json index 2b7dd43..1872705 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ng-combo-date-picker", - "version": "1.2.4", + "version": "1.2.5", "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 248eabb..5c452d2 100644 --- a/source/ngComboDatePicker.js +++ b/source/ngComboDatePicker.js @@ -1,5 +1,5 @@ /* - * ngComboDatePicker v1.2.4 + * ngComboDatePicker v1.2.5 * http://github.com/jfmdev/ngComboDatePicker * «Copyright 2015 Jose F. Maldonado» * License: LGPLv3 (http://www.gnu.org/licenses/lgpl-3.0.html) @@ -104,7 +104,7 @@ angular.module("ngComboDatePicker", []) } $scope.maxDate = parseDate($scope.ngMaxDate, $scope.ngTimezone); if($scope.maxDate == null) { - $scope.maxDate = new Date(); + $scope.maxDate = new Date(); } // Verify if selected date is in the valid range. @@ -250,11 +250,6 @@ angular.module("ngComboDatePicker", []) var children = jqLite(element[0]).children(); var order = scope.ngOrder.split(''); - // Add attributes. - if(scope.ngAttrsDate != null) jqLite(children[0]).attr( scope.ngAttrsDate ); - if(scope.ngAttrsMonth != null) jqLite(children[1]).attr( scope.ngAttrsMonth ); - if(scope.ngAttrsYear != null) jqLite(children[2]).attr( scope.ngAttrsYear ); - // Reorder elements. for(var i=0; i 0) { value = value.replace(/"/g, '"'); } + strAttrs[i] += key + '="' + value + '" '; + } + } + } + }catch(err){console.log(err);} + } + + // Generate HTML code. var html = - '' + - '' + - '' + '' + + '' + + '' ; return html; diff --git a/source/ngComboDatePicker.min.js b/source/ngComboDatePicker.min.js index 869d98e..9821fe5 100644 --- a/source/ngComboDatePicker.min.js +++ b/source/ngComboDatePicker.min.js @@ -1,7 +1,7 @@ /* - * ngComboDatePicker v1.2.4 + * ngComboDatePicker v1.2.5 * http://github.com/jfmdev/ngComboDatePicker * «Copyright 2015 Jose F. Maldonado» * License: LGPLv3 (http://www.gnu.org/licenses/lgpl-3.0.html) */ -angular.module("ngComboDatePicker",[]).directive("ngComboDatePicker",function(){return{restrict:"AEC",scope:{ngModel:"=",ngDate:"@",ngMinDate:"@",ngMaxDate:"@",ngMonths:"@",ngOrder:"@",ngAttrsDate:"@",ngAttrsMonth:"@",ngAttrsYear:"@",ngYearOrder:"@",ngTimezone:"@",ngPlaceholder:"@"},controller:["$scope",function(a){function b(a,b){var d=null;return void 0!==a&&null!==a&&(a instanceof Date?d=a:"number"!=typeof a&&"string"!=typeof a||(d=new Date(isNaN(a)?a:parseInt(a,10)),d=c(d,b))),d}function c(a,b){var c=isNaN(b)?(new Date).getTimezoneOffset():60*parseFloat(b);return new Date(a.getTime()+60*c*1e3)}function d(a,b){var c=31;return null!=a&&(4!=a&&6!=a&&9!=a&&11!=a||(c=30),null!=b&&2==a&&(c=b%4==0&&b%100!=0?29:28)),c}function e(a){var b=null;if(null!=a){try{b=JSON.parse(a)}catch(a){}if(null==b)try{b=JSON.parse(a.replace(/'/g,'"'))}catch(a){}}return b}a.ngModel=b(a.ngModel,a.ngTimezone),a.ngAttrsDate=e(a.ngAttrsDate),a.ngAttrsMonth=e(a.ngAttrsMonth),a.ngAttrsYear=e(a.ngAttrsYear);var f=b(a.ngDate,a.ngTimezone);if(null!=f&&(a.ngModel=f),"string"!=typeof a.ngOrder?a.ngOrder="dmy":a.ngOrder=a.ngOrder.toLowerCase(),a.minDate=b(a.ngMinDate,a.ngTimezone),null==a.ngMinDate){var g=new Date;a.minDate=new Date(g.getFullYear()-100,g.getMonth(),g.getDate(),g.getHours(),g.getMinutes(),g.getSeconds(),g.getMilliseconds())}a.maxDate=b(a.ngMaxDate,a.ngTimezone),null==a.maxDate&&(a.maxDate=new Date),a.ngModela.maxDate&&(a.ngModel=a.maxDate);var h=null;if(void 0!==a.ngPlaceholder&&null!==a.ngPlaceholder&&("string"==typeof a.ngPlaceholder||Array.isArray(a.ngPlaceholder))){var i="string"==typeof a.ngPlaceholder?a.ngPlaceholder.split(","):a.ngPlaceholder;if(3==i.length){h=[];for(var j=0;jc?c:a.date,e,f,g,i)}h&&(""!=a.year&&(h[0].disabled=!0),""!=a.month&&(h[1].disabled=!0),""!=a.date&&(h[2].disabled=!0)),a.updateMonthList(),a.updateDateList()},a.getSomething=function(){return"color:red;"}}],link:function(a,b,c){var d=angular.element,e=d(b[0]).children(),f=a.ngOrder.split("");null!=a.ngAttrsDate&&d(e[0]).attr(a.ngAttrsDate),null!=a.ngAttrsMonth&&d(e[1]).attr(a.ngAttrsMonth),null!=a.ngAttrsYear&&d(e[2]).attr(a.ngAttrsYear);for(var g=0;g';return a}}}); +angular.module("ngComboDatePicker",[]).directive("ngComboDatePicker",function($compile){return{restrict:"AEC",scope:{ngModel:"=",ngDate:"@",ngMinDate:"@",ngMaxDate:"@",ngMonths:"@",ngOrder:"@",ngAttrsDate:"@",ngAttrsMonth:"@",ngAttrsYear:"@",ngYearOrder:"@",ngTimezone:"@",ngPlaceholder:"@"},controller:["$scope",function(a){function b(a,b){var d=null;return void 0!==a&&null!==a&&(a instanceof Date?d=a:"number"!=typeof a&&"string"!=typeof a||(d=new Date(isNaN(a)?a:parseInt(a,10)),d=c(d,b))),d}function c(a,b){var c=isNaN(b)?(new Date).getTimezoneOffset():60*parseFloat(b);return new Date(a.getTime()+60*c*1e3)}function d(a,b){var c=31;return null!=a&&(4!=a&&6!=a&&9!=a&&11!=a||(c=30),null!=b&&2==a&&(c=b%4==0&&b%100!=0?29:28)),c}function e(a){var b=null;if(null!=a){try{b=JSON.parse(a)}catch(a){}if(null==b)try{b=JSON.parse(a.replace(/'/g,'"'))}catch(a){}}return b}a.ngModel=b(a.ngModel,a.ngTimezone),a.ngAttrsDate=e(a.ngAttrsDate),a.ngAttrsMonth=e(a.ngAttrsMonth),a.ngAttrsYear=e(a.ngAttrsYear);var f=b(a.ngDate,a.ngTimezone);if(null!=f&&(a.ngModel=f),"string"!=typeof a.ngOrder?a.ngOrder="dmy":a.ngOrder=a.ngOrder.toLowerCase(),a.minDate=b(a.ngMinDate,a.ngTimezone),null==a.ngMinDate){var g=new Date;a.minDate=new Date(g.getFullYear()-100,g.getMonth(),g.getDate(),g.getHours(),g.getMinutes(),g.getSeconds(),g.getMilliseconds())}a.maxDate=b(a.ngMaxDate,a.ngTimezone),null==a.maxDate&&(a.maxDate=new Date),a.ngModela.maxDate&&(a.ngModel=a.maxDate);var h=null;if(void 0!==a.ngPlaceholder&&null!==a.ngPlaceholder&&("string"==typeof a.ngPlaceholder||Array.isArray(a.ngPlaceholder))){var i="string"==typeof a.ngPlaceholder?a.ngPlaceholder.split(","):a.ngPlaceholder;if(3==i.length){h=[];for(var j=0;jc?c:a.date,e,f,g,i)}h&&(""!=a.year&&(h[0].disabled=!0),""!=a.month&&(h[1].disabled=!0),""!=a.date&&(h[2].disabled=!0)),a.updateMonthList(),a.updateDateList()},a.getSomething=function(){return"color:red;"}}],link:function(a,b,c){for(var d=angular.element,e=d(b[0]).children(),f=a.ngOrder.split(""),g=0;g0&&(value=value.replace(/"/g,""")),strAttrs[i]+=key+'="'+value+'" ')}}}catch(a){console.log(a)}var html='';return html}}});