Skip to content

Datepicker: Add option for onUpdateDatepicker callback #1912

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 23 additions & 2 deletions tests/unit/datepicker/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -793,7 +793,9 @@ var beforeShowThis = null,
beforeShowInput = null,
beforeShowInst = null,
beforeShowDayThis = null,
beforeShowDayOK = true;
beforeShowDayOK = true,
onUpdateDatepickerThis = null,
onUpdateDatepickerInst = null;

function beforeAll( input, inst ) {
beforeShowThis = this;
Expand All @@ -810,8 +812,14 @@ function beforeDay( date ) {
( date.getDate() % 3 === 0 ? "Divisble by 3" : "" ) ];
}

function onUpdateDatepicker( inst ) {
onUpdateDatepickerThis = this;
onUpdateDatepickerInst = inst;
inst.dpDiv.append( $( "<div>" ).addClass( "on-update-datepicker-test" ) );
}

QUnit.test( "callbacks", function( assert ) {
assert.expect( 13 );
assert.expect( 18 );

// Before show
var dp, day20, day21,
Expand Down Expand Up @@ -840,6 +848,19 @@ QUnit.test( "callbacks", function( assert ) {
assert.ok( !day20.attr( "title" ), "Before show day - title 20" );
assert.ok( day21.attr( "title" ) === "Divisble by 3", "Before show day - title 21" );
inp.datepicker( "hide" ).datepicker( "destroy" );

inp = testHelper.init( "#inp", { onUpdateDatepicker: onUpdateDatepicker } );
inst = $.data( inp[ 0 ], "datepicker" );
dp = $( "#ui-datepicker-div" );
inp.val( "02/04/2008" ).datepicker( "show" );
assert.ok( onUpdateDatepickerThis.id === inp[ 0 ].id, "On update datepicker - this OK" );
assert.deepEqual( onUpdateDatepickerInst, inst, "On update datepicker - inst OK" );
assert.ok( dp.find( "div.on-update-datepicker-test" ).length === 1, "On update datepicker - custom element" );
inp.datepicker( "setDate", "02/05/2008" );
assert.ok( dp.find( "div.on-update-datepicker-test" ).length === 1, "On update datepicker - custom element after setDate" );
inp.datepicker( "refresh" );
assert.ok( dp.find( "div.on-update-datepicker-test" ).length === 1, "On update datepicker - custom element after refresh" );
inp.datepicker( "hide" ).datepicker( "destroy" );
} );

QUnit.test( "beforeShowDay - tooltips with quotes", function( assert ) {
Expand Down
8 changes: 7 additions & 1 deletion ui/widgets/datepicker.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ function Datepicker() {
onSelect: null, // Define a callback function when a date is selected
onChangeMonthYear: null, // Define a callback function when the month or year is changed
onClose: null, // Define a callback function when the datepicker is closed
onUpdateDatepicker: null, // Define a callback function when the datepicker is updated
numberOfMonths: 1, // Number of months to show at a time
showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
stepMonths: 1, // Number of months to step back/forward
Expand Down Expand Up @@ -832,7 +833,8 @@ $.extend( Datepicker.prototype, {
numMonths = this._getNumberOfMonths( inst ),
cols = numMonths[ 1 ],
width = 17,
activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ),
onUpdateDatepicker = $.datepicker._get( inst, "onUpdateDatepicker" );

if ( activeCell.length > 0 ) {
datepicker_handleMouseover.apply( activeCell.get( 0 ) );
Expand Down Expand Up @@ -863,6 +865,10 @@ $.extend( Datepicker.prototype, {
origyearshtml = inst.yearshtml = null;
}, 0 );
}

if ( onUpdateDatepicker ) {
onUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] );
}
},

// #6694 - don't focus the input if it's already focused
Expand Down