From f10169e6f29b58095a203329614aefe86bbeae94 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 7 Feb 2026 22:27:13 +0100
Subject: [PATCH 1/6] Build: Bump the github-actions group with 3 updates
Bumps the github-actions group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-node](https://github.com/actions/setup-node) and [github/codeql-action](https://github.com/github/codeql-action).
Closes gh-2386
Updates `actions/checkout` from 6.0.1 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)
Updates `actions/setup-node` from 6.1.0 to 6.2.0
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/395ad3262231945c25e8478fd5baf05154b1d79f...6044e13b5dc448c55e2357c09f80417699197238)
Updates `github/codeql-action` from 4.31.9 to 4.32.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/5d4e8d1aca955e8d8589aabd499c5cae939e33c7...b20883b0cd1f46c72ae0ba6d1090936928f9fa30)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: 6.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: github-actions
- dependency-name: actions/setup-node
dependency-version: 6.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: github-actions
- dependency-name: github/codeql-action
dependency-version: 4.32.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: github-actions
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/browser-tests.yml | 12 ++++++------
.github/workflows/codeql-analysis.yml | 8 ++++----
.github/workflows/filestash.yml | 4 ++--
.github/workflows/node.js.yml | 4 ++--
4 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/.github/workflows/browser-tests.yml b/.github/workflows/browser-tests.yml
index 0fe975a25b..02b12b7823 100644
--- a/.github/workflows/browser-tests.yml
+++ b/.github/workflows/browser-tests.yml
@@ -31,10 +31,10 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
@@ -66,10 +66,10 @@ jobs:
name: jQuery stable
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
@@ -98,10 +98,10 @@ jobs:
name: jQuery stable
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 86b56ccde1..6aa645265e 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@@ -33,7 +33,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
+ uses: github/codeql-action/init@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
@@ -41,7 +41,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
+ uses: github/codeql-action/autobuild@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
# âšī¸ Command-line programs to run using the OS shell.
# đ https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -55,4 +55,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
+ uses: github/codeql-action/analyze@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
diff --git a/.github/workflows/filestash.yml b/.github/workflows/filestash.yml
index c6216af718..62d2199081 100644
--- a/.github/workflows/filestash.yml
+++ b/.github/workflows/filestash.yml
@@ -17,10 +17,10 @@ jobs:
name: Update Filestash
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml
index 42ab7824de..286c79887c 100644
--- a/.github/workflows/node.js.yml
+++ b/.github/workflows/node.js.yml
@@ -18,10 +18,10 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
+ uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
From d327be421cab87504c9f911eadccf45b334bae63 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?=
Date: Sun, 8 Feb 2026 22:09:35 +0100
Subject: [PATCH 2/6] Datepicker: Support init inside a delegated focus handler
in jQuery 4
jQuery 4.0+ follows native focus events order, meaning that `focusin`
is fired after `focus`. As delegated `focus` is implemented in jQuery
via `focusin`, `focus` handlers attached during a delegated `focus`
handler will not fire until the second time the field receives focus.
This is what the `_attachments` method does. To account for that, show
the datepicker if input is already focused. `_showDatepicker` checks
if the datepicker is already open, so it's not a problem that it
fires again as a `focus` handler in jQuery <4.
Note that the fact such an initialization worked inside of delegated
focus handlers was a result of an implementation detail in jQuery. If
a regular `focus` handler was used to initialize the datepicker, neither
jQuery 4.0 nor 3.x would show the datepicker. This issue is now fixed
as well.
Fixes gh-2385
Closes gh-2390
---
tests/unit/datepicker/core.js | 38 ++++++++++++++++++++++++++++++++++-
ui/widgets/datepicker.js | 23 +++++++++++++++++++++
2 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/tests/unit/datepicker/core.js b/tests/unit/datepicker/core.js
index edc16d005d..a8e394696f 100644
--- a/tests/unit/datepicker/core.js
+++ b/tests/unit/datepicker/core.js
@@ -29,7 +29,7 @@ QUnit.test( "initialization - Reinitialization after body had been emptied.", fu
QUnit.test( "widget method - empty collection", function( assert ) {
assert.expect( 1 );
$( "#nonExist" ).datepicker(); // Should create nothing
- assert.ok( !$( "#ui-datepicker-div" ).length, "Non init on empty collection" );
+ assert.strictEqual( $( "#ui-datepicker-div" ).length, 0, "Non init on empty collection" );
} );
QUnit.test( "widget method", function( assert ) {
@@ -540,4 +540,40 @@ QUnit.test( "mouse", function( assert ) {
"Mouse click inline - next" );
} );
+QUnit.test( "initialized on focus is immediately shown (gh-2385)", function( assert ) {
+ assert.expect( 2 );
+
+ var dp, dp2, inp, inp2, parent;
+
+ try {
+ inp = $( "#inp" );
+ parent = inp.parent();
+ parent.on( "focus", "#inp:not(.hasDatepicker)", function() {
+ testHelper.init( "#inp" );
+ dp = $( "#ui-datepicker-div" );
+ } );
+ inp.trigger( "focus" );
+ assert.equal( dp.css( "display" ), "block",
+ "Datepicker - visible (delegated focus)" );
+ } finally {
+ inp.datepicker( "destroy" );
+ }
+
+ try {
+ inp2 = $( "#inp2" );
+ inp2.on( "focus", function() {
+ if ( $( this ).hasClass( "hasDatepicker" ) ) {
+ return;
+ }
+ testHelper.init( "#inp2" );
+ dp2 = $( "#ui-datepicker-div" );
+ } );
+ inp2.trigger( "focus" );
+ assert.equal( dp2.css( "display" ), "block",
+ "Datepicker - visible (regular focus)" );
+ } finally {
+ inp2.datepicker( "destroy" );
+ }
+} );
+
} );
diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js
index 029f255e87..da70d5e00c 100644
--- a/ui/widgets/datepicker.js
+++ b/ui/widgets/datepicker.js
@@ -235,6 +235,22 @@ $.extend( Datepicker.prototype, {
if ( inst.settings.disabled ) {
this._disableDatepicker( target );
}
+
+ // Support: jQuery 4.0.0+
+ // jQuery 4.0+ follows native focus events order, meaning that `focusin`
+ // is fired after `focus`. As delegated `focus` is implemented in jQuery
+ // via `focusin`, `focus` handlers attached during a delegated `focus`
+ // handler will not fire until the second time the field receives focus.
+ // This is what the `_attachments` method does. To account for that, show
+ // the datepicker if input is already focused. `_showDatepicker` checks
+ // if the datepicker is already open, so it's not a problem that it
+ // fires again as a `focus` handler in jQuery <4.
+ //
+ // Note that the fact such an initialization worked inside of delegated
+ // focus handlers was a result of an implementation detail in jQuery. If
+ // a regular `focus` handler was used to initialize the datepicker, neither
+ // jQuery 4.0 nor 3.x would show the datepicker without the call below.
+ this._showDatepickerIfFocused( input );
},
/* Make attachments based on settings. */
@@ -594,6 +610,7 @@ $.extend( Datepicker.prototype, {
this._setDate( inst, date );
this._updateAlternate( inst );
this._updateDatepicker( inst );
+ this._showDatepickerIfFocused( target );
}
},
@@ -862,6 +879,12 @@ $.extend( Datepicker.prototype, {
}
},
+ _showDatepickerIfFocused: function( input ) {
+ if ( input.length && input.is( ":focus" ) ) {
+ this._showDatepicker( input[ 0 ] );
+ }
+ },
+
/* Generate the date picker content. */
_updateDatepicker: function( inst ) {
this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
From 5efe1a4da5667750df46bc7e337910128d93ff1b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?=
Date: Mon, 9 Feb 2026 19:03:15 +0100
Subject: [PATCH 3/6] Build: Use jQuery 4.0.0 for demos; update RequireJS from
2.1.14 to 2.3.8
Closes gh-2383
---
Gruntfile.js | 4 +-
bower.json | 4 +-
external/jquery/jquery.js | 4390 +++++++++++++--------------------
external/requirejs/require.js | 153 +-
4 files changed, 1792 insertions(+), 2759 deletions(-)
diff --git a/Gruntfile.js b/Gruntfile.js
index 7f40028731..db31ef4742 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -253,8 +253,8 @@ grunt.initConfig( {
"jquery-simulate/jquery.simulate.js": "jquery-simulate/jquery.simulate.js",
"jquery-simulate/LICENSE.txt": "jquery-simulate/LICENSE.txt",
- "jquery/jquery.js": "jquery-3.x/dist/jquery.js",
- "jquery/LICENSE.txt": "jquery-3.x/LICENSE.txt",
+ "jquery/jquery.js": "jquery/dist/jquery.js",
+ "jquery/LICENSE.txt": "jquery/LICENSE.txt",
"jquery-1.12.4/jquery.js": "jquery-1.12.4/dist/jquery.js",
"jquery-1.12.4/LICENSE.txt": "jquery-1.12.4/LICENSE.txt",
diff --git a/bower.json b/bower.json
index fa3f5e0092..b7b97cde5b 100644
--- a/bower.json
+++ b/bower.json
@@ -16,9 +16,9 @@
"jquery-mousewheel": "3.2.2",
"jquery-simulate": "1.1.1",
"qunit": "2.19.4",
- "requirejs": "2.1.14",
+ "requirejs": "2.3.8",
+ "jquery": "jquery#4.0.0",
"jquery-1.12.4": "jquery#1.12.4",
- "jquery-3.x": "jquery#3.7.1",
"jquery-2.2.4": "jquery#2.2.4",
"jquery-3.0.0": "jquery#3.0.0",
"jquery-3.1.0": "jquery#3.1.0",
diff --git a/external/jquery/jquery.js b/external/jquery/jquery.js
index 1a86433c22..097b088344 100644
--- a/external/jquery/jquery.js
+++ b/external/jquery/jquery.js
@@ -1,12 +1,12 @@
/*!
- * jQuery JavaScript Library v3.7.1
+ * jQuery JavaScript Library v4.0.0
* https://jquery.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
- * https://jquery.org/license
+ * https://jquery.com/license/
*
- * Date: 2023-08-28T13:37Z
+ * Date: 2026-01-18T00:20Z
*/
( function( global, factory ) {
@@ -16,19 +16,7 @@
// For CommonJS and CommonJS-like environments where a proper `window`
// is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket trac-14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
+ module.exports = factory( global, true );
} else {
factory( global );
}
@@ -36,29 +24,31 @@
// Pass this if window is not defined yet
} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
"use strict";
+if ( !window.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+}
+
var arr = [];
var getProto = Object.getPrototypeOf;
var slice = arr.slice;
+// Support: IE 11+
+// IE doesn't have Array#flat; provide a fallback.
var flat = arr.flat ? function( array ) {
return arr.flat.call( array );
} : function( array ) {
return arr.concat.apply( [], array );
};
-
var push = arr.push;
var indexOf = arr.indexOf;
+// [[Class]] -> type pairs
var class2type = {};
var toString = class2type.toString;
@@ -69,85 +59,64 @@ var fnToString = hasOwn.toString;
var ObjectFunctionString = fnToString.call( Object );
+// All support tests are defined in their respective modules.
var support = {};
-var isFunction = function isFunction( obj ) {
-
- // Support: Chrome <=57, Firefox <=52
- // In some browsers, typeof returns "function" for HTML