2681 Commits

Author SHA1 Message Date
Michał Gołębiowski-Owczarek
a7ac081009 Tests: Make tests not trigger Migrate 4.0.0-beta.1 warnings
Changes:
* Checkboxradio: Change `.attr( "checked", true )` to
  `.attr( "checked", "checked" )
* Selectmenu: Disable the `boolean-attributes` patch for one assertion where
  it's impossible to avoid

Closes gh-2364
2025-08-18 22:12:36 +02:00
Michał Gołębiowski-Owczarek
73d063677a Build: Test on jQuery 4.0.0-rc.1
When a stable 4.0.0 gets released, we'll remove the RC in favor of it.

Closes gh-2363
2025-08-12 21:54:16 +02:00
Michał Gołębiowski-Owczarek
89b0ecaaa3 Tabs: Properly handle decoded/encoded anchor hashes & panel IDs
Prior to jQuery UI 1.14.1, hashes in anchor hrefs were used directly. In
gh-2307, that was changed - by decoding - to support more complex IDs, e.g.
containing emojis which are automatically encoded in `anchor.hash`.
Unfortunately, that broke cases where the panel ID is decoded as well.

It turns out the spec mandates checking both. In the "scrolling to a fragment"
section of the HTML spec[^1]. That uses a concept of document's indicated
part[^2]. Slightly below there's an algorithm to compute the indicated part[^3].
The interesting parts are steps 4 to 9:
4. Let potentialIndicatedElement be the result of finding a potential
   indicated element given document and fragment.
5. If potentialIndicatedElement is not null, then return
   potentialIndicatedElement.
6. Let fragmentBytes be the result of percent-decoding fragment.
7. Let decodedFragment be the result of running UTF-8 decode without BOM on
   fragmentBytes.
8. Set potentialIndicatedElement to the result of finding a potential indicated
   element given document and decodedFragment.
9. If potentialIndicatedElement is not null, then return
   potentialIndicatedElement.

First, in steps 4-5, the algorithm tries the hash as-is, without decoding. Then,
if one is not found, the same is attempted with a decoded hash.

This change replicates this logic by first trying the hash as-is and then
decoding it.

Fixes gh-2344
Closes gh-2345
Ref gh-2307

[^1]: https://html.spec.whatwg.org/#scrolling-to-a-fragment
[^2]: https://html.spec.whatwg.org/#the-indicated-part-of-the-document
[^3]: https://html.spec.whatwg.org/#select-the-indicated-part
2025-03-31 18:51:37 +02:00
Michał Gołębiowski-Owczarek
53129e9cc7 Tabs: Support URL-based credentials
When credentials are provided directly in the URL, e.g.:

    https://username:password@www.example.com/

`location.href` strips out the auth part, but anchor links contain them, making
our `isLocal` computation broken. This fixes it by only looking at `origin`,
`pathname` & `search`.

Fixes gh-2213
Closes gh-2345
2025-03-31 18:51:37 +02:00
Michał Gołębiowski-Owczarek
44de3d325c Spinner: Prevent double mousewheel & wheel event handling
As of gh-2338, if one has loaded the jQuery MouseWheel plugin, the `mousewheel`
handler would fire the `wheel` one, but the `wheel` one would also run in
response to the native `wheel` event, resulting in double the distance handled
by the spinner. To prevent the issue, only fire the `wheel` handler from inside
the `mousewheel` on if the event was triggered by jQuery - jQuery will not care
that the underlying event is `wheel` and will only fire handlers for
`mousewheel`.

Also, add an iframe test using jQuery MouseWheel to not affect all the other
tests.

Plus, migrate from `QUnit.reset` to `QUnit.done` (see qunitjs/qunit#354).

Closes gh-2342
Ref gh-2338
2025-03-21 00:03:17 +01:00
Michał Gołębiowski-Owczarek
6843ced12e Spinner: Drop dependency on jQuery Mousewheel
1. Listen to the native `wheel` event without depending on any wrapper plugins.
2. Keep listening to the `mousewheel` event for compatibility with projects
   using the jQuery Mousewheel plugin but route it to the `wheel` handler.

Closes gh-2338
2025-03-18 11:45:00 +01:00
Michał Gołębiowski-Owczarek
ef28a5f570 Build: Remove an obsolete test/.eslintrc.json file
The file was erroneously left in during the migration to the flat config.

Closes gh-2340
Ref gh-2336
2025-03-18 09:35:16 +01:00
Timmy Willison
b685753660 Tests: Migrate test runner to jquery-test-runner
Closes gh-2325
2025-01-14 11:15:49 +01:00
Michał Gołębiowski-Owczarek
d591bdd494 Widget: Don't let widget name affect $.ui prototype & constructor
This is an edge case and it only affects code accepting untrusted input as
a widget name, but it's still technically correct to filter these out.

Closes gh-2310
2024-10-30 09:58:01 +01:00
Michał Gołębiowski-Owczarek
85bed8ddd8 Build: Fix an XSS in the test server HTML serving logic
The test server has a rule for `/tests/unit/*/*.html` paths that serves
a proper local file. However, the parameters after `/unit/` so far accepted
many characters that have special meaning, leading to possibly reading a file
from outside of the Git repository. Fix that by only accepting alphanumeric
characters, `-` or `_`.

This should resolve one CodeQL alert.

Closes gh-2309
2024-10-28 16:47:29 +01:00
Michał Gołębiowski-Owczarek
af8adca548 Tabs: Use CSS.escape for sanitizing selectors
The previous private `_sanitizeSelector` API was not correctly escaping
backslashes and is now removed. The native API should always be correct.

Closes gh-2307
2024-10-27 00:04:00 +02:00
Michał Gołębiowski-Owczarek
ebdcd0d866 Tests: Fix titles of jquery-patch.js tests
The pages were erroneously titled after "Form Reset Mixin".

Closes gh-2308
2024-10-25 23:46:00 +02:00
Michał Gołębiowski-Owczarek
b8fff16dc4 Demos: Remove deprecated button APIs
Remove usage of deprecated button options:
* `icons`: https://jqueryui.com/upgrade-guide/1.12/#deprecated-icons-options-in-favor-of-icon-and-iconposition
* `text`: https://jqueryui.com/upgrade-guide/1.12/#deprecated-text-option-in-favor-of-showlabel

Fixes gh-2295
Closes gh-2296
2024-09-30 18:05:22 +02:00
Michał Gołębiowski-Owczarek
36ed9fc3b0 Effect: Remove demos & visual tests of the transfer effect
The transfer effect is deprecated and not present unless `$.uiBackCompat` is set
to `true`. In previous UI versions, the default was including the backwards
compat layer so these demos & tests worked; now they do not by default. Just
remove them.

Fixes gh-2278
Closes gh-2291
2024-09-16 17:16:40 +02:00
Daniel García
c934995efa Resizable: Fix content shrink on resize
Make resizable elements not shrink on resize when they have scrollbars
and "box-sizing: content-box".

Fixes: gh-2277
Closes gh-2281
2024-09-09 23:51:57 +02:00
Ralf Koller
d564731f20 Dialog: Add option to put the dialog title in a header element
Implement a new option: `uiDialogTitleHeadingLevel`, allowing to change
the `span` wrapping the dialog title into a heading element (`h1`-`h6`).
Value `0` represents the `span`, values 1-6 - a heading at the specified
level.

Fixes gh-2271
Closes gh-2275
2024-09-09 17:55:58 +02:00
Michał Gołębiowski-Owczarek
fd1b8a03b2 Tests: Properly check $.uiBackCompat in common widget tests
The "common widget" tests, checking if a widget doesn't overwrite some
core widget APIs wasn't running as it was incorrectly checking for
`$.uiBackCompat === false` instead of `$.uiBackCompat !== true` after the
default changed in gh-2250.

Fixing the check uncovered that the draggable & sortable modules do
overwrite the `_trigger` method. Add an exception in the test for that;
at this stage of the project we don't plan to change the implementation.

Closes gh-2286
Ref gh-2250
2024-09-09 17:52:53 +02:00
Porter Clevidence
02a6e6bcb0 Datepicker: Hide the UI on destroy
When the datepicker UI is shown and then destroyed programmatically:
```js
$( "#datepicker" ).datepicker( "destroy" );
```
hide the datepicker UI without the need for an explicit user action.
Previously, in 1.12 the UI would not disappear immediately but only after the
first `mousedown`. In later 1.13 versions, the UI would not disappear at all.

Fixes gh-2178
Closes gh-2268
2024-08-05 19:30:53 +02:00
Michał Gołębiowski-Owczarek
cd41c45d91 Tests: Update jQuery Migrate from 3.4.1 to 3.5.2, simplify Migrate setup
Apart from updating jQuery Migrate, the setup is now changed so that exact
Migrate versions are only references when fetching npm packages; other than
that, they're represented as `jquery-migrate-1.x` & `jquery-migrate-3.x`. This
will allow smaller changes when updating jQuery Migrate in the future.

Closes gh-2273
2024-07-30 17:53:47 +02:00
Ralf Koller
376f142b9d Dialog: Add aria-modal support
Reflect the `modal` dialog option into the `aria-modal` attribute -
when `modal` is `true`, set `aria-modal` to `"true"`.

This helps some accessibility tools like VoiceOver with their rotor
functionality as it reduces the number of elements presented.

Fixes gh-2246
Closes gh-2257

Co-authored-by: Michał Gołębiowski-Owczarek <m.goleb@gmail.com>
2024-06-14 13:04:00 +02:00
Timmy Willison
1f251ca399 Tests: remove testswarm grunt task
Closes gh-2263
2024-06-11 18:05:06 +02:00
Timmy Willison
f47c7fe44d Tests: remove code supporting jenkins and testswarm
Close gh-2251
2024-05-15 15:19:23 -04:00
Michał Gołębiowski-Owczarek
5f615c275d Tests: Fix form-reset-mixin test module name, add to the tests HTML
Ref gh-2249
2024-05-15 00:38:40 +02:00
Michał Gołębiowski-Owczarek
03cde342cd All: Remove the deprecated ui/core.js file
Also, fix checkboxradio visual tests.

Ref gh-2249
2024-05-15 00:38:40 +02:00
Michał Gołębiowski-Owczarek
9887579b61 All: Stop relying on jquery-patch.js internally, add tests
Avoid relying on jQuery patches. Instead:
* use `CSS.escape` instead of `jQuery.escapeSelector`
* use `.filter()` with a proper handler instead of `.even()`

Keep `jquery-patch.js` for backwards compatibility, though.

Also, add tests for jquery-patch.

Ref gh-2249
2024-05-15 00:38:40 +02:00
Michał Gołębiowski-Owczarek
bb49bd794b All: Drop support for IE & some other browsers (but mostly IE)
Closes gh-2249
2024-05-15 00:38:40 +02:00
Michał Gołębiowski-Owczarek
daa6fb55b3 All: Drop support for jQueries different than the latest for each major
Also, remove the ability to run the test suite in jQuery <1.12.4 & <2.2.4.

Closes gh-2249
2024-05-15 00:38:30 +02:00
Michał Gołębiowski-Owczarek
ac8b1e4eee Core: Make back compat disabled by default
Closes gh-2250
2024-05-13 18:11:57 +02:00
Michał Gołębiowski-Owczarek
8e34aa6155 Docs: Update leftover HTTP Trac URLs to HTTPS 2024-04-26 17:28:11 +02:00
Michał Gołębiowski-Owczarek
4966aea381 Docs: Change a few most common domains from HTTP to HTTPS
Also, update a few stale URLs to what they redirect now to.

Closes gh-2244
2024-04-26 16:25:34 +02:00
Michał Gołębiowski-Owczarek
1374020009 Tests: Skip a problematic keyboard test in IE with jQuery 3.6
jQuery 3.6 has issues with focus handling in IE which breaks this test.
The issues were fixed in jQuery 3.7, so we just accept them here.

Closes gh-2231
2024-04-12 15:23:31 +02:00
Michał Gołębiowski-Owczarek
e7a0da63ea Tests: Increase robustness of a draggable revert test
One of the changes is increasing `revertDuration` from 200 to 300. For some
reason, when jQuery 3.1 is used in an iframe (which TestSwarm uses) the timings
are lower than expected and `setTimeout` too slow and the check for animation
happens too late.

Closes gh-2230
2024-04-12 15:23:05 +02:00
Michał Gołębiowski-Owczarek
ab2a2a973e Tests: Workaround a jQuery 1.8 issue with one dialog test
The test "#8958: dialog can be opened while opening" had special behavior in
jQuery 1.8 and the patch from commit 7adb13ac7c
broke those assumptions. Adjust the test so that it passes again.

Closes gh-2229
2024-04-12 15:22:05 +02:00
Timmy Willison
4af5caed7a Tests: align test runner with other repos
Close gh-2234
2024-04-09 13:31:27 -04:00
Timmy Willison
91df20be6b Tests: replace grunt-contrib-qunit with jQuery test runner
- add filestash workflow

Close gh-2221
2024-03-29 09:13:46 -04:00
Michał Gołębiowski-Owczarek
802642c373 Tests: Fix tests with the Git Core build
jQuery PR jquery/jquery#5452 removed special handling of boolean attributes.
Thankfully, this only broke a single jQuery UI test.

Closes gh-2220
2024-03-26 16:17:00 +01:00
Michał Gołębiowski-Owczarek
1be4538817 Build: Add jQuery 3.7.0 2023-05-12 00:48:38 +02:00
Michał Gołębiowski-Owczarek
ba249efb6b Tests: Workaround IE issues in qunit-assert-domequal
In IE, `option` elements may have different initial `option` colors.
They may initially all be transparent, but later the selected
option gets a blue background with white text; we now ignore it.

The logic of `qunit-assert-domequal` was also fixed to use the same
method of fetching styles in all browsers; IE used to get a legacy
one meant for IE <9 due to a mistake in the performed check.
2023-05-10 17:34:14 +02:00
Michał Gołębiowski-Owczarek
613b522e9a Tests: Make resizable tests a bit more forgiving 2023-05-10 17:34:14 +02:00
Michał Gołębiowski-Owczarek
b715135d11 Tests: Workaround a dialog test issue by a proper cleanup
The `#favorite-animal` focus & blur handlers used to not be cleaned up after
the test automatically, leading to issues with some jQuery versions.
2023-05-10 17:34:14 +02:00
Michał Gołębiowski-Owczarek
23655f0dbd Tests: Fix selectmenu width tests in Firefox with jQuery 3.0 & 3.1
jQuery 3.0 & 3.1 used `getBoundingClientRect()` in its `width`/`height`
calculations and that causes minor differences in fractional width computations.
Allow a tiny delta in tests to fix those tests breaking in Firefox.

Ref jquery/jquery#3561
Closes gh-2159
2023-05-10 10:56:02 +02:00
Michał Gołębiowski-Owczarek
020828e7ff Selectmenu: Fix selecting options following hidden ones
Change a2b25ef6ca made options with
the `hidden` attribute skipped when rendering. However, that makes
indexes misaligned with native options as hidden ones maintain their
index values. Instead, don't skip hidden options but add the `hidden`
attribute to the respective jQuery UI elements as well.

Fixes gh-2082
Closes gh-2144
Ref a2b25ef6ca
2023-05-10 10:55:01 +02:00
Michał Gołębiowski-Owczarek
beeb410ccb Build: Add jQuery 3.6.4, update Migrate to 3.4.1
Closes gh-2161
2023-05-10 10:54:31 +02:00
Michał Gołębiowski-Owczarek
546214e869 Build: Fork vendors to remove QUnit deprecated API usage
Changes:
* add `tests/lib/vendor/**/*` to `.eslintignore`
* move `qunit-composite` to `tests/lib` so that we can modify it
* move `qunit-assert-classes` to `tests/lib` so that we can modify it
* move `qunit-assert-close` to `tests/lib` so that we can modify it
* replace `assert.push` with `assert.pushResult`
* remove usage of `QUnit.extend`

Closes gh-2157
2023-05-10 10:53:57 +02:00
Michał Gołębiowski-Owczarek
360259e2b2 Tests: Make Puppeter really fire Chrome on macOS
Also, workaround issues with QUnit Chrome bridge: the Chrome bridge
from `grunt-contrib-qunit` is now getting injected into every single
iframe, including an empty one that has no intention of running QUnit
tests. Since that bridge requires QUnit, it fails with an error
in such cases. Workaround the issue by wrapping the bridge in
another function that bails early if QUnit is not defined.

Ref gh-2157
2023-05-10 10:53:57 +02:00
Michał Gołębiowski-Owczarek
f36fe9e50d Tests: Switch from QUnit.jsDump to QUnit.dump
`QUnit.jsDump` was renamed to `QUnit.dump` in QUnit 2.0.

Ref gh-2157
2023-05-10 10:53:57 +02:00
Michał Gołębiowski-Owczarek
9dc2bf9737 Tests: Fix tooltip tests by destroying tooltips
Some tests were not properly destroying tooltips which made tests
start to fail with the new QUnit.

Ref gh-2157
2023-05-10 10:53:57 +02:00
Michał Gołębiowski-Owczarek
0977ea1b48 Demos:Tests: Avoid self-closing HTML tags
Self-closing tags are reported by newer versions of the htmllint
Grunt plugin. They also don't make sense in our HTML files
since they are not XHTML-compliant and they run in HTML mode
anyway.

Ref gh-2157
2023-05-10 10:53:57 +02:00
Kenneth DeBacker
f8990e68e2 Tests: Test only valid values for Datepicker defaultDate, min/maxDate
The docs say that valid periods when using string value and
period pairs as relative dates are "y", "m", "w", and "d"
https://api.jqueryui.com/datepicker/

Closes gh-2143
2023-03-30 13:05:41 +02:00
Michał Gołębiowski-Owczarek
3286792ec5 Build: Add jQuery 3.6.1-3.6.3, update Migrate to 3.4.0 2023-01-15 21:41:18 +01:00