From b5f60ce6328382cba07ea193bd6516ea686845b0 Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 15 Oct 2015 14:16:49 -0600 Subject: [PATCH 01/25] Improvement: Added Invalid Date handling for setting up the current view when calendar is toggled. The view is focused on the current date instead of some day in 1899. --- app/scripts/datePicker.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/scripts/datePicker.js b/app/scripts/datePicker.js index ca569a4..e0bc16c 100644 --- a/app/scripts/datePicker.js +++ b/app/scripts/datePicker.js @@ -161,24 +161,28 @@ Module.directive('datePicker', ['datePickerConfig', 'datePickerUtils', function scope.date = new Date(scope.model); arrowClick = false; } - var date = scope.date; + var refDate = scope.date; + // Default the picker menu to the current date when passed an invalid date (e.g. 'year' view of 2010-2020 is more user friendly than 1899-1899). + if ( !datePickerUtils.isValidDate(refDate)) { + refDate = new Date(); + } switch (view) { case 'year': - scope.years = datePickerUtils.getVisibleYears(date); + scope.years = datePickerUtils.getVisibleYears(refDate); break; case 'month': - scope.months = datePickerUtils.getVisibleMonths(date); + scope.months = datePickerUtils.getVisibleMonths(refDate); break; case 'date': scope.weekdays = scope.weekdays || datePickerUtils.getDaysOfWeek(); - scope.weeks = datePickerUtils.getVisibleWeeks(date); + scope.weeks = datePickerUtils.getVisibleWeeks(refDate); break; case 'hours': - scope.hours = datePickerUtils.getVisibleHours(date); + scope.hours = datePickerUtils.getVisibleHours(refDate); break; case 'minutes': - scope.minutes = datePickerUtils.getVisibleMinutes(date, step); + scope.minutes = datePickerUtils.getVisibleMinutes(refDate, step); break; } } From 3606d8d60d9a5790b606b981c74cc30cbc812740 Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:04:53 -0700 Subject: [PATCH 02/25] updated version number --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index bcd0cb4..b87e977 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.21", + "version": "1.0.22", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" From 816ce95a97f496debb86e91dda2ab5cff59ff87b Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:12:17 -0700 Subject: [PATCH 03/25] updated version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b0aa40..1222e93 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.21", + "version": "1.0.22", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 1265c3005f73e319e3b731caea221ac36e0dc852 Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:16:30 -0700 Subject: [PATCH 04/25] more version stuff --- bower.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index b87e977..c63e322 100644 --- a/bower.json +++ b/bower.json @@ -30,5 +30,9 @@ "angular-scenario": "1.2.14", "angular-bootstrap": "~0.3.0", "lodash": "~3.10.1" - } + }, + "repository": { + "type": "git", + "url": "https://github.com/leez79/Photo-Sphere-Viewer" + }, } From ff398c6e8b203d4d9f4f7914254283431ffa571b Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:16:38 -0700 Subject: [PATCH 05/25] more version stuff --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index c63e322..bd9153b 100644 --- a/bower.json +++ b/bower.json @@ -34,5 +34,5 @@ "repository": { "type": "git", "url": "https://github.com/leez79/Photo-Sphere-Viewer" - }, + } } From 9c35663ef608cf8c94da8423b70e23201144cdfc Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:17:02 -0700 Subject: [PATCH 06/25] more version stuff --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index bd9153b..7467da4 100644 --- a/bower.json +++ b/bower.json @@ -33,6 +33,6 @@ }, "repository": { "type": "git", - "url": "https://github.com/leez79/Photo-Sphere-Viewer" + "url": "https://github.com/JGSimko/angular-datepicker" } } From 1b86495c130c49ac6e3e93cc21f353c1b9daacc2 Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:37:39 -0700 Subject: [PATCH 07/25] Release v1.0.23 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 7467da4..1c3527b 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.22", + "version": "1.0.23", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 1222e93..7aa7eec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.22", + "version": "1.0.23", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 1163eb11fb2628520dd9e1897badf45c36fb5a60 Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:39:00 -0700 Subject: [PATCH 08/25] Release v1.0.24 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 1c3527b..a58acbd 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.23", + "version": "1.0.24", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 7aa7eec..307d411 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.23", + "version": "1.0.24", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 447b461d66fb8f24ec6b51d87b21d71d963a0007 Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:41:13 -0700 Subject: [PATCH 09/25] built code --- dist/angular-datepicker.js | 16 ++++++++++------ dist/angular-datepicker.min.js | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dist/angular-datepicker.js b/dist/angular-datepicker.js index d817b90..55e3cdd 100644 --- a/dist/angular-datepicker.js +++ b/dist/angular-datepicker.js @@ -161,24 +161,28 @@ Module.directive('datePicker', ['datePickerConfig', 'datePickerUtils', function scope.date = new Date(scope.model); arrowClick = false; } - var date = scope.date; + var refDate = scope.date; + // Default the picker menu to the current date when passed an invalid date (e.g. 'year' view of 2010-2020 is more user friendly than 1899-1899). + if ( !datePickerUtils.isValidDate(refDate)) { + refDate = new Date(); + } switch (view) { case 'year': - scope.years = datePickerUtils.getVisibleYears(date); + scope.years = datePickerUtils.getVisibleYears(refDate); break; case 'month': - scope.months = datePickerUtils.getVisibleMonths(date); + scope.months = datePickerUtils.getVisibleMonths(refDate); break; case 'date': scope.weekdays = scope.weekdays || datePickerUtils.getDaysOfWeek(); - scope.weeks = datePickerUtils.getVisibleWeeks(date); + scope.weeks = datePickerUtils.getVisibleWeeks(refDate); break; case 'hours': - scope.hours = datePickerUtils.getVisibleHours(date); + scope.hours = datePickerUtils.getVisibleHours(refDate); break; case 'minutes': - scope.minutes = datePickerUtils.getVisibleMinutes(date, step); + scope.minutes = datePickerUtils.getVisibleMinutes(refDate, step); break; } } diff --git a/dist/angular-datepicker.min.js b/dist/angular-datepicker.min.js index 635320e..75b7dd0 100644 --- a/dist/angular-datepicker.min.js +++ b/dist/angular-datepicker.min.js @@ -1 +1 @@ -"use strict";!function(a){var b=a.module("datePicker",[]);b.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],step:5}),b.filter("time",function(){function a(a){return("0"+a.getHours()).slice(-2)+":"+("0"+a.getMinutes()).slice(-2)}return function(b){return b instanceof Date||(b=new Date(b),!isNaN(b.getTime()))?a(b):void 0}}),b.directive("datePicker",["datePickerConfig","datePickerUtils",function(b,c){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(d,e,f,g){function h(){var a=d.view;d.model&&!j&&(d.date=new Date(d.model),j=!1);var b=d.date;switch(a){case"year":d.years=c.getVisibleYears(b);break;case"month":d.months=c.getVisibleMonths(b);break;case"date":d.weekdays=d.weekdays||c.getDaysOfWeek(),d.weeks=c.getVisibleWeeks(b);break;case"hours":d.hours=c.getVisibleHours(b);break;case"minutes":d.minutes=c.getVisibleMinutes(b,k)}}function i(){return"date"!==d.view?d.view:d.date?d.date.getMonth():null}var j=!1;d.date=new Date(d.model||new Date),d.views=b.views.concat(),d.view=f.view||b.view,d.now=new Date,d.template=f.template||b.template,d.watchDirectChanges=void 0!==f.watchDirectChanges,d.callbackOnSetDate=f.onSetDate?_.get(d.$parent,f.onSetDate):void 0;var k=parseInt(f.step||b.step,10),l=!!f.partial;if(g){if(a.isDefined(f.minDate)){var m;g.$validators.min=function(b){return!c.isValidDate(b)||a.isUndefined(m)||b>=m},f.$observe("minDate",function(a){m=new Date(a),g.$validate()})}if(a.isDefined(f.maxDate)){var n;g.$validators.max=function(b){return!c.isValidDate(b)||a.isUndefined(n)||n>=b},f.$observe("maxDate",function(a){n=new Date(a),g.$validate()})}}d.views=d.views.slice(d.views.indexOf(f.maxView||"year"),d.views.indexOf(f.minView||"minutes")+1),(1===d.views.length||-1===d.views.indexOf(d.view))&&(d.view=d.views[0]),d.setView=function(a){-1!==d.views.indexOf(a)&&(d.view=a)},d.setDate=function(a){if(!f.disabled){d.date=a;var b=d.views[d.views.indexOf(d.view)+1];if(!b||l||d.model){d.model=new Date(d.model||a),g&&g.$setViewValue(d.date);var c=l?"minutes":d.view;switch(c){case"minutes":d.model.setMinutes(a.getMinutes());case"hours":d.model.setHours(a.getHours());case"date":d.model.setFullYear(a.getFullYear()),d.model.setMonth(a.getMonth()),d.model.setDate(a.getDate());break;case"month":d.model.setMonth(a.getMonth());case"year":d.model.setFullYear(a.getFullYear())}!b&&d.model&&(d.$emit("setMaxDate",f.datePicker,d.model,d.view),d.callbackOnSetDate&&d.callbackOnSetDate()),d.$emit("setDate",d.model,d.view)}b&&d.setView(b),b||"true"!==f.autoClose||(e.addClass("hidden"),d.$emit("hidePicker"))}},d.$watch(i,h),d.watchDirectChanges&&d.$watch("model",function(){j=!1,h()}),d.next=function(a){var b=d.date;switch(a=a||1,d.view){case"year":case"month":b.setFullYear(b.getFullYear()+a);break;case"date":b.setMonth(b.getMonth()+a);break;case"hours":case"minutes":b.setHours(b.getHours()+a)}j=!0,h()},d.prev=function(a){return d.next(-a||-1)},d.isAfter=function(a){return d.after&&c.isAfter(a,d.after)},d.isBefore=function(a){return d.before&&c.isBefore(a,d.before)},d.isSameMonth=function(a){return c.isSameMonth(d.model,a)},d.isSameYear=function(a){return c.isSameYear(d.model,a)},d.isSameDay=function(a){return c.isSameDay(d.model,a)},d.isSameHour=function(a){return c.isSameHour(d.model,a)},d.isSameMinutes=function(a){return c.isSameMinutes(d.model,a)},d.isNow=function(a){var b=!0,c=d.now;switch(d.view){case"minutes":b&=~~(a.getMinutes()/k)===~~(c.getMinutes()/k);case"hours":b&=a.getHours()===c.getHours();case"date":b&=a.getDate()===c.getDate();case"month":b&=a.getMonth()===c.getMonth();case"year":b&=a.getFullYear()===c.getFullYear()}return b}}}}]),a.module("datePicker").factory("datePickerUtils",function(){var a=function(a,b,c,d,e){return new Date(0|a,0|b,0|c,0|d,0|e)};return{getVisibleMinutes:function(b,c){b=new Date(b||new Date);var d,e,f=b.getFullYear(),g=b.getMonth(),h=b.getDate(),i=b.getHours(),j=[];for(d=0;60>d;d+=c)e=a(f,g,h,i,d),j.push(e);return j},getVisibleWeeks:function(a){a=new Date(a||new Date);var b=a.getMonth(),c=a.getYear();a.setDate(1),0===a.getDay()?a.setDate(-5):a.setDate(a.getDate()-(a.getDay()-1)),1===a.getDate()&&a.setDate(-6);for(var d,e=[];e.length<6&&!(a.getYear()===c&&a.getMonth()>b);)d=this.getDaysOfWeek(a),e.push(d),a.setDate(a.getDate()+7);return e},getVisibleYears:function(b){b=new Date(b||new Date),b.setFullYear(b.getFullYear()-b.getFullYear()%10);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d),e.push(c),d++;return e},getDaysOfWeek:function(b){b=new Date(b||new Date),b.setDate(b.getDate()-(b.getDay()-1));for(var c,d=b.getFullYear(),e=b.getMonth(),f=b.getDate(),g=[],h=0;7>h;h++)c=a(d,e,f),g.push(c),f++;return g},getVisibleMonths:function(b){b=new Date(b||new Date);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d,f,1),e.push(c);return e},getVisibleHours:function(b){b=new Date(b||new Date);var c,d,e=b.getFullYear(),f=b.getMonth(),g=b.getDate(),h=[];for(c=0;24>c;c++)d=a(e,f,g,c),h.push(d);return h},isAfter:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getTime()>=b.getTime()},isBefore:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a.getTime()<=b.getTime()},isSameYear:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getFullYear()===b.getFullYear()},isSameMonth:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameYear(a,b)&&a.getMonth()===b.getMonth()},isSameDay:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameMonth(a,b)&&a.getDate()===b.getDate()},isSameHour:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameDay(a,b)&&a.getHours()===b.getHours()},isSameMinutes:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameHour(a,b)&&a.getMinutes()===b.getMinutes()},isValidDate:function(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}}});var b=a.module("datePicker");b.directive("dateRange",function(){return{templateUrl:"templates/daterange.html",scope:{start:"=",end:"="},link:function(a,b,c){a.start=new Date(a.start||new Date),a.end=new Date(a.end||new Date),c.$observe("disabled",function(b){a.disableDatePickers=!!b}),a.$watch("start.getTime()",function(b){b&&a.end&&b>a.end.getTime()&&(a.end=new Date(b))}),a.$watch("end.getTime()",function(b){b&&a.start&&b'},format:"yyyy-MM-dd HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),b.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),b.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(b,e,f,g,h,i){var j=e.find("body"),k=f("date");return{require:"ngModel",scope:!0,link:function(e,f,l,m){function n(a){return k(a,s)}function o(a){return a.length===s.length?a:void 0}function p(a){a.stopPropagation(),m.$pristine&&(m.$dirty=!0,m.$pristine=!1,f.removeClass(c).addClass(d),t&&t.$setDirty(),m.$render())}function q(){y&&(y.remove(),y=null),A&&(A.remove(),A=null)}function r(){if(!y){if(y=b(D)(e),e.$digest(),e.$on("setDate",function(a,b,c){p(a),x&&u[u.length-1]===c&&q()}),e.$on("hidePicker",function(){f.triggerHandler("blur")}),e.$on("$destroy",q),"absolute"===z){var c=a.extend(f.offset(),{height:f[0].offsetHeight});y.css({top:c.top+c.height,left:c.left,display:"block",position:z}),j.append(y)}else A=a.element("
"),f[0].parentElement.insertBefore(A[0],f[0]),A.append(y),y.css({top:f[0].offsetHeight+"px",display:"block"});y.bind("mousedown",function(a){a.preventDefault()})}}var s=l.format||g.format,t=f.inheritedData("$formController"),u=h(l.views)(e)||g.views.concat(),v=l.view||u[0],w=u.indexOf(v),x=l.autoClose?h(l.autoClose)(e):g.autoClose,y=null,z=l.position||g.position,A=null;if(-1===w&&u.splice(w,1),u.unshift(v),m.$formatters.push(n),m.$parsers.unshift(o),a.isDefined(l.minDate)){var B;m.$validators.min=function(b){return!i.isValidDate(b)||a.isUndefined(B)||b>=B},l.$observe("minDate",function(a){B=new Date(a),m.$validate()})}if(a.isDefined(l.maxDate)){var C;m.$validators.max=function(b){return!i.isValidDate(b)||a.isUndefined(C)||C>=b},l.$observe("maxDate",function(a){C=new Date(a),m.$validate()})}var D=g.template(l);f.bind("focus",r),f.bind("blur",q)}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n'),a.put("templates/daterange.html",'
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n')}])}(angular); \ No newline at end of file +"use strict";!function(a){var b=a.module("datePicker",[]);b.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],step:5}),b.filter("time",function(){function a(a){return("0"+a.getHours()).slice(-2)+":"+("0"+a.getMinutes()).slice(-2)}return function(b){return b instanceof Date||(b=new Date(b),!isNaN(b.getTime()))?a(b):void 0}}),b.directive("datePicker",["datePickerConfig","datePickerUtils",function(b,c){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(d,e,f,g){function h(){var a=d.view;d.model&&!j&&(d.date=new Date(d.model),j=!1);var b=d.date;switch(c.isValidDate(b)||(b=new Date),a){case"year":d.years=c.getVisibleYears(b);break;case"month":d.months=c.getVisibleMonths(b);break;case"date":d.weekdays=d.weekdays||c.getDaysOfWeek(),d.weeks=c.getVisibleWeeks(b);break;case"hours":d.hours=c.getVisibleHours(b);break;case"minutes":d.minutes=c.getVisibleMinutes(b,k)}}function i(){return"date"!==d.view?d.view:d.date?d.date.getMonth():null}var j=!1;d.date=new Date(d.model||new Date),d.views=b.views.concat(),d.view=f.view||b.view,d.now=new Date,d.template=f.template||b.template,d.watchDirectChanges=void 0!==f.watchDirectChanges,d.callbackOnSetDate=f.onSetDate?_.get(d.$parent,f.onSetDate):void 0;var k=parseInt(f.step||b.step,10),l=!!f.partial;if(g){if(a.isDefined(f.minDate)){var m;g.$validators.min=function(b){return!c.isValidDate(b)||a.isUndefined(m)||b>=m},f.$observe("minDate",function(a){m=new Date(a),g.$validate()})}if(a.isDefined(f.maxDate)){var n;g.$validators.max=function(b){return!c.isValidDate(b)||a.isUndefined(n)||n>=b},f.$observe("maxDate",function(a){n=new Date(a),g.$validate()})}}d.views=d.views.slice(d.views.indexOf(f.maxView||"year"),d.views.indexOf(f.minView||"minutes")+1),(1===d.views.length||-1===d.views.indexOf(d.view))&&(d.view=d.views[0]),d.setView=function(a){-1!==d.views.indexOf(a)&&(d.view=a)},d.setDate=function(a){if(!f.disabled){d.date=a;var b=d.views[d.views.indexOf(d.view)+1];if(!b||l||d.model){d.model=new Date(d.model||a),g&&g.$setViewValue(d.date);var c=l?"minutes":d.view;switch(c){case"minutes":d.model.setMinutes(a.getMinutes());case"hours":d.model.setHours(a.getHours());case"date":d.model.setFullYear(a.getFullYear()),d.model.setMonth(a.getMonth()),d.model.setDate(a.getDate());break;case"month":d.model.setMonth(a.getMonth());case"year":d.model.setFullYear(a.getFullYear())}!b&&d.model&&(d.$emit("setMaxDate",f.datePicker,d.model,d.view),d.callbackOnSetDate&&d.callbackOnSetDate()),d.$emit("setDate",d.model,d.view)}b&&d.setView(b),b||"true"!==f.autoClose||(e.addClass("hidden"),d.$emit("hidePicker"))}},d.$watch(i,h),d.watchDirectChanges&&d.$watch("model",function(){j=!1,h()}),d.next=function(a){var b=d.date;switch(a=a||1,d.view){case"year":case"month":b.setFullYear(b.getFullYear()+a);break;case"date":b.setMonth(b.getMonth()+a);break;case"hours":case"minutes":b.setHours(b.getHours()+a)}j=!0,h()},d.prev=function(a){return d.next(-a||-1)},d.isAfter=function(a){return d.after&&c.isAfter(a,d.after)},d.isBefore=function(a){return d.before&&c.isBefore(a,d.before)},d.isSameMonth=function(a){return c.isSameMonth(d.model,a)},d.isSameYear=function(a){return c.isSameYear(d.model,a)},d.isSameDay=function(a){return c.isSameDay(d.model,a)},d.isSameHour=function(a){return c.isSameHour(d.model,a)},d.isSameMinutes=function(a){return c.isSameMinutes(d.model,a)},d.isNow=function(a){var b=!0,c=d.now;switch(d.view){case"minutes":b&=~~(a.getMinutes()/k)===~~(c.getMinutes()/k);case"hours":b&=a.getHours()===c.getHours();case"date":b&=a.getDate()===c.getDate();case"month":b&=a.getMonth()===c.getMonth();case"year":b&=a.getFullYear()===c.getFullYear()}return b}}}}]),a.module("datePicker").factory("datePickerUtils",function(){var a=function(a,b,c,d,e){return new Date(0|a,0|b,0|c,0|d,0|e)};return{getVisibleMinutes:function(b,c){b=new Date(b||new Date);var d,e,f=b.getFullYear(),g=b.getMonth(),h=b.getDate(),i=b.getHours(),j=[];for(d=0;60>d;d+=c)e=a(f,g,h,i,d),j.push(e);return j},getVisibleWeeks:function(a){a=new Date(a||new Date);var b=a.getMonth(),c=a.getYear();a.setDate(1),0===a.getDay()?a.setDate(-5):a.setDate(a.getDate()-(a.getDay()-1)),1===a.getDate()&&a.setDate(-6);for(var d,e=[];e.length<6&&!(a.getYear()===c&&a.getMonth()>b);)d=this.getDaysOfWeek(a),e.push(d),a.setDate(a.getDate()+7);return e},getVisibleYears:function(b){b=new Date(b||new Date),b.setFullYear(b.getFullYear()-b.getFullYear()%10);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d),e.push(c),d++;return e},getDaysOfWeek:function(b){b=new Date(b||new Date),b.setDate(b.getDate()-(b.getDay()-1));for(var c,d=b.getFullYear(),e=b.getMonth(),f=b.getDate(),g=[],h=0;7>h;h++)c=a(d,e,f),g.push(c),f++;return g},getVisibleMonths:function(b){b=new Date(b||new Date);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d,f,1),e.push(c);return e},getVisibleHours:function(b){b=new Date(b||new Date);var c,d,e=b.getFullYear(),f=b.getMonth(),g=b.getDate(),h=[];for(c=0;24>c;c++)d=a(e,f,g,c),h.push(d);return h},isAfter:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getTime()>=b.getTime()},isBefore:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a.getTime()<=b.getTime()},isSameYear:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getFullYear()===b.getFullYear()},isSameMonth:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameYear(a,b)&&a.getMonth()===b.getMonth()},isSameDay:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameMonth(a,b)&&a.getDate()===b.getDate()},isSameHour:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameDay(a,b)&&a.getHours()===b.getHours()},isSameMinutes:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameHour(a,b)&&a.getMinutes()===b.getMinutes()},isValidDate:function(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}}});var b=a.module("datePicker");b.directive("dateRange",function(){return{templateUrl:"templates/daterange.html",scope:{start:"=",end:"="},link:function(a,b,c){a.start=new Date(a.start||new Date),a.end=new Date(a.end||new Date),c.$observe("disabled",function(b){a.disableDatePickers=!!b}),a.$watch("start.getTime()",function(b){b&&a.end&&b>a.end.getTime()&&(a.end=new Date(b))}),a.$watch("end.getTime()",function(b){b&&a.start&&b'},format:"yyyy-MM-dd HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),b.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),b.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(b,e,f,g,h,i){var j=e.find("body"),k=f("date");return{require:"ngModel",scope:!0,link:function(e,f,l,m){function n(a){return k(a,s)}function o(a){return a.length===s.length?a:void 0}function p(a){a.stopPropagation(),m.$pristine&&(m.$dirty=!0,m.$pristine=!1,f.removeClass(c).addClass(d),t&&t.$setDirty(),m.$render())}function q(){y&&(y.remove(),y=null),A&&(A.remove(),A=null)}function r(){if(!y){if(y=b(D)(e),e.$digest(),e.$on("setDate",function(a,b,c){p(a),x&&u[u.length-1]===c&&q()}),e.$on("hidePicker",function(){f.triggerHandler("blur")}),e.$on("$destroy",q),"absolute"===z){var c=a.extend(f.offset(),{height:f[0].offsetHeight});y.css({top:c.top+c.height,left:c.left,display:"block",position:z}),j.append(y)}else A=a.element("
"),f[0].parentElement.insertBefore(A[0],f[0]),A.append(y),y.css({top:f[0].offsetHeight+"px",display:"block"});y.bind("mousedown",function(a){a.preventDefault()})}}var s=l.format||g.format,t=f.inheritedData("$formController"),u=h(l.views)(e)||g.views.concat(),v=l.view||u[0],w=u.indexOf(v),x=l.autoClose?h(l.autoClose)(e):g.autoClose,y=null,z=l.position||g.position,A=null;if(-1===w&&u.splice(w,1),u.unshift(v),m.$formatters.push(n),m.$parsers.unshift(o),a.isDefined(l.minDate)){var B;m.$validators.min=function(b){return!i.isValidDate(b)||a.isUndefined(B)||b>=B},l.$observe("minDate",function(a){B=new Date(a),m.$validate()})}if(a.isDefined(l.maxDate)){var C;m.$validators.max=function(b){return!i.isValidDate(b)||a.isUndefined(C)||C>=b},l.$observe("maxDate",function(a){C=new Date(a),m.$validate()})}var D=g.template(l);f.bind("focus",r),f.bind("blur",q)}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n'),a.put("templates/daterange.html",'
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n')}])}(angular); \ No newline at end of file From 2aba4002bf60018f5f71d70a3d61e79ef018c15c Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 26 Nov 2015 15:47:57 -0700 Subject: [PATCH 10/25] Release v1.0.25 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index a58acbd..23b4343 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.24", + "version": "1.0.25", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 307d411..1a3b947 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.24", + "version": "1.0.25", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 0ddb2cf82f3c5552ef0f904f1c6b62126b739369 Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 2 Dec 2015 14:51:00 -0700 Subject: [PATCH 11/25] Added handling to change the input value to null when it is an empty string. This stops a parse error from firing. --- app/scripts/input.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/scripts/input.js b/app/scripts/input.js index 8db20c0..32fe1c4 100644 --- a/app/scripts/input.js +++ b/app/scripts/input.js @@ -81,6 +81,8 @@ Module.directive('dateTime', ['$compile', '$document', '$filter', 'dateTimeConfi function parser(viewValue) { if(viewValue.length === format.length) { return viewValue; + } else if (viewValue.length === 0 ) { + return null; // value has been cleared, it shouldn't null; not an empty string. } return undefined; } From 842a39d0f3041d61922369f24464445cb7b6466f Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 2 Dec 2015 14:51:59 -0700 Subject: [PATCH 12/25] built code --- dist/angular-datepicker.js | 2 ++ dist/angular-datepicker.min.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dist/angular-datepicker.js b/dist/angular-datepicker.js index 55e3cdd..f4d85bd 100644 --- a/dist/angular-datepicker.js +++ b/dist/angular-datepicker.js @@ -566,6 +566,8 @@ Module.directive('dateTime', ['$compile', '$document', '$filter', 'dateTimeConfi function parser(viewValue) { if(viewValue.length === format.length) { return viewValue; + } else if (viewValue.length === 0 ) { + return null; // value has been cleared, it shouldn't null; not an empty string. } return undefined; } diff --git a/dist/angular-datepicker.min.js b/dist/angular-datepicker.min.js index 75b7dd0..1aee902 100644 --- a/dist/angular-datepicker.min.js +++ b/dist/angular-datepicker.min.js @@ -1 +1 @@ -"use strict";!function(a){var b=a.module("datePicker",[]);b.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],step:5}),b.filter("time",function(){function a(a){return("0"+a.getHours()).slice(-2)+":"+("0"+a.getMinutes()).slice(-2)}return function(b){return b instanceof Date||(b=new Date(b),!isNaN(b.getTime()))?a(b):void 0}}),b.directive("datePicker",["datePickerConfig","datePickerUtils",function(b,c){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(d,e,f,g){function h(){var a=d.view;d.model&&!j&&(d.date=new Date(d.model),j=!1);var b=d.date;switch(c.isValidDate(b)||(b=new Date),a){case"year":d.years=c.getVisibleYears(b);break;case"month":d.months=c.getVisibleMonths(b);break;case"date":d.weekdays=d.weekdays||c.getDaysOfWeek(),d.weeks=c.getVisibleWeeks(b);break;case"hours":d.hours=c.getVisibleHours(b);break;case"minutes":d.minutes=c.getVisibleMinutes(b,k)}}function i(){return"date"!==d.view?d.view:d.date?d.date.getMonth():null}var j=!1;d.date=new Date(d.model||new Date),d.views=b.views.concat(),d.view=f.view||b.view,d.now=new Date,d.template=f.template||b.template,d.watchDirectChanges=void 0!==f.watchDirectChanges,d.callbackOnSetDate=f.onSetDate?_.get(d.$parent,f.onSetDate):void 0;var k=parseInt(f.step||b.step,10),l=!!f.partial;if(g){if(a.isDefined(f.minDate)){var m;g.$validators.min=function(b){return!c.isValidDate(b)||a.isUndefined(m)||b>=m},f.$observe("minDate",function(a){m=new Date(a),g.$validate()})}if(a.isDefined(f.maxDate)){var n;g.$validators.max=function(b){return!c.isValidDate(b)||a.isUndefined(n)||n>=b},f.$observe("maxDate",function(a){n=new Date(a),g.$validate()})}}d.views=d.views.slice(d.views.indexOf(f.maxView||"year"),d.views.indexOf(f.minView||"minutes")+1),(1===d.views.length||-1===d.views.indexOf(d.view))&&(d.view=d.views[0]),d.setView=function(a){-1!==d.views.indexOf(a)&&(d.view=a)},d.setDate=function(a){if(!f.disabled){d.date=a;var b=d.views[d.views.indexOf(d.view)+1];if(!b||l||d.model){d.model=new Date(d.model||a),g&&g.$setViewValue(d.date);var c=l?"minutes":d.view;switch(c){case"minutes":d.model.setMinutes(a.getMinutes());case"hours":d.model.setHours(a.getHours());case"date":d.model.setFullYear(a.getFullYear()),d.model.setMonth(a.getMonth()),d.model.setDate(a.getDate());break;case"month":d.model.setMonth(a.getMonth());case"year":d.model.setFullYear(a.getFullYear())}!b&&d.model&&(d.$emit("setMaxDate",f.datePicker,d.model,d.view),d.callbackOnSetDate&&d.callbackOnSetDate()),d.$emit("setDate",d.model,d.view)}b&&d.setView(b),b||"true"!==f.autoClose||(e.addClass("hidden"),d.$emit("hidePicker"))}},d.$watch(i,h),d.watchDirectChanges&&d.$watch("model",function(){j=!1,h()}),d.next=function(a){var b=d.date;switch(a=a||1,d.view){case"year":case"month":b.setFullYear(b.getFullYear()+a);break;case"date":b.setMonth(b.getMonth()+a);break;case"hours":case"minutes":b.setHours(b.getHours()+a)}j=!0,h()},d.prev=function(a){return d.next(-a||-1)},d.isAfter=function(a){return d.after&&c.isAfter(a,d.after)},d.isBefore=function(a){return d.before&&c.isBefore(a,d.before)},d.isSameMonth=function(a){return c.isSameMonth(d.model,a)},d.isSameYear=function(a){return c.isSameYear(d.model,a)},d.isSameDay=function(a){return c.isSameDay(d.model,a)},d.isSameHour=function(a){return c.isSameHour(d.model,a)},d.isSameMinutes=function(a){return c.isSameMinutes(d.model,a)},d.isNow=function(a){var b=!0,c=d.now;switch(d.view){case"minutes":b&=~~(a.getMinutes()/k)===~~(c.getMinutes()/k);case"hours":b&=a.getHours()===c.getHours();case"date":b&=a.getDate()===c.getDate();case"month":b&=a.getMonth()===c.getMonth();case"year":b&=a.getFullYear()===c.getFullYear()}return b}}}}]),a.module("datePicker").factory("datePickerUtils",function(){var a=function(a,b,c,d,e){return new Date(0|a,0|b,0|c,0|d,0|e)};return{getVisibleMinutes:function(b,c){b=new Date(b||new Date);var d,e,f=b.getFullYear(),g=b.getMonth(),h=b.getDate(),i=b.getHours(),j=[];for(d=0;60>d;d+=c)e=a(f,g,h,i,d),j.push(e);return j},getVisibleWeeks:function(a){a=new Date(a||new Date);var b=a.getMonth(),c=a.getYear();a.setDate(1),0===a.getDay()?a.setDate(-5):a.setDate(a.getDate()-(a.getDay()-1)),1===a.getDate()&&a.setDate(-6);for(var d,e=[];e.length<6&&!(a.getYear()===c&&a.getMonth()>b);)d=this.getDaysOfWeek(a),e.push(d),a.setDate(a.getDate()+7);return e},getVisibleYears:function(b){b=new Date(b||new Date),b.setFullYear(b.getFullYear()-b.getFullYear()%10);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d),e.push(c),d++;return e},getDaysOfWeek:function(b){b=new Date(b||new Date),b.setDate(b.getDate()-(b.getDay()-1));for(var c,d=b.getFullYear(),e=b.getMonth(),f=b.getDate(),g=[],h=0;7>h;h++)c=a(d,e,f),g.push(c),f++;return g},getVisibleMonths:function(b){b=new Date(b||new Date);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d,f,1),e.push(c);return e},getVisibleHours:function(b){b=new Date(b||new Date);var c,d,e=b.getFullYear(),f=b.getMonth(),g=b.getDate(),h=[];for(c=0;24>c;c++)d=a(e,f,g,c),h.push(d);return h},isAfter:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getTime()>=b.getTime()},isBefore:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a.getTime()<=b.getTime()},isSameYear:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getFullYear()===b.getFullYear()},isSameMonth:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameYear(a,b)&&a.getMonth()===b.getMonth()},isSameDay:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameMonth(a,b)&&a.getDate()===b.getDate()},isSameHour:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameDay(a,b)&&a.getHours()===b.getHours()},isSameMinutes:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameHour(a,b)&&a.getMinutes()===b.getMinutes()},isValidDate:function(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}}});var b=a.module("datePicker");b.directive("dateRange",function(){return{templateUrl:"templates/daterange.html",scope:{start:"=",end:"="},link:function(a,b,c){a.start=new Date(a.start||new Date),a.end=new Date(a.end||new Date),c.$observe("disabled",function(b){a.disableDatePickers=!!b}),a.$watch("start.getTime()",function(b){b&&a.end&&b>a.end.getTime()&&(a.end=new Date(b))}),a.$watch("end.getTime()",function(b){b&&a.start&&b'},format:"yyyy-MM-dd HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),b.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),b.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(b,e,f,g,h,i){var j=e.find("body"),k=f("date");return{require:"ngModel",scope:!0,link:function(e,f,l,m){function n(a){return k(a,s)}function o(a){return a.length===s.length?a:void 0}function p(a){a.stopPropagation(),m.$pristine&&(m.$dirty=!0,m.$pristine=!1,f.removeClass(c).addClass(d),t&&t.$setDirty(),m.$render())}function q(){y&&(y.remove(),y=null),A&&(A.remove(),A=null)}function r(){if(!y){if(y=b(D)(e),e.$digest(),e.$on("setDate",function(a,b,c){p(a),x&&u[u.length-1]===c&&q()}),e.$on("hidePicker",function(){f.triggerHandler("blur")}),e.$on("$destroy",q),"absolute"===z){var c=a.extend(f.offset(),{height:f[0].offsetHeight});y.css({top:c.top+c.height,left:c.left,display:"block",position:z}),j.append(y)}else A=a.element("
"),f[0].parentElement.insertBefore(A[0],f[0]),A.append(y),y.css({top:f[0].offsetHeight+"px",display:"block"});y.bind("mousedown",function(a){a.preventDefault()})}}var s=l.format||g.format,t=f.inheritedData("$formController"),u=h(l.views)(e)||g.views.concat(),v=l.view||u[0],w=u.indexOf(v),x=l.autoClose?h(l.autoClose)(e):g.autoClose,y=null,z=l.position||g.position,A=null;if(-1===w&&u.splice(w,1),u.unshift(v),m.$formatters.push(n),m.$parsers.unshift(o),a.isDefined(l.minDate)){var B;m.$validators.min=function(b){return!i.isValidDate(b)||a.isUndefined(B)||b>=B},l.$observe("minDate",function(a){B=new Date(a),m.$validate()})}if(a.isDefined(l.maxDate)){var C;m.$validators.max=function(b){return!i.isValidDate(b)||a.isUndefined(C)||C>=b},l.$observe("maxDate",function(a){C=new Date(a),m.$validate()})}var D=g.template(l);f.bind("focus",r),f.bind("blur",q)}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n'),a.put("templates/daterange.html",'
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n')}])}(angular); \ No newline at end of file +"use strict";!function(a){var b=a.module("datePicker",[]);b.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],step:5}),b.filter("time",function(){function a(a){return("0"+a.getHours()).slice(-2)+":"+("0"+a.getMinutes()).slice(-2)}return function(b){return b instanceof Date||(b=new Date(b),!isNaN(b.getTime()))?a(b):void 0}}),b.directive("datePicker",["datePickerConfig","datePickerUtils",function(b,c){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(d,e,f,g){function h(){var a=d.view;d.model&&!j&&(d.date=new Date(d.model),j=!1);var b=d.date;switch(c.isValidDate(b)||(b=new Date),a){case"year":d.years=c.getVisibleYears(b);break;case"month":d.months=c.getVisibleMonths(b);break;case"date":d.weekdays=d.weekdays||c.getDaysOfWeek(),d.weeks=c.getVisibleWeeks(b);break;case"hours":d.hours=c.getVisibleHours(b);break;case"minutes":d.minutes=c.getVisibleMinutes(b,k)}}function i(){return"date"!==d.view?d.view:d.date?d.date.getMonth():null}var j=!1;d.date=new Date(d.model||new Date),d.views=b.views.concat(),d.view=f.view||b.view,d.now=new Date,d.template=f.template||b.template,d.watchDirectChanges=void 0!==f.watchDirectChanges,d.callbackOnSetDate=f.onSetDate?_.get(d.$parent,f.onSetDate):void 0;var k=parseInt(f.step||b.step,10),l=!!f.partial;if(g){if(a.isDefined(f.minDate)){var m;g.$validators.min=function(b){return!c.isValidDate(b)||a.isUndefined(m)||b>=m},f.$observe("minDate",function(a){m=new Date(a),g.$validate()})}if(a.isDefined(f.maxDate)){var n;g.$validators.max=function(b){return!c.isValidDate(b)||a.isUndefined(n)||n>=b},f.$observe("maxDate",function(a){n=new Date(a),g.$validate()})}}d.views=d.views.slice(d.views.indexOf(f.maxView||"year"),d.views.indexOf(f.minView||"minutes")+1),(1===d.views.length||-1===d.views.indexOf(d.view))&&(d.view=d.views[0]),d.setView=function(a){-1!==d.views.indexOf(a)&&(d.view=a)},d.setDate=function(a){if(!f.disabled){d.date=a;var b=d.views[d.views.indexOf(d.view)+1];if(!b||l||d.model){d.model=new Date(d.model||a),g&&g.$setViewValue(d.date);var c=l?"minutes":d.view;switch(c){case"minutes":d.model.setMinutes(a.getMinutes());case"hours":d.model.setHours(a.getHours());case"date":d.model.setFullYear(a.getFullYear()),d.model.setMonth(a.getMonth()),d.model.setDate(a.getDate());break;case"month":d.model.setMonth(a.getMonth());case"year":d.model.setFullYear(a.getFullYear())}!b&&d.model&&(d.$emit("setMaxDate",f.datePicker,d.model,d.view),d.callbackOnSetDate&&d.callbackOnSetDate()),d.$emit("setDate",d.model,d.view)}b&&d.setView(b),b||"true"!==f.autoClose||(e.addClass("hidden"),d.$emit("hidePicker"))}},d.$watch(i,h),d.watchDirectChanges&&d.$watch("model",function(){j=!1,h()}),d.next=function(a){var b=d.date;switch(a=a||1,d.view){case"year":case"month":b.setFullYear(b.getFullYear()+a);break;case"date":b.setMonth(b.getMonth()+a);break;case"hours":case"minutes":b.setHours(b.getHours()+a)}j=!0,h()},d.prev=function(a){return d.next(-a||-1)},d.isAfter=function(a){return d.after&&c.isAfter(a,d.after)},d.isBefore=function(a){return d.before&&c.isBefore(a,d.before)},d.isSameMonth=function(a){return c.isSameMonth(d.model,a)},d.isSameYear=function(a){return c.isSameYear(d.model,a)},d.isSameDay=function(a){return c.isSameDay(d.model,a)},d.isSameHour=function(a){return c.isSameHour(d.model,a)},d.isSameMinutes=function(a){return c.isSameMinutes(d.model,a)},d.isNow=function(a){var b=!0,c=d.now;switch(d.view){case"minutes":b&=~~(a.getMinutes()/k)===~~(c.getMinutes()/k);case"hours":b&=a.getHours()===c.getHours();case"date":b&=a.getDate()===c.getDate();case"month":b&=a.getMonth()===c.getMonth();case"year":b&=a.getFullYear()===c.getFullYear()}return b}}}}]),a.module("datePicker").factory("datePickerUtils",function(){var a=function(a,b,c,d,e){return new Date(0|a,0|b,0|c,0|d,0|e)};return{getVisibleMinutes:function(b,c){b=new Date(b||new Date);var d,e,f=b.getFullYear(),g=b.getMonth(),h=b.getDate(),i=b.getHours(),j=[];for(d=0;60>d;d+=c)e=a(f,g,h,i,d),j.push(e);return j},getVisibleWeeks:function(a){a=new Date(a||new Date);var b=a.getMonth(),c=a.getYear();a.setDate(1),0===a.getDay()?a.setDate(-5):a.setDate(a.getDate()-(a.getDay()-1)),1===a.getDate()&&a.setDate(-6);for(var d,e=[];e.length<6&&!(a.getYear()===c&&a.getMonth()>b);)d=this.getDaysOfWeek(a),e.push(d),a.setDate(a.getDate()+7);return e},getVisibleYears:function(b){b=new Date(b||new Date),b.setFullYear(b.getFullYear()-b.getFullYear()%10);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d),e.push(c),d++;return e},getDaysOfWeek:function(b){b=new Date(b||new Date),b.setDate(b.getDate()-(b.getDay()-1));for(var c,d=b.getFullYear(),e=b.getMonth(),f=b.getDate(),g=[],h=0;7>h;h++)c=a(d,e,f),g.push(c),f++;return g},getVisibleMonths:function(b){b=new Date(b||new Date);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d,f,1),e.push(c);return e},getVisibleHours:function(b){b=new Date(b||new Date);var c,d,e=b.getFullYear(),f=b.getMonth(),g=b.getDate(),h=[];for(c=0;24>c;c++)d=a(e,f,g,c),h.push(d);return h},isAfter:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getTime()>=b.getTime()},isBefore:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a.getTime()<=b.getTime()},isSameYear:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getFullYear()===b.getFullYear()},isSameMonth:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameYear(a,b)&&a.getMonth()===b.getMonth()},isSameDay:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameMonth(a,b)&&a.getDate()===b.getDate()},isSameHour:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameDay(a,b)&&a.getHours()===b.getHours()},isSameMinutes:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameHour(a,b)&&a.getMinutes()===b.getMinutes()},isValidDate:function(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}}});var b=a.module("datePicker");b.directive("dateRange",function(){return{templateUrl:"templates/daterange.html",scope:{start:"=",end:"="},link:function(a,b,c){a.start=new Date(a.start||new Date),a.end=new Date(a.end||new Date),c.$observe("disabled",function(b){a.disableDatePickers=!!b}),a.$watch("start.getTime()",function(b){b&&a.end&&b>a.end.getTime()&&(a.end=new Date(b))}),a.$watch("end.getTime()",function(b){b&&a.start&&b'},format:"yyyy-MM-dd HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),b.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),b.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(b,e,f,g,h,i){var j=e.find("body"),k=f("date");return{require:"ngModel",scope:!0,link:function(e,f,l,m){function n(a){return k(a,s)}function o(a){return a.length===s.length?a:0===a.length?null:void 0}function p(a){a.stopPropagation(),m.$pristine&&(m.$dirty=!0,m.$pristine=!1,f.removeClass(c).addClass(d),t&&t.$setDirty(),m.$render())}function q(){y&&(y.remove(),y=null),A&&(A.remove(),A=null)}function r(){if(!y){if(y=b(D)(e),e.$digest(),e.$on("setDate",function(a,b,c){p(a),x&&u[u.length-1]===c&&q()}),e.$on("hidePicker",function(){f.triggerHandler("blur")}),e.$on("$destroy",q),"absolute"===z){var c=a.extend(f.offset(),{height:f[0].offsetHeight});y.css({top:c.top+c.height,left:c.left,display:"block",position:z}),j.append(y)}else A=a.element("
"),f[0].parentElement.insertBefore(A[0],f[0]),A.append(y),y.css({top:f[0].offsetHeight+"px",display:"block"});y.bind("mousedown",function(a){a.preventDefault()})}}var s=l.format||g.format,t=f.inheritedData("$formController"),u=h(l.views)(e)||g.views.concat(),v=l.view||u[0],w=u.indexOf(v),x=l.autoClose?h(l.autoClose)(e):g.autoClose,y=null,z=l.position||g.position,A=null;if(-1===w&&u.splice(w,1),u.unshift(v),m.$formatters.push(n),m.$parsers.unshift(o),a.isDefined(l.minDate)){var B;m.$validators.min=function(b){return!i.isValidDate(b)||a.isUndefined(B)||b>=B},l.$observe("minDate",function(a){B=new Date(a),m.$validate()})}if(a.isDefined(l.maxDate)){var C;m.$validators.max=function(b){return!i.isValidDate(b)||a.isUndefined(C)||C>=b},l.$observe("maxDate",function(a){C=new Date(a),m.$validate()})}var D=g.template(l);f.bind("focus",r),f.bind("blur",q)}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n'),a.put("templates/daterange.html",'
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n')}])}(angular); \ No newline at end of file From 14cb944b9b38e850e7aa71d6daf6fdd173d40f7d Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 2 Dec 2015 14:52:32 -0700 Subject: [PATCH 13/25] Release v1.0.26 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 23b4343..d2d8bc6 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.25", + "version": "1.0.26", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 1a3b947..48a49d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.25", + "version": "1.0.26", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From b33c3ce6cc5d0539aaa682fcc1c6c5909e34e26a Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 2 Dec 2015 14:52:47 -0700 Subject: [PATCH 14/25] Release v1.0.27 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index d2d8bc6..b244c28 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.26", + "version": "1.0.27", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 48a49d0..9130b72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.26", + "version": "1.0.27", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 31501103f9dbe75de22c85874e2ded8846cee524 Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 2 Dec 2015 14:52:57 -0700 Subject: [PATCH 15/25] Release v1.0.28 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index b244c28..b0b8b54 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.27", + "version": "1.0.28", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 9130b72..d01f866 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.27", + "version": "1.0.28", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From fb0f4e1b295a8fa0b9d7eba7825df2ea8925a04e Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 2 Dec 2015 14:53:24 -0700 Subject: [PATCH 16/25] Release v1.0.29 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index b0b8b54..663706e 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.28", + "version": "1.0.29", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index d01f866..ce44524 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.28", + "version": "1.0.29", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 717a25e79c6b0451e7b11d7736035362a3909c7c Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 2 Dec 2015 14:53:52 -0700 Subject: [PATCH 17/25] Release v1.0.30 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 663706e..a0bc080 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.29", + "version": "1.0.30", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index ce44524..2bc0f55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.29", + "version": "1.0.30", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 68e6ec389dd94c134c5b659333971d83689be255 Mon Sep 17 00:00:00 2001 From: Jamie Date: Tue, 8 Dec 2015 09:57:09 -0700 Subject: [PATCH 18/25] fixed bug with header not updating to correct date --- app/scripts/datePicker.js | 9 +++++++++ app/templates/datepicker.html | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/scripts/datePicker.js b/app/scripts/datePicker.js index e0bc16c..2ccfd9a 100644 --- a/app/scripts/datePicker.js +++ b/app/scripts/datePicker.js @@ -50,6 +50,15 @@ Module.directive('datePicker', ['datePickerConfig', 'datePickerUtils', function scope.watchDirectChanges = attrs.watchDirectChanges !== undefined; scope.callbackOnSetDate = attrs.onSetDate ? _.get(scope.$parent, attrs.onSetDate) : undefined; + // for some reason having a similar check to this in the template doesn't work properly + scope.getUnformattedDateHeader = function() { + var dateToFormat = scope.now; + if ( scope.date && angular.isDate(scope.date) ) { + dateToFormat = scope.date; + } + return dateToFormat; + }; + var step = parseInt(attrs.step || datePickerConfig.step, 10); var partial = !!attrs.partial; diff --git a/app/templates/datepicker.html b/app/templates/datepicker.html index 250faef..82b9800 100644 --- a/app/templates/datepicker.html +++ b/app/templates/datepicker.html @@ -4,7 +4,7 @@ ‹ - + › @@ -47,7 +47,7 @@ ‹ - + › @@ -68,7 +68,7 @@ ‹ - + › @@ -88,7 +88,7 @@ ‹ - + › From 4119ded42ae9dd7dbb337fd23f369d3bc2ad9b70 Mon Sep 17 00:00:00 2001 From: Jamie Date: Tue, 8 Dec 2015 10:08:00 -0700 Subject: [PATCH 19/25] Release v1.0.31 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index a0bc080..451a9b9 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.30", + "version": "1.0.31", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 2bc0f55..299d09a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.30", + "version": "1.0.31", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From ff05306eb2c1c20ffb8e18d84246f7d5956bcbd4 Mon Sep 17 00:00:00 2001 From: Jamie Date: Tue, 8 Dec 2015 10:16:22 -0700 Subject: [PATCH 20/25] fixed bug with header not updating to correct date --- dist/angular-datepicker.js | 330 ++++++++++++--------------------- dist/angular-datepicker.min.js | 2 +- 2 files changed, 117 insertions(+), 215 deletions(-) diff --git a/dist/angular-datepicker.js b/dist/angular-datepicker.js index f4d85bd..3c0bad3 100644 --- a/dist/angular-datepicker.js +++ b/dist/angular-datepicker.js @@ -50,6 +50,15 @@ Module.directive('datePicker', ['datePickerConfig', 'datePickerUtils', function scope.watchDirectChanges = attrs.watchDirectChanges !== undefined; scope.callbackOnSetDate = attrs.onSetDate ? _.get(scope.$parent, attrs.onSetDate) : undefined; + // for some reason having a similar check to this in the template doesn't work properly + scope.getUnformattedDateHeader = function() { + var dateToFormat = scope.now; + if ( scope.date && angular.isDate(scope.date) ) { + dateToFormat = scope.date; + } + return dateToFormat; + }; + var step = parseInt(attrs.step || datePickerConfig.step, 10); var partial = !!attrs.partial; @@ -676,220 +685,113 @@ Module.directive('dateTime', ['$compile', '$document', '$filter', 'dateTimeConfi angular.module('datePicker').run(['$templateCache', function($templateCache) { $templateCache.put('templates/datepicker.html', - "
\r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - " \r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + - "
\r" + - "\n" + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "
\n" + + "
\n" + + "
\n" ); diff --git a/dist/angular-datepicker.min.js b/dist/angular-datepicker.min.js index 1aee902..08f1b2a 100644 --- a/dist/angular-datepicker.min.js +++ b/dist/angular-datepicker.min.js @@ -1 +1 @@ -"use strict";!function(a){var b=a.module("datePicker",[]);b.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],step:5}),b.filter("time",function(){function a(a){return("0"+a.getHours()).slice(-2)+":"+("0"+a.getMinutes()).slice(-2)}return function(b){return b instanceof Date||(b=new Date(b),!isNaN(b.getTime()))?a(b):void 0}}),b.directive("datePicker",["datePickerConfig","datePickerUtils",function(b,c){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(d,e,f,g){function h(){var a=d.view;d.model&&!j&&(d.date=new Date(d.model),j=!1);var b=d.date;switch(c.isValidDate(b)||(b=new Date),a){case"year":d.years=c.getVisibleYears(b);break;case"month":d.months=c.getVisibleMonths(b);break;case"date":d.weekdays=d.weekdays||c.getDaysOfWeek(),d.weeks=c.getVisibleWeeks(b);break;case"hours":d.hours=c.getVisibleHours(b);break;case"minutes":d.minutes=c.getVisibleMinutes(b,k)}}function i(){return"date"!==d.view?d.view:d.date?d.date.getMonth():null}var j=!1;d.date=new Date(d.model||new Date),d.views=b.views.concat(),d.view=f.view||b.view,d.now=new Date,d.template=f.template||b.template,d.watchDirectChanges=void 0!==f.watchDirectChanges,d.callbackOnSetDate=f.onSetDate?_.get(d.$parent,f.onSetDate):void 0;var k=parseInt(f.step||b.step,10),l=!!f.partial;if(g){if(a.isDefined(f.minDate)){var m;g.$validators.min=function(b){return!c.isValidDate(b)||a.isUndefined(m)||b>=m},f.$observe("minDate",function(a){m=new Date(a),g.$validate()})}if(a.isDefined(f.maxDate)){var n;g.$validators.max=function(b){return!c.isValidDate(b)||a.isUndefined(n)||n>=b},f.$observe("maxDate",function(a){n=new Date(a),g.$validate()})}}d.views=d.views.slice(d.views.indexOf(f.maxView||"year"),d.views.indexOf(f.minView||"minutes")+1),(1===d.views.length||-1===d.views.indexOf(d.view))&&(d.view=d.views[0]),d.setView=function(a){-1!==d.views.indexOf(a)&&(d.view=a)},d.setDate=function(a){if(!f.disabled){d.date=a;var b=d.views[d.views.indexOf(d.view)+1];if(!b||l||d.model){d.model=new Date(d.model||a),g&&g.$setViewValue(d.date);var c=l?"minutes":d.view;switch(c){case"minutes":d.model.setMinutes(a.getMinutes());case"hours":d.model.setHours(a.getHours());case"date":d.model.setFullYear(a.getFullYear()),d.model.setMonth(a.getMonth()),d.model.setDate(a.getDate());break;case"month":d.model.setMonth(a.getMonth());case"year":d.model.setFullYear(a.getFullYear())}!b&&d.model&&(d.$emit("setMaxDate",f.datePicker,d.model,d.view),d.callbackOnSetDate&&d.callbackOnSetDate()),d.$emit("setDate",d.model,d.view)}b&&d.setView(b),b||"true"!==f.autoClose||(e.addClass("hidden"),d.$emit("hidePicker"))}},d.$watch(i,h),d.watchDirectChanges&&d.$watch("model",function(){j=!1,h()}),d.next=function(a){var b=d.date;switch(a=a||1,d.view){case"year":case"month":b.setFullYear(b.getFullYear()+a);break;case"date":b.setMonth(b.getMonth()+a);break;case"hours":case"minutes":b.setHours(b.getHours()+a)}j=!0,h()},d.prev=function(a){return d.next(-a||-1)},d.isAfter=function(a){return d.after&&c.isAfter(a,d.after)},d.isBefore=function(a){return d.before&&c.isBefore(a,d.before)},d.isSameMonth=function(a){return c.isSameMonth(d.model,a)},d.isSameYear=function(a){return c.isSameYear(d.model,a)},d.isSameDay=function(a){return c.isSameDay(d.model,a)},d.isSameHour=function(a){return c.isSameHour(d.model,a)},d.isSameMinutes=function(a){return c.isSameMinutes(d.model,a)},d.isNow=function(a){var b=!0,c=d.now;switch(d.view){case"minutes":b&=~~(a.getMinutes()/k)===~~(c.getMinutes()/k);case"hours":b&=a.getHours()===c.getHours();case"date":b&=a.getDate()===c.getDate();case"month":b&=a.getMonth()===c.getMonth();case"year":b&=a.getFullYear()===c.getFullYear()}return b}}}}]),a.module("datePicker").factory("datePickerUtils",function(){var a=function(a,b,c,d,e){return new Date(0|a,0|b,0|c,0|d,0|e)};return{getVisibleMinutes:function(b,c){b=new Date(b||new Date);var d,e,f=b.getFullYear(),g=b.getMonth(),h=b.getDate(),i=b.getHours(),j=[];for(d=0;60>d;d+=c)e=a(f,g,h,i,d),j.push(e);return j},getVisibleWeeks:function(a){a=new Date(a||new Date);var b=a.getMonth(),c=a.getYear();a.setDate(1),0===a.getDay()?a.setDate(-5):a.setDate(a.getDate()-(a.getDay()-1)),1===a.getDate()&&a.setDate(-6);for(var d,e=[];e.length<6&&!(a.getYear()===c&&a.getMonth()>b);)d=this.getDaysOfWeek(a),e.push(d),a.setDate(a.getDate()+7);return e},getVisibleYears:function(b){b=new Date(b||new Date),b.setFullYear(b.getFullYear()-b.getFullYear()%10);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d),e.push(c),d++;return e},getDaysOfWeek:function(b){b=new Date(b||new Date),b.setDate(b.getDate()-(b.getDay()-1));for(var c,d=b.getFullYear(),e=b.getMonth(),f=b.getDate(),g=[],h=0;7>h;h++)c=a(d,e,f),g.push(c),f++;return g},getVisibleMonths:function(b){b=new Date(b||new Date);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d,f,1),e.push(c);return e},getVisibleHours:function(b){b=new Date(b||new Date);var c,d,e=b.getFullYear(),f=b.getMonth(),g=b.getDate(),h=[];for(c=0;24>c;c++)d=a(e,f,g,c),h.push(d);return h},isAfter:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getTime()>=b.getTime()},isBefore:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a.getTime()<=b.getTime()},isSameYear:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getFullYear()===b.getFullYear()},isSameMonth:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameYear(a,b)&&a.getMonth()===b.getMonth()},isSameDay:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameMonth(a,b)&&a.getDate()===b.getDate()},isSameHour:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameDay(a,b)&&a.getHours()===b.getHours()},isSameMinutes:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameHour(a,b)&&a.getMinutes()===b.getMinutes()},isValidDate:function(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}}});var b=a.module("datePicker");b.directive("dateRange",function(){return{templateUrl:"templates/daterange.html",scope:{start:"=",end:"="},link:function(a,b,c){a.start=new Date(a.start||new Date),a.end=new Date(a.end||new Date),c.$observe("disabled",function(b){a.disableDatePickers=!!b}),a.$watch("start.getTime()",function(b){b&&a.end&&b>a.end.getTime()&&(a.end=new Date(b))}),a.$watch("end.getTime()",function(b){b&&a.start&&b'},format:"yyyy-MM-dd HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),b.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),b.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(b,e,f,g,h,i){var j=e.find("body"),k=f("date");return{require:"ngModel",scope:!0,link:function(e,f,l,m){function n(a){return k(a,s)}function o(a){return a.length===s.length?a:0===a.length?null:void 0}function p(a){a.stopPropagation(),m.$pristine&&(m.$dirty=!0,m.$pristine=!1,f.removeClass(c).addClass(d),t&&t.$setDirty(),m.$render())}function q(){y&&(y.remove(),y=null),A&&(A.remove(),A=null)}function r(){if(!y){if(y=b(D)(e),e.$digest(),e.$on("setDate",function(a,b,c){p(a),x&&u[u.length-1]===c&&q()}),e.$on("hidePicker",function(){f.triggerHandler("blur")}),e.$on("$destroy",q),"absolute"===z){var c=a.extend(f.offset(),{height:f[0].offsetHeight});y.css({top:c.top+c.height,left:c.left,display:"block",position:z}),j.append(y)}else A=a.element("
"),f[0].parentElement.insertBefore(A[0],f[0]),A.append(y),y.css({top:f[0].offsetHeight+"px",display:"block"});y.bind("mousedown",function(a){a.preventDefault()})}}var s=l.format||g.format,t=f.inheritedData("$formController"),u=h(l.views)(e)||g.views.concat(),v=l.view||u[0],w=u.indexOf(v),x=l.autoClose?h(l.autoClose)(e):g.autoClose,y=null,z=l.position||g.position,A=null;if(-1===w&&u.splice(w,1),u.unshift(v),m.$formatters.push(n),m.$parsers.unshift(o),a.isDefined(l.minDate)){var B;m.$validators.min=function(b){return!i.isValidDate(b)||a.isUndefined(B)||b>=B},l.$observe("minDate",function(a){B=new Date(a),m.$validate()})}if(a.isDefined(l.maxDate)){var C;m.$validators.max=function(b){return!i.isValidDate(b)||a.isUndefined(C)||C>=b},l.$observe("maxDate",function(a){C=new Date(a),m.$validate()})}var D=g.template(l);f.bind("focus",r),f.bind("blur",q)}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n'),a.put("templates/daterange.html",'
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n')}])}(angular); \ No newline at end of file +"use strict";!function(a){var b=a.module("datePicker",[]);b.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],step:5}),b.filter("time",function(){function a(a){return("0"+a.getHours()).slice(-2)+":"+("0"+a.getMinutes()).slice(-2)}return function(b){return b instanceof Date||(b=new Date(b),!isNaN(b.getTime()))?a(b):void 0}}),b.directive("datePicker",["datePickerConfig","datePickerUtils",function(b,c){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(d,e,f,g){function h(){var a=d.view;d.model&&!j&&(d.date=new Date(d.model),j=!1);var b=d.date;switch(c.isValidDate(b)||(b=new Date),a){case"year":d.years=c.getVisibleYears(b);break;case"month":d.months=c.getVisibleMonths(b);break;case"date":d.weekdays=d.weekdays||c.getDaysOfWeek(),d.weeks=c.getVisibleWeeks(b);break;case"hours":d.hours=c.getVisibleHours(b);break;case"minutes":d.minutes=c.getVisibleMinutes(b,k)}}function i(){return"date"!==d.view?d.view:d.date?d.date.getMonth():null}var j=!1;d.date=new Date(d.model||new Date),d.views=b.views.concat(),d.view=f.view||b.view,d.now=new Date,d.template=f.template||b.template,d.watchDirectChanges=void 0!==f.watchDirectChanges,d.callbackOnSetDate=f.onSetDate?_.get(d.$parent,f.onSetDate):void 0,d.getUnformattedDateHeader=function(){var b=d.now;return d.date&&a.isDate(d.date)&&(b=d.date),b};var k=parseInt(f.step||b.step,10),l=!!f.partial;if(g){if(a.isDefined(f.minDate)){var m;g.$validators.min=function(b){return!c.isValidDate(b)||a.isUndefined(m)||b>=m},f.$observe("minDate",function(a){m=new Date(a),g.$validate()})}if(a.isDefined(f.maxDate)){var n;g.$validators.max=function(b){return!c.isValidDate(b)||a.isUndefined(n)||n>=b},f.$observe("maxDate",function(a){n=new Date(a),g.$validate()})}}d.views=d.views.slice(d.views.indexOf(f.maxView||"year"),d.views.indexOf(f.minView||"minutes")+1),(1===d.views.length||-1===d.views.indexOf(d.view))&&(d.view=d.views[0]),d.setView=function(a){-1!==d.views.indexOf(a)&&(d.view=a)},d.setDate=function(a){if(!f.disabled){d.date=a;var b=d.views[d.views.indexOf(d.view)+1];if(!b||l||d.model){d.model=new Date(d.model||a),g&&g.$setViewValue(d.date);var c=l?"minutes":d.view;switch(c){case"minutes":d.model.setMinutes(a.getMinutes());case"hours":d.model.setHours(a.getHours());case"date":d.model.setFullYear(a.getFullYear()),d.model.setMonth(a.getMonth()),d.model.setDate(a.getDate());break;case"month":d.model.setMonth(a.getMonth());case"year":d.model.setFullYear(a.getFullYear())}!b&&d.model&&(d.$emit("setMaxDate",f.datePicker,d.model,d.view),d.callbackOnSetDate&&d.callbackOnSetDate()),d.$emit("setDate",d.model,d.view)}b&&d.setView(b),b||"true"!==f.autoClose||(e.addClass("hidden"),d.$emit("hidePicker"))}},d.$watch(i,h),d.watchDirectChanges&&d.$watch("model",function(){j=!1,h()}),d.next=function(a){var b=d.date;switch(a=a||1,d.view){case"year":case"month":b.setFullYear(b.getFullYear()+a);break;case"date":b.setMonth(b.getMonth()+a);break;case"hours":case"minutes":b.setHours(b.getHours()+a)}j=!0,h()},d.prev=function(a){return d.next(-a||-1)},d.isAfter=function(a){return d.after&&c.isAfter(a,d.after)},d.isBefore=function(a){return d.before&&c.isBefore(a,d.before)},d.isSameMonth=function(a){return c.isSameMonth(d.model,a)},d.isSameYear=function(a){return c.isSameYear(d.model,a)},d.isSameDay=function(a){return c.isSameDay(d.model,a)},d.isSameHour=function(a){return c.isSameHour(d.model,a)},d.isSameMinutes=function(a){return c.isSameMinutes(d.model,a)},d.isNow=function(a){var b=!0,c=d.now;switch(d.view){case"minutes":b&=~~(a.getMinutes()/k)===~~(c.getMinutes()/k);case"hours":b&=a.getHours()===c.getHours();case"date":b&=a.getDate()===c.getDate();case"month":b&=a.getMonth()===c.getMonth();case"year":b&=a.getFullYear()===c.getFullYear()}return b}}}}]),a.module("datePicker").factory("datePickerUtils",function(){var a=function(a,b,c,d,e){return new Date(0|a,0|b,0|c,0|d,0|e)};return{getVisibleMinutes:function(b,c){b=new Date(b||new Date);var d,e,f=b.getFullYear(),g=b.getMonth(),h=b.getDate(),i=b.getHours(),j=[];for(d=0;60>d;d+=c)e=a(f,g,h,i,d),j.push(e);return j},getVisibleWeeks:function(a){a=new Date(a||new Date);var b=a.getMonth(),c=a.getYear();a.setDate(1),0===a.getDay()?a.setDate(-5):a.setDate(a.getDate()-(a.getDay()-1)),1===a.getDate()&&a.setDate(-6);for(var d,e=[];e.length<6&&!(a.getYear()===c&&a.getMonth()>b);)d=this.getDaysOfWeek(a),e.push(d),a.setDate(a.getDate()+7);return e},getVisibleYears:function(b){b=new Date(b||new Date),b.setFullYear(b.getFullYear()-b.getFullYear()%10);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d),e.push(c),d++;return e},getDaysOfWeek:function(b){b=new Date(b||new Date),b.setDate(b.getDate()-(b.getDay()-1));for(var c,d=b.getFullYear(),e=b.getMonth(),f=b.getDate(),g=[],h=0;7>h;h++)c=a(d,e,f),g.push(c),f++;return g},getVisibleMonths:function(b){b=new Date(b||new Date);for(var c,d=b.getFullYear(),e=[],f=0;12>f;f++)c=a(d,f,1),e.push(c);return e},getVisibleHours:function(b){b=new Date(b||new Date);var c,d,e=b.getFullYear(),f=b.getMonth(),g=b.getDate(),h=[];for(c=0;24>c;c++)d=a(e,f,g,c),h.push(d);return h},isAfter:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getTime()>=b.getTime()},isBefore:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a.getTime()<=b.getTime()},isSameYear:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),a&&a.getFullYear()===b.getFullYear()},isSameMonth:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameYear(a,b)&&a.getMonth()===b.getMonth()},isSameDay:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameMonth(a,b)&&a.getDate()===b.getDate()},isSameHour:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameDay(a,b)&&a.getHours()===b.getHours()},isSameMinutes:function(a,b){return a=void 0!==a?new Date(a):a,b=new Date(b),this.isSameHour(a,b)&&a.getMinutes()===b.getMinutes()},isValidDate:function(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}}});var b=a.module("datePicker");b.directive("dateRange",function(){return{templateUrl:"templates/daterange.html",scope:{start:"=",end:"="},link:function(a,b,c){a.start=new Date(a.start||new Date),a.end=new Date(a.end||new Date),c.$observe("disabled",function(b){a.disableDatePickers=!!b}),a.$watch("start.getTime()",function(b){b&&a.end&&b>a.end.getTime()&&(a.end=new Date(b))}),a.$watch("end.getTime()",function(b){b&&a.start&&b'},format:"yyyy-MM-dd HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),b.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),b.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(b,e,f,g,h,i){var j=e.find("body"),k=f("date");return{require:"ngModel",scope:!0,link:function(e,f,l,m){function n(a){return k(a,s)}function o(a){return a.length===s.length?a:0===a.length?null:void 0}function p(a){a.stopPropagation(),m.$pristine&&(m.$dirty=!0,m.$pristine=!1,f.removeClass(c).addClass(d),t&&t.$setDirty(),m.$render())}function q(){y&&(y.remove(),y=null),A&&(A.remove(),A=null)}function r(){if(!y){if(y=b(D)(e),e.$digest(),e.$on("setDate",function(a,b,c){p(a),x&&u[u.length-1]===c&&q()}),e.$on("hidePicker",function(){f.triggerHandler("blur")}),e.$on("$destroy",q),"absolute"===z){var c=a.extend(f.offset(),{height:f[0].offsetHeight});y.css({top:c.top+c.height,left:c.left,display:"block",position:z}),j.append(y)}else A=a.element("
"),f[0].parentElement.insertBefore(A[0],f[0]),A.append(y),y.css({top:f[0].offsetHeight+"px",display:"block"});y.bind("mousedown",function(a){a.preventDefault()})}}var s=l.format||g.format,t=f.inheritedData("$formController"),u=h(l.views)(e)||g.views.concat(),v=l.view||u[0],w=u.indexOf(v),x=l.autoClose?h(l.autoClose)(e):g.autoClose,y=null,z=l.position||g.position,A=null;if(-1===w&&u.splice(w,1),u.unshift(v),m.$formatters.push(n),m.$parsers.unshift(o),a.isDefined(l.minDate)){var B;m.$validators.min=function(b){return!i.isValidDate(b)||a.isUndefined(B)||b>=B},l.$observe("minDate",function(a){B=new Date(a),m.$validate()})}if(a.isDefined(l.maxDate)){var C;m.$validators.max=function(b){return!i.isValidDate(b)||a.isUndefined(C)||C>=b},l.$observe("maxDate",function(a){C=new Date(a),m.$validate()})}var D=g.template(l);f.bind("focus",r),f.bind("blur",q)}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n'),a.put("templates/daterange.html",'
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n')}])}(angular); \ No newline at end of file From c418b8553dccaf33845538132a5d462ba18463f5 Mon Sep 17 00:00:00 2001 From: Jamie Date: Tue, 8 Dec 2015 10:16:52 -0700 Subject: [PATCH 21/25] Release v1.0.32 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 451a9b9..8c556c9 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.31", + "version": "1.0.32", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 299d09a..e1e3670 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.31", + "version": "1.0.32", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 0a592e95ab6a5b0663d60f40657b6977ef21c74e Mon Sep 17 00:00:00 2001 From: Jamie Simko Date: Thu, 10 Aug 2017 08:53:57 -0600 Subject: [PATCH 22/25] Release v1.0.34 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 36e45bd..930da7a 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.33", + "version": "1.0.34", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index d61a01b..0415e20 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.33", + "version": "1.0.34", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 7d3fb7dab1a7474b2b21c7bf882ea6b981985e9c Mon Sep 17 00:00:00 2001 From: Jamie Simko Date: Thu, 10 Aug 2017 08:54:19 -0600 Subject: [PATCH 23/25] rebuilt code --- dist/angular-datepicker.js | 1673 ++++++++++++++++---------------- dist/angular-datepicker.min.js | 2 +- 2 files changed, 835 insertions(+), 840 deletions(-) diff --git a/dist/angular-datepicker.js b/dist/angular-datepicker.js index fb1dc57..3569251 100644 --- a/dist/angular-datepicker.js +++ b/dist/angular-datepicker.js @@ -1,959 +1,954 @@ (function (global, factory) {'use strict';var fnc;fnc = (typeof exports === 'object' && typeof module !== 'undefined') ? module.exports = factory(require('angular'), require('moment')) :(typeof define === 'function' && define.amd) ? define(['angular', 'moment'], factory) :factory(global.angular, global.moment);}(this, function (angular, moment) { -//(function (global, factory) { -// 'use strict'; -// var fnc; -// fnc = (typeof exports === 'object' && typeof module !== 'undefined') ? module.exports = factory(require('angular'), require('moment')) : -// (typeof define === 'function' && define.amd) ? define(['angular', 'moment'], factory) : -// factory(global.angular, global.moment); -//}(this, function (angular, moment) { var Module = angular.module('datePicker', []); - Module.constant('datePickerConfig', { - template: 'templates/datepicker.html', - view: 'month', - views: ['year', 'month', 'date', 'hours', 'minutes'], - momentNames: { - year: 'year', - month: 'month', - date: 'day', - hours: 'hours', - minutes: 'minutes', - }, - viewConfig: { - year: ['years', 'isSameYear'], - month: ['months', 'isSameMonth'], - hours: ['hours', 'isSameHour'], - minutes: ['minutes', 'isSameMinutes'], - }, - step: 5 - }); +Module.constant('datePickerConfig', { + template: 'templates/datepicker.html', + view: 'month', + views: ['year', 'month', 'date', 'hours', 'minutes'], + momentNames: { + year: 'year', + month: 'month', + date: 'day', + hours: 'hours', + minutes: 'minutes', + }, + viewConfig: { + year: ['years', 'isSameYear'], + month: ['months', 'isSameMonth'], + hours: ['hours', 'isSameHour'], + minutes: ['minutes', 'isSameMinutes'], + }, + step: 5 +}); //Moment format filter. - Module.filter('mFormat', function () { - return function (m, format, tz) { - if (!(moment.isMoment(m))) { - return (m) ? moment(m).format(format) : ''; - } - return tz ? moment.tz(m, tz).format(format) : m.format(format); - }; - }); - - Module.directive('datePicker', ['datePickerConfig', 'datePickerUtils', function datePickerDirective(datePickerConfig, datePickerUtils) { - - //noinspection JSUnusedLocalSymbols - return { - // this is a bug ? - require: '?ngModel', - template: '
', - scope: { - model: '=datePicker', - after: '=?', - before: '=?' - }, - link: function (scope, element, attrs, ngModel) { - function prepareViews() { - scope.views = datePickerConfig.views.concat(); - scope.view = attrs.view || datePickerConfig.view; - - scope.views = scope.views.slice( - scope.views.indexOf(attrs.maxView || 'year'), - scope.views.indexOf(attrs.minView || 'minutes') + 1 - ); - - if (scope.views.length === 1 || scope.views.indexOf(scope.view) === -1) { - scope.view = scope.views[0]; - } - } - - function getDate(name) { - return datePickerUtils.getDate(scope, attrs, name); +Module.filter('mFormat', function () { + return function (m, format, tz) { + if (!(moment.isMoment(m))) { + return moment(m).format(format); + } + return tz ? moment.tz(m, tz).format(format) : m.format(format); + }; +}); + +Module.directive('datePicker', ['datePickerConfig', 'datePickerUtils', function datePickerDirective(datePickerConfig, datePickerUtils) { + + //noinspection JSUnusedLocalSymbols + return { + // this is a bug ? + require: '?ngModel', + template: '
', + scope: { + model: '=datePicker', + after: '=?', + before: '=?' + }, + link: function (scope, element, attrs, ngModel) { + function prepareViews() { + scope.views = datePickerConfig.views.concat(); + scope.view = attrs.view || datePickerConfig.view; + + scope.views = scope.views.slice( + scope.views.indexOf(attrs.maxView || 'year'), + scope.views.indexOf(attrs.minView || 'minutes') + 1 + ); + + if (scope.views.length === 1 || scope.views.indexOf(scope.view) === -1) { + scope.view = scope.views[0]; } + } - var arrowClick = false, - tz = scope.tz = attrs.timezone, - createMoment = datePickerUtils.createMoment, - eventIsForPicker = datePickerUtils.eventIsForPicker, - step = parseInt(attrs.step || datePickerConfig.step, 10), - partial = !!attrs.partial, - minDate = getDate('minDate'), - maxDate = getDate('maxDate'), - pickerID = element[0].id, - now = scope.now = createMoment(), - selected = scope.date = createMoment(scope.model || now), - autoclose = attrs.autoClose === 'true', - // Either gets the 1st day from the attributes, or asks moment.js to give it to us as it is localized. - firstDay = attrs.firstDay && attrs.firstDay >= 0 && attrs.firstDay <= 6 ? parseInt(attrs.firstDay, 10) : moment().weekday(0).day(), - setDate, - prepareViewData, - isSame, - clipDate, - isNow, - inValidRange; - - datePickerUtils.setParams(tz, firstDay); + function getDate(name) { + return datePickerUtils.getDate(scope, attrs, name); + } - if (!scope.model) { - selected.minute(Math.ceil(selected.minute() / step) * step).second(0); - } + var arrowClick = false, + tz = scope.tz = attrs.timezone, + createMoment = datePickerUtils.createMoment, + eventIsForPicker = datePickerUtils.eventIsForPicker, + step = parseInt(attrs.step || datePickerConfig.step, 10), + partial = !!attrs.partial, + minDate = getDate('minDate'), + maxDate = getDate('maxDate'), + pickerID = element[0].id, + now = scope.now = createMoment(), + selected = scope.date = createMoment(scope.model || now), + autoclose = attrs.autoClose === 'true', + // Either gets the 1st day from the attributes, or asks moment.js to give it to us as it is localized. + firstDay = attrs.firstDay && attrs.firstDay >= 0 && attrs.firstDay <= 6 ? parseInt(attrs.firstDay, 10) : moment().weekday(0).day(), + setDate, + prepareViewData, + isSame, + clipDate, + isNow, + inValidRange; + + datePickerUtils.setParams(tz, firstDay); + + if (!scope.model) { + selected.minute(Math.ceil(selected.minute() / step) * step).second(0); + } - scope.template = attrs.template || datePickerConfig.template; + scope.template = attrs.template || datePickerConfig.template; - scope.watchDirectChanges = attrs.watchDirectChanges !== undefined; - scope.callbackOnSetDate = attrs.dateChange ? datePickerUtils.findFunction(scope, attrs.dateChange) : undefined; + scope.watchDirectChanges = attrs.watchDirectChanges !== undefined; + scope.callbackOnSetDate = attrs.dateChange ? datePickerUtils.findFunction(scope, attrs.dateChange) : undefined; - prepareViews(); + prepareViews(); - scope.setView = function (nextView) { - if (scope.views.indexOf(nextView) !== -1) { - scope.view = nextView; - } - }; + scope.setView = function (nextView) { + if (scope.views.indexOf(nextView) !== -1) { + scope.view = nextView; + } + }; - scope.selectDate = function (date) { - if (attrs.disabled) { - return false; - } - if (isSame(scope.date, date)) { - date = scope.date; + // for some reason having a similar check to this in the template doesn't work properly + scope.getUnformattedDateHeader = function() { + var dateToFormat = scope.now; + if ( scope.date && angular.isDate(scope.date) ) { + dateToFormat = scope.date; } - date = clipDate(date); - if (!date) { - return false; - } - scope.date = date; + return dateToFormat; + }; - var nextView = scope.views[scope.views.indexOf(scope.view) + 1]; - if ((!nextView || partial) || scope.model) { - setDate(date); - } + scope.selectDate = function (date) { + if (attrs.disabled) { + return false; + } + if (isSame(scope.date, date)) { + date = scope.date; + } + date = clipDate(date); + if (!date) { + return false; + } + scope.date = date; - if (nextView) { - scope.setView(nextView); - } else if (autoclose) { - element.addClass('hidden'); - scope.$emit('hidePicker'); - } else { - prepareViewData(); - } - }; + var nextView = scope.views[scope.views.indexOf(scope.view) + 1]; + if ((!nextView || partial) || scope.model) { + setDate(date); + } - setDate = function (date) { - if (date) { - scope.model = date; - if (ngModel) { - ngModel.$setViewValue(date); - } - } - scope.$emit('setDate', scope.model, scope.view); + if (nextView) { + scope.setView(nextView); + } else if (autoclose) { + element.addClass('hidden'); + scope.$emit('hidePicker'); + } else { + prepareViewData(); + } + }; - //This is duplicated in the new functionality. - if (scope.callbackOnSetDate) { - scope.callbackOnSetDate(attrs.datePicker, scope.date); + setDate = function (date) { + if (date) { + scope.model = date; + if (ngModel) { + ngModel.$setViewValue(date); } - }; + } + scope.$emit('setDate', scope.model, scope.view); - function update() { - var view = scope.view; - datePickerUtils.setParams(tz, firstDay); + //This is duplicated in the new functionality. + if (scope.callbackOnSetDate) { + scope.callbackOnSetDate(attrs.datePicker, scope.date); + } + }; - if (scope.model && !arrowClick) { - scope.date = createMoment(scope.model); - arrowClick = false; - } + function update() { + var view = scope.view; + datePickerUtils.setParams(tz, firstDay); - var date = scope.date; - - switch (view) { - case 'year': - scope.years = datePickerUtils.getVisibleYears(date); - break; - case 'month': - scope.months = datePickerUtils.getVisibleMonths(date); - break; - case 'date': - scope.weekdays = scope.weekdays || datePickerUtils.getDaysOfWeek(); - scope.weeks = datePickerUtils.getVisibleWeeks(date); - break; - case 'hours': - scope.hours = datePickerUtils.getVisibleHours(date); - break; - case 'minutes': - scope.minutes = datePickerUtils.getVisibleMinutes(date, step); - break; - } + if (scope.model && !arrowClick) { + scope.date = createMoment(scope.model); + arrowClick = false; + } - prepareViewData(); + var refDate = scope.date; + // Default the picker menu to the current date when passed an invalid date (e.g. 'year' view of 2010-2020 is more user friendly than 1899-1899). + if ( !datePickerUtils.isValidDate(refDate)) { + refDate = new Date(); } - function watch() { - if (scope.view !== 'date') { - return scope.view; - } - return scope.date ? scope.date.month() : null; + switch (view) { + case 'year': + scope.years = datePickerUtils.getVisibleYears(refDate); + break; + case 'month': + scope.months = datePickerUtils.getVisibleMonths(refDate); + break; + case 'date': + scope.weekdays = scope.weekdays || datePickerUtils.getDaysOfWeek(); + scope.weeks = datePickerUtils.getVisibleWeeks(refDate); + break; + case 'hours': + scope.hours = datePickerUtils.getVisibleHours(refDate); + break; + case 'minutes': + scope.minutes = datePickerUtils.getVisibleMinutes(refDate, step); + break; } - scope.$watch(watch, update); + prepareViewData(); + } - if (scope.watchDirectChanges) { - scope.$watch('model', function () { - arrowClick = false; - update(); - }); + function watch() { + if (scope.view !== 'date') { + return scope.view; } + return scope.date ? scope.date.month() : null; + } - prepareViewData = function () { - var view = scope.view, - date = scope.date, - classes = [], classList = '', - i, j; - - datePickerUtils.setParams(tz, firstDay); - - if (view === 'date') { - var weeks = scope.weeks, week; - for (i = 0; i < weeks.length; i++) { - week = weeks[i]; - classes.push([]); - for (j = 0; j < week.length; j++) { - classList = ''; - if (datePickerUtils.isSameDay(date, week[j])) { - classList += 'active'; - } - if (isNow(week[j], view)) { - classList += ' now'; - } - //if (week[j].month() !== date.month()) classList += ' disabled'; - if (week[j].month() !== date.month() || !inValidRange(week[j])) { - classList += ' disabled'; - } - classes[i].push(classList); - } - } - } else { - var params = datePickerConfig.viewConfig[view], - dates = scope[params[0]], - compareFunc = params[1]; + scope.$watch(watch, update); + + if (scope.watchDirectChanges) { + scope.$watch('model', function () { + arrowClick = false; + update(); + }); + } + + prepareViewData = function () { + var view = scope.view, + date = scope.date, + classes = [], classList = '', + i, j; + + datePickerUtils.setParams(tz, firstDay); - for (i = 0; i < dates.length; i++) { + if (view === 'date') { + var weeks = scope.weeks, week; + for (i = 0; i < weeks.length; i++) { + week = weeks[i]; + classes.push([]); + for (j = 0; j < week.length; j++) { classList = ''; - if (datePickerUtils[compareFunc](date, dates[i])) { + if (datePickerUtils.isSameDay(date, week[j])) { classList += 'active'; } - if (isNow(dates[i], view)) { + if (isNow(week[j], view)) { classList += ' now'; } - if (!inValidRange(dates[i])) { + //if (week[j].month() !== date.month()) classList += ' disabled'; + if (week[j].month() !== date.month() || !inValidRange(week[j])) { classList += ' disabled'; } - classes.push(classList); + classes[i].push(classList); } } - scope.classes = classes; - }; - - scope.next = function (delta) { - var date = moment(scope.date); - delta = delta || 1; - switch (scope.view) { - case 'year': - /*falls through*/ - case 'month': - date.year(date.year() + delta); - break; - case 'date': - date.month(date.month() + delta); - break; - case 'hours': - /*falls through*/ - case 'minutes': - date.hours(date.hours() + delta); - break; - } - date = clipDate(date); - if (date) { - scope.date = date; - arrowClick = true; - update(); - } - }; - - inValidRange = function (date) { - var valid = true; - if (minDate && minDate.isAfter(date)) { - valid = isSame(minDate, date); - } - if (maxDate && maxDate.isBefore(date)) { - valid &= isSame(maxDate, date); - } - return valid; - }; - - isSame = function (date1, date2) { - return date1.isSame(date2, datePickerConfig.momentNames[scope.view]) ? true : false; - }; - - clipDate = function (date) { - if (minDate && minDate.isAfter(date)) { - return minDate; - } else if (maxDate && maxDate.isBefore(date)) { - return maxDate; - } else { - return date; + } else { + var params = datePickerConfig.viewConfig[view], + dates = scope[params[0]], + compareFunc = params[1]; + + for (i = 0; i < dates.length; i++) { + classList = ''; + if (datePickerUtils[compareFunc](date, dates[i])) { + classList += 'active'; + } + if (isNow(dates[i], view)) { + classList += ' now'; + } + if (!inValidRange(dates[i])) { + classList += ' disabled'; + } + classes.push(classList); } - }; + } + scope.classes = classes; + }; + + scope.next = function (delta) { + var date = moment(scope.date); + delta = delta || 1; + switch (scope.view) { + case 'year': + /*falls through*/ + case 'month': + date.year(date.year() + delta); + break; + case 'date': + date.month(date.month() + delta); + break; + case 'hours': + /*falls through*/ + case 'minutes': + date.hours(date.hours() + delta); + break; + } + date = clipDate(date); + if (date) { + scope.date = date; + arrowClick = true; + update(); + } + }; - isNow = function (date, view) { - var is = true; - - switch (view) { - case 'minutes': - is &= ~~(now.minutes() / step) === ~~(date.minutes() / step); - /* falls through */ - case 'hours': - is &= now.hours() === date.hours(); - /* falls through */ - case 'date': - is &= now.date() === date.date(); - /* falls through */ - case 'month': - is &= now.month() === date.month(); - /* falls through */ - case 'year': - is &= now.year() === date.year(); - } - return is; - }; + inValidRange = function (date) { + var valid = true; + if (minDate && minDate.isAfter(date)) { + valid = isSame(minDate, date); + } + if (maxDate && maxDate.isBefore(date)) { + valid &= isSame(maxDate, date); + } + return valid; + }; + + isSame = function (date1, date2) { + return date1.isSame(date2, datePickerConfig.momentNames[scope.view]) ? true : false; + }; + + clipDate = function (date) { + if (minDate && minDate.isAfter(date)) { + return minDate; + } else if (maxDate && maxDate.isBefore(date)) { + return maxDate; + } else { + return date; + } + }; + + isNow = function (date, view) { + var is = true; + + switch (view) { + case 'minutes': + is &= ~~(now.minutes() / step) === ~~(date.minutes() / step); + /* falls through */ + case 'hours': + is &= now.hours() === date.hours(); + /* falls through */ + case 'date': + is &= now.date() === date.date(); + /* falls through */ + case 'month': + is &= now.month() === date.month(); + /* falls through */ + case 'year': + is &= now.year() === date.year(); + } + return is; + }; - scope.prev = function (delta) { - return scope.next(-delta || -1); - }; + scope.prev = function (delta) { + return scope.next(-delta || -1); + }; - if (pickerID) { - scope.$on('pickerUpdate', function (event, pickerIDs, data) { - if (eventIsForPicker(pickerIDs, pickerID)) { - var updateViews = false, updateViewData = false; + if (pickerID) { + scope.$on('pickerUpdate', function (event, pickerIDs, data) { + if (eventIsForPicker(pickerIDs, pickerID)) { + var updateViews = false, updateViewData = false; - if (angular.isDefined(data.minDate)) { - minDate = data.minDate ? data.minDate : false; - updateViewData = true; - } - if (angular.isDefined(data.maxDate)) { - maxDate = data.maxDate ? data.maxDate : false; - updateViewData = true; - } + if (angular.isDefined(data.minDate)) { + minDate = data.minDate ? data.minDate : false; + updateViewData = true; + } + if (angular.isDefined(data.maxDate)) { + maxDate = data.maxDate ? data.maxDate : false; + updateViewData = true; + } - if (angular.isDefined(data.minView)) { - attrs.minView = data.minView; - updateViews = true; - } - if (angular.isDefined(data.maxView)) { - attrs.maxView = data.maxView; - updateViews = true; - } - attrs.view = data.view || attrs.view; + if (angular.isDefined(data.minView)) { + attrs.minView = data.minView; + updateViews = true; + } + if (angular.isDefined(data.maxView)) { + attrs.maxView = data.maxView; + updateViews = true; + } + attrs.view = data.view || attrs.view; - if (updateViews) { - prepareViews(); - } + if (updateViews) { + prepareViews(); + } - if (updateViewData) { - update(); - } + if (updateViewData) { + update(); } - }); - } + } + }); } - }; - }]); -//})); - -//(function (global, factory) { -// 'use strict'; -// var fnc; -// fnc = (typeof exports === 'object' && typeof module !== 'undefined') ? module.exports = factory(require('angular'), require('moment')) : -// (typeof define === 'function' && define.amd) ? define(['angular', 'moment'], factory) : -// factory(global.angular, global.moment); -//}(this, function (angular, moment) { + } + }; +}]); + angular.module('datePicker').factory('datePickerUtils', function () { - var tz, firstDay; - var createNewDate = function (year, month, day, hour, minute) { - var utc = Date.UTC(year | 0, month | 0, day | 0, hour | 0, minute | 0); - return tz ? moment.tz(utc, tz) : moment(utc); - }; - - return { - getVisibleMinutes: function (m, step) { - var year = m.year(), - month = m.month(), - day = m.date(), - hour = m.hours(), pushedDate, - offset = m.utcOffset() / 60, - minutes = [], minute; - - for (minute = 0; minute < 60; minute += step) { - pushedDate = createNewDate(year, month, day, hour - offset, minute); - minutes.push(pushedDate); - } - return minutes; - }, - getVisibleWeeks: function (m) { - m = moment(m); - var startYear = m.year(), - startMonth = m.month(); + var tz, firstDay; + var createNewDate = function (year, month, day, hour, minute) { + var utc = Date.UTC(year | 0, month | 0, day | 0, hour | 0, minute | 0); + return tz ? moment.tz(utc, tz) : moment(utc); + }; + + return { + getVisibleMinutes: function (m, step) { + var year = m.year(), + month = m.month(), + day = m.date(), + hour = m.hours(), pushedDate, + offset = m.utcOffset() / 60, + minutes = [], minute; + + for (minute = 0; minute < 60; minute += step) { + pushedDate = createNewDate(year, month, day, hour - offset, minute); + minutes.push(pushedDate); + } + return minutes; + }, + getVisibleWeeks: function (m) { + m = moment(m); + var startYear = m.year(), + startMonth = m.month(); - //Set date to the first day of the month - m.date(1); + //Set date to the first day of the month + m.date(1); - //Grab day of the week - var day = m.day(); + //Grab day of the week + var day = m.day(); - //Go back the required number of days to arrive at the previous week start - m.date(firstDay - (day + (firstDay >= day ? 6 : -1))); + //Go back the required number of days to arrive at the previous week start + m.date(firstDay - (day + (firstDay >= day ? 6 : -1))); - var weeks = []; + var weeks = []; - while (weeks.length < 6) { - if (m.year() === startYear && m.month() > startMonth) { - break; - } - weeks.push(this.getDaysOfWeek(m)); - m.add(7, 'd'); + while (weeks.length < 6) { + if (m.year() === startYear && m.month() > startMonth) { + break; } - return weeks; - }, - getVisibleYears: function (d) { - var m = moment(d), - year = m.year(); - - m.year(year - (year % 10)); + weeks.push(this.getDaysOfWeek(m)); + m.add(7, 'd'); + } + return weeks; + }, + getVisibleYears: function (d) { + var m = moment(d), year = m.year(); - var offset = m.utcOffset() / 60, - years = [], - pushedDate, - actualOffset; - - for (var i = 0; i < 12; i++) { - pushedDate = createNewDate(year, 0, 1, 0 - offset); - actualOffset = pushedDate.utcOffset() / 60; - if (actualOffset !== offset) { - pushedDate = createNewDate(year, 0, 1, 0 - actualOffset); - offset = actualOffset; - } - years.push(pushedDate); - year++; + m.year(year - (year % 10)); + year = m.year(); + + var offset = m.utcOffset() / 60, + years = [], + pushedDate, + actualOffset; + + for (var i = 0; i < 12; i++) { + pushedDate = createNewDate(year, 0, 1, 0 - offset); + actualOffset = pushedDate.utcOffset() / 60; + if (actualOffset !== offset) { + pushedDate = createNewDate(year, 0, 1, 0 - actualOffset); + offset = actualOffset; } - return years; - }, - getDaysOfWeek: function (m) { - m = m ? m : (tz ? moment.tz(tz).day(firstDay) : moment().day(firstDay)); - - var year = m.year(), - month = m.month(), - day = m.date(), - days = [], - pushedDate, - offset = m.utcOffset() / 60, - actualOffset; - - for (var i = 0; i < 7; i++) { - pushedDate = createNewDate(year, month, day, 0 - offset, 0, false); - actualOffset = pushedDate.utcOffset() / 60; - if (actualOffset !== offset) { - pushedDate = createNewDate(year, month, day, 0 - actualOffset, 0, false); - } - days.push(pushedDate); - day++; + years.push(pushedDate); + year++; + } + return years; + }, + getDaysOfWeek: function (m) { + m = m ? m : (tz ? moment.tz(tz).day(firstDay) : moment().day(firstDay)); + + var year = m.year(), + month = m.month(), + day = m.date(), + days = [], + pushedDate, + offset = m.utcOffset() / 60, + actualOffset; + + for (var i = 0; i < 7; i++) { + pushedDate = createNewDate(year, month, day, 0 - offset, 0, false); + actualOffset = pushedDate.utcOffset() / 60; + if (actualOffset !== offset) { + pushedDate = createNewDate(year, month, day, 0 - actualOffset, 0, false); } - return days; - }, - getVisibleMonths: function (m) { - var year = m.year(), - offset = m.utcOffset() / 60, - months = [], - pushedDate, - actualOffset; - - for (var month = 0; month < 12; month++) { - pushedDate = createNewDate(year, month, 1, 0 - offset, 0, false); - actualOffset = pushedDate.utcOffset() / 60; - if (actualOffset !== offset) { - pushedDate = createNewDate(year, month, 1, 0 - actualOffset, 0, false); - } - months.push(pushedDate); + days.push(pushedDate); + day++; + } + return days; + }, + getVisibleMonths: function (m) { + var year = m.year(), + offset = m.utcOffset() / 60, + months = [], + pushedDate, + actualOffset; + + for (var month = 0; month < 12; month++) { + pushedDate = createNewDate(year, month, 1, 0 - offset, 0, false); + actualOffset = pushedDate.utcOffset() / 60; + if (actualOffset !== offset) { + pushedDate = createNewDate(year, month, 1, 0 - actualOffset, 0, false); } - return months; - }, - getVisibleHours: function (m) { - var year = m.year(), - month = m.month(), - day = m.date(), - hours = [], - hour, pushedDate, actualOffset, - offset = m.utcOffset() / 60; - - for (hour = 0; hour < 24; hour++) { - pushedDate = createNewDate(year, month, day, hour - offset, 0, false); - actualOffset = pushedDate.utcOffset() / 60; - if (actualOffset !== offset) { - pushedDate = createNewDate(year, month, day, hour - actualOffset, 0, false); - } - hours.push(pushedDate); + months.push(pushedDate); + } + return months; + }, + getVisibleHours: function (m) { + var year = m.year(), + month = m.month(), + day = m.date(), + hours = [], + hour, pushedDate, actualOffset, + offset = m.utcOffset() / 60; + + for (hour = 0; hour < 24; hour++) { + pushedDate = createNewDate(year, month, day, hour - offset, 0, false); + actualOffset = pushedDate.utcOffset() / 60; + if (actualOffset !== offset) { + pushedDate = createNewDate(year, month, day, hour - actualOffset, 0, false); } + hours.push(pushedDate); + } - return hours; - }, - isAfter: function (model, date) { - return model && model.unix() >= date.unix(); - }, - isBefore: function (model, date) { - return model.unix() <= date.unix(); - }, - isSameYear: function (model, date) { - return model && model.year() === date.year(); - }, - isSameMonth: function (model, date) { - return this.isSameYear(model, date) && model.month() === date.month(); - }, - isSameDay: function (model, date) { - return this.isSameMonth(model, date) && model.date() === date.date(); - }, - isSameHour: function (model, date) { - return this.isSameDay(model, date) && model.hours() === date.hours(); - }, - isSameMinutes: function (model, date) { - return this.isSameHour(model, date) && model.minutes() === date.minutes(); - }, - setParams: function (zone, fd) { - tz = zone; - firstDay = fd; - }, - scopeSearch: function (scope, name, comparisonFn) { - var parentScope = scope, - nameArray = name.split('.'), - target, i, j = nameArray.length; - - do { - target = parentScope = parentScope.$parent; - - //Loop through provided names. - for (i = 0; i < j; i++) { - target = target[nameArray[i]]; - if (!target) { - continue; - } + return hours; + }, + isAfter: function (model, date) { + return model && model.unix() >= date.unix(); + }, + isBefore: function (model, date) { + return model.unix() <= date.unix(); + }, + isSameYear: function (model, date) { + return model && model.year() === date.year(); + }, + isSameMonth: function (model, date) { + return this.isSameYear(model, date) && model.month() === date.month(); + }, + isSameDay: function (model, date) { + return this.isSameMonth(model, date) && model.date() === date.date(); + }, + isSameHour: function (model, date) { + return this.isSameDay(model, date) && model.hours() === date.hours(); + }, + isSameMinutes: function (model, date) { + return this.isSameHour(model, date) && model.minutes() === date.minutes(); + }, + setParams: function (zone, fd) { + tz = zone; + firstDay = fd; + }, + scopeSearch: function (scope, name, comparisonFn) { + var parentScope = scope, + nameArray = name.split('.'), + target, i, j = nameArray.length; + + do { + target = parentScope = parentScope.$parent; + + //Loop through provided names. + for (i = 0; i < j; i++) { + target = target[nameArray[i]]; + if (!target) { + continue; } + } - //If we reached the end of the list for this scope, - //and something was found, trigger the comparison - //function. If the comparison function is happy, return - //found result. Otherwise, continue to the next parent scope - if (target && comparisonFn(target)) { - return target; - } + //If we reached the end of the list for this scope, + //and something was found, trigger the comparison + //function. If the comparison function is happy, return + //found result. Otherwise, continue to the next parent scope + if (target && comparisonFn(target)) { + return target; + } - } while (parentScope.$parent); + } while (parentScope.$parent); - return false; - }, - findFunction: function (scope, name) { - //Search scope ancestors for a matching function. - return this.scopeSearch(scope, name, function (target) { - //Property must also be a function - return angular.isFunction(target); - }); - }, - findParam: function (scope, name) { - //Search scope ancestors for a matching parameter. - return this.scopeSearch(scope, name, function () { - //As long as the property exists, we're good - return true; - }); - }, - createMoment: function (m) { - if (tz) { - return moment.tz(m, tz); - } else { - //If input is a moment, and we have no TZ info, we need to remove TZ - //info from the moment, otherwise the newly created moment will take - //the timezone of the input moment. The easiest way to do that is to - //take the unix timestamp, and use that to create a new moment. - //The new moment will use the local timezone of the user machine. - return moment.isMoment(m) ? moment.unix(m.unix()) : moment(m); - } - }, - getDate: function (scope, attrs, name) { - var result = false; - if (attrs[name]) { - result = this.createMoment(attrs[name]); - if (!result.isValid()) { - result = this.findParam(scope, attrs[name]); - if (result) { - result = this.createMoment(result); - } + return false; + }, + findFunction: function (scope, name) { + //Search scope ancestors for a matching function. + return this.scopeSearch(scope, name, function (target) { + //Property must also be a function + return angular.isFunction(target); + }); + }, + findParam: function (scope, name) { + //Search scope ancestors for a matching parameter. + return this.scopeSearch(scope, name, function () { + //As long as the property exists, we're good + return true; + }); + }, + createMoment: function (m) { + if (tz) { + return moment.tz(m, tz); + } else { + //If input is a moment, and we have no TZ info, we need to remove TZ + //info from the moment, otherwise the newly created moment will take + //the timezone of the input moment. The easiest way to do that is to + //take the unix timestamp, and use that to create a new moment. + //The new moment will use the local timezone of the user machine. + return moment.isMoment(m) ? moment.unix(m.unix()) : moment(m); + } + }, + getDate: function (scope, attrs, name) { + var result = false; + if (attrs[name]) { + result = this.createMoment(attrs[name]); + if (!result.isValid()) { + result = this.findParam(scope, attrs[name]); + if (result) { + result = this.createMoment(result); } } - - return result; - }, - eventIsForPicker: function (targetIDs, pickerID) { - //Checks if an event targeted at a specific picker, via either a string name, or an array of strings. - return (angular.isArray(targetIDs) && targetIDs.indexOf(pickerID) > -1 || targetIDs === pickerID); } - }; - }); -//})); - -//(function (global, factory) { -// 'use strict'; -// var fnc; -// fnc = (typeof exports === 'object' && typeof module !== 'undefined') ? module.exports = factory(require('angular'), require('moment')) : -// (typeof define === 'function' && define.amd) ? define(['angular', 'moment'], factory) : -// factory(global.angular, global.moment); -//}(this, function (angular, moment) { -var Module = angular.module('datePicker'); - Module.directive('dateRange', ['$compile', 'datePickerUtils', 'dateTimeConfig', function ($compile, datePickerUtils, dateTimeConfig) { - function getTemplate(attrs, id, model, min, max) { - return dateTimeConfig.template(angular.extend(attrs, { - ngModel: model, - minDate: min && moment.isMoment(min) ? min.format() : false, - maxDate: max && moment.isMoment(max) ? max.format() : false - }), id); - } + return result; + }, + //Checks if an event targeted at a specific picker, via either a string name, or an array of strings. + eventIsForPicker: function (targetIDs, pickerID) { + function matches(id) { + if (id instanceof RegExp) { + return id.test(pickerID); + } + return id === pickerID; + } - function randomName() { - return 'picker' + Math.random().toString().substr(2); + if (angular.isArray(targetIDs)) { + return targetIDs.some(matches); + } + return matches(targetIDs); } + }; +}); - return { - scope: { - start: '=', - end: '=' - }, - link: function (scope, element, attrs) { - var dateChange = null, - pickerRangeID = element[0].id, - pickerIDs = [randomName(), randomName()], - createMoment = datePickerUtils.createMoment, - eventIsForPicker = datePickerUtils.eventIsForPicker; - - scope.dateChange = function (modelName, newDate) { - //Notify user if callback exists. - if (dateChange) { - dateChange(modelName, newDate); - } - }; - - function setMax(date) { - scope.$broadcast('pickerUpdate', pickerIDs[0], { - maxDate: date - }); - } - - function setMin(date) { - scope.$broadcast('pickerUpdate', pickerIDs[1], { - minDate: date - }); - } +var Module = angular.module('datePicker'); - if (pickerRangeID) { - scope.$on('pickerUpdate', function (event, targetIDs, data) { - if (eventIsForPicker(targetIDs, pickerRangeID)) { - //If we received an update event, dispatch it to the inner pickers using their IDs. - scope.$broadcast('pickerUpdate', pickerIDs, data); - } - }); +Module.directive('dateRange', ['$compile', 'datePickerUtils', 'dateTimeConfig', function ($compile, datePickerUtils, dateTimeConfig) { + function getTemplate(attrs, id, model, min, max) { + return dateTimeConfig.template(angular.extend(attrs, { + ngModel: model, + minDate: min && moment.isMoment(min) ? min.format() : false, + maxDate: max && moment.isMoment(max) ? max.format() : false + }), id); + } + + function randomName() { + return 'picker' + Math.random().toString().substr(2); + } + + return { + scope: { + start: '=', + end: '=' + }, + link: function (scope, element, attrs) { + var dateChange = null, + pickerRangeID = element[0].id, + pickerIDs = [randomName(), randomName()], + createMoment = datePickerUtils.createMoment, + eventIsForPicker = datePickerUtils.eventIsForPicker; + + scope.dateChange = function (modelName, newDate) { + //Notify user if callback exists. + if (dateChange) { + dateChange(modelName, newDate); } + }; - datePickerUtils.setParams(attrs.timezone); + function setMax(date) { + scope.$broadcast('pickerUpdate', pickerIDs[0], { + maxDate: date + }); + } - scope.start = createMoment(scope.start); - scope.end = createMoment(scope.end); + function setMin(date) { + scope.$broadcast('pickerUpdate', pickerIDs[1], { + minDate: date + }); + } - scope.$watchGroup(['start', 'end'], function (dates) { - //Scope data changed, update picker min/max - setMin(dates[0]); - setMax(dates[1]); + if (pickerRangeID) { + scope.$on('pickerUpdate', function (event, targetIDs, data) { + if (eventIsForPicker(targetIDs, pickerRangeID)) { + //If we received an update event, dispatch it to the inner pickers using their IDs. + scope.$broadcast('pickerUpdate', pickerIDs, data); + } }); + } - if (angular.isDefined(attrs.dateChange)) { - dateChange = datePickerUtils.findFunction(scope, attrs.dateChange); - } + datePickerUtils.setParams(attrs.timezone); - attrs.onSetDate = 'dateChange'; + scope.start = createMoment(scope.start); + scope.end = createMoment(scope.end); - var template = '
' + - getTemplate(attrs, pickerIDs[0], 'start', false, scope.end) + - '' + - getTemplate(attrs, pickerIDs[1], 'end', scope.start, false) + - '
'; + scope.$watchGroup(['start', 'end'], function (dates) { + //Scope data changed, update picker min/max + setMin(dates[0]); + setMax(dates[1]); + }); - var picker = $compile(template)(scope); - element.append(picker); + if (angular.isDefined(attrs.dateChange)) { + dateChange = datePickerUtils.findFunction(scope, attrs.dateChange); } - }; - }]); -//})); - -//(function (global, factory) { -// 'use strict'; -// var fnc; -// fnc = (typeof exports === 'object' && typeof module !== 'undefined') ? module.exports = factory(require('angular'), require('moment')) : -// (typeof define === 'function' && define.amd) ? define(['angular', 'moment'], factory) : -// factory(global.angular, global.moment); -//}(this, function (angular, moment) { + + attrs.onSetDate = 'dateChange'; + + var template = '
' + + getTemplate(attrs, pickerIDs[0], 'start', false, scope.end) + + '' + + getTemplate(attrs, pickerIDs[1], 'end', scope.start, false) + + '
'; + + var picker = $compile(template)(scope); + element.append(picker); + } + }; +}]); + var PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty'; - - var Module = angular.module('datePicker'); - - Module.constant('dateTimeConfig', { - template: function (attrs, id) { - return '' + - '
'; - }, - format: 'YYYY-MM-DD HH:mm', - views: ['date', 'year', 'month', 'hours', 'minutes'], - autoClose: false, - position: 'relative' - }); - - Module.directive('dateTimeAppend', function () { - return { - link: function (scope, element) { - element.bind('click', function () { - element.find('input')[0].focus(); - }); + DIRTY_CLASS = 'ng-dirty'; + +var Module = angular.module('datePicker'); + +Module.constant('dateTimeConfig', { + template: function (attrs, id) { + return '' + + '
'; + }, + format: 'YYYY-MM-DD HH:mm', + views: ['date', 'year', 'month', 'hours', 'minutes'], + autoClose: false, + position: 'relative' +}); + +Module.directive('dateTimeAppend', function () { + return { + link: function (scope, element) { + element.bind('click', function () { + element.find('input')[0].focus(); + }); + } + }; +}); + +Module.directive('dateTime', ['$compile', '$document', '$filter', 'dateTimeConfig', '$parse', 'datePickerUtils', function ($compile, $document, $filter, dateTimeConfig, $parse, datePickerUtils) { + var body = $document.find('body'); + var dateFilter = $filter('mFormat'); + + return { + require: 'ngModel', + scope: true, + link: function (scope, element, attrs, ngModel) { + var format = attrs.format || dateTimeConfig.format, + parentForm = element.inheritedData('$formController'), + views = $parse(attrs.views)(scope) || dateTimeConfig.views.concat(), + view = attrs.view || views[0], + index = views.indexOf(view), + dismiss = attrs.autoClose ? $parse(attrs.autoClose)(scope) : dateTimeConfig.autoClose, + picker = null, + pickerID = element[0].id, + position = attrs.position || dateTimeConfig.position, + container = null, + minDate = null, + minValid = null, + maxDate = null, + maxValid = null, + timezone = attrs.timezone || false, + eventIsForPicker = datePickerUtils.eventIsForPicker, + dateChange = null, + shownOnce = false, + template; + + if (index === -1) { + views.splice(index, 1); } - }; - }); - - Module.directive('dateTime', ['$compile', '$document', '$filter', 'dateTimeConfig', '$parse', 'datePickerUtils', function ($compile, $document, $filter, dateTimeConfig, $parse, datePickerUtils) { - var body = $document.find('body'); - var dateFilter = $filter('mFormat'); - - return { - require: 'ngModel', - scope: true, - link: function (scope, element, attrs, ngModel) { - var format = attrs.format || dateTimeConfig.format, - parentForm = element.inheritedData('$formController'), - views = $parse(attrs.views)(scope) || dateTimeConfig.views.concat(), - view = attrs.view || views[0], - index = views.indexOf(view), - dismiss = attrs.autoClose ? $parse(attrs.autoClose)(scope) : dateTimeConfig.autoClose, - picker = null, - pickerID = element[0].id, - position = attrs.position || dateTimeConfig.position, - container = null, - minDate = null, - minValid = null, - maxDate = null, - maxValid = null, - timezone = attrs.timezone || false, - eventIsForPicker = datePickerUtils.eventIsForPicker, - dateChange = null, - shownOnce = false, - template; - - if (index === -1) { - views.splice(index, 1); - } - views.unshift(view); + views.unshift(view); - function formatter(value) { + function formatter(value) { + if (value) { return dateFilter(value, format, timezone); } + } - function parser(viewValue) { - if (viewValue.length === format.length) { - return viewValue; - } - return (viewValue.length === 0) ? viewValue : undefined; + function parser(viewValue) { + if (viewValue.length === 0) { + return null; } - - function setMin(date) { - minDate = date; - attrs.minDate = date ? date.format() : date; - minValid = moment.isMoment(date); + var parsed = moment(viewValue, format); + if (parsed.isValid()) { + return parsed; } + } - function setMax(date) { - maxDate = date; - attrs.maxDate = date ? date.format() : date; - maxValid = moment.isMoment(date); - } + function setMin(date) { + minDate = date; + attrs.minDate = date ? date.format() : date; + minValid = moment.isMoment(date); + } - ngModel.$formatters.push(formatter); - ngModel.$parsers.unshift(parser); + function setMax(date) { + maxDate = date; + attrs.maxDate = date ? date.format() : date; + maxValid = moment.isMoment(date); + } - if (angular.isDefined(attrs.minDate)) { - setMin(datePickerUtils.findParam(scope, attrs.minDate)); + ngModel.$formatters.push(formatter); + ngModel.$parsers.unshift(parser); - ngModel.$validators.min = function (value) { - //If we don't have a min / max value, then any value is valid. - return minValid ? moment.isMoment(value) && (minDate.isSame(value) || minDate.isBefore(value)) : true; - }; - } + if (angular.isDefined(attrs.minDate)) { + setMin(datePickerUtils.findParam(scope, attrs.minDate)); - if (angular.isDefined(attrs.maxDate)) { - setMax(datePickerUtils.findParam(scope, attrs.maxDate)); + ngModel.$validators.min = function (value) { + //If we don't have a min / max value, then any value is valid. + return minValid ? moment.isMoment(value) && (minDate.isSame(value) || minDate.isBefore(value)) : true; + }; + } - ngModel.$validators.max = function (value) { - return maxValid ? moment.isMoment(value) && (maxDate.isSame(value) || maxDate.isAfter(value)) : true; - }; - } + if (angular.isDefined(attrs.maxDate)) { + setMax(datePickerUtils.findParam(scope, attrs.maxDate)); - if (angular.isDefined(attrs.dateChange)) { - dateChange = datePickerUtils.findFunction(scope, attrs.dateChange); - } + ngModel.$validators.max = function (value) { + return maxValid ? moment.isMoment(value) && (maxDate.isSame(value) || maxDate.isAfter(value)) : true; + }; + } - function getTemplate() { - template = dateTimeConfig.template(attrs); - } + if (angular.isDefined(attrs.dateChange)) { + dateChange = datePickerUtils.findFunction(scope, attrs.dateChange); + } + function getTemplate() { + template = dateTimeConfig.template(attrs); + } - function updateInput(event) { - event.stopPropagation(); - if (ngModel.$pristine) { - ngModel.$dirty = true; - ngModel.$pristine = false; - element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS); - if (parentForm) { - parentForm.$setDirty(); - } - ngModel.$render(); - } - } - function clear() { - if (picker) { - picker.remove(); - picker = null; - } - if (container) { - container.remove(); - container = null; + function updateInput(event) { + event.stopPropagation(); + if (ngModel.$pristine) { + ngModel.$dirty = true; + ngModel.$pristine = false; + element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS); + if (parentForm) { + parentForm.$setDirty(); } + ngModel.$render(); } + } - if (pickerID) { - scope.$on('pickerUpdate', function (event, pickerIDs, data) { - if (eventIsForPicker(pickerIDs, pickerID)) { - if (picker) { - //Need to handle situation where the data changed but the picker is currently open. - //To handle this, we can create the inner picker with a random ID, then forward - //any events received to it. - } else { - var validateRequired = false; - if (angular.isDefined(data.minDate)) { - setMin(data.minDate); - validateRequired = true; - } - if (angular.isDefined(data.maxDate)) { - setMax(data.maxDate); - validateRequired = true; - } - - if (angular.isDefined(data.minView)) { - attrs.minView = data.minView; - } - if (angular.isDefined(data.maxView)) { - attrs.maxView = data.maxView; - } - attrs.view = data.view || attrs.view; - - if (validateRequired) { - ngModel.$validate(); - } - if (angular.isDefined(data.format)) { - format = attrs.format = data.format || dateTimeConfig.format; - ngModel.$modelValue = -1; //Triggers formatters. This value will be discarded. - } - getTemplate(); - } - } - }); + function clear() { + if (picker) { + picker.remove(); + picker = null; } + if (container) { + container.remove(); + container = null; + } + } - function showPicker() { - if (picker) { - return; - } - // create picker element - picker = $compile(template)(scope); - scope.$digest(); - - //If the picker has already been shown before then we shouldn't be binding to events, as these events are already bound to in this scope. - if (!shownOnce) { - scope.$on('setDate', function (event, date, view) { - updateInput(event); - if (dateChange) { - dateChange(attrs.ngModel, date); + if (pickerID) { + scope.$on('pickerUpdate', function (event, pickerIDs, data) { + if (eventIsForPicker(pickerIDs, pickerID)) { + if (picker) { + //Need to handle situation where the data changed but the picker is currently open. + //To handle this, we can create the inner picker with a random ID, then forward + //any events received to it. + } else { + var validateRequired = false; + if (angular.isDefined(data.minDate)) { + setMin(data.minDate); + validateRequired = true; } - if (dismiss && views[views.length - 1] === view) { - clear(); + if (angular.isDefined(data.maxDate)) { + setMax(data.maxDate); + validateRequired = true; } - }); - - scope.$on('hidePicker', function () { - element[0].blur(); - }); - scope.$on('$destroy', clear); + if (angular.isDefined(data.minView)) { + attrs.minView = data.minView; + } + if (angular.isDefined(data.maxView)) { + attrs.maxView = data.maxView; + } + attrs.view = data.view || attrs.view; - shownOnce = true; + if (validateRequired) { + ngModel.$validate(); + } + if (angular.isDefined(data.format)) { + format = attrs.format = data.format || dateTimeConfig.format; + ngModel.$modelValue = -1; //Triggers formatters. This value will be discarded. + } + getTemplate(); + } } + }); + } + function showPicker() { + if (picker) { + return; + } + // create picker element + picker = $compile(template)(scope); + scope.$digest(); + + //If the picker has already been shown before then we shouldn't be binding to events, as these events are already bound to in this scope. + if (!shownOnce) { + scope.$on('setDate', function (event, date, view) { + updateInput(event); + if (dateChange) { + dateChange(attrs.ngModel, date); + } + if (dismiss && views[views.length - 1] === view) { + clear(); + } + }); - // move picker below input element - - if (position === 'absolute') { - var pos = element[0].getBoundingClientRect(); - // Support IE8 - var height = pos.height || element[0].offsetHeight; - picker.css({top: (pos.top + height) + 'px', left: pos.left + 'px', display: 'block', position: position}); - body.append(picker); - } else { - // relative - container = angular.element('
'); - element[0].parentElement.insertBefore(container[0], element[0]); - container.append(picker); - // this approach doesn't work - // element.before(picker); - picker.css({top: element[0].offsetHeight + 'px', display: 'block'}); - } - picker.bind('mousedown', function (evt) { - evt.preventDefault(); + scope.$on('hidePicker', function () { + element[0].blur(); }); + + scope.$on('$destroy', clear); + + shownOnce = true; } - element.bind('focus', showPicker); - element.bind('click', showPicker); - element.bind('blur', clear); - getTemplate(); + + // move picker below input element + + if (position === 'absolute') { + var pos = element[0].getBoundingClientRect(); + // Support IE8 + var height = pos.height || element[0].offsetHeight; + picker.css({top: (pos.top + height) + 'px', left: pos.left + 'px', display: 'block', position: position}); + body.append(picker); + } else { + // relative + container = angular.element('
'); + element[0].parentElement.insertBefore(container[0], element[0]); + container.append(picker); + // this approach doesn't work + // element.before(picker); + picker.css({top: element[0].offsetHeight + 'px', display: 'block'}); + } + picker.bind('mousedown', function (evt) { + evt.preventDefault(); + }); } - }; - }]); -//})); + + element.bind('focus', showPicker); + element.bind('blur', clear); + getTemplate(); + } + }; +}]); angular.module('datePicker').run(['$templateCache', function($templateCache) { $templateCache.put('templates/datepicker.html', @@ -969,7 +964,7 @@ $templateCache.put('templates/datepicker.html', "\n" + " ‹\r" + "\n" + - " \r" + + " \r" + "\n" + " ›\r" + "\n" + @@ -1055,7 +1050,7 @@ $templateCache.put('templates/datepicker.html', "\n" + " ‹\r" + "\n" + - " \r" + + " \r" + "\n" + " ›\r" + "\n" + @@ -1097,7 +1092,7 @@ $templateCache.put('templates/datepicker.html', "\n" + " ‹\r" + "\n" + - " \r" + + " \r" + "\n" + " ›\r" + "\n" + @@ -1137,7 +1132,7 @@ $templateCache.put('templates/datepicker.html', "\n" + " ‹\r" + "\n" + - " \r" + + " \r" + "\n" + " ›\r" + "\n" + @@ -1173,4 +1168,4 @@ $templateCache.put('templates/datepicker.html', ); }]); -})); +})); \ No newline at end of file diff --git a/dist/angular-datepicker.min.js b/dist/angular-datepicker.min.js index d2754ce..18817f5 100644 --- a/dist/angular-datepicker.min.js +++ b/dist/angular-datepicker.min.js @@ -1 +1 @@ -!function(a,b){"use strict";var c;c="object"==typeof exports&&"undefined"!=typeof module?module.exports=b(require("angular"),require("moment")):"function"==typeof define&&define.amd?define(["angular","moment"],b):b(a.angular,a.moment)}(this,function(a,b){var c=a.module("datePicker",[]);c.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],momentNames:{year:"year",month:"month",date:"day",hours:"hours",minutes:"minutes"},viewConfig:{year:["years","isSameYear"],month:["months","isSameMonth"],hours:["hours","isSameHour"],minutes:["minutes","isSameMinutes"]},step:5}),c.filter("mFormat",function(){return function(a,c,d){return b.isMoment(a)?d?b.tz(a,d).format(c):a.format(c):b(a).format(c)}}),c.directive("datePicker",["datePickerConfig","datePickerUtils",function(c,d){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(e,f,g,h){function i(){e.views=c.views.concat(),e.view=g.view||c.view,e.views=e.views.slice(e.views.indexOf(g.maxView||"year"),e.views.indexOf(g.minView||"minutes")+1),(1===e.views.length||-1===e.views.indexOf(e.view))&&(e.view=e.views[0])}function j(a){return d.getDate(e,g,a)}function k(){var a=e.view;d.setParams(t,E),e.model&&!s&&(e.date=u(e.model),s=!1);var b=e.date;switch(a){case"year":e.years=d.getVisibleYears(b);break;case"month":e.months=d.getVisibleMonths(b);break;case"date":e.weekdays=e.weekdays||d.getDaysOfWeek(),e.weeks=d.getVisibleWeeks(b);break;case"hours":e.hours=d.getVisibleHours(b);break;case"minutes":e.minutes=d.getVisibleMinutes(b,w)}n()}function l(){return"date"!==e.view?e.view:e.date?e.date.month():null}var m,n,o,p,q,r,s=!1,t=e.tz=g.timezone,u=d.createMoment,v=d.eventIsForPicker,w=parseInt(g.step||c.step,10),x=!!g.partial,y=j("minDate"),z=j("maxDate"),A=f[0].id,B=e.now=u(),C=e.date=u(e.model||B),D="true"===g.autoClose,E=g.firstDay&&g.firstDay>=0&&g.firstDay<=6?parseInt(g.firstDay,10):b().weekday(0).day();d.setParams(t,E),e.model||C.minute(Math.ceil(C.minute()/w)*w).second(0),e.template=g.template||c.template,e.watchDirectChanges=void 0!==g.watchDirectChanges,e.callbackOnSetDate=g.dateChange?d.findFunction(e,g.dateChange):void 0,i(),e.setView=function(a){-1!==e.views.indexOf(a)&&(e.view=a)},e.selectDate=function(a){if(g.disabled)return!1;if(o(e.date,a)&&(a=e.date),a=p(a),!a)return!1;e.date=a;var b=e.views[e.views.indexOf(e.view)+1];(!b||x||e.model)&&m(a),b?e.setView(b):D?(f.addClass("hidden"),e.$emit("hidePicker")):n()},m=function(a){a&&(e.model=a,h&&h.$setViewValue(a)),e.$emit("setDate",e.model,e.view),e.callbackOnSetDate&&e.callbackOnSetDate(g.datePicker,e.date)},e.$watch(l,k),e.watchDirectChanges&&e.$watch("model",function(){s=!1,k()}),n=function(){var a,b,f=e.view,g=e.date,h=[],i="";if(d.setParams(t,E),"date"===f){var j,k=e.weeks;for(a=0;ad;d+=b)c=e(f,g,h,i-j,d),k.push(c);return k},getVisibleWeeks:function(a){a=b(a);var c=a.year(),e=a.month();a.date(1);var f=a.day();a.date(d-(f+(d>=f?6:-1)));for(var g=[];g.length<6&&!(a.year()===c&&a.month()>e);)g.push(this.getDaysOfWeek(a)),a.add(7,"d");return g},getVisibleYears:function(a){var c=b(a),d=c.year();c.year(d-d%10),d=c.year();for(var f,g,h=c.utcOffset()/60,i=[],j=0;12>j;j++)f=e(d,0,1,0-h),g=f.utcOffset()/60,g!==h&&(f=e(d,0,1,0-g),h=g),i.push(f),d++;return i},getDaysOfWeek:function(a){a=a?a:c?b.tz(c).day(d):b().day(d);for(var f,g,h=a.year(),i=a.month(),j=a.date(),k=[],l=a.utcOffset()/60,m=0;7>m;m++)f=e(h,i,j,0-l,0,!1),g=f.utcOffset()/60,g!==l&&(f=e(h,i,j,0-g,0,!1)),k.push(f),j++;return k},getVisibleMonths:function(a){for(var b,c,d=a.year(),f=a.utcOffset()/60,g=[],h=0;12>h;h++)b=e(d,h,1,0-f,0,!1),c=b.utcOffset()/60,c!==f&&(b=e(d,h,1,0-c,0,!1)),g.push(b);return g},getVisibleHours:function(a){var b,c,d,f=a.year(),g=a.month(),h=a.date(),i=[],j=a.utcOffset()/60;for(b=0;24>b;b++)c=e(f,g,h,b-j,0,!1),d=c.utcOffset()/60,d!==j&&(c=e(f,g,h,b-d,0,!1)),i.push(c);return i},isAfter:function(a,b){return a&&a.unix()>=b.unix()},isBefore:function(a,b){return a.unix()<=b.unix()},isSameYear:function(a,b){return a&&a.year()===b.year()},isSameMonth:function(a,b){return this.isSameYear(a,b)&&a.month()===b.month()},isSameDay:function(a,b){return this.isSameMonth(a,b)&&a.date()===b.date()},isSameHour:function(a,b){return this.isSameDay(a,b)&&a.hours()===b.hours()},isSameMinutes:function(a,b){return this.isSameHour(a,b)&&a.minutes()===b.minutes()},setParams:function(a,b){c=a,d=b},scopeSearch:function(a,b,c){var d,e,f=a,g=b.split("."),h=g.length;do{for(d=f=f.$parent,e=0;h>e;e++){d=d[g[e]]}if(d&&c(d))return d}while(f.$parent);return!1},findFunction:function(b,c){return this.scopeSearch(b,c,function(b){return a.isFunction(b)})},findParam:function(a,b){return this.scopeSearch(a,b,function(){return!0})},createMoment:function(a){return c?b.tz(a,c):b.isMoment(a)?b.unix(a.unix()):b(a)},getDate:function(a,b,c){var d=!1;return b[c]&&(d=this.createMoment(b[c]),d.isValid()||(d=this.findParam(a,b[c]),d&&(d=this.createMoment(d)))),d},eventIsForPicker:function(b,c){return a.isArray(b)&&b.indexOf(c)>-1||b===c}}});var c=a.module("datePicker");c.directive("dateRange",["$compile","datePickerUtils","dateTimeConfig",function(c,d,e){function f(c,d,f,g,h){return e.template(a.extend(c,{ngModel:f,minDate:g&&b.isMoment(g)?g.format():!1,maxDate:h&&b.isMoment(h)?h.format():!1}),d)}function g(){return"picker"+Math.random().toString().substr(2)}return{scope:{start:"=",end:"="},link:function(b,e,h){function i(a){b.$broadcast("pickerUpdate",m[0],{maxDate:a})}function j(a){b.$broadcast("pickerUpdate",m[1],{minDate:a})}var k=null,l=e[0].id,m=[g(),g()],n=d.createMoment,o=d.eventIsForPicker;b.dateChange=function(a,b){k&&k(a,b)},l&&b.$on("pickerUpdate",function(a,c,d){o(c,l)&&b.$broadcast("pickerUpdate",m,d)}),d.setParams(h.timezone),b.start=n(b.start),b.end=n(b.end),b.$watchGroup(["start","end"],function(a){j(a[0]),i(a[1])}),a.isDefined(h.dateChange)&&(k=d.findFunction(b,h.dateChange)),h.onSetDate="dateChange";var p='
'+f(h,m[0],"start",!1,b.end)+''+f(h,m[1],"end",b.start,!1)+"
",q=c(p)(b);e.append(q)}}}]);var d="ng-pristine",e="ng-dirty",c=a.module("datePicker");c.constant("dateTimeConfig",{template:function(a,b){return"
'},format:"YYYY-MM-DD HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),c.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),c.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(c,f,g,h,i,j){var k=f.find("body"),l=g("mFormat");return{require:"ngModel",scope:!0,link:function(f,g,m,n){function o(a){return l(a,x,L)}function p(a){return a.length===x.length?a:void 0}function q(a){H=a,m.minDate=a?a.format():a,I=b.isMoment(a)}function r(a){J=a,m.maxDate=a?a.format():a,K=b.isMoment(a)}function s(){w=h.template(m)}function t(a){a.stopPropagation(),n.$pristine&&(n.$dirty=!0,n.$pristine=!1,g.removeClass(d).addClass(e),y&&y.$setDirty(),n.$render())}function u(){D&&(D.remove(),D=null),G&&(G.remove(),G=null)}function v(){if(!D){if(D=c(w)(f),f.$digest(),O||(f.$on("setDate",function(a,b,c){t(a),N&&N(m.ngModel,b),C&&z[z.length-1]===c&&u()}),f.$on("hidePicker",function(){g.triggerHandler("blur")}),f.$on("$destroy",u),O=!0),"absolute"===F){var b=g[0].getBoundingClientRect(),d=b.height||g[0].offsetHeight;D.css({top:b.top+d+"px",left:b.left+"px",display:"block",position:F}),k.append(D)}else G=a.element("
"),g[0].parentElement.insertBefore(G[0],g[0]),G.append(D),D.css({top:g[0].offsetHeight+"px",display:"block"});D.bind("mousedown",function(a){a.preventDefault()})}}var w,x=m.format||h.format,y=g.inheritedData("$formController"),z=i(m.views)(f)||h.views.concat(),A=m.view||z[0],B=z.indexOf(A),C=m.autoClose?i(m.autoClose)(f):h.autoClose,D=null,E=g[0].id,F=m.position||h.position,G=null,H=null,I=null,J=null,K=null,L=m.timezone||!1,M=j.eventIsForPicker,N=null,O=!1;-1===B&&z.splice(B,1),z.unshift(A),n.$formatters.push(o),n.$parsers.unshift(p),a.isDefined(m.minDate)&&(q(j.findParam(f,m.minDate)),n.$validators.min=function(a){return I?b.isMoment(a)&&(H.isSame(a)||H.isBefore(a)):!0}),a.isDefined(m.maxDate)&&(r(j.findParam(f,m.maxDate)),n.$validators.max=function(a){return K?b.isMoment(a)&&(J.isSame(a)||J.isAfter(a)):!0}),a.isDefined(m.dateChange)&&(N=j.findFunction(f,m.dateChange)),E&&f.$on("pickerUpdate",function(b,c,d){if(M(c,E))if(D);else{var e=!1;a.isDefined(d.minDate)&&(q(d.minDate),e=!0),a.isDefined(d.maxDate)&&(r(d.maxDate),e=!0),a.isDefined(d.minView)&&(m.minView=d.minView),a.isDefined(d.maxView)&&(m.maxView=d.maxView),m.view=d.view||m.view,e&&n.$validate(),a.isDefined(d.format)&&(x=m.format=d.format||h.format,n.$modelValue=-1),s()}}),g.bind("focus",v),g.bind("blur",u),s()}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
')}])}); \ No newline at end of file +!function(a,b){"use strict";var c;c="object"==typeof exports&&"undefined"!=typeof module?module.exports=b(require("angular"),require("moment")):"function"==typeof define&&define.amd?define(["angular","moment"],b):b(a.angular,a.moment)}(this,function(a,b){var c=a.module("datePicker",[]);c.constant("datePickerConfig",{template:"templates/datepicker.html",view:"month",views:["year","month","date","hours","minutes"],momentNames:{year:"year",month:"month",date:"day",hours:"hours",minutes:"minutes"},viewConfig:{year:["years","isSameYear"],month:["months","isSameMonth"],hours:["hours","isSameHour"],minutes:["minutes","isSameMinutes"]},step:5}),c.filter("mFormat",function(){return function(a,c,d){return b.isMoment(a)?d?b.tz(a,d).format(c):a.format(c):b(a).format(c)}}),c.directive("datePicker",["datePickerConfig","datePickerUtils",function(c,d){return{require:"?ngModel",template:'
',scope:{model:"=datePicker",after:"=?",before:"=?"},link:function(e,f,g,h){function i(){e.views=c.views.concat(),e.view=g.view||c.view,e.views=e.views.slice(e.views.indexOf(g.maxView||"year"),e.views.indexOf(g.minView||"minutes")+1),(1===e.views.length||-1===e.views.indexOf(e.view))&&(e.view=e.views[0])}function j(a){return d.getDate(e,g,a)}function k(){var a=e.view;d.setParams(t,E),e.model&&!s&&(e.date=u(e.model),s=!1);var b=e.date;switch(d.isValidDate(b)||(b=new Date),a){case"year":e.years=d.getVisibleYears(b);break;case"month":e.months=d.getVisibleMonths(b);break;case"date":e.weekdays=e.weekdays||d.getDaysOfWeek(),e.weeks=d.getVisibleWeeks(b);break;case"hours":e.hours=d.getVisibleHours(b);break;case"minutes":e.minutes=d.getVisibleMinutes(b,w)}n()}function l(){return"date"!==e.view?e.view:e.date?e.date.month():null}var m,n,o,p,q,r,s=!1,t=e.tz=g.timezone,u=d.createMoment,v=d.eventIsForPicker,w=parseInt(g.step||c.step,10),x=!!g.partial,y=j("minDate"),z=j("maxDate"),A=f[0].id,B=e.now=u(),C=e.date=u(e.model||B),D="true"===g.autoClose,E=g.firstDay&&g.firstDay>=0&&g.firstDay<=6?parseInt(g.firstDay,10):b().weekday(0).day();d.setParams(t,E),e.model||C.minute(Math.ceil(C.minute()/w)*w).second(0),e.template=g.template||c.template,e.watchDirectChanges=void 0!==g.watchDirectChanges,e.callbackOnSetDate=g.dateChange?d.findFunction(e,g.dateChange):void 0,i(),e.setView=function(a){-1!==e.views.indexOf(a)&&(e.view=a)},e.getUnformattedDateHeader=function(){var b=e.now;return e.date&&a.isDate(e.date)&&(b=e.date),b},e.selectDate=function(a){if(g.disabled)return!1;if(o(e.date,a)&&(a=e.date),a=p(a),!a)return!1;e.date=a;var b=e.views[e.views.indexOf(e.view)+1];(!b||x||e.model)&&m(a),b?e.setView(b):D?(f.addClass("hidden"),e.$emit("hidePicker")):n()},m=function(a){a&&(e.model=a,h&&h.$setViewValue(a)),e.$emit("setDate",e.model,e.view),e.callbackOnSetDate&&e.callbackOnSetDate(g.datePicker,e.date)},e.$watch(l,k),e.watchDirectChanges&&e.$watch("model",function(){s=!1,k()}),n=function(){var a,b,f=e.view,g=e.date,h=[],i="";if(d.setParams(t,E),"date"===f){var j,k=e.weeks;for(a=0;ad;d+=b)c=e(f,g,h,i-j,d),k.push(c);return k},getVisibleWeeks:function(a){a=b(a);var c=a.year(),e=a.month();a.date(1);var f=a.day();a.date(d-(f+(d>=f?6:-1)));for(var g=[];g.length<6&&!(a.year()===c&&a.month()>e);)g.push(this.getDaysOfWeek(a)),a.add(7,"d");return g},getVisibleYears:function(a){var c=b(a),d=c.year();c.year(d-d%10),d=c.year();for(var f,g,h=c.utcOffset()/60,i=[],j=0;12>j;j++)f=e(d,0,1,0-h),g=f.utcOffset()/60,g!==h&&(f=e(d,0,1,0-g),h=g),i.push(f),d++;return i},getDaysOfWeek:function(a){a=a?a:c?b.tz(c).day(d):b().day(d);for(var f,g,h=a.year(),i=a.month(),j=a.date(),k=[],l=a.utcOffset()/60,m=0;7>m;m++)f=e(h,i,j,0-l,0,!1),g=f.utcOffset()/60,g!==l&&(f=e(h,i,j,0-g,0,!1)),k.push(f),j++;return k},getVisibleMonths:function(a){for(var b,c,d=a.year(),f=a.utcOffset()/60,g=[],h=0;12>h;h++)b=e(d,h,1,0-f,0,!1),c=b.utcOffset()/60,c!==f&&(b=e(d,h,1,0-c,0,!1)),g.push(b);return g},getVisibleHours:function(a){var b,c,d,f=a.year(),g=a.month(),h=a.date(),i=[],j=a.utcOffset()/60;for(b=0;24>b;b++)c=e(f,g,h,b-j,0,!1),d=c.utcOffset()/60,d!==j&&(c=e(f,g,h,b-d,0,!1)),i.push(c);return i},isAfter:function(a,b){return a&&a.unix()>=b.unix()},isBefore:function(a,b){return a.unix()<=b.unix()},isSameYear:function(a,b){return a&&a.year()===b.year()},isSameMonth:function(a,b){return this.isSameYear(a,b)&&a.month()===b.month()},isSameDay:function(a,b){return this.isSameMonth(a,b)&&a.date()===b.date()},isSameHour:function(a,b){return this.isSameDay(a,b)&&a.hours()===b.hours()},isSameMinutes:function(a,b){return this.isSameHour(a,b)&&a.minutes()===b.minutes()},setParams:function(a,b){c=a,d=b},scopeSearch:function(a,b,c){var d,e,f=a,g=b.split("."),h=g.length;do{for(d=f=f.$parent,e=0;h>e;e++){d=d[g[e]]}if(d&&c(d))return d}while(f.$parent);return!1},findFunction:function(b,c){return this.scopeSearch(b,c,function(b){return a.isFunction(b)})},findParam:function(a,b){return this.scopeSearch(a,b,function(){return!0})},createMoment:function(a){return c?b.tz(a,c):b.isMoment(a)?b.unix(a.unix()):b(a)},getDate:function(a,b,c){var d=!1;return b[c]&&(d=this.createMoment(b[c]),d.isValid()||(d=this.findParam(a,b[c]),d&&(d=this.createMoment(d)))),d},eventIsForPicker:function(b,c){function d(a){return a instanceof RegExp?a.test(c):a===c}return a.isArray(b)?b.some(d):d(b)}}});var c=a.module("datePicker");c.directive("dateRange",["$compile","datePickerUtils","dateTimeConfig",function(c,d,e){function f(c,d,f,g,h){return e.template(a.extend(c,{ngModel:f,minDate:g&&b.isMoment(g)?g.format():!1,maxDate:h&&b.isMoment(h)?h.format():!1}),d)}function g(){return"picker"+Math.random().toString().substr(2)}return{scope:{start:"=",end:"="},link:function(b,e,h){function i(a){b.$broadcast("pickerUpdate",m[0],{maxDate:a})}function j(a){b.$broadcast("pickerUpdate",m[1],{minDate:a})}var k=null,l=e[0].id,m=[g(),g()],n=d.createMoment,o=d.eventIsForPicker;b.dateChange=function(a,b){k&&k(a,b)},l&&b.$on("pickerUpdate",function(a,c,d){o(c,l)&&b.$broadcast("pickerUpdate",m,d)}),d.setParams(h.timezone),b.start=n(b.start),b.end=n(b.end),b.$watchGroup(["start","end"],function(a){j(a[0]),i(a[1])}),a.isDefined(h.dateChange)&&(k=d.findFunction(b,h.dateChange)),h.onSetDate="dateChange";var p='
'+f(h,m[0],"start",!1,b.end)+''+f(h,m[1],"end",b.start,!1)+"
",q=c(p)(b);e.append(q)}}}]);var d="ng-pristine",e="ng-dirty",c=a.module("datePicker");c.constant("dateTimeConfig",{template:function(a,b){return"
'},format:"YYYY-MM-DD HH:mm",views:["date","year","month","hours","minutes"],autoClose:!1,position:"relative"}),c.directive("dateTimeAppend",function(){return{link:function(a,b){b.bind("click",function(){b.find("input")[0].focus()})}}}),c.directive("dateTime",["$compile","$document","$filter","dateTimeConfig","$parse","datePickerUtils",function(c,f,g,h,i,j){var k=f.find("body"),l=g("mFormat");return{require:"ngModel",scope:!0,link:function(f,g,m,n){function o(a){return a?l(a,x,L):void 0}function p(a){if(0===a.length)return null;var c=b(a,x);return c.isValid()?c:void 0}function q(a){H=a,m.minDate=a?a.format():a,I=b.isMoment(a)}function r(a){J=a,m.maxDate=a?a.format():a,K=b.isMoment(a)}function s(){w=h.template(m)}function t(a){a.stopPropagation(),n.$pristine&&(n.$dirty=!0,n.$pristine=!1,g.removeClass(d).addClass(e),y&&y.$setDirty(),n.$render())}function u(){D&&(D.remove(),D=null),G&&(G.remove(),G=null)}function v(){if(!D){if(D=c(w)(f),f.$digest(),O||(f.$on("setDate",function(a,b,c){t(a),N&&N(m.ngModel,b),C&&z[z.length-1]===c&&u()}),f.$on("hidePicker",function(){g[0].blur()}),f.$on("$destroy",u),O=!0),"absolute"===F){var b=g[0].getBoundingClientRect(),d=b.height||g[0].offsetHeight;D.css({top:b.top+d+"px",left:b.left+"px",display:"block",position:F}),k.append(D)}else G=a.element("
"),g[0].parentElement.insertBefore(G[0],g[0]),G.append(D),D.css({top:g[0].offsetHeight+"px",display:"block"});D.bind("mousedown",function(a){a.preventDefault()})}}var w,x=m.format||h.format,y=g.inheritedData("$formController"),z=i(m.views)(f)||h.views.concat(),A=m.view||z[0],B=z.indexOf(A),C=m.autoClose?i(m.autoClose)(f):h.autoClose,D=null,E=g[0].id,F=m.position||h.position,G=null,H=null,I=null,J=null,K=null,L=m.timezone||!1,M=j.eventIsForPicker,N=null,O=!1;-1===B&&z.splice(B,1),z.unshift(A),n.$formatters.push(o),n.$parsers.unshift(p),a.isDefined(m.minDate)&&(q(j.findParam(f,m.minDate)),n.$validators.min=function(a){return I?b.isMoment(a)&&(H.isSame(a)||H.isBefore(a)):!0}),a.isDefined(m.maxDate)&&(r(j.findParam(f,m.maxDate)),n.$validators.max=function(a){return K?b.isMoment(a)&&(J.isSame(a)||J.isAfter(a)):!0}),a.isDefined(m.dateChange)&&(N=j.findFunction(f,m.dateChange)),E&&f.$on("pickerUpdate",function(b,c,d){if(M(c,E))if(D);else{var e=!1;a.isDefined(d.minDate)&&(q(d.minDate),e=!0),a.isDefined(d.maxDate)&&(r(d.maxDate),e=!0),a.isDefined(d.minView)&&(m.minView=d.minView),a.isDefined(d.maxView)&&(m.maxView=d.maxView),m.view=d.view||m.view,e&&n.$validate(),a.isDefined(d.format)&&(x=m.format=d.format||h.format,n.$modelValue=-1),s()}}),g.bind("focus",v),g.bind("blur",u),s()}}}]),a.module("datePicker").run(["$templateCache",function(a){a.put("templates/datepicker.html",'
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
')}])}); \ No newline at end of file From bd40df4a271f9ba99bba7c945f09142e411d5366 Mon Sep 17 00:00:00 2001 From: Jamie Simko Date: Thu, 10 Aug 2017 08:55:13 -0600 Subject: [PATCH 24/25] Release v1.0.35 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 930da7a..00752ec 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.34", + "version": "1.0.35", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index 0415e20..f47724b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.34", + "version": "1.0.35", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git" From 4d486d6b8c81da35d150b8131b60d9e17b8007b9 Mon Sep 17 00:00:00 2001 From: Jamie Simko Date: Thu, 10 Aug 2017 08:56:39 -0600 Subject: [PATCH 25/25] Release v1.0.36 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 00752ec..4350a21 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angular-datepicker", "license": "MIT", - "version": "1.0.35", + "version": "1.0.36", "main": [ "./dist/angular-datepicker.js", "./dist/angular-datepicker.css" diff --git a/package.json b/package.json index f47724b..b685a81 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-datepicker", - "version": "1.0.35", + "version": "1.0.36", "main": "dist/angular-datepicker.js", "repository": { "url": "https://github.com/g00fy-/angular-datepicker.git"