-
-
Save kstover/90cb03da447d0a7206ab982a239cd6d3 to your computer and use it in GitHub Desktop.
/* | |
* When our date picker loads, we want to modify some of picker settings. | |
* | |
* We want to: | |
* 1) Modify our month labels with a different string. | |
* 2) Disable specific dates so that they can't be selected. | |
* | |
* | |
* This object will listen to date pickers as they initialize so that we can modify settings. | |
*/ | |
var customDatePickerStuff = Marionette.Object.extend( { | |
initialize: function() { | |
/* | |
* Listen to our date pickers as they are created on the page. | |
*/ | |
this.listenTo( Backbone.Radio.channel( 'pikaday' ), 'init', this.modifyDatepicker ); | |
}, | |
modifyDatepicker: function( dateObject, fieldModel ) { | |
/* | |
* When we want to add or modify pikaday settings, we have to access those like: | |
* | |
* dateObject.pikaday._o.SETTING_NAME | |
* | |
* In the examples below, we'll use this to change pikaday settings. | |
*/ | |
/* | |
* This is how we modify the labels on our date picker calendar. | |
*/ | |
dateObject.pikaday._o.i18n = { | |
previousMonth : 'Month Before', | |
nextMonth : 'Month After', | |
months : ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], | |
weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], | |
weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] | |
}; | |
/* | |
* The disableDayFn pikaday setting lets us disable specifc days so that the user can't select them. | |
* | |
* Note that if a user manually enters a disabled date, the "invalid date" text will be shown. | |
* | |
* The function receieves the "date" variable which represents the date currently being rendered on the calendar. | |
* All the days of the month will be passed through this function. | |
* Returning boolean true will disable the specific date. | |
* | |
* In this example, we are setting an array of "disabled days" that we don't want to allow. | |
* If the date passed is in that array, we return true, which disables that day. | |
* | |
*/ | |
dateObject.pikaday._o.disableDayFn = function( date ) { | |
var disabledDays = ["2017-04-28", "2017-04-29", "2017-04-30"]; | |
if ( _.indexOf( disabledDays, moment( date ).format( "YYYY-MM-DD" ) ) !== -1 ) { | |
return true; | |
} | |
} | |
/* | |
* Reversing the logic above to check a list of "enabled days". | |
*/ | |
dateObject.pikaday._o.disableDayFn = function( date ) { | |
var enabled = ["2017-04-15", "2017-04-14", "2017-04-13"]; | |
if ( _.indexOf( enabled, moment( date ).format( "YYYY-MM-DD" ) ) === -1 ) { | |
return true; | |
} | |
} | |
/* | |
* Note that if you have both snippets above in your code, the second will always override the first. | |
*/ | |
} | |
}); | |
jQuery( document ).ready( function() { | |
new customDatePickerStuff(); | |
} ); |
for those who want to target a specific datepicker and not all of them, do something like this:
modifyDatepicker: function( dateObject, fieldModel ) {
if ( fieldModel.attributes.key == 'keyToTarget' ) {
// do somthing
} else if ( fieldModel.attributes.key == 'otherKeyToTarget' ) {
// do somthing
}
}
Thank you for posting this. The Disable on the weekends doesn't appear to be working. Is there a recent change that requires an update on this?
I'm also wondering if there's some way to have the minDate set to tomorrow. Like Date+1 or something. I'm a JS n00b.
I had tried the following, but it didn't work.
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
"minDate", tomorrow;
Hi there, I am using Ninja Forms and need to disable any past dates in the date picker. I never changed/overwrote a plugin, can anyone help me how I can disable past dates for the date picker?? Would be SO much appreciated!!
Thank you for posting this. The Disable on the weekends doesn't appear to be working. Is there a recent change that requires an update on this?
I'm also wondering if there's some way to have the minDate set to tomorrow. Like Date+1 or something. I'm a JS n00b.
I had tried the following, but it didn't work.
var tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); "minDate", tomorrow;
I used this to set 2 weeks in advance:
function addWeeks(date, weeks) {
date.setDate(date.getDate() + 7 * weeks);
return date;
}
Then, changed the code to dateObject.set("minDate", addWeeks(new Date(), 2) );
You could probably do something similar with days.
There is a deprecation Warning showing up after the latest update of NinjaForms.
Deprecated Ninja Forms Pikaday custom code detected.
Does anyone know how to adjust the code for future use?
@she-media-xyz Thank you!