rAF logic was introduced almost three years ago relative to this commit,
as a primary method for scheduling animation (see gh-1578 pull).
With it there was two substantial changes - one was explicitly mentioned
and the other was not.
First, if browser window was hidden aka `document.hidden === true`
it would immediately execute all scheduled animation without waiting
for time pass i.e. tick time become `0` instead of 13 ms of a default value.
Which created possibility for circular executions in case if `complete`
method executed the same animation (see gh-3434 issue).
And the second one - since then there was two ways of scheduling animation:
with `setInterval` and `requestAnimationFrame`, but there was a
difference in their execution.
In case of `setInterval` it waited default `jQuery.fx.interval` value before
actually starting the new tick, not counting the first step which wasn't
set to be executed through tick method (aka `jQuery.fx.tick`).
Whereas `requestAnimationFrame` first scheduled the call and executed
the `step` method right after that, counting the first call of
`jQuery.fx.timer`, `tick` was happening twice in one frame.
But since tests explicitly disabled rAF method i.e.
`requestAnimationFrame = null` and checking only `setInterval` logic,
since it's impossible to do it otherwise - we missed that change.
Faulty logic also was presented with `cancelAnimationFrame`, which couldn't
clear any timers since `raf` scheduler didn't define new `timerId` value.
Because that change was so subtle, apparently no user noticed it proving
that both `cancelAnimationFrame` and `clearInterval` code paths are redundant.
Since `cancelAnimationFrame` didn't work properly and rAF is and was a primary
used code path, plus the same approach is used in other popular animation libs.
Therefore those code paths were removed.
These changes also replace two different functions which schedule the animation
with one, which checks what type of logic should be used and executes it
appropriatley, but for secondary path it now uses `setTimeout` making it more
consistent with rAF path.
Since ticks are happening globally we also don't require to listen
`visibilitychange` event.
It also changes the way how first call is scheduled so execution of
animation will not happen twice in one frame.
No new tests were not introduced, since now `setTimeout` logic should be
equivalent to the rAF one, but one test was changed since now we actually
execute animation at the first tick.
Fixes gh-3434
Closes gh-3559
Notify full progress before resolving empty animations
Register animation callbacks before their ticker
Remove the right timer when immediately-done animations spawn more
Ref 9d822bc1c1
Fixes gh-3502
Fixes gh-3503
Closes gh-3496
1. Use the short name of the preset in the config.
2. Run ESLint first on non-minified files.
3. Explicitly specify environments in every config file (those settings cascade
which means we've been assuming a Node.js environment where we shouldn't have).
- Renames and changes rnotwhite to focus on HTML whitespace chars
- Change internal use of jQuery.trim to more accurate strip and collapse
- Adds tests to ensure HTML space characters are retained where valid
- Doesn't add tests where the difference is inconsequential and
existing tests are adequate.
Fixes gh-3003
Fixes gh-3072
Close gh-3316
Working around this problem would require us to skip setting whitespace-only
values except when they're valid which would be very fragile. Another option
would be to set the value and see if it succeeded and then react to that.
We've tried something like that in the past to be able to overwrite !important
styles (see 24e5879) but it broke the CSS cascade (see
https://bugs.jquery.com/ticket/14836#comment:5) and was triggering
MutationObserver callbacks too often so it was reverted in PR gh-1532.
Ref gh-3204
Ref gh-1532
- For compability reasons, we had already added the global
in AMD mode, but without noConflict. This adds back noConflict
to AMD (which fixes noConflict mode in the tests).
Fixes gh-2930
Progress parameters are now correctly propagated from a deferred to which
another deferred resolved unwrapping it.
Thanks to @gibson042 for the report and a clear description of the problem
and the needed fix.
Fixes gh-3062
Closes gh-3150
Attribute hooks are determined for the lowercase versions of attribute names
but this has not been reflected in the bool attribute hooks. The code that
temporarily removed a handler to avoid an infinite loop was removing an
incorrect handler causing stack overflow.
Fixes gh-3133
Refs gh-2914
Refs gh-2916
Closes gh-3134
One test in the attribute module was overwriting jQuery.expr.attrHandle.checked
and wasn't restoring the original state after it finished. It started causing
issues for another checked-related test.
Ref gh-2736
The exception stack has the name of the immediately outer function where the
exception occurred, which can be very handy for tracing errors. Since we already
have the exception object we might as well use it.
Fixes gh-3103
Fixes gh-1746
Closes gh-2860
- Removes the copy loop in jQuery.event.fix
- Avoids accessing properties such as client/offset/page/screen X/Y
which may cause style recalc or layouts
- Simplifies adding property hooks to event object
This commits backports some changes done in the patch to the then-existing
compat branch that removed support for old browsers and added some support
comments.
Refs 90d7cc1d8b
Support comments that were lacking the final IE/Edge version that exhibits
the bug were checked & updated. Links to the Chromium bug tracker were updated.
Code in tests related to unsupported browsers (like Android 2.3 in non-basic
tests) has been removed.
Fixes gh-2868
Closes gh-2949
This reverts commit 2d715940b9.
This commit provoked new issues: gh-2836, gh-2828.
At the meeting, we decided to revert offending commit
(in all three branches - 2.2-stable, 1.12-stable and master)
and tackle this issue in 3.x.
Fixes gh-2828
All deps were updated except:
* jsdom - tests using a Symbol polyfill are hacky and break with newer jsdom;
we need to re-do them properly first
* qunitjs - versions 1.19.0 & 1.20.0 introduce race conditions to the tests,
making the fail randomly
Those two packages will be updated once issues related to them get resolved.
Fixes gh-2877
Chromium < 35 incorrectly upper-cases µ; Android 4.4 uses such a version by
default (and its WebView, being un-updatable, will use it for eternity) so we
need to blacklist that one for the tests to pass.
Some Chrome versions newer than 30 but older than 42 display the "undefined is
not a function" error, not mentioning the function name. This has been fixed
in Chrome 42. Relax two tests to allow for this divergence in older Chromoiums.
This affects our Android 5.0 & Yandex.Browser testing.
- Ignore certain tests that obviously are not supported
- Beefed up the sortOrder, uniqueSort, isXMLDoc, and attr functions
Fixes gh-1742
Fixes gh-2048
Close gh-2703
Fixes gh-2302
Closes gh-2687
At the moment it's not possible to run the full event unit tests without aliases
so this was just tested with a custom build by running this one test.
Fixes gh-2498
Closes gh-2682
The added unit test shows how this could be used to support an
ArrayBuffer return, but $.ajax does not support it natively.
The goal with this change was to avoid the exception.
Unit test changes some uses of .show() and .hide() to .css( "display", ... ),
there was already an implicit assumption in several of the existing tests.
Fixes gh-2193
Close gh-2648
In ECMAScript 2015 (ES6), the native typeof operator returns "symbol"
for Symbol primitives. As it is possible to wrap symbols using the
Object constructor, symbols can be objects as well as any other
primitive type in JavaScript and should be determined by jQuery.type.
Closes gh-2627
* Changes "baar" to "bar" when used with "foo" in readme
and comments of js files
* mousenter -> mouseenter
Thanks @garysye, @KimTaehee
Closes gh-2613
Closes gh-2601
IE 8 doesn't have indexOf on arrays. Also, one toLowerCase() was missing. Oops.
This commit is not necessary on master but has been brought here to keep
tests similar in both branches.
(cherry-picked from 1b48eef4ca)
IE 8 prints tag names in upper case which was breaking some tests.
This commit is not necessary on master but has been brought here to keep
tests similar in both branches.
When loading basic tests don't load any others to not overload Android 2.3.
The drawback is that most tests are not selectable in the module dropdown
when the basic module is seelcted.
Refs 2c7e9c9349
The AJAX test performed in unreleasedXHR.html was scheduling PHP processes
sleeping for 10 minutes. When a lot of commits are tested in short intervals
this was causing build failures due to the drained php-fpm pool.
The 10 seconds sleep time should be enough for this test.
Refs 62acda819f
Android 2.3 doesn't fire the window.onerror handler, just accept the reality
there and skip the test.
Refs gh-1573
Refs gh-1786
Refs jquery/jquery.com#108
Closes gh-2458
Support comments that mentioned only Safari < 7 were checked & updated
to account for bugs existing in newer versions as well; Safari 6 support
test results were removed.
Refs gh-2482
Android 2.3 chokes on unquoted reserved words being used as property names
which was making Deferred tests not run.
Acknowledge the sad fact that Android 2.3 is not ES5-compliant browser
and enable the "es3" option in JSHint config.
Fixes gh-2478
Closes gh-2481
Make iterating over jQuery objects possible using ES 2015 for-of:
for ( node of $( "<div id=narwhal>" ) ) {
console.log( node.id ); // "narwhal"
}
Fixes gh-1693
This prevents jQuery from caching a prefixed property name if provided
directly by the user, e.g. the following code:
elem.css( "msTransform", "translate(5px, 2px)" );
should not prevent one from from later setting the transition directly:
elem.css( "transform", "translate(5px, 2px)" );
on a browser not understanding the unprefixed version which is the case
for Safari 8 & transform.
Fixes gh-2015
Closes gh-2298
- Reverts behavior from 10399dd, which we never released.
BR and inline elements are considered visible.
- The possibility of dropping .offsetWidth and .offsetHeight
was debunked by this perf:
http://jsperf.com/visible-hidden-and-getclientrects
Fixes gh-2227
Close gh-2281
There is a lot of logic in intro.js; now we test four cases:
1. (implicitly, via QUnit tests) A real browser with window being the global
2. Browserify where there are both global & window variables.
3. Node with jsdom where window is passed manually to the jQuery factory.
4. Pure Node with incorrect window passed; jQuery should throw then.
Previously the second & fourth case was not tested and the third was tested
in a way that interfered with the main test environment.
We now also test if in the Browserify case we're not creating a jQuery global
by default.
Fixes gh-2181
Closes gh-2234
Android 2.3 is very slow & times out a lot in async tests, they have to be
restarted multiple times to settle. Long test execution is not a huge problem
as Android 2.3 is tested only periodically during the night, unstable tests
are a bigger problem. This might mitigate that.
In a regular scenario almost all tests should pass so increasing the timeout
for all browsers shouldn't have a huge impact on overall test time.
Closes gh-2232
BrowserStack regularly has outdated Java in their IE instances causing our
data tests to hang & give no output. Skip the tests that create applets,
applets are treated in the same way as an embed elements which we're already
testing.
Fixes gh-1938
Closes gh-2166
IE10+ may return not exactly the offset.top value set in an offset callback
if parent has fractional top offset itself. Checking for being close to the
desired result fixes the test error.
Fixes gh-2147
- avoid explicit data.discard() cleanup calls
- explicitly remove the data.events property, only when private data exists
- reduces code footprint
Fixes gh-1734
Close gh-1428
QUnit update broke couple traversing and manipulation tests, since new qunit
added another form to the test-suite while some of
jQuery selectors weren't specific
Ref 2d5c5d213f
Android 2.3 resize the iframe by its content meaning it's not possible
to scroll the iframe only its parent element.
It seems (not confirmed) in android 4.0 it's not possible to scroll
iframes from the code
Fixes gh-1981
Ref 4ab8603669
This hack turns out to be needed by Android 4.0-4.3.
Add a support test so that the hack is invoked only where needed.
Refs gh-1815
Refs gh-1820
Closes gh-1842