From c4027a8d40b2a700dc4b934256b71470c005eaa9 Mon Sep 17 00:00:00 2001 From: bluppfisk Date: Tue, 5 Jul 2016 11:51:12 +0200 Subject: [PATCH 1/4] added nl_NL label translations nl_NL counts as nl_BE too btw --- lib/translations/nl_NL.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/translations/nl_NL.js b/lib/translations/nl_NL.js index 166c5497..cdd1e1a4 100644 --- a/lib/translations/nl_NL.js +++ b/lib/translations/nl_NL.js @@ -5,6 +5,10 @@ jQuery.extend( jQuery.fn.pickadate.defaults, { monthsShort: [ 'jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ], weekdaysFull: [ 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag' ], weekdaysShort: [ 'zo', 'ma', 'di', 'wo', 'do', 'vr', 'za' ], + labelMonthNext: 'Volgende maand', + labelMonthPrev: 'Vorige maand', + labelMonthSelect: 'Kies de maand', + labelYearSelect: 'Kies het jaar', today: 'vandaag', clear: 'verwijderen', close: 'sluiten', @@ -15,4 +19,4 @@ jQuery.extend( jQuery.fn.pickadate.defaults, { jQuery.extend( jQuery.fn.pickatime.defaults, { clear: 'verwijderen' -}); +}); \ No newline at end of file From 3afcd56311270f8be9346afd444552a4f49ca6e5 Mon Sep 17 00:00:00 2001 From: Sander Van de Moortel Date: Tue, 5 Jul 2016 18:10:38 +0200 Subject: [PATCH 2/4] added more options to disable dates --- lib/picker.date.js | 71 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 6 deletions(-) diff --git a/lib/picker.date.js b/lib/picker.date.js index b34e8739..a62782a8 100644 --- a/lib/picker.date.js +++ b/lib/picker.date.js @@ -250,11 +250,34 @@ DatePicker.prototype.create = function( type, value, options ) { } //DatePicker.prototype.create +// bluppfisk: This function calculates a number of working days (days) from a given date (dateUnit) + +function addWorkingDays(dateUnit, days) { + days = parseInt(days); + var wks = Math.floor(days/5); + // var dys = days.mod(5); + var dys = ((days%5)+5)%5; + var dy = dateUnit.getDay(); + var newDate = new Date; + + if (dy === 6 && dys > -1) { + if (dys === 0) {dys-=2; dy+=2;} + dys++; dy -= 6;} + if (dy === 0 && dys < 1) { + if (dys === 0) {dys+=2; dy-=2;} + dys--; dy += 6;} + if (dy + dys > 5) dys += 2; + if (dy + dys < 1) dys -= 2; + newDate.setDate(dateUnit.getDate()+wks*7+dys); + return newDate; +} + /** * Create a range limit object using an array, date object, * literal “true”, or integer relative to another time. + * bluppfisk: added the boolean toWorkingDays parameter */ -DatePicker.prototype.createRange = function( from, to ) { +DatePicker.prototype.createRange = function( from, to, toWorkingDays ) { var calendar = this, createDate = function( date ) { @@ -277,7 +300,11 @@ DatePicker.prototype.createRange = function( from, to ) { from = [ to.year, to.month, to.date + from ]; } else if ( _.isInteger( to ) && $.isPlainObject( from ) ) { - to = [ from.year, from.month, from.date + to ]; + if (toWorkingDays) { // bluppfisk: add working days instead of normal days (i.e. exclude Saturday and Sunday) + to = addWorkingDays(createDate( [from.year, from.month, from.date ] ).obj, to); + } else { + to = [ from.year, from.month, from.date + to ]; + } } return { @@ -286,15 +313,26 @@ DatePicker.prototype.createRange = function( from, to ) { } } //DatePicker.prototype.createRange - /** * Check if a date unit falls within a date range object. */ DatePicker.prototype.withinRange = function( range, dateUnit ) { - range = this.createRange(range.from, range.to) + workingDays = range.toWorkingDays || null; // bluppfisk: count working days instead of normal days if this is set + range = this.createRange(range.from, range.to, workingDays); return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick } +/** + * Bluppfisk: Check if a date falls within an even or odd week's disabled range. + */ + DatePicker.prototype.inEvenOddWeeks = function ( evenOddWeek, dateUnit, firstDay ) { + oddWeeks = evenOddWeek['oddWeeks']; + evenWeeks = evenOddWeek['evenWeeks']; + day = dateUnit['pick']; + weekday = ((day % 7) + (firstDay ? 0 : 1)) || 7; + return ( jQuery.inArray( weekday, ((getWeekNumber(day, firstDay) % 2 == 0) ? evenWeeks : oddWeeks )) != -1); + } + /** * Check if two date range objects overlap. @@ -546,7 +584,20 @@ DatePicker.prototype.validate = function( type, dateObject, options ) { return dateObject } //DatePicker.prototype.validate - +// bluppfisk: get week number function +function getWeekNumber(d, firstDay) { + // Copy date so don't modify original + d = new Date(+d); + d.setHours(0,0,0); + // Set to nearest Thursday: current date + 4 - current day number (depending on the firstDay setting) + d.setDate(d.getDate() + (firstDay ? 4 : 3) - (firstDay ? (d.getDay()||7) : (d.getDay()))); + // Get first day of year + var yearStart = new Date(d.getFullYear(),0,1); + // Calculate full weeks to nearest Thursday + var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7); + // Return week number + return weekNo; +} /** * Check if a date is disabled. */ @@ -570,7 +621,15 @@ DatePicker.prototype.disabled = function( dateToVerify ) { // If it’s an object, match a date within the “from” and “to” range. if ( $.isPlainObject( dateToDisable ) ) { - return calendar.withinRange( dateToDisable, dateToVerify ) + + // bluppfisk: verify whether it's a to-from range or an odd/even week weekday group + if ( 'to' in dateToDisable || 'from' in dateToDisable ) { + return calendar.withinRange( dateToDisable, dateToVerify ) + } + if ( 'oddWeeks' in dateToDisable || 'evenWeeks' in dateToDisable ) { + return calendar.inEvenOddWeeks( dateToDisable, dateToVerify, calendar.settings.firstDay ); + } + } }) From c860df96baa987a2f6e2c1607ebfa8d67f6974fd Mon Sep 17 00:00:00 2001 From: Sander Van de Moortel Date: Tue, 5 Jul 2016 18:20:49 +0200 Subject: [PATCH 3/4] solved some notation issues that made Travis fail --- lib/picker.date.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/picker.date.js b/lib/picker.date.js index a62782a8..8772dcb1 100644 --- a/lib/picker.date.js +++ b/lib/picker.date.js @@ -258,7 +258,7 @@ function addWorkingDays(dateUnit, days) { // var dys = days.mod(5); var dys = ((days%5)+5)%5; var dy = dateUnit.getDay(); - var newDate = new Date; + var newDate = new Date(); if (dy === 6 && dys > -1) { if (dys === 0) {dys-=2; dy+=2;} @@ -326,11 +326,11 @@ DatePicker.prototype.withinRange = function( range, dateUnit ) { * Bluppfisk: Check if a date falls within an even or odd week's disabled range. */ DatePicker.prototype.inEvenOddWeeks = function ( evenOddWeek, dateUnit, firstDay ) { - oddWeeks = evenOddWeek['oddWeeks']; - evenWeeks = evenOddWeek['evenWeeks']; - day = dateUnit['pick']; + oddWeeks = evenOddWeek.oddWeeks; + evenWeeks = evenOddWeek.evenWeeks; + day = dateUnit.pick; weekday = ((day % 7) + (firstDay ? 0 : 1)) || 7; - return ( jQuery.inArray( weekday, ((getWeekNumber(day, firstDay) % 2 == 0) ? evenWeeks : oddWeeks )) != -1); + return ( jQuery.inArray( weekday, ((getWeekNumber(day, firstDay) % 2 === 0) ? evenWeeks : oddWeeks )) != -1); } From 785445a867d0d9a66d06308f9298c9b6c37feef1 Mon Sep 17 00:00:00 2001 From: Sander Van de Moortel Date: Tue, 5 Jul 2016 21:18:45 +0200 Subject: [PATCH 4/4] date bugfix using getDay() --- lib/picker.date.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/picker.date.js b/lib/picker.date.js index 8772dcb1..dbf83237 100644 --- a/lib/picker.date.js +++ b/lib/picker.date.js @@ -328,8 +328,8 @@ DatePicker.prototype.withinRange = function( range, dateUnit ) { DatePicker.prototype.inEvenOddWeeks = function ( evenOddWeek, dateUnit, firstDay ) { oddWeeks = evenOddWeek.oddWeeks; evenWeeks = evenOddWeek.evenWeeks; - day = dateUnit.pick; - weekday = ((day % 7) + (firstDay ? 0 : 1)) || 7; + day = new Date(dateUnit.pick); + weekday = (day.getDay() + (firstDay ? 0 : 1)) || 7; //getDay is safer than mod 7, apparently return ( jQuery.inArray( weekday, ((getWeekNumber(day, firstDay) % 2 === 0) ? evenWeeks : oddWeeks )) != -1); }