From d19d80e5e646ece9b18b1bf97cbd6df86b5147b9 Mon Sep 17 00:00:00 2001 From: porterclev Date: Tue, 9 Jul 2024 10:41:30 -0700 Subject: [PATCH 1/5] Datepicker: hides widget when destroyed Co-authored-by: DawnSovereign --- ui/widgets/datepicker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js index 6057605721..e14fc9c41f 100644 --- a/ui/widgets/datepicker.js +++ b/ui/widgets/datepicker.js @@ -423,6 +423,7 @@ $.extend( Datepicker.prototype, { nodeName = target.nodeName.toLowerCase(); $.removeData( target, "datepicker" ); + $.datepicker._hideDatepicker(); if ( nodeName === "input" ) { inst.append.remove(); inst.trigger.remove(); From 5e4f1b86296c5a977abc7efaff671ea9004d4d37 Mon Sep 17 00:00:00 2001 From: porterclev Date: Mon, 15 Jul 2024 10:29:48 -0700 Subject: [PATCH 2/5] Datepicker: removes div when destroyed Co-authored-by: DawnSovereign --- ui/widgets/datepicker.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js index e14fc9c41f..d0c8ad7d0c 100644 --- a/ui/widgets/datepicker.js +++ b/ui/widgets/datepicker.js @@ -423,7 +423,6 @@ $.extend( Datepicker.prototype, { nodeName = target.nodeName.toLowerCase(); $.removeData( target, "datepicker" ); - $.datepicker._hideDatepicker(); if ( nodeName === "input" ) { inst.append.remove(); inst.trigger.remove(); @@ -436,9 +435,11 @@ $.extend( Datepicker.prototype, { $target.removeClass( this.markerClassName ).empty(); } + inst.dpDiv.remove(); if ( datepicker_instActive === inst ) { datepicker_instActive = null; this._curInst = null; + this.dpDiv = null; } }, From 340941831cdb91d3f7f859c4fd45fce8a75c3605 Mon Sep 17 00:00:00 2001 From: porterclev Date: Mon, 22 Jul 2024 10:38:00 -0700 Subject: [PATCH 3/5] Datepicker: hides on destroy Co-authored-by: DawnSovereign --- tests/unit/datepicker/methods.js | 11 ++++++++++- ui/widgets/datepicker.js | 4 +--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/unit/datepicker/methods.js b/tests/unit/datepicker/methods.js index 32d6117488..d04d9bb402 100644 --- a/tests/unit/datepicker/methods.js +++ b/tests/unit/datepicker/methods.js @@ -11,7 +11,7 @@ var beforeAfterEach = testHelper.beforeAfterEach; QUnit.module( "datepicker: methods", beforeAfterEach() ); QUnit.test( "destroy", function( assert ) { - assert.expect( 35 ); + assert.expect( 39 ); var inl, inp = testHelper.init( "#inp" ), dp = $( "#ui-datepicker-div" ); @@ -21,6 +21,15 @@ QUnit.test( "destroy", function( assert ) { assert.equal( dp.css( "display" ), "block", "Datepicker - visible" ); inp.datepicker( "hide" ).datepicker( "destroy" ); assert.ok( $.datepicker._curInst == null, "Datepicker - destroyed and cleared reference" ); + assert.equal( dp.css( "display" ), "none", "Datepicker - absent" ); + + // Destroy Without Hiding + inp = testHelper.init( "#inp" ); + inp.datepicker( "show" ); + assert.equal( dp.css( "display" ), "block", "Datepicker - visible" ); + inp.datepicker( "destroy" ); + assert.ok( $.datepicker._curInst == null, "Datepicker - destroyed and cleared reference" ); + assert.equal( dp.css( "display" ), "none", "Datepicker - absent" ); inp = testHelper.init( "#inp" ); assert.ok( inp.is( ".hasDatepicker" ), "Default - marker class set" ); diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js index d0c8ad7d0c..a97575f4c2 100644 --- a/ui/widgets/datepicker.js +++ b/ui/widgets/datepicker.js @@ -434,12 +434,10 @@ $.extend( Datepicker.prototype, { } else if ( nodeName === "div" || nodeName === "span" ) { $target.removeClass( this.markerClassName ).empty(); } - - inst.dpDiv.remove(); + $.datepicker._hideDatepicker(); if ( datepicker_instActive === inst ) { datepicker_instActive = null; this._curInst = null; - this.dpDiv = null; } }, From ae27ec2fd91f0839293332e9aeee2f0aa3046adf Mon Sep 17 00:00:00 2001 From: porterclev Date: Tue, 23 Jul 2024 14:27:34 -0700 Subject: [PATCH 4/5] Datepicker: whitespace to re-trigger test Co-authored-by: DawnSovereign --- ui/widgets/datepicker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js index a97575f4c2..323723b893 100644 --- a/ui/widgets/datepicker.js +++ b/ui/widgets/datepicker.js @@ -434,6 +434,7 @@ $.extend( Datepicker.prototype, { } else if ( nodeName === "div" || nodeName === "span" ) { $target.removeClass( this.markerClassName ).empty(); } + $.datepicker._hideDatepicker(); if ( datepicker_instActive === inst ) { datepicker_instActive = null; From 7be414808e1bb7c0653b0b7ad6a4599885264a22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?= Date: Thu, 1 Aug 2024 11:13:00 +0200 Subject: [PATCH 5/5] Update tests/unit/datepicker/methods.js --- tests/unit/datepicker/methods.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/datepicker/methods.js b/tests/unit/datepicker/methods.js index d04d9bb402..ec83fb791b 100644 --- a/tests/unit/datepicker/methods.js +++ b/tests/unit/datepicker/methods.js @@ -23,7 +23,7 @@ QUnit.test( "destroy", function( assert ) { assert.ok( $.datepicker._curInst == null, "Datepicker - destroyed and cleared reference" ); assert.equal( dp.css( "display" ), "none", "Datepicker - absent" ); - // Destroy Without Hiding + // Destroy without manual hiding (ensure datepicker is hidden after calling destroy) inp = testHelper.init( "#inp" ); inp.datepicker( "show" ); assert.equal( dp.css( "display" ), "block", "Datepicker - visible" );