From d39438179b8fe9b8d01b0a3598ffbcb4846ba464 Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Mon, 16 Jan 2017 18:26:28 +0800 Subject: [PATCH 01/13] update datepicker --- angularjs-datetime-picker.css | 20 ++++++++- angularjs-datetime-picker.js | 72 ++++++++++++++++++++++++-------- angularjs-datetime-picker.min.js | 2 +- package.json | 2 +- 4 files changed, 76 insertions(+), 20 deletions(-) diff --git a/angularjs-datetime-picker.css b/angularjs-datetime-picker.css index 240be45..b7756a2 100644 --- a/angularjs-datetime-picker.css +++ b/angularjs-datetime-picker.css @@ -33,6 +33,24 @@ .angularjs-datetime-picker > .adp-month > button.adp-next { right: 10px; } +.angularjs-datetime-picker > .adp-days .adp-time { + font-weight: bold; + padding-top: 10px; + border-top: 1px solid #ddd; +} + +.angularjs-datetime-picker > .adp-month > button.adp-close { + top: 10px; +} + +.angularjs-datetime-picker > .adp-month.adp-top { + text-transform: unset; +} +.angularjs-datetime-picker > .adp-month.adp-top a{ + font-weight: normal; + text-decoration: underline; + cursor: pointer; +} .angularjs-datetime-picker > .adp-days { width: 210px; /* 30 x 7 */ margin: 10px; @@ -70,5 +88,5 @@ } .angularjs-datetime-picker input[type=range] { - width: 150px; + width: 100%; } diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index e86247d..56129c0 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -48,6 +48,8 @@ options.day && div.attr('day', parseInt(options.day)); options.hour && div.attr('hour', parseInt(options.hour)); options.minute && div.attr('minute', parseInt(options.minute)); + options.allowClose && div.attr('allow-close', options.allowClose); + options.displaySelectedDate && div.attr('display-selected-date', options.displaySelectedDate); if (options.dateOnly === '' || options.dateOnly === true) { div.attr('date-only', 'true'); } @@ -106,7 +108,15 @@ angular.module('angularjs-datetime-picker').controller('DatetimePickerCtrl', DatetimePickerCtrl); var tmpl = [ - '
' , + '
' , + ' ', '
', ' ', ' {{months[mv.month].shortName}} {{mv.year}}', @@ -127,9 +137,9 @@ '
{{::day}}
', '
', '
', - ' {{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}
', - ' ', - ' ', + '
{{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}

', + ' ', + ' ', '
', '
'].join("\n"); @@ -199,21 +209,28 @@ if (scope.dateOnly === true){ element[0].querySelector('#adp-time').style.display = 'none'; } + if (scope.allowClose === true && element[0].querySelector('#adp-top')){ + element[0].querySelector('#adp-top').style.display = 'block'; + } + scope.$applyAsync( function() { ctrl.triggerEl = angular.element(element[0].triggerEl); if (attrs.ngModel) { // need to parse date string var dateStr = ''+ctrl.triggerEl.scope().$eval(attrs.ngModel); if (dateStr) { - if (!dateStr.match(/[0-9]{2}:/)) { // if no time is given, add 00:00:00 at the end - dateStr += " 00:00:00"; + if(!scope.displaySelectedDate) { + if (!dateStr.match(/[0-9]{2}:/)) { // if no time is given, add 00:00:00 at the end + dateStr += " 00:00:00"; + } + dateStr = dateStr.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,'$2-$1'); //mm-dd-yyyy to yyyy-mm-dd + dateStr = dateStr.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,'$1T$2'); //reformat for FF + dateStr = dateStr.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,''); //remove timezone + dateStr = dateStr.replace(/\s*\(\)\s*/,''); //remove timezone + dateStr = dateStr.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,''); //remove timezone + dateStr += getTimezoneOffset(dateStr); } - dateStr = dateStr.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,'$2-$1'); //mm-dd-yyyy to yyyy-mm-dd - dateStr = dateStr.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,'$1T$2'); //reformat for FF - dateStr = dateStr.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,''); //remove timezone - dateStr = dateStr.replace(/\s*\(\)\s*/,''); //remove timezone - dateStr = dateStr.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,''); //remove timezone - dateStr += getTimezoneOffset(dateStr); + var d = new Date(dateStr); scope.selectedDate = new Date( d.getFullYear(), @@ -225,20 +242,23 @@ ); } } - if (!scope.selectedDate || isNaN(scope.selectedDate.getTime())) { // no predefined date var today = new Date(); var year = scope.year || today.getFullYear(); var month = scope.month ? (scope.month-1) : today.getMonth(); var day = scope.day || today.getDate(); - var hour = scope.hour || today.getHours(); - var minute = scope.minute || today.getMinutes(); + var hour = scope.hour || scope.hour === 0 ? scope.hour : today.getHours(); + var minute = scope.minute || scope.minute === 0 ? scope.minute : today.getMinutes(); scope.selectedDate = new Date(year, month, day, hour, minute, 0); } scope.inputHour = scope.selectedDate.getHours(); scope.inputMinute = scope.selectedDate.getMinutes(); // Default to current year and month + var elScope = ctrl.triggerEl.scope(); + var preSelectedDate = dateFilter(elScope.$eval(attrs.ngModel), dateFormat); + scope.selectedDate = preSelectedDate ? new Date(preSelectedDate) : scope.selectedDate; + scope.mv = getMonthView(scope.selectedDate.getFullYear(), scope.selectedDate.getMonth()); scope.today = dateFilter(new Date(), 'yyyy-M-d'); if (scope.mv.year == scope.selectedDate.getFullYear() && scope.mv.month == scope.selectedDate.getMonth()) { @@ -248,10 +268,24 @@ } }); + scope.changeCurrentDate = function () { + scope.selectedDate = new Date(); + scope.mv = getMonthView(scope.selectedDate.getFullYear(), scope.selectedDate.getMonth()); + scope.today = dateFilter(new Date(), 'yyyy-M-d'); + if (scope.mv.year == scope.selectedDate.getFullYear() && scope.mv.month == scope.selectedDate.getMonth()) { + scope.selectedDay = scope.selectedDate.getDate(); + } else { + scope.selectedDay = null; + } + }; scope.addMonth = function (amount) { scope.mv = getMonthView(scope.mv.year, scope.mv.month + amount); }; + scope.closeDatetimePicker = function() { + ctrl.closeDatetimePicker(); + } + scope.setDate = function (evt) { var target = angular.element(evt.target)[0]; if (target.className.indexOf('selectable') !== -1) { @@ -295,7 +329,9 @@ hour: '=', minute: '=', dateOnly: '=', - closeOnSelect: '=' + closeOnSelect: '=', + allowClose: '=', + displaySelectedDate: '=' }, link: linkFunc }; @@ -334,7 +370,9 @@ minute: attrs.minute, dateOnly: attrs.dateOnly, futureOnly: attrs.futureOnly, - closeOnSelect: attrs.closeOnSelect + closeOnSelect: attrs.closeOnSelect, + displaySelectedDate: attrs.displaySelectedDate, + allowClose: attrs.allowClose }); }); } diff --git a/angularjs-datetime-picker.min.js b/angularjs-datetime-picker.min.js index fe3a6bc..7708a0e 100644 --- a/angularjs-datetime-picker.min.js +++ b/angularjs-datetime-picker.min.js @@ -1 +1 @@ -!function(){"use strict";angular.module("angularjs-datetime-picker",[]);var e=function(e){"string"==typeof e&&(e=new Date(e));var t=new Date(e.getFullYear(),0,1),a=new Date(e.getFullYear(),6,1),n=Math.max(t.getTimezoneOffset(),a.getTimezoneOffset()),l=e.getTimezoneOffset()=0?"-":"+";return r+("0"+i/60).slice(-2)+":"+("0"+i%60).slice(-2)},t=function(e,t,a){var n=a("DatetimePickerCtrl");return{open:function(e){n.openDatetimePicker(e)},close:function(){n.closeDatetimePicker()}}};t.$inject=["$compile","$document","$controller"],angular.module("angularjs-datetime-picker").factory("DatetimePicker",t);var a=function(e,t){var a,n=this,l=function(e){e&&e.remove(),t[0].body.removeEventListener("click",n.closeDatetimePicker)};this.openDatetimePicker=function(n){this.closeDatetimePicker();var l=angular.element("
");n.dateFormat&&l.attr("date-format",n.dateFormat),n.ngModel&&l.attr("ng-model",n.ngModel),n.year&&l.attr("year",parseInt(n.year)),n.month&&l.attr("month",parseInt(n.month)),n.day&&l.attr("day",parseInt(n.day)),n.hour&&l.attr("hour",parseInt(n.hour)),n.minute&&l.attr("minute",parseInt(n.minute)),(""===n.dateOnly||n.dateOnly===!0)&&l.attr("date-only","true"),"false"===n.closeOnSelect&&l.attr("close-on-select","false");var i=n.triggerEl;n.scope=n.scope||angular.element(i).scope(),a=e(l)(n.scope)[0],a.triggerEl=n.triggerEl,t[0].body.appendChild(a);var r=i.getBoundingClientRect();n.scope.$apply();var o=a.getBoundingClientRect();a.style.position="absolute",a.style.left=r.width>o.width?r.left+r.width-o.width+window.scrollX+"px":r.left+window.scrollX+"px",a.style.top=r.top<300||window.innerHeight-r.bottom>300?r.bottom+window.scrollY+"px":r.top-o.height+window.scrollY+"px",t[0].body.addEventListener("click",this.closeDatetimePicker)},this.closeDatetimePicker=function(e){var a=e&&e.target,n=t[0].querySelector("div[datetime-picker-popup]");e&&a?a.hasAttribute("datetime-picker")||n&&n.contains(a)||l(n):l(n)}};a.$inject=["$compile","$document"],angular.module("angularjs-datetime-picker").controller("DatetimePickerCtrl",a);var n=['
','
',' ',' {{months[mv.month].shortName}} {{mv.year}}',' ',"
",'
','
{{::dayOfWeek.firstLetter}}
','
{{::day}}
','
'," {{::day}}","
",'
{{::day}}
',"
",'
',' {{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}
',' ',' ',"
","
"].join("\n"),l=function(t,a){var l,i,r,o,d=function(){l=[],i=[],r=[],o=0;for(var e=1;31>=e;e++)l.push(e);for(var e=0;12>e;e++)i.push({fullName:t.DATETIME_FORMATS.MONTH[e],shortName:t.DATETIME_FORMATS.SHORTMONTH[e]});for(var e=0;7>e;e++){var a=t.DATETIME_FORMATS.DAY[(e+o)%7];r.push({fullName:a,firstLetter:a.substr(0,1)})}o=0},s=function(e,t){t>11?e++:0>t&&e--,t=(t+12)%12;var a=new Date(e,t,1),n=new Date(e,t+1,0),i=new Date(e,t,0),r=n.getDate(),d=i.getDate(),s=a.getDay(),c=(s-o+7)%7||7,u=l.slice(0,42-(c+r));return u.length>7&&(u=u.slice(0,u.length-7)),{year:e,month:t,days:l.slice(0,r),leadingDays:l.slice(-c-(31-d),d),trailingDays:u}},c=function(t,n,l,o){d();var c=l.dateFormat||"short";t.months=i,t.daysOfWeek=r,t.inputHour,t.inputMinute,t.dateOnly===!0&&(n[0].querySelector("#adp-time").style.display="none"),t.$applyAsync(function(){if(o.triggerEl=angular.element(n[0].triggerEl),l.ngModel){var i=""+o.triggerEl.scope().$eval(l.ngModel);if(i){i.match(/[0-9]{2}:/)||(i+=" 00:00:00"),i=i.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,"$2-$1"),i=i.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,"$1T$2"),i=i.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,""),i=i.replace(/\s*\(\)\s*/,""),i=i.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,""),i+=e(i);var r=new Date(i);t.selectedDate=new Date(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds())}}if(!t.selectedDate||isNaN(t.selectedDate.getTime())){var d=new Date,c=t.year||d.getFullYear(),u=t.month?t.month-1:d.getMonth(),m=t.day||d.getDate(),g=t.hour||d.getHours(),p=t.minute||d.getMinutes();t.selectedDate=new Date(c,u,m,g,p,0)}t.inputHour=t.selectedDate.getHours(),t.inputMinute=t.selectedDate.getMinutes(),t.mv=s(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(new Date,"yyyy-M-d"),t.selectedDay=t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDate.getDate():null}),t.addMonth=function(e){t.mv=s(t.mv.year,t.mv.month+e)},t.setDate=function(e){var a=angular.element(e.target)[0];-1!==a.className.indexOf("selectable")&&(t.updateNgModel(parseInt(a.innerHTML)),t.closeOnSelect!==!1&&o.closeDatetimePicker())},t.updateNgModel=function(e){if(e=e?e:t.selectedDate.getDate(),t.selectedDate=new Date(t.mv.year,t.mv.month,e,t.inputHour,t.inputMinute,0),t.selectedDay=t.selectedDate.getDate(),l.ngModel){var n,i=o.triggerEl.scope();n=i.$eval(l.ngModel)&&"Date"===i.$eval(l.ngModel).constructor.name?new Date(a(t.selectedDate,c)):a(t.selectedDate,c),i.$eval(l.ngModel+"= date",{date:n})}},t.$on("$destroy",o.closeDatetimePicker)};return{restrict:"A",template:n,controller:"DatetimePickerCtrl",replace:!0,scope:{year:"=",month:"=",day:"=",hour:"=",minute:"=",dateOnly:"=",closeOnSelect:"="},link:c}};l.$inject=["$locale","dateFilter"],angular.module("angularjs-datetime-picker").directive("datetimePickerPopup",l);var i=function(e,t){return{require:"ngModel",link:function(e,a,n,l){e.$watch(n.ngModel,function(e){if(e&&""!=e){var t=new Date(e);l.$setValidity("date",t?!0:!1);var a=new Date;n.hasOwnProperty("futureOnly")&&l.$setValidity("future-only",a>t?!1:!0)}}),a[0].addEventListener("click",function(){t.open({triggerEl:a[0],dateFormat:n.dateFormat,ngModel:n.ngModel,year:n.year,month:n.month,day:n.day,hour:n.hour,minute:n.minute,dateOnly:n.dateOnly,futureOnly:n.futureOnly,closeOnSelect:n.closeOnSelect})})}}};i.$inject=["$parse","DatetimePicker"],angular.module("angularjs-datetime-picker").directive("datetimePicker",i)}(); \ No newline at end of file +!function(){"use strict";angular.module("angularjs-datetime-picker",[]);var e=function(e){"string"==typeof e&&(e=new Date(e));var t=new Date(e.getFullYear(),0,1),a=new Date(e.getFullYear(),6,1),l=Math.max(t.getTimezoneOffset(),a.getTimezoneOffset()),n=e.getTimezoneOffset()=0?"-":"+";return r+("0"+i/60).slice(-2)+":"+("0"+i%60).slice(-2)},t=function(e,t,a){var l=a("DatetimePickerCtrl");return{open:function(e){l.openDatetimePicker(e)},close:function(){l.closeDatetimePicker()}}};t.$inject=["$compile","$document","$controller"],angular.module("angularjs-datetime-picker").factory("DatetimePicker",t);var a=function(e,t){var a,l=this,n=function(e){e&&e.remove(),t[0].body.removeEventListener("click",l.closeDatetimePicker)};this.openDatetimePicker=function(l){this.closeDatetimePicker();var n=angular.element("
");l.dateFormat&&n.attr("date-format",l.dateFormat),l.ngModel&&n.attr("ng-model",l.ngModel),l.year&&n.attr("year",parseInt(l.year)),l.month&&n.attr("month",parseInt(l.month)),l.day&&n.attr("day",parseInt(l.day)),l.hour&&n.attr("hour",parseInt(l.hour)),l.minute&&n.attr("minute",parseInt(l.minute)),l.allowClose&&n.attr("allow-close",l.allowClose),l.displaySelectedDate&&n.attr("display-selected-date",l.displaySelectedDate),""!==l.dateOnly&&l.dateOnly!==!0||n.attr("date-only","true"),"false"===l.closeOnSelect&&n.attr("close-on-select","false");var i=l.triggerEl;l.scope=l.scope||angular.element(i).scope(),a=e(n)(l.scope)[0],a.triggerEl=l.triggerEl,t[0].body.appendChild(a);var r=i.getBoundingClientRect();l.scope.$apply();var o=a.getBoundingClientRect();a.style.position="absolute",r.width>o.width?a.style.left=r.left+r.width-o.width+window.scrollX+"px":a.style.left=r.left+window.scrollX+"px",r.top<300||window.innerHeight-r.bottom>300?a.style.top=r.bottom+window.scrollY+"px":a.style.top=r.top-o.height+window.scrollY+"px",t[0].body.addEventListener("click",this.closeDatetimePicker)},this.closeDatetimePicker=function(e){var a=e&&e.target,l=t[0].querySelector("div[datetime-picker-popup]");e&&a?a.hasAttribute("datetime-picker")||l&&l.contains(a)||n(l):n(l)}};a.$inject=["$compile","$document"],angular.module("angularjs-datetime-picker").controller("DatetimePickerCtrl",a);var l=['
',' ",'
',' ',' {{months[mv.month].shortName}} {{mv.year}}',' ',"
",'
','
{{::dayOfWeek.firstLetter}}
','
{{::day}}
','
'," {{::day}}","
",'
{{::day}}
',"
",'
','
{{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}

',' ',' ',"
","
"].join("\n"),n=function(t,a){var n,i,r,o,d=function(){n=[],i=[],r=[],o=0;for(var e=1;e<=31;e++)n.push(e);for(var e=0;e<12;e++)i.push({fullName:t.DATETIME_FORMATS.MONTH[e],shortName:t.DATETIME_FORMATS.SHORTMONTH[e]});for(var e=0;e<7;e++){var a=t.DATETIME_FORMATS.DAY[(e+o)%7];r.push({fullName:a,firstLetter:a.substr(0,1)})}o=0},s=function(e,t){t>11?e++:t<0&&e--,t=(t+12)%12;var a=new Date(e,t,1),l=new Date(e,t+1,0),i=new Date(e,t,0),r=l.getDate(),d=i.getDate(),s=a.getDay(),c=(s-o+7)%7||7,u=n.slice(0,42-(c+r));return u.length>7&&(u=u.slice(0,u.length-7)),{year:e,month:t,days:n.slice(0,r),leadingDays:n.slice(-c-(31-d),d),trailingDays:u}},c=function(t,l,n,o){d();var c=n.dateFormat||"short";t.months=i,t.daysOfWeek=r,t.inputHour,t.inputMinute,t.dateOnly===!0&&(l[0].querySelector("#adp-time").style.display="none"),t.allowClose===!0&&l[0].querySelector("#adp-top")&&(l[0].querySelector("#adp-top").style.display="block"),t.$applyAsync(function(){if(o.triggerEl=angular.element(l[0].triggerEl),n.ngModel){var i=""+o.triggerEl.scope().$eval(n.ngModel);if(i){t.displaySelectedDate||(i.match(/[0-9]{2}:/)||(i+=" 00:00:00"),i=i.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,"$2-$1"),i=i.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,"$1T$2"),i=i.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,""),i=i.replace(/\s*\(\)\s*/,""),i=i.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,""),i+=e(i));var r=new Date(i);t.selectedDate=new Date(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds())}}if(!t.selectedDate||isNaN(t.selectedDate.getTime())){var d=new Date,u=t.year||d.getFullYear(),m=t.month?t.month-1:d.getMonth(),p=t.day||d.getDate(),g=t.hour||0===t.hour?t.hour:d.getHours(),y=t.minute||0===t.minute?t.minute:d.getMinutes();t.selectedDate=new Date(u,m,p,g,y,0)}t.inputHour=t.selectedDate.getHours(),t.inputMinute=t.selectedDate.getMinutes();var D=o.triggerEl.scope(),v=a(D.$eval(n.ngModel),c);t.selectedDate=v?new Date(v):t.selectedDate,t.mv=s(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(new Date,"yyyy-M-d"),t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDay=t.selectedDate.getDate():t.selectedDay=null}),t.changeCurrentDate=function(){t.selectedDate=new Date,t.mv=s(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(new Date,"yyyy-M-d"),t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDay=t.selectedDate.getDate():t.selectedDay=null},t.addMonth=function(e){t.mv=s(t.mv.year,t.mv.month+e)},t.closeDatetimePicker=function(){o.closeDatetimePicker()},t.setDate=function(e){var a=angular.element(e.target)[0];a.className.indexOf("selectable")!==-1&&(t.updateNgModel(parseInt(a.innerHTML)),t.closeOnSelect!==!1&&o.closeDatetimePicker())},t.updateNgModel=function(e){if(e=e?e:t.selectedDate.getDate(),t.selectedDate=new Date(t.mv.year,t.mv.month,e,t.inputHour,t.inputMinute,0),t.selectedDay=t.selectedDate.getDate(),n.ngModel){var l,i=o.triggerEl.scope();l=i.$eval(n.ngModel)&&"Date"===i.$eval(n.ngModel).constructor.name?new Date(a(t.selectedDate,c)):a(t.selectedDate,c),i.$eval(n.ngModel+"= date",{date:l})}},t.$on("$destroy",o.closeDatetimePicker)};return{restrict:"A",template:l,controller:"DatetimePickerCtrl",replace:!0,scope:{year:"=",month:"=",day:"=",hour:"=",minute:"=",dateOnly:"=",closeOnSelect:"=",allowClose:"=",displaySelectedDate:"="},link:c}};n.$inject=["$locale","dateFilter"],angular.module("angularjs-datetime-picker").directive("datetimePickerPopup",n);var i=function(e,t){return{require:"ngModel",link:function(e,a,l,n){e.$watch(l.ngModel,function(e){if(e&&""!=e){var t=new Date(e);n.$setValidity("date",!!t);var a=new Date;l.hasOwnProperty("futureOnly")&&n.$setValidity("future-only",!(t Date: Mon, 16 Jan 2017 18:38:09 +0800 Subject: [PATCH 02/13] bump 0.1.21 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 6702b38..0a6b6c2 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angularjs-datetime-picker", "main": "angularjs-datetime-picker.js", - "version": "0.1.20", + "version": "0.1.21", "homepage": "https://github.com/kineticsocial/angularjs-datetime-picker", "authors": [ "Allen Kim " diff --git a/package.json b/package.json index 3fc3fa0..060ddca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angularjs-datetime-picker", - "version": "0.1.20", + "version": "0.1.21", "description": "Very Lightweight AngularJS DateTime Picker Without Using jQuery, bootStrap, or moment", "main": "angularjs-datetime-picker.js", "scripts": { From 23500285260c88d75f701e3db0170b1f588c2882 Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Tue, 17 Jan 2017 15:39:00 +0900 Subject: [PATCH 03/13] update timezone and index --- angularjs-datetime-picker.css | 1 + angularjs-datetime-picker.js | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/angularjs-datetime-picker.css b/angularjs-datetime-picker.css index b7756a2..df163f5 100644 --- a/angularjs-datetime-picker.css +++ b/angularjs-datetime-picker.css @@ -4,6 +4,7 @@ border: 1px solid #ddd; display: inline-block; background: #fff; + z-index: 99999; } .angularjs-datetime-picker > .adp-month { text-align: center; diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index 56129c0..635f1e2 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -79,7 +79,7 @@ datetimePickerEl.style.left= (bcr.left + window.scrollX) + 'px'; } - if (bcr.top < 300 || window.innerHeight - bcr.bottom > 300) { + if (bcr.top < 500 || window.innerHeight - bcr.bottom > 500) { datetimePickerEl.style.top = (bcr.bottom + window.scrollY) + 'px'; } else { datetimePickerEl.style.top = (bcr.top - datePickerElBcr.height + window.scrollY) + 'px'; @@ -102,7 +102,7 @@ } else { removeEl(popupEl); } - } + }; }; DatetimePickerCtrl.$inject = ['$compile', '$document']; angular.module('angularjs-datetime-picker').controller('DatetimePickerCtrl', DatetimePickerCtrl); @@ -215,6 +215,7 @@ scope.$applyAsync( function() { + ctrl.triggerEl = angular.element(element[0].triggerEl); if (attrs.ngModel) { // need to parse date string var dateStr = ''+ctrl.triggerEl.scope().$eval(attrs.ngModel); @@ -255,9 +256,9 @@ scope.inputMinute = scope.selectedDate.getMinutes(); // Default to current year and month - var elScope = ctrl.triggerEl.scope(); - var preSelectedDate = dateFilter(elScope.$eval(attrs.ngModel), dateFormat); - scope.selectedDate = preSelectedDate ? new Date(preSelectedDate) : scope.selectedDate; + // var elScope = ctrl.triggerEl.scope(); + // var preSelectedDate = dateFilter(elScope.$eval(attrs.ngModel), dateFormat); + // scope.selectedDate = preSelectedDate ? new Date(preSelectedDate) : scope.selectedDate; scope.mv = getMonthView(scope.selectedDate.getFullYear(), scope.selectedDate.getMonth()); scope.today = dateFilter(new Date(), 'yyyy-M-d'); @@ -284,7 +285,7 @@ scope.closeDatetimePicker = function() { ctrl.closeDatetimePicker(); - } + }; scope.setDate = function (evt) { var target = angular.element(evt.target)[0]; @@ -303,12 +304,16 @@ ); scope.selectedDay = scope.selectedDate.getDate(); if (attrs.ngModel) { - //console.log('attrs.ngModel',attrs.ngModel); + // convert back to UTC format + scope.selectedDateUTC = new Date( + scope.mv.year, scope.mv.month, day, scope.inputHour, scope.inputMinute, 0 + ); + scope.selectedDateUTC.setMinutes(scope.selectedDateUTC.getMinutes()+scope.selectedDateUTC.getTimezoneOffset()); var elScope = ctrl.triggerEl.scope(), dateValue; if (elScope.$eval(attrs.ngModel) && elScope.$eval(attrs.ngModel).constructor.name === 'Date') { - dateValue = new Date(dateFilter(scope.selectedDate, dateFormat)); + dateValue = new Date(dateFilter(scope.selectedDateUTC, dateFormat)); } else { - dateValue = dateFilter(scope.selectedDate, dateFormat); + dateValue = dateFilter(scope.selectedDateUTC, dateFormat); } elScope.$eval(attrs.ngModel + '= date', {date: dateValue}); } From ad03a7be5079e85bb57fe7f4da079b5b5027739d Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Tue, 17 Jan 2017 18:51:47 +0900 Subject: [PATCH 04/13] bump 0.1.22 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 0a6b6c2..d8f2b1e 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angularjs-datetime-picker", "main": "angularjs-datetime-picker.js", - "version": "0.1.21", + "version": "0.1.22", "homepage": "https://github.com/kineticsocial/angularjs-datetime-picker", "authors": [ "Allen Kim " diff --git a/package.json b/package.json index 060ddca..d7e7e2b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angularjs-datetime-picker", - "version": "0.1.21", + "version": "0.1.22", "description": "Very Lightweight AngularJS DateTime Picker Without Using jQuery, bootStrap, or moment", "main": "angularjs-datetime-picker.js", "scripts": { From 4da1c43c4ed0a675a46ec18d67a9a721057deee0 Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Wed, 18 Jan 2017 11:58:09 +0900 Subject: [PATCH 05/13] add clear button --- angularjs-datetime-picker.js | 5 +++++ angularjs-datetime-picker.min.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index 635f1e2..5c1ade2 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -279,6 +279,11 @@ scope.selectedDay = null; } }; + scope.displayTime = function() { + if(scope.inputMinute == null || scope.inputHour == null) + return ""; + return ("0"+scope.inputHour).slice(-2) + ":" + ("0"+scope.inputMinute).slice(-2); + }; scope.addMonth = function (amount) { scope.mv = getMonthView(scope.mv.year, scope.mv.month + amount); }; diff --git a/angularjs-datetime-picker.min.js b/angularjs-datetime-picker.min.js index 7708a0e..5069b51 100644 --- a/angularjs-datetime-picker.min.js +++ b/angularjs-datetime-picker.min.js @@ -1 +1 @@ -!function(){"use strict";angular.module("angularjs-datetime-picker",[]);var e=function(e){"string"==typeof e&&(e=new Date(e));var t=new Date(e.getFullYear(),0,1),a=new Date(e.getFullYear(),6,1),l=Math.max(t.getTimezoneOffset(),a.getTimezoneOffset()),n=e.getTimezoneOffset()=0?"-":"+";return r+("0"+i/60).slice(-2)+":"+("0"+i%60).slice(-2)},t=function(e,t,a){var l=a("DatetimePickerCtrl");return{open:function(e){l.openDatetimePicker(e)},close:function(){l.closeDatetimePicker()}}};t.$inject=["$compile","$document","$controller"],angular.module("angularjs-datetime-picker").factory("DatetimePicker",t);var a=function(e,t){var a,l=this,n=function(e){e&&e.remove(),t[0].body.removeEventListener("click",l.closeDatetimePicker)};this.openDatetimePicker=function(l){this.closeDatetimePicker();var n=angular.element("
");l.dateFormat&&n.attr("date-format",l.dateFormat),l.ngModel&&n.attr("ng-model",l.ngModel),l.year&&n.attr("year",parseInt(l.year)),l.month&&n.attr("month",parseInt(l.month)),l.day&&n.attr("day",parseInt(l.day)),l.hour&&n.attr("hour",parseInt(l.hour)),l.minute&&n.attr("minute",parseInt(l.minute)),l.allowClose&&n.attr("allow-close",l.allowClose),l.displaySelectedDate&&n.attr("display-selected-date",l.displaySelectedDate),""!==l.dateOnly&&l.dateOnly!==!0||n.attr("date-only","true"),"false"===l.closeOnSelect&&n.attr("close-on-select","false");var i=l.triggerEl;l.scope=l.scope||angular.element(i).scope(),a=e(n)(l.scope)[0],a.triggerEl=l.triggerEl,t[0].body.appendChild(a);var r=i.getBoundingClientRect();l.scope.$apply();var o=a.getBoundingClientRect();a.style.position="absolute",r.width>o.width?a.style.left=r.left+r.width-o.width+window.scrollX+"px":a.style.left=r.left+window.scrollX+"px",r.top<300||window.innerHeight-r.bottom>300?a.style.top=r.bottom+window.scrollY+"px":a.style.top=r.top-o.height+window.scrollY+"px",t[0].body.addEventListener("click",this.closeDatetimePicker)},this.closeDatetimePicker=function(e){var a=e&&e.target,l=t[0].querySelector("div[datetime-picker-popup]");e&&a?a.hasAttribute("datetime-picker")||l&&l.contains(a)||n(l):n(l)}};a.$inject=["$compile","$document"],angular.module("angularjs-datetime-picker").controller("DatetimePickerCtrl",a);var l=['
',' ",'
',' ',' {{months[mv.month].shortName}} {{mv.year}}',' ',"
",'
','
{{::dayOfWeek.firstLetter}}
','
{{::day}}
','
'," {{::day}}","
",'
{{::day}}
',"
",'
','
{{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}

',' ',' ',"
","
"].join("\n"),n=function(t,a){var n,i,r,o,d=function(){n=[],i=[],r=[],o=0;for(var e=1;e<=31;e++)n.push(e);for(var e=0;e<12;e++)i.push({fullName:t.DATETIME_FORMATS.MONTH[e],shortName:t.DATETIME_FORMATS.SHORTMONTH[e]});for(var e=0;e<7;e++){var a=t.DATETIME_FORMATS.DAY[(e+o)%7];r.push({fullName:a,firstLetter:a.substr(0,1)})}o=0},s=function(e,t){t>11?e++:t<0&&e--,t=(t+12)%12;var a=new Date(e,t,1),l=new Date(e,t+1,0),i=new Date(e,t,0),r=l.getDate(),d=i.getDate(),s=a.getDay(),c=(s-o+7)%7||7,u=n.slice(0,42-(c+r));return u.length>7&&(u=u.slice(0,u.length-7)),{year:e,month:t,days:n.slice(0,r),leadingDays:n.slice(-c-(31-d),d),trailingDays:u}},c=function(t,l,n,o){d();var c=n.dateFormat||"short";t.months=i,t.daysOfWeek=r,t.inputHour,t.inputMinute,t.dateOnly===!0&&(l[0].querySelector("#adp-time").style.display="none"),t.allowClose===!0&&l[0].querySelector("#adp-top")&&(l[0].querySelector("#adp-top").style.display="block"),t.$applyAsync(function(){if(o.triggerEl=angular.element(l[0].triggerEl),n.ngModel){var i=""+o.triggerEl.scope().$eval(n.ngModel);if(i){t.displaySelectedDate||(i.match(/[0-9]{2}:/)||(i+=" 00:00:00"),i=i.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,"$2-$1"),i=i.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,"$1T$2"),i=i.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,""),i=i.replace(/\s*\(\)\s*/,""),i=i.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,""),i+=e(i));var r=new Date(i);t.selectedDate=new Date(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds())}}if(!t.selectedDate||isNaN(t.selectedDate.getTime())){var d=new Date,u=t.year||d.getFullYear(),m=t.month?t.month-1:d.getMonth(),p=t.day||d.getDate(),g=t.hour||0===t.hour?t.hour:d.getHours(),y=t.minute||0===t.minute?t.minute:d.getMinutes();t.selectedDate=new Date(u,m,p,g,y,0)}t.inputHour=t.selectedDate.getHours(),t.inputMinute=t.selectedDate.getMinutes();var D=o.triggerEl.scope(),v=a(D.$eval(n.ngModel),c);t.selectedDate=v?new Date(v):t.selectedDate,t.mv=s(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(new Date,"yyyy-M-d"),t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDay=t.selectedDate.getDate():t.selectedDay=null}),t.changeCurrentDate=function(){t.selectedDate=new Date,t.mv=s(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(new Date,"yyyy-M-d"),t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDay=t.selectedDate.getDate():t.selectedDay=null},t.addMonth=function(e){t.mv=s(t.mv.year,t.mv.month+e)},t.closeDatetimePicker=function(){o.closeDatetimePicker()},t.setDate=function(e){var a=angular.element(e.target)[0];a.className.indexOf("selectable")!==-1&&(t.updateNgModel(parseInt(a.innerHTML)),t.closeOnSelect!==!1&&o.closeDatetimePicker())},t.updateNgModel=function(e){if(e=e?e:t.selectedDate.getDate(),t.selectedDate=new Date(t.mv.year,t.mv.month,e,t.inputHour,t.inputMinute,0),t.selectedDay=t.selectedDate.getDate(),n.ngModel){var l,i=o.triggerEl.scope();l=i.$eval(n.ngModel)&&"Date"===i.$eval(n.ngModel).constructor.name?new Date(a(t.selectedDate,c)):a(t.selectedDate,c),i.$eval(n.ngModel+"= date",{date:l})}},t.$on("$destroy",o.closeDatetimePicker)};return{restrict:"A",template:l,controller:"DatetimePickerCtrl",replace:!0,scope:{year:"=",month:"=",day:"=",hour:"=",minute:"=",dateOnly:"=",closeOnSelect:"=",allowClose:"=",displaySelectedDate:"="},link:c}};n.$inject=["$locale","dateFilter"],angular.module("angularjs-datetime-picker").directive("datetimePickerPopup",n);var i=function(e,t){return{require:"ngModel",link:function(e,a,l,n){e.$watch(l.ngModel,function(e){if(e&&""!=e){var t=new Date(e);n.$setValidity("date",!!t);var a=new Date;l.hasOwnProperty("futureOnly")&&n.$setValidity("future-only",!(t=0?"-":"+";return r+("0"+i/60).slice(-2)+":"+("0"+i%60).slice(-2)},t=function(e,t,a){var l=a("DatetimePickerCtrl");return{open:function(e){l.openDatetimePicker(e)},close:function(){l.closeDatetimePicker()}}};t.$inject=["$compile","$document","$controller"],angular.module("angularjs-datetime-picker").factory("DatetimePicker",t);var a=function(e,t){var a,l=this,n=function(e){e&&e.remove(),t[0].body.removeEventListener("click",l.closeDatetimePicker)};this.openDatetimePicker=function(l){this.closeDatetimePicker();var n=angular.element("
");l.dateFormat&&n.attr("date-format",l.dateFormat),l.ngModel&&n.attr("ng-model",l.ngModel),l.year&&n.attr("year",parseInt(l.year)),l.month&&n.attr("month",parseInt(l.month)),l.day&&n.attr("day",parseInt(l.day)),l.hour&&n.attr("hour",parseInt(l.hour)),l.minute&&n.attr("minute",parseInt(l.minute)),l.allowClose&&n.attr("allow-close",l.allowClose),l.displaySelectedDate&&n.attr("display-selected-date",l.displaySelectedDate),""!==l.dateOnly&&l.dateOnly!==!0||n.attr("date-only","true"),"false"===l.closeOnSelect&&n.attr("close-on-select","false");var i=l.triggerEl;l.scope=l.scope||angular.element(i).scope(),a=e(n)(l.scope)[0],a.triggerEl=l.triggerEl,t[0].body.appendChild(a);var r=i.getBoundingClientRect();l.scope.$apply();var o=a.getBoundingClientRect();a.style.position="absolute",r.width>o.width?a.style.left=r.left+r.width-o.width+window.scrollX+"px":a.style.left=r.left+window.scrollX+"px",r.top<500||window.innerHeight-r.bottom>500?a.style.top=r.bottom+window.scrollY+"px":a.style.top=r.top-o.height+window.scrollY+"px",t[0].body.addEventListener("click",this.closeDatetimePicker)},this.closeDatetimePicker=function(e){var a=e&&e.target,l=t[0].querySelector("div[datetime-picker-popup]");e&&a?a.hasAttribute("datetime-picker")||l&&l.contains(a)||n(l):n(l)}};a.$inject=["$compile","$document"],angular.module("angularjs-datetime-picker").controller("DatetimePickerCtrl",a);var l=['
',' ",'
',' ',' {{months[mv.month].shortName}} {{mv.year}}',' ',"
",'
','
{{::dayOfWeek.firstLetter}}
','
{{::day}}
','
'," {{::day}}","
",'
{{::day}}
',"
",'
','
{{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}

',' ',' ',"
","
"].join("\n"),n=function(t,a){var n,i,r,o,s=function(){n=[],i=[],r=[],o=0;for(var e=1;e<=31;e++)n.push(e);for(var e=0;e<12;e++)i.push({fullName:t.DATETIME_FORMATS.MONTH[e],shortName:t.DATETIME_FORMATS.SHORTMONTH[e]});for(var e=0;e<7;e++){var a=t.DATETIME_FORMATS.DAY[(e+o)%7];r.push({fullName:a,firstLetter:a.substr(0,1)})}o=0},d=function(e,t){t>11?e++:t<0&&e--,t=(t+12)%12;var a=new Date(e,t,1),l=new Date(e,t+1,0),i=new Date(e,t,0),r=l.getDate(),s=i.getDate(),d=a.getDay(),c=(d-o+7)%7||7,u=n.slice(0,42-(c+r));return u.length>7&&(u=u.slice(0,u.length-7)),{year:e,month:t,days:n.slice(0,r),leadingDays:n.slice(-c-(31-s),s),trailingDays:u}},c=function(t,l,n,o){s();var c=n.dateFormat||"short";t.months=i,t.daysOfWeek=r,t.inputHour,t.inputMinute,t.dateOnly===!0&&(l[0].querySelector("#adp-time").style.display="none"),t.allowClose===!0&&l[0].querySelector("#adp-top")&&(l[0].querySelector("#adp-top").style.display="block"),t.$applyAsync(function(){if(o.triggerEl=angular.element(l[0].triggerEl),n.ngModel){var i=""+o.triggerEl.scope().$eval(n.ngModel);if(i){t.displaySelectedDate||(i.match(/[0-9]{2}:/)||(i+=" 00:00:00"),i=i.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,"$2-$1"),i=i.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,"$1T$2"),i=i.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,""),i=i.replace(/\s*\(\)\s*/,""),i=i.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,""),i+=e(i));var r=new Date(i);t.selectedDate=new Date(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds())}}if(!t.selectedDate||isNaN(t.selectedDate.getTime())){var s=new Date,c=t.year||s.getFullYear(),u=t.month?t.month-1:s.getMonth(),m=t.day||s.getDate(),p=t.hour||0===t.hour?t.hour:s.getHours(),g=t.minute||0===t.minute?t.minute:s.getMinutes();t.selectedDate=new Date(c,u,m,p,g,0)}t.inputHour=t.selectedDate.getHours(),t.inputMinute=t.selectedDate.getMinutes(),t.mv=d(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(new Date,"yyyy-M-d"),t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDay=t.selectedDate.getDate():t.selectedDay=null}),t.changeCurrentDate=function(){t.selectedDate=new Date,t.mv=d(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.today=a(new Date,"yyyy-M-d"),t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDay=t.selectedDate.getDate():t.selectedDay=null},t.displayTime=function(){return null==t.inputMinute||null==t.inputHour?"":("0"+t.inputHour).slice(-2)+":"+("0"+t.inputMinute).slice(-2)},t.addMonth=function(e){t.mv=d(t.mv.year,t.mv.month+e)},t.closeDatetimePicker=function(){o.closeDatetimePicker()},t.setDate=function(e){var a=angular.element(e.target)[0];a.className.indexOf("selectable")!==-1&&(t.updateNgModel(parseInt(a.innerHTML)),t.closeOnSelect!==!1&&o.closeDatetimePicker())},t.updateNgModel=function(e){if(e=e?e:t.selectedDate.getDate(),t.selectedDate=new Date(t.mv.year,t.mv.month,e,t.inputHour,t.inputMinute,0),t.selectedDay=t.selectedDate.getDate(),n.ngModel){t.selectedDateUTC=new Date(t.mv.year,t.mv.month,e,t.inputHour,t.inputMinute,0),t.selectedDateUTC.setMinutes(t.selectedDateUTC.getMinutes()+t.selectedDateUTC.getTimezoneOffset());var l,i=o.triggerEl.scope();l=i.$eval(n.ngModel)&&"Date"===i.$eval(n.ngModel).constructor.name?new Date(a(t.selectedDateUTC,c)):a(t.selectedDateUTC,c),i.$eval(n.ngModel+"= date",{date:l})}},t.$on("$destroy",o.closeDatetimePicker)};return{restrict:"A",template:l,controller:"DatetimePickerCtrl",replace:!0,scope:{year:"=",month:"=",day:"=",hour:"=",minute:"=",dateOnly:"=",closeOnSelect:"=",allowClose:"=",displaySelectedDate:"="},link:c}};n.$inject=["$locale","dateFilter"],angular.module("angularjs-datetime-picker").directive("datetimePickerPopup",n);var i=function(e,t){return{require:"ngModel",link:function(e,a,l,n){e.$watch(l.ngModel,function(e){if(e&&""!=e){var t=new Date(e);n.$setValidity("date",!!t);var a=new Date;l.hasOwnProperty("futureOnly")&&n.$setValidity("future-only",!(t Date: Wed, 18 Jan 2017 11:59:02 +0900 Subject: [PATCH 06/13] bump v0.1.23 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index d8f2b1e..a1334de 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angularjs-datetime-picker", "main": "angularjs-datetime-picker.js", - "version": "0.1.22", + "version": "0.1.23", "homepage": "https://github.com/kineticsocial/angularjs-datetime-picker", "authors": [ "Allen Kim " diff --git a/package.json b/package.json index d7e7e2b..870c20f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angularjs-datetime-picker", - "version": "0.1.22", + "version": "0.1.23", "description": "Very Lightweight AngularJS DateTime Picker Without Using jQuery, bootStrap, or moment", "main": "angularjs-datetime-picker.js", "scripts": { From de23197fd243d73e36f76e28667be7eb366d4ecb Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Wed, 18 Jan 2017 16:14:15 +0900 Subject: [PATCH 07/13] bump v.0.1.24 --- angularjs-datetime-picker.js | 11 +++++++++-- bower.json | 2 +- package.json | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index 5c1ade2..b350d65 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -113,7 +113,8 @@ ' ', '
', ' {{ selectedDate | date: "mediumDate" }}
', - ' Change to today', + ' Change to today
', + ' Clear
', '
', ' ', '
', @@ -137,7 +138,7 @@ '
{{::day}}
', ' ', '
', - '
{{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}}

', + '
{{ displayTime() }}

', ' ', ' ', '
', @@ -284,6 +285,12 @@ return ""; return ("0"+scope.inputHour).slice(-2) + ":" + ("0"+scope.inputMinute).slice(-2); }; + scope.clearSelectedDate = function () { + scope.selectedDate = null; + scope.selectedDay = null; + scope.inputHour = null; + scope.inputMinute = null; + }; scope.addMonth = function (amount) { scope.mv = getMonthView(scope.mv.year, scope.mv.month + amount); }; diff --git a/bower.json b/bower.json index a1334de..6aa4d60 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angularjs-datetime-picker", "main": "angularjs-datetime-picker.js", - "version": "0.1.23", + "version": "0.1.24", "homepage": "https://github.com/kineticsocial/angularjs-datetime-picker", "authors": [ "Allen Kim " diff --git a/package.json b/package.json index 870c20f..d6e31da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angularjs-datetime-picker", - "version": "0.1.23", + "version": "0.1.24", "description": "Very Lightweight AngularJS DateTime Picker Without Using jQuery, bootStrap, or moment", "main": "angularjs-datetime-picker.js", "scripts": { From ca2de4e508f6733552575127eeeb1f76efb857bc Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Thu, 19 Jan 2017 15:54:17 +0900 Subject: [PATCH 08/13] bump v0.1.25 add ok button at the bottom --- angularjs-datetime-picker.js | 3 +++ bower.json | 2 +- package.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index b350d65..cfc0121 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -142,6 +142,9 @@ ' ', ' ', ' ', + ' ', ''].join("\n"); var datetimePickerPopup = function($locale, dateFilter){ diff --git a/bower.json b/bower.json index 6aa4d60..61b9e85 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angularjs-datetime-picker", "main": "angularjs-datetime-picker.js", - "version": "0.1.24", + "version": "0.1.25", "homepage": "https://github.com/kineticsocial/angularjs-datetime-picker", "authors": [ "Allen Kim " diff --git a/package.json b/package.json index d6e31da..5e36e47 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angularjs-datetime-picker", - "version": "0.1.24", + "version": "0.1.25", "description": "Very Lightweight AngularJS DateTime Picker Without Using jQuery, bootStrap, or moment", "main": "angularjs-datetime-picker.js", "scripts": { From df53aec95f267973280ef2a0ba4fe9a7ddf17fad Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Thu, 19 Jan 2017 16:06:27 +0900 Subject: [PATCH 09/13] change v0.1.21 --- angularjs-datetime-picker.js | 3 ++- bower.json | 2 +- package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index cfc0121..c485437 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -213,8 +213,9 @@ if (scope.dateOnly === true){ element[0].querySelector('#adp-time').style.display = 'none'; } - if (scope.allowClose === true && element[0].querySelector('#adp-top')){ + if (scope.allowClose === true){ element[0].querySelector('#adp-top').style.display = 'block'; + element[0].querySelector('#adp-bottom').style.display = 'block'; } diff --git a/bower.json b/bower.json index 61b9e85..0a6b6c2 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "angularjs-datetime-picker", "main": "angularjs-datetime-picker.js", - "version": "0.1.25", + "version": "0.1.21", "homepage": "https://github.com/kineticsocial/angularjs-datetime-picker", "authors": [ "Allen Kim " diff --git a/package.json b/package.json index 5e36e47..060ddca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angularjs-datetime-picker", - "version": "0.1.25", + "version": "0.1.21", "description": "Very Lightweight AngularJS DateTime Picker Without Using jQuery, bootStrap, or moment", "main": "angularjs-datetime-picker.js", "scripts": { From b7aecbde7042ca98e82cb51762891142f000c384 Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Thu, 19 Jan 2017 16:49:01 +0900 Subject: [PATCH 10/13] updated --- angularjs-datetime-picker.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index c485437..c967314 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -294,6 +294,10 @@ scope.selectedDay = null; scope.inputHour = null; scope.inputMinute = null; + if (attrs.ngModel) { + var elScope = ctrl.triggerEl.scope(); + elScope.$eval(attrs.ngModel + '= date', {date: null}); + } }; scope.addMonth = function (amount) { scope.mv = getMonthView(scope.mv.year, scope.mv.month + amount); From 71e5722203e489da06563519c34b50cf5d1ba8f0 Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Tue, 7 Feb 2017 14:11:36 +0800 Subject: [PATCH 11/13] 7/2/2017 change changeCurrentDate() to update field value to today's date (previously only updated month view) --- angularjs-datetime-picker.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index c967314..85a16ef 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -277,12 +277,18 @@ scope.changeCurrentDate = function () { scope.selectedDate = new Date(); scope.mv = getMonthView(scope.selectedDate.getFullYear(), scope.selectedDate.getMonth()); - scope.today = dateFilter(new Date(), 'yyyy-M-d'); - if (scope.mv.year == scope.selectedDate.getFullYear() && scope.mv.month == scope.selectedDate.getMonth()) { + scope.today = dateFilter(scope.selectedDate, 'yyyy-M-d'); + // set field date to today's date and time scope.selectedDay = scope.selectedDate.getDate(); - } else { - scope.selectedDay = null; + if (attrs.ngModel) { + var elScope = ctrl.triggerEl.scope(); + elScope.$eval(attrs.ngModel + '= date', {date: scope.selectedDate}); } + // if (scope.mv.year == scope.selectedDate.getFullYear() && scope.mv.month == scope.selectedDate.getMonth()) { + // scope.selectedDay = scope.selectedDate.getDate(); + // } else { + // scope.selectedDay = null; + // } }; scope.displayTime = function() { if(scope.inputMinute == null || scope.inputHour == null) From c4e14d87f100a32713a16831eba020e9efa6784d Mon Sep 17 00:00:00 2001 From: Duc Huy Date: Tue, 25 Jul 2017 14:27:24 +0800 Subject: [PATCH 12/13] v0.1.22 Add ng-change --- README.md | 4 ++++ angularjs-datetime-picker.js | 25 +++++++++++++++---------- angularjs-datetime-picker.min.js | 21 ++++++++++++++++++++- bower.json | 2 +- package.json | 2 +- 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 44c799b..c38693a 100644 --- a/README.md +++ b/README.md @@ -53,3 +53,7 @@ Examples +Change Logs +------------ +v.0.1.22 +Add ng-change \ No newline at end of file diff --git a/angularjs-datetime-picker.js b/angularjs-datetime-picker.js index 85a16ef..34342e6 100644 --- a/angularjs-datetime-picker.js +++ b/angularjs-datetime-picker.js @@ -50,6 +50,7 @@ options.minute && div.attr('minute', parseInt(options.minute)); options.allowClose && div.attr('allow-close', options.allowClose); options.displaySelectedDate && div.attr('display-selected-date', options.displaySelectedDate); + options.ngChange && div.attr('ng-change', options.ngChange); if (options.dateOnly === '' || options.dateOnly === true) { div.attr('date-only', 'true'); } @@ -108,7 +109,7 @@ angular.module('angularjs-datetime-picker').controller('DatetimePickerCtrl', DatetimePickerCtrl); var tmpl = [ - '
' , + '
' , '