From de20614bd7332b740c6ec095e0e5c48c2f97c8bf Mon Sep 17 00:00:00 2001 From: Felix Nagel Date: Sun, 11 Dec 2016 23:10:26 +0100 Subject: [PATCH 1/3] Calendar: Make select and change event pass the current value --- tests/unit/calendar/events.js | 10 ++++++---- ui/widgets/calendar.js | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/unit/calendar/events.js b/tests/unit/calendar/events.js index 59508cb8a00..6dc2e5eefe4 100644 --- a/tests/unit/calendar/events.js +++ b/tests/unit/calendar/events.js @@ -12,12 +12,12 @@ QUnit.module( "calendar: events", { } ); QUnit.test( "change", function( assert ) { - assert.expect( 6 ); + assert.expect( 8 ); var shouldFire, eventType; this.element.calendar( { - change: function( event ) { + change: function( event, ui ) { assert.ok( shouldFire, "change event fired" ); assert.equal( event.type, @@ -29,6 +29,7 @@ QUnit.test( "change", function( assert ) { eventType, "change originalEvent on calendar button " + eventType ); + assert.equal( $.type( ui.value ), "date", "value is a date object" ); } } ); @@ -48,14 +49,14 @@ QUnit.test( "change", function( assert ) { } ); QUnit.test( "select", function( assert ) { - assert.expect( 6 ); + assert.expect( 8 ); var ready = assert.async(), that = this, message, eventType; this.element.calendar( { - select: function( event ) { + select: function( event, ui ) { assert.ok( true, "select event fired " + message ); assert.equal( event.type, @@ -67,6 +68,7 @@ QUnit.test( "select", function( assert ) { eventType, "select originalEvent " + message ); + assert.equal( $.type( ui.value ), "date", "value is a date object" ); } } ); diff --git a/ui/widgets/calendar.js b/ui/widgets/calendar.js index 538230bb681..0c961a3d710 100644 --- a/ui/widgets/calendar.js +++ b/ui/widgets/calendar.js @@ -134,13 +134,13 @@ return $.widget( "ui.calendar", { this._updateDayElement( "ui-state-active" ); // Allow datepicker to handle focus - if ( this._trigger( "select", event ) !== false ) { + if ( this._trigger( "select", event, { value: this.options.value } ) !== false ) { this.activeDescendant.closest( this.grid ).focus(); event.preventDefault(); } if ( oldValue !== this.options.value.getTime() ) { - this._trigger( "change", event ); + this._trigger( "change", event, { value: this.options.value } ); } }, From 8b864309f646f67f7fca88f87a9dea4fe5526aba Mon Sep 17 00:00:00 2001 From: Felix Nagel Date: Sun, 11 Dec 2016 23:10:46 +0100 Subject: [PATCH 2/3] Datepicker: Make select and change event pass the current value --- tests/unit/datepicker/events.js | 10 ++++++---- ui/widgets/datepicker.js | 12 +++++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/tests/unit/datepicker/events.js b/tests/unit/datepicker/events.js index 05ae7ed4d98..76615084caa 100644 --- a/tests/unit/datepicker/events.js +++ b/tests/unit/datepicker/events.js @@ -44,18 +44,19 @@ QUnit.test( "beforeOpen", function( assert ) { } ); QUnit.test( "change", function( assert ) { - assert.expect( 4 ); + assert.expect( 6 ); var shouldFire; this.element.datepicker( { - change: function( event ) { + change: function( event, ui ) { assert.ok( shouldFire, "change event fired" ); assert.equal( event.type, "datepickerchange", "change event" ); + assert.equal( $.type( ui.value ), "date", "value is a date object" ); } } ); @@ -121,19 +122,20 @@ QUnit.test( "open", function( assert ) { QUnit.test( "select", function( assert ) { var ready = assert.async(); - assert.expect( 4 ); + assert.expect( 6 ); var message = "", that = this; this.element.datepicker( { - select: function( event ) { + select: function( event, ui ) { assert.ok( true, "select event fired " + message ); assert.equal( event.originalEvent.type, "calendarselect", "select originalEvent " + message ); + assert.equal( $.type( ui.value ), "date", "value is a date object" ); } } ); diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js index b489fe9b7ef..1325434d3d0 100644 --- a/ui/widgets/datepicker.js +++ b/ui/widgets/datepicker.js @@ -111,14 +111,18 @@ var widget = $.widget( "ui.datepicker", { .calendar( $.extend( {}, this.options, { value: this._parse( this.element.val() ), change: function( event ) { - that._trigger( "change", event ); + that._trigger( "change", event, { + value: that.calendarInstance.valueAsDate() + } ); }, select: function( event ) { that.element.val( that.calendarInstance.value() ); that.close(); event.preventDefault(); that._focusTrigger(); - that._trigger( "select", event ); + that._trigger( "select", event, { + value: that.calendarInstance.valueAsDate() + } ); return false; } @@ -183,7 +187,9 @@ var widget = $.widget( "ui.datepicker", { this.suppressExpandOnFocus = false; }, change: function( event ) { - this._trigger( "change", event ); + this._trigger( "change", event, { + value: this.calendarInstance.valueAsDate() + } ); } }, From 767d1730403ff2d184717b43042d3ba98b71596c Mon Sep 17 00:00:00 2001 From: Felix Nagel Date: Sun, 11 Dec 2016 23:30:25 +0100 Subject: [PATCH 3/3] Calendar: Introduce refresh callback event --- tests/unit/calendar/common.js | 1 + tests/unit/calendar/events.js | 22 ++++++++++++++++++++++ tests/unit/datepicker/common.js | 1 + tests/unit/datepicker/events.js | 18 ++++++++++++++++++ ui/widgets/calendar.js | 3 +++ ui/widgets/datepicker.js | 3 ++- 6 files changed, 47 insertions(+), 1 deletion(-) diff --git a/tests/unit/calendar/common.js b/tests/unit/calendar/common.js index ea637a9b8d0..1f3a0fe215b 100644 --- a/tests/unit/calendar/common.js +++ b/tests/unit/calendar/common.js @@ -37,6 +37,7 @@ common.testWidget( "calendar", { // callbacks change: null, create: null, + refresh: null, select: null } } ); diff --git a/tests/unit/calendar/events.js b/tests/unit/calendar/events.js index 6dc2e5eefe4..7148ff343a9 100644 --- a/tests/unit/calendar/events.js +++ b/tests/unit/calendar/events.js @@ -98,4 +98,26 @@ QUnit.test( "select", function( assert ) { step1(); } ); +QUnit.test( "refresh", function( assert ) { + assert.expect( 2 ); + + var shouldFire; + + this.element.calendar( { + refresh: function() { + assert.ok( shouldFire, "refresh event fired" ); + } + } ); + + shouldFire = true; + this.element.find( "button.ui-calendar-next" ).simulate( "click" ); + + shouldFire = false; + this.element.find( "table button:eq(1)" ).simulate( "click" ); + + testHelper.focusGrid( this.element ).simulate( "keydown", { keyCode: $.ui.keyCode.END } ); + shouldFire = true; + testHelper.focusGrid( this.element ).simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); +} ); + } ); diff --git a/tests/unit/datepicker/common.js b/tests/unit/datepicker/common.js index 527ddcbf341..6b0b0487dca 100644 --- a/tests/unit/datepicker/common.js +++ b/tests/unit/datepicker/common.js @@ -46,6 +46,7 @@ common.testWidget( "datepicker", { close: null, create: null, open: null, + refresh: null, select: null } } ); diff --git a/tests/unit/datepicker/events.js b/tests/unit/datepicker/events.js index 76615084caa..5a923d252fe 100644 --- a/tests/unit/datepicker/events.js +++ b/tests/unit/datepicker/events.js @@ -180,4 +180,22 @@ QUnit.test( "select", function( assert ) { step1(); } ); +QUnit.test( "refresh", function( assert ) { + assert.expect( 1 ); + + var shouldFire; + + this.element.calendar( { + refresh: function() { + assert.ok( shouldFire, "refresh event fired" ); + } + } ); + + shouldFire = true; + this.element.find( "button.ui-calendar-next" ).simulate( "click" ); + + shouldFire = false; + this.element.find( "table button:eq(1)" ).simulate( "click" ); +} ); + } ); diff --git a/ui/widgets/calendar.js b/ui/widgets/calendar.js index 0c961a3d710..31a650d0ec2 100644 --- a/ui/widgets/calendar.js +++ b/ui/widgets/calendar.js @@ -73,6 +73,7 @@ return $.widget( "ui.calendar", { // callbacks change: null, + refresh: null, select: null }, @@ -595,6 +596,8 @@ return $.widget( "ui.calendar", { this._setActiveDescendant(); this._refreshHeaderButtons(); this._createButtons(); + + this._trigger( "refresh" ); }, _refreshHeaderButtons: function() { diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js index 1325434d3d0..48926ff72b4 100644 --- a/ui/widgets/datepicker.js +++ b/ui/widgets/datepicker.js @@ -55,11 +55,12 @@ var widget = $.widget( "ui.datepicker", { change: null, close: null, open: null, + refresh: null, select: null }, calendarOptions: [ "buttons", "classes", "disabled", "dateFormat", "eachDay", - "icons", "labels", "locale", "max", "min", "numberOfMonths", "showWeek" ], + "icons", "labels", "locale", "max", "min", "numberOfMonths", "showWeek", "refresh" ], _create: function() { this.suppressExpandOnFocus = false;