From f89a67899d47033aea0b8c7878cef91ca8c5c36e Mon Sep 17 00:00:00 2001 From: Sergii Pashko Date: Fri, 14 Nov 2014 13:18:17 +0200 Subject: [PATCH] Added support for ISO 8601 week (Weeks start with Monday) For use this feature just add an attribute iso-week="true" --- bower.json | 2 +- build/angular-date-range-picker.js | 10 ++++++---- build/angular-date-range-picker.min.js | 4 ++-- src/angular-date-range-picker.coffee | 16 +++++++++------- test/index.html | 2 +- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/bower.json b/bower.json index 042084f..04462aa 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-date-range-picker", - "version": "0.4.15", + "version": "0.4.16", "authors": [ "Tymon Tobolski ", "Krzysztof Jung " diff --git a/build/angular-date-range-picker.js b/build/angular-date-range-picker.js index b870931..1f34a7c 100644 --- a/build/angular-date-range-picker.js +++ b/build/angular-date-range-picker.js @@ -14,23 +14,25 @@ model: "=ngModel", customSelectOptions: "=", ranged: "=", + isoWeek: "=", pastDates: "@", callback: "&" }, link: function($scope, element, attrs) { var documentClickFn, domEl, _calculateRange, _checkQuickList, _makeQuickList, _prepare; + $scope.localWeekUnitName = $scope.isoWeek ? "isoWeek" : "week"; $scope.quickListDefinitions = $scope.customSelectOptions; if ($scope.quickListDefinitions == null) { $scope.quickListDefinitions = [ { label: "This week", - range: moment().range(moment().startOf("week").startOf("day"), moment().endOf("week").startOf("day")) + range: moment().range(moment().startOf($scope.localWeekUnitName).startOf("day"), moment().endOf($scope.localWeekUnitName).startOf("day")) }, { label: "Next week", - range: moment().range(moment().startOf("week").add(1, "week").startOf("day"), moment().add(1, "week").endOf("week").startOf("day")) + range: moment().range(moment().startOf($scope.localWeekUnitName).add(1, "week").startOf("day"), moment().add(1, "week").endOf($scope.localWeekUnitName).startOf("day")) }, { label: "This fortnight", - range: moment().range(moment().startOf("week").startOf("day"), moment().add(1, "week").endOf("week").startOf("day")) + range: moment().range(moment().startOf($scope.localWeekUnitName).startOf("day"), moment().add(1, "week").endOf($scope.localWeekUnitName).startOf("day")) }, { label: "This month", range: moment().range(moment().startOf("month").startOf("day"), moment().endOf("month").startOf("day")) @@ -104,7 +106,7 @@ var m, startDay, startIndex, _i, _len, _ref; $scope.months = []; startIndex = $scope.range.start.year() * 12 + $scope.range.start.month(); - startDay = moment().startOf("week").day(); + startDay = moment().startOf($scope.localWeekUnitName).day(); $scope.range.by("days", function(date) { var d, dis, m, sel, w, _base, _base1; d = date.day() - startDay; diff --git a/build/angular-date-range-picker.min.js b/build/angular-date-range-picker.min.js index e84e720..bf69915 100644 --- a/build/angular-date-range-picker.min.js +++ b/build/angular-date-range-picker.min.js @@ -1,2 +1,2 @@ -/*! angular-date-range-picker 2014-07-03 */ -(function(){angular.module("dateRangePicker",["pasvaz.bindonce"]),angular.module("dateRangePicker").directive("dateRangePicker",["$compile","$timeout",function(a,b){var c,d;return d='
\n
\n \n
\n
\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n Select range: \n
\n
\n Apply\n cancel\n
\n
\n
',c="CUSTOM",{restrict:"AE",replace:!0,template:'\n \n {{ model.start.format("ll") }} - {{ model.end.format("ll") }}\n Select date range\n \n \n {{ model.format("ll") }}\n Select date\n \n',scope:{model:"=ngModel",customSelectOptions:"=",ranged:"=",pastDates:"@",callback:"&"},link:function(e,f){var g,h,i,j,k,l;return e.quickListDefinitions=e.customSelectOptions,null==e.quickListDefinitions&&(e.quickListDefinitions=[{label:"This week",range:moment().range(moment().startOf("week").startOf("day"),moment().endOf("week").startOf("day"))},{label:"Next week",range:moment().range(moment().startOf("week").add(1,"week").startOf("day"),moment().add(1,"week").endOf("week").startOf("day"))},{label:"This fortnight",range:moment().range(moment().startOf("week").startOf("day"),moment().add(1,"week").endOf("week").startOf("day"))},{label:"This month",range:moment().range(moment().startOf("month").startOf("day"),moment().endOf("month").startOf("day"))},{label:"Next month",range:moment().range(moment().startOf("month").add(1,"month").startOf("day"),moment().add(1,"month").endOf("month").startOf("day"))}]),e.quick=null,e.range=null,e.selecting=!1,e.visible=!1,e.start=null,e.showRanged=void 0===e.ranged?!0:e.ranged,k=function(a){var b,d,f,g,h;if(null==a&&(a=!1),e.showRanged){for(e.quickList=[],a&&e.quickList.push({label:"Custom",range:c}),g=e.quickListDefinitions,h=[],d=0,f=g.length;f>d;d++)b=g[d],h.push(e.quickList.push(b));return h}},i=function(){var a,b;return e.showRanged?e.range=e.selection?(b=e.selection.start.clone().startOf("month").startOf("day"),a=b.clone().add(2,"months").endOf("month").startOf("day"),moment().range(b,a)):moment().range(moment().startOf("month").subtract(1,"month").startOf("day"),moment().endOf("month").add(1,"month").startOf("day")):(e.selection=!1,e.selection=e.model||!1,e.date=moment(e.model)||moment(),e.range=moment().range(moment(e.date).startOf("month"),moment(e.date).endOf("month")))},j=function(){var a,b,d,f;if(e.showRanged&&e.selection){for(f=e.quickList,b=0,d=f.length;d>b;b++)if(a=f[b],a.range!==c&&e.selection.start.startOf("day").unix()===a.range.start.startOf("day").unix()&&e.selection.end.startOf("day").unix()===a.range.end.startOf("day").unix())return e.quick=a.range,k(),void 0;return e.quick=c,k(!0)}},l=function(){var a,b,c,d,f,g;for(e.months=[],c=12*e.range.start.year()+e.range.start.month(),b=moment().startOf("week").day(),e.range.by("days",function(a){var d,f,g,h,i,j,k;return d=a.day()-b,0>d&&(d=7+d),g=12*a.year()+a.month()-c,i=parseInt((7+a.date()-d)/7),h=!1,f=!1,e.showRanged?e.start?(h=a===e.start,f=a0)),(j=e.months)[g]||(j[g]={name:a.format("MMMM YYYY"),weeks:[]}),(k=e.months[g].weeks)[i]||(k[i]=[]),e.months[g].weeks[i][d]={date:a,selected:h,disabled:f,start:e.start&&e.start.unix()===a.unix()}}),g=e.months,d=0,f=g.length;f>d;d++)a=g[d],a.weeks[0]||a.weeks.splice(0,1);return j()},e.show=function(){return e.selection=e.model,i(),l(),e.visible=!0},e.hide=function(a){return null!=a&&"function"==typeof a.stopPropagation&&a.stopPropagation(),e.visible=!1,e.start=null},e.prevent_select=function(a){return null!=a?"function"==typeof a.stopPropagation?a.stopPropagation():void 0:void 0},e.ok=function(a){return null!=a&&"function"==typeof a.stopPropagation&&a.stopPropagation(),e.model=e.selection,b(function(){return e.callback?e.callback():void 0}),e.hide()},e.select=function(a,b){return null!=b&&"function"==typeof b.stopPropagation&&b.stopPropagation(),a.disabled?void 0:(e.showRanged?(e.selecting=!e.selecting,e.selecting?e.start=a.date:(e.selection=moment().range(e.start,a.date),e.start=null)):e.selection=moment(a.date),l())},e.move=function(a,b){return null!=b&&"function"==typeof b.stopPropagation&&b.stopPropagation(),e.showRanged?e.range=moment().range(e.range.start.add(a,"months").startOf("month").startOf("day"),e.range.start.clone().add(2,"months").endOf("month").startOf("day")):(e.date.add(a,"months"),e.range=moment().range(moment(e.date).startOf("month"),moment(e.date).endOf("month"))),l()},e.handlePickerClick=function(a){return null!=a?"function"==typeof a.stopPropagation?a.stopPropagation():void 0:void 0},e.$watch("quick",function(a){return a&&a!==c?(e.selection=e.quick,e.selecting=!1,e.start=null,i(),l()):void 0}),e.$watch("customSelectOptions",function(a){return"undefined"!=typeof customSelectOptions&&null!==customSelectOptions?e.quickListDefinitions=a:void 0}),h=a(angular.element(d))(e),f.append(h),f.bind("click",function(a){return null!=a&&"function"==typeof a.stopPropagation&&a.stopPropagation(),e.$apply(function(){return e.visible?e.hide():e.show()})}),g=function(){return e.$apply(function(){return e.hide()}),!0},angular.element(document).bind("click",g),e.$on("$destroy",function(){return angular.element(document).unbind("click",g)}),k(),i(),l()}}}])}).call(this); \ No newline at end of file +/*! angular-date-range-picker 2014-11-14 */ +(function(){angular.module("dateRangePicker",["pasvaz.bindonce"]),angular.module("dateRangePicker").directive("dateRangePicker",["$compile","$timeout",function(a,b){var c,d;return d='
\n
\n \n
\n
\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n Select range: \n
\n
\n Apply\n cancel\n
\n
\n
',c="CUSTOM",{restrict:"AE",replace:!0,template:'\n \n {{ model.start.format("ll") }} - {{ model.end.format("ll") }}\n Select date range\n \n \n {{ model.format("ll") }}\n Select date\n \n',scope:{model:"=ngModel",customSelectOptions:"=",ranged:"=",isoWeek:"=",pastDates:"@",callback:"&"},link:function(e,f){var g,h,i,j,k,l;return e.localWeekUnitName=e.isoWeek?"isoWeek":"week",e.quickListDefinitions=e.customSelectOptions,null==e.quickListDefinitions&&(e.quickListDefinitions=[{label:"This week",range:moment().range(moment().startOf(e.localWeekUnitName).startOf("day"),moment().endOf(e.localWeekUnitName).startOf("day"))},{label:"Next week",range:moment().range(moment().startOf(e.localWeekUnitName).add(1,"week").startOf("day"),moment().add(1,"week").endOf(e.localWeekUnitName).startOf("day"))},{label:"This fortnight",range:moment().range(moment().startOf(e.localWeekUnitName).startOf("day"),moment().add(1,"week").endOf(e.localWeekUnitName).startOf("day"))},{label:"This month",range:moment().range(moment().startOf("month").startOf("day"),moment().endOf("month").startOf("day"))},{label:"Next month",range:moment().range(moment().startOf("month").add(1,"month").startOf("day"),moment().add(1,"month").endOf("month").startOf("day"))}]),e.quick=null,e.range=null,e.selecting=!1,e.visible=!1,e.start=null,e.showRanged=void 0===e.ranged?!0:e.ranged,k=function(a){var b,d,f,g,h;if(null==a&&(a=!1),e.showRanged){for(e.quickList=[],a&&e.quickList.push({label:"Custom",range:c}),g=e.quickListDefinitions,h=[],d=0,f=g.length;f>d;d++)b=g[d],h.push(e.quickList.push(b));return h}},i=function(){var a,b;return e.showRanged?e.range=e.selection?(b=e.selection.start.clone().startOf("month").startOf("day"),a=b.clone().add(2,"months").endOf("month").startOf("day"),moment().range(b,a)):moment().range(moment().startOf("month").subtract(1,"month").startOf("day"),moment().endOf("month").add(1,"month").startOf("day")):(e.selection=!1,e.selection=e.model||!1,e.date=moment(e.model)||moment(),e.range=moment().range(moment(e.date).startOf("month"),moment(e.date).endOf("month")))},j=function(){var a,b,d,f;if(e.showRanged&&e.selection){for(f=e.quickList,b=0,d=f.length;d>b;b++)if(a=f[b],a.range!==c&&e.selection.start.startOf("day").unix()===a.range.start.startOf("day").unix()&&e.selection.end.startOf("day").unix()===a.range.end.startOf("day").unix())return e.quick=a.range,void k();return e.quick=c,k(!0)}},l=function(){var a,b,c,d,f,g;for(e.months=[],c=12*e.range.start.year()+e.range.start.month(),b=moment().startOf(e.localWeekUnitName).day(),e.range.by("days",function(a){var d,f,g,h,i,j,k;return d=a.day()-b,0>d&&(d=7+d),g=12*a.year()+a.month()-c,i=parseInt((7+a.date()-d)/7),h=!1,f=!1,e.showRanged?e.start?(h=a===e.start,f=a0)),(j=e.months)[g]||(j[g]={name:a.format("MMMM YYYY"),weeks:[]}),(k=e.months[g].weeks)[i]||(k[i]=[]),e.months[g].weeks[i][d]={date:a,selected:h,disabled:f,start:e.start&&e.start.unix()===a.unix()}}),g=e.months,d=0,f=g.length;f>d;d++)a=g[d],a.weeks[0]||a.weeks.splice(0,1);return j()},e.show=function(){return e.selection=e.model,i(),l(),e.visible=!0},e.hide=function(a){return null!=a&&"function"==typeof a.stopPropagation&&a.stopPropagation(),e.visible=!1,e.start=null},e.prevent_select=function(a){return null!=a&&"function"==typeof a.stopPropagation?a.stopPropagation():void 0},e.ok=function(a){return null!=a&&"function"==typeof a.stopPropagation&&a.stopPropagation(),e.model=e.selection,b(function(){return e.callback?e.callback():void 0}),e.hide()},e.select=function(a,b){return null!=b&&"function"==typeof b.stopPropagation&&b.stopPropagation(),a.disabled?void 0:(e.showRanged?(e.selecting=!e.selecting,e.selecting?e.start=a.date:(e.selection=moment().range(e.start,a.date),e.start=null)):e.selection=moment(a.date),l())},e.move=function(a,b){return null!=b&&"function"==typeof b.stopPropagation&&b.stopPropagation(),e.showRanged?e.range=moment().range(e.range.start.add(a,"months").startOf("month").startOf("day"),e.range.start.clone().add(2,"months").endOf("month").startOf("day")):(e.date.add(a,"months"),e.range=moment().range(moment(e.date).startOf("month"),moment(e.date).endOf("month"))),l()},e.handlePickerClick=function(a){return null!=a&&"function"==typeof a.stopPropagation?a.stopPropagation():void 0},e.$watch("quick",function(a){return a&&a!==c?(e.selection=e.quick,e.selecting=!1,e.start=null,i(),l()):void 0}),e.$watch("customSelectOptions",function(a){return"undefined"!=typeof customSelectOptions&&null!==customSelectOptions?e.quickListDefinitions=a:void 0}),h=a(angular.element(d))(e),f.append(h),f.bind("click",function(a){return null!=a&&"function"==typeof a.stopPropagation&&a.stopPropagation(),e.$apply(function(){return e.visible?e.hide():e.show()})}),g=function(){return e.$apply(function(){return e.hide()}),!0},angular.element(document).bind("click",g),e.$on("$destroy",function(){return angular.element(document).unbind("click",g)}),k(),i(),l()}}}])}).call(this); \ No newline at end of file diff --git a/src/angular-date-range-picker.coffee b/src/angular-date-range-picker.coffee index 88ed1d1..309200f 100644 --- a/src/angular-date-range-picker.coffee +++ b/src/angular-date-range-picker.coffee @@ -60,31 +60,33 @@ angular.module("dateRangePicker").directive "dateRangePicker", ["$compile", "$ti model: "=ngModel" # can't use ngModelController, we need isolated scope customSelectOptions: "=" ranged: "=" + isoWeek: "=" pastDates: "@" callback: "&" link: ($scope, element, attrs) -> + $scope.localWeekUnitName = if $scope.isoWeek then "isoWeek" else "week" $scope.quickListDefinitions = $scope.customSelectOptions $scope.quickListDefinitions ?= [ { label: "This week", range: moment().range( - moment().startOf("week").startOf("day"), - moment().endOf("week").startOf("day") + moment().startOf($scope.localWeekUnitName).startOf("day"), + moment().endOf($scope.localWeekUnitName).startOf("day") ) } { label: "Next week", range: moment().range( - moment().startOf("week").add(1, "week").startOf("day"), - moment().add(1, "week").endOf("week").startOf("day") + moment().startOf($scope.localWeekUnitName).add(1, "week").startOf("day"), + moment().add(1, "week").endOf($scope.localWeekUnitName).startOf("day") ) } { label: "This fortnight", range: moment().range( - moment().startOf("week").startOf("day"), - moment().add(1, "week").endOf("week").startOf("day") + moment().startOf($scope.localWeekUnitName).startOf("day"), + moment().add(1, "week").endOf($scope.localWeekUnitName).startOf("day") ) } { @@ -154,7 +156,7 @@ angular.module("dateRangePicker").directive "dateRangePicker", ["$compile", "$ti _prepare = () -> $scope.months = [] startIndex = $scope.range.start.year()*12 + $scope.range.start.month() - startDay = moment().startOf("week").day() + startDay = moment().startOf($scope.localWeekUnitName).day() $scope.range.by "days", (date) -> d = date.day() - startDay diff --git a/test/index.html b/test/index.html index 3d9d4bb..67b10ad 100644 --- a/test/index.html +++ b/test/index.html @@ -37,7 +37,7 @@

Date range picker

{{ range.start.toDate() }} - {{ range.end.toDate() }}
- +