aboutsummaryrefslogtreecommitdiffstats
BranchCommit messageAuthorAge
gh-314Reproduce #314Alexander Kriegisch6 months
masterSet version to 1.9.23-SNAPSHOTAlexander Kriegisch8 months
antoraMove source code examples to Antora examples directoryAlexander Kriegisch11 months
java-21Bump JDT Core to 1.9.21.RC1Alexander Kriegisch13 months
dependabot/maven/org.apache.maven.plugins-maven-clean-plugin-3.3.1Bump maven-clean-plugin from 3.1.0 to 3.3.1dependabot[bot]19 months
dependabot/maven/org.apache.maven.plugins-maven-gpg-plugin-3.1.0Bump maven-gpg-plugin from 1.6 to 3.1.0dependabot[bot]20 months
dependabot/maven/org.apache.maven.plugins-maven-javadoc-plugin-3.5.0Bump maven-javadoc-plugin from 3.2.0 to 3.5.0dependabot[bot]21 months
dependabot/maven/org.apache.maven.plugins-maven-help-plugin-3.4.0Bump maven-help-plugin from 3.2.0 to 3.4.0dependabot[bot]21 months
dependabot/maven/org.apache.maven.plugins-maven-compiler-plugin-3.11.0Bump maven-compiler-plugin from 3.8.1 to 3.11.0dependabot[bot]21 months
dependabot/maven/org.codehaus.mojo-flatten-maven-plugin-1.4.0Bump flatten-maven-plugin from 1.2.2 to 1.4.0dependabot[bot]22 months
dependabot/maven/org.apache.maven.plugins-maven-assembly-plugin-3.5.0Bump maven-assembly-plugin from 3.1.1 to 3.5.0dependabot[bot]22 months
gh-217Further improve indentation of compilation results on the consoleAlexander Kriegisch23 months
dependabot/maven/com.thoughtworks.xstream-xstream-1.4.20Bump xstream from 1.4.15 to 1.4.20dependabot[bot]2 years
dependabot/maven/org.codehaus.mojo-build-helper-maven-plugin-3.3.0Bump build-helper-maven-plugin from 3.2.0 to 3.3.0dependabot[bot]3 years
dependabot/maven/commons-logging-commons-logging-1.2Bump commons-logging from 1.0.1 to 1.2dependabot[bot]3 years
V1_8_XrebuiltAndy Clement6 years
1.8.xFix AspectJ 1.8.x fails with modular and multi-release JARsAndy Clement6 years
maven_buildpolish - fix some warningsAndy Clement6 years
param_anno_matching_changewipAndy Clement7 years
RB_V1_8remove rogue printlnAndy Clement7 years
earlyJava9bump compiler.name for rc2Andy Clement7 years
paramAnnotationBinding259416: preliminary workAndy Clement8 years
bug433351work in progressAndy Clement11 years
BETA_JAVA8tidying up testsAndy Clement11 years
java8first pass at j8 infrastructureAndy Clement12 years
V1_6_Xup'd to 1.6.13Andy Clement12 years
bug356694Some preliminary work on this bugAndy Clement12 years
356694testcode 356594Andy Clement12 years
invokedynamicinvokedynamic tidyup - handle calling getClassname on itAndy Clement13 years
transientTjpsupport -Xset:makeTjpFieldsTransient=trueAndy Clement13 years
conditionalThisenable this?() syntaxAndy Clement13 years
originspellingaclement13 years
refactoring210470 merged into refactoring branchaclement17 years
extensionsrogue debug message removedaclement17 years
verificationverification prototype codeaclement18 years
RB_V_1_5_2added comment for change in 1.5.2aacolyer18 years
RB_V1_5_0doc fix for @DeclareParentsacolyer19 years
AspectJ5_Developmentfix license header as requiredavasseur20 years
ajdt_supportchanges from HEAD + updates for building inside eclipseacolyer21 years
 
TagDownloadAuthorAge
V1_9_22_1aspectj-1_9_22_1.tar.gz  aspectj-1_9_22_1.zip  Alexander Kriegisch8 months
V1_9_22aspectj-1_9_22.tar.gz  aspectj-1_9_22.zip  Alexander Kriegisch9 months
V1_9_21_2aspectj-1_9_21_2.tar.gz  aspectj-1_9_21_2.zip  Alexander Kriegisch10 months
V1_9_21_1aspectj-1_9_21_1.tar.gz  aspectj-1_9_21_1.zip  Alexander Kriegisch11 months
V1_9_21aspectj-1_9_21.tar.gz  aspectj-1_9_21.zip  Alexander Kriegisch13 months
V1_9_21_RC1aspectj-1_9_21_RC1.tar.gz  aspectj-1_9_21_RC1.zip  Alexander Kriegisch13 months
V1_9_21_M1aspectj-1_9_21_M1.tar.gz  aspectj-1_9_21_M1.zip  Alexander Kriegisch14 months
V1_9_20_1aspectj-1_9_20_1.tar.gz  aspectj-1_9_20_1.zip  Alexander Kriegisch16 months
V1_9_20aspectj-1_9_20.tar.gz  aspectj-1_9_20.zip  Alexander Kriegisch17 months
V1_9_19aspectj-1_9_19.tar.gz  aspectj-1_9_19.zip  Alexander Kriegisch2 years
V1_9_9_1aspectj-1_9_9_1.tar.gz  aspectj-1_9_9_1.zip  Alexander Kriegisch3 years
V1_9_9aspectj-1_9_9.tar.gz  aspectj-1_9_9.zip  Alexander Kriegisch3 years
V1_9_8aspectj-1_9_8.tar.gz  aspectj-1_9_8.zip  Alexander Kriegisch3 years
V1_9_8_RC3aspectj-1_9_8_RC3.tar.gz  aspectj-1_9_8_RC3.zip  Alexander Kriegisch3 years
V1_9_8_RC2aspectj-1_9_8_RC2.tar.gz  aspectj-1_9_8_RC2.zip  Alexander Kriegisch3 years
V1_9_8_RC1aspectj-1_9_8_RC1.tar.gz  aspectj-1_9_8_RC1.zip  Alexander Kriegisch3 years
V1_9_8_M1aspectj-1_9_8_M1.tar.gz  aspectj-1_9_8_M1.zip  Alexander Kriegisch3 years
V1_9_7aspectj-1_9_7.tar.gz  aspectj-1_9_7.zip  Andy Clement4 years
V1_9_7_M3aspectj-1_9_7_M3.tar.gz  aspectj-1_9_7_M3.zip  Alexander Kriegisch4 years
V1_9_7_M2aspectj-1_9_7_M2.tar.gz  aspectj-1_9_7_M2.zip  Alexander Kriegisch4 years
java16-add-opensaspectj-java16-add-opens.tar.gz  aspectj-java16-add-opens.zip  Alexander Kriegisch4 years
V1_9_7M1aspectj-1_9_7M1.tar.gz  
import { jQuery } from "./core.js";
import { document } from "./var/document.js";
import { rcssNum } from "./var/rcssNum.js";
import { rnothtmlwhite } from "./var/rnothtmlwhite.js";
import { cssExpand } from "./css/var/cssExpand.js";
import { isHiddenWithinTree } from "./css/var/isHiddenWithinTree.js";
import { adjustCSS } from "./css/adjustCSS.js";
import { cssCamelCase } from "./css/cssCamelCase.js";
import { dataPriv } from "./data/var/dataPriv.js";
import { showHide } from "./css/showHide.js";

import "./core/init.js";
import "./queue.js";
import "./deferred.js";
import "./traversing.js";
import "./manipulation.js";
import "./css.js";
import "./effects/Tween.js";

var
	fxNow, inProgress,
	rfxtypes = /^(?:toggle|show|hide)$/,
	rrun = /queueHooks$/;

function schedule() {
	if ( inProgress ) {
		if ( document.hidden === false && window.requestAnimationFrame ) {
			window.requestAnimationFrame( schedule );
		} else {
			window.setTimeout( schedule, 13 );
		}

		jQuery.fx.tick();
	}
}

// Animations created synchronously will run synchronously
function createFxNow() {
	window.setTimeout( function() {
		fxNow = undefined;
	} );
	return ( fxNow = Date.now() );
}

// Generate parameters to create a standard animation
function genFx( type, includeWidth ) {
	var which,
		i = 0,
		attrs = { height: type };

	// If we include width, step value is 1 to do all cssExpand values,
	// otherwise step value is 2 to skip over Left and Right
	includeWidth = includeWidth ? 1 : 0;
	for ( ; i < 4; i += 2 - includeWidth ) {
		which = cssExpand[ i ];
		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
	}

	if ( includeWidth ) {
		attrs.opacity = attrs.width = type;
	}

	return attrs;
}

function createTween( value, prop, animation ) {
	var tween,
		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
		index = 0,
		length = collection.length;
	for ( ; index < length; index++ ) {
		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {

			// We're done with this property
			return tween;
		}
	}
}

function defaultPrefilter( elem, props, opts ) {
	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
		isBox = "width" in props || "height" in props,
		anim = this,
		orig = {},
		style = elem.style,
		hidden = elem.nodeType && isHiddenWithinTree( elem ),
		dataShow = dataPriv.get( elem, "fxshow" );

	// Queue-skipping animations hijack the fx hooks
	if ( !opts.queue ) {
		hooks = jQuery._queueHooks( elem, "fx" );
		if ( hooks.unqueued == null ) {
			hooks.unqueued = 0;
			oldfire = hooks.empty.fire;
			hooks.empty.fire = function() {
				if ( !hooks.unqueued ) {
					oldfire();
				}
			};
		}
		hooks.unqueued++;

		anim.always( function() {

			// Ensure the complete handler is called before this completes
			anim.always( function() {
				hooks.unqueued--;
				if ( !jQuery.queue( elem, "fx" ).length ) {
					hooks.empty.fire();
				}
			} );
		} );
	}

	// Detect show/hide animations
	for ( prop in props ) {
		value = props[ prop ];
		if ( rfxtypes.test( value ) ) {
			delete props[ prop ];
			toggle = toggle || value === "toggle";
			if ( value === ( hidden ? "hide" : "show" ) ) {

				// Pretend to be hidden if this is a "show" and
				// there is still data from a stopped show/hide
				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
					hidden = true;

				// Ignore all other no-op show/hide data
				} else {
					continue;
				}
			}
			orig[ prop ] = dataShow && dataShow[ paspectj-PRE_PIPELINE.zip  
mwebster18 years
V1_5_2_finalaspectj-1_5_2_final.tar.gz  aspectj-1_5_2_final.zip  aclement19 years
V1_5_2rc1aspectj-1_5_2rc1.tar.gz  aspectj-1_5_2rc1.zip  acolyer19 years
V1_5_1a_finalaspectj-1_5_1a_final.tar.gz  aspectj-1_5_1a_final.zip  acolyer19 years
V1_5_1_finalaspectj-1_5_1_final.tar.gz  aspectj-1_5_1_final.zip  aclement19 years
POST_MEMORY_CHANGESaspectj-POST_MEMORY_CHANGES.tar.gz  aspectj-POST_MEMORY_CHANGES.zip  aclement19 years
V1_5_0_finalaspectj-1_5_0_final.tar.gz  aspectj-1_5_0_final.zip  aclement19 years
Root_RB_V1_5_0aspectj-Root_RB_V1_5_0.tar.gz  aspectj-Root_RB_V1_5_0.zip  aclement19 years
V1_5_0RC1aspectj-1_5_0RC1.tar.gz  aspectj-1_5_0RC1.zip  aclement19 years
V1_5_0M4aspectj-1_5_0M4.tar.gz  aspectj-1_5_0M4.zip  acolyer19 years
preDefaultReweavableaspectj-preDefaultReweavable.tar.gz  aspectj-preDefaultReweavable.zip  acolyer19 years
V1_5_0M3aaspectj-1_5_0M3a.tar.gz  aspectj-1_5_0M3a.zip  acolyer19 years
V1_5_0M3aspectj-1_5_0M3.tar.gz  aspectj-1_5_0M3.zip  mkersten19 years
PRE_ANDYaspectj-PRE_ANDY.tar.gz  aspectj-PRE_ANDY.zip  aclement19 years
V1_5_0M2aspectj-1_5_0M2.tar.gz  aspectj-1_5_0M2.zip  acolyer20 years
Root_AspectJ5_Developmentaspectj-Root_AspectJ5_Development.tar.gz  aspectj-Root_AspectJ5_Development.zip  aclement20 years
V1_2_1aspectj-1_2_1.tar.gz  aspectj-1_2_1.zip  aclement20 years
for_ajdt1_1_12aspectj-for_ajdt1_1_12.tar.gz  aspectj-for_ajdt1_1_12.zip  aclement20 years
V1_2_0aspectj-1_2_0.tar.gz  aspectj-1_2_0.zip  aclement21 years
Root_ajdt_supportaspectj-Root_ajdt_support.tar.gz  aspectj-Root_ajdt_support.zip  acolyer21 years
v_preCompileLoopAlterationaspectj-v_preCompileLoopAlteration.tar.gz  aspectj-v_preCompileLoopAlteration.zip  mkersten21 years
mostlyLastEclipse2xTree_20040112aspectj-mostlyLastEclipse2xTree_20040112.tar.gz  aspectj-mostlyLastEclipse2xTree_20040112.zip  wisberg21 years
V1_1_1aspectj-1_1_1.tar.gz  aspectj-1_1_1.zip  acolyer21 years
V1_1_0aspectj-1_1_0.tar.gz  aspectj-1_1_0.zip  acolyer22 years
V1_1_0_RC2aspectj-1_1_0_RC2.tar.gz  aspectj-1_1_0_RC2.zip  acolyer22 years
v1_1_0_RC1aspectj-1_1_0_RC1.tar.gz  aspectj-1_1_0_RC1.zip  jhugunin22 years
V_1_1_b5aspectj-V_1_1_b5.tar.gz  aspectj-V_1_1_b5.zip  wisberg22 years
V_1_1_b2aspectj-V_1_1_b2.tar.gz  aspectj-V_1_1_b2.zip  wisberg22 years
initial_CPLaspectj-initial_CPL.tar.gz  aspectj-initial_CPL.zip  wisberg22 years
pan> = "inline-block"; } } } if ( opts.overflow ) { style.overflow = "hidden"; anim.always( function() { style.overflow = opts.overflow[ 0 ]; style.overflowX = opts.overflow[ 1 ]; style.overflowY = opts.overflow[ 2 ]; } ); } // Implement show/hide animations propTween = false; for ( prop in orig ) { // General show/hide setup for this element animation if ( !propTween ) { if ( dataShow ) { if ( "hidden" in dataShow ) { hidden = dataShow.hidden; } } else { dataShow = dataPriv.set( elem, "fxshow", { display: restoreDisplay } ); } // Store hidden/visible for toggle so `.stop().toggle()` "reverses" if ( toggle ) { dataShow.hidden = !hidden; } // Show elements before animating them if ( hidden ) { showHide( [ elem ], true ); } // eslint-disable-next-line no-loop-func anim.done( function() { // The final step of a "hide" animation is actually hiding the element if ( !hidden ) { showHide( [ elem ] ); } dataPriv.remove( elem, "fxshow" ); for ( prop in orig ) { jQuery.style( elem, prop, orig[ prop ] ); } } ); } // Per-property setup propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); if ( !( prop in dataShow ) ) { dataShow[ prop ] = propTween.start; if ( hidden ) { propTween.end = propTween.start; propTween.start = 0; } } } } function propFilter( props, specialEasing ) { var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass for ( index in props ) { name = cssCamelCase( index ); easing = specialEasing[ name ]; value = props[ index ]; if ( Array.isArray( value ) ) { easing = value[ 1 ]; value = props[ index ] = value[ 0 ]; } if ( index !== name ) { props[ name ] = value; delete props[ index ]; } hooks = jQuery.cssHooks[ name ]; if ( hooks && "expand" in hooks ) { value = hooks.expand( value ); delete props[ name ]; // Not quite $.extend, this won't overwrite existing keys. // Reusing 'index' because we have the correct "name" for ( index in value ) { if ( !( index in props ) ) { props[ index ] = value[ index ]; specialEasing[ index ] = easing; } } } else { specialEasing[ name ] = easing; } } } function Animation( elem, properties, options ) { var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always( function() { // Don't match elem in the :animated selector delete tick.elem; } ), tick = function() { if ( stopped ) { return false; } var currentTime = fxNow || createFxNow(), remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), percent = 1 - ( remaining / animation.duration || 0 ), index = 0, length = animation.tweens.length; for ( ; index < length; index++ ) { animation.tweens[ index ].run( percent ); } deferred.notifyWith( elem, [ animation, percent, remaining ] ); // If there's more to do, yield if ( percent < 1 && length ) { return remaining; } // If this was an empty animation, synthesize a final progress notification if ( !length ) { deferred.notifyWith( elem, [ animation, 1, 0 ] ); } // Resolve the animation and report its conclusion deferred.resolveWith( elem, [ animation ] ); return false; }, animation = deferred.promise( { elem: elem, props: jQuery.extend( {}, properties ), opts: jQuery.extend( true, { specialEasing: {}, easing: jQuery.easing._default }, options ), originalProperties: properties, originalOptions: options, startTime: fxNow || createFxNow(), duration: options.duration, tweens: [], createTween: function( prop, end ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; }, stop: function( gotoEnd ) { var index = 0, // If we are going to the end, we want to run all the tweens // otherwise we skip this part length = gotoEnd ? animation.tweens.length : 0; if ( stopped ) { return this; } stopped = true; for ( ; index < length; index++ ) { animation.tweens[ index ].run( 1 ); } // Resolve when we played the last frame; otherwise, reject if ( gotoEnd ) { deferred.notifyWith( elem, [ animation, 1, 0 ] ); deferred.resolveWith( elem, [ animation, gotoEnd ] ); } else { deferred.rejectWith( elem, [ animation, gotoEnd ] ); } return this; } } ), props = animation.props; propFilter( props, animation.opts.specialEasing ); for ( ; index < length; index++ ) { result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); if ( result ) { if ( typeof result.stop === "function" ) { jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = result.stop.bind( result ); } return result; } } jQuery.map( props, createTween, animation ); if ( typeof animation.opts.start === "function" ) { animation.opts.start.call( elem, animation ); } // Attach callbacks from options animation .progress( animation.opts.progress ) .done( animation.opts.done, animation.opts.complete ) .fail( animation.opts.fail ) .always( animation.opts.always ); jQuery.fx.timer( jQuery.extend( tick, { elem: elem, anim: animation, queue: animation.opts.queue } ) ); return animation; } jQuery.Animation = jQuery.extend( Animation, { tweeners: { "*": [ function( prop, value ) { var tween = this.createTween( prop, value ); adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); return tween; } ] }, tweener: function( props, callback ) { if ( typeof props === "function" ) { callback = props; props = [ "*" ]; } else { props = props.match( rnothtmlwhite ); } var prop, index = 0, length = props.length; for ( ; index < length; index++ ) { prop = props[ index ]; Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; Animation.tweeners[ prop ].unshift( callback ); } }, prefilters: [ defaultPrefilter ], prefilter: function( callback, prepend ) { if ( prepend ) { Animation.prefilters.unshift( callback ); } else { Animation.prefilters.push( callback ); } } } ); jQuery.speed = function( speed, easing, fn ) { var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { complete: fn || easing || typeof speed === "function" && speed, duration: speed, easing: fn && easing || easing && typeof easing !== "function" && easing }; // Go to the end state if fx are off if ( jQuery.fx.off ) { opt.duration = 0; } else { if ( typeof opt.duration !== "number" ) { if ( opt.duration in jQuery.fx.speeds ) { opt.duration = jQuery.fx.speeds[ opt.duration ]; } else { opt.duration = jQuery.fx.speeds._default; } } } // Normalize opt.queue - true/undefined/null -> "fx" if ( opt.queue == null || opt.queue === true ) { opt.queue = "fx"; } // Queueing opt.old = opt.complete; opt.complete = function() { if ( typeof opt.old === "function" ) { opt.old.call( this ); } if ( opt.queue ) { jQuery.dequeue( this, opt.queue ); } }; return opt; }; jQuery.fn.extend( { fadeTo: function( speed, to, easing, callback ) { // Show any hidden elements after setting opacity to 0 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() // Animate to the value specified .end().animate( { opacity: to }, speed, easing, callback ); }, animate: function( prop, speed, easing, callback ) { var empty = jQuery.isEmptyObject( prop ), optall = jQuery.speed( speed, easing, callback ), doAnimation = function() { // Operate on a copy of prop so per-property easing won't be lost var anim = Animation( this, jQuery.extend( {}, prop ), optall ); // Empty animations, or finishing resolves immediately if ( empty || dataPriv.get( this, "finish" ) ) { anim.stop( true ); } }; doAnimation.finish = doAnimation; return empty || optall.queue === false ? this.each( doAnimation ) : this.queue( optall.queue, doAnimation ); }, stop: function( type, clearQueue, gotoEnd ) { var stopQueue = function( hooks ) { var stop = hooks.stop; delete hooks.stop; stop( gotoEnd ); }; if ( typeof type !== "string" ) { gotoEnd = clearQueue; clearQueue = type; type = undefined; } if ( clearQueue ) { this.queue( type || "fx", [] ); } return this.each( function() { var dequeue = true, index = type != null && type + "queueHooks", timers = jQuery.timers, data = dataPriv.get( this ); if ( index ) { if ( data[ index ] && data[ index ].stop ) { stopQueue( data[ index ] ); } } else { for ( index in data ) { if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { stopQueue( data[ index ] ); } } } for ( index = timers.length; index--; ) { if ( timers[ index ].elem === this && ( type == null || timers[ index ].queue === type ) ) { timers[ index ].anim.stop( gotoEnd ); dequeue = false; timers.splice( index, 1 ); } } // Start the next in the queue if the last step wasn't forced. // Timers currently will call their complete callbacks, which // will dequeue but only if they were gotoEnd. if ( dequeue || !gotoEnd ) { jQuery.dequeue( this, type ); } } ); }, finish: function( type ) { if ( type !== false ) { type = type || "fx"; } return this.each( function() { var index, data = dataPriv.get( this ), queue = data[ type + "queue" ], hooks = data[ type + "queueHooks" ], timers = jQuery.timers, length = queue ? queue.length : 0; // Enable finishing flag on private data data.finish = true; // Empty the queue first jQuery.queue( this, type, [] ); if ( hooks && hooks.stop ) { hooks.stop.call( this, true ); } // Look for any active animations, and finish them for ( index = timers.length; index--; ) { if ( timers[ index ].elem === this && timers[ index ].queue === type ) { timers[ index ].anim.stop( true ); timers.splice( index, 1 ); } } // Look for any animations in the old queue and finish them for ( index = 0; index < length; index++ ) { if ( queue[ index ] && queue[ index ].finish ) { queue[ index ].finish.call( this ); } } // Turn off finishing flag delete data.finish; } ); } } ); jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { var cssFn = jQuery.fn[ name ]; jQuery.fn[ name ] = function( speed, easing, callback ) { return speed == null || typeof speed === "boolean" ? cssFn.apply( this, arguments ) : this.animate( genFx( name, true ), speed, easing, callback ); }; } ); // Generate shortcuts for custom animations jQuery.each( { slideDown: genFx( "show" ), slideUp: genFx( "hide" ), slideToggle: genFx( "toggle" ), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function( name, props ) { jQuery.fn[ name ] = function( speed, easing, callback ) { return this.animate( props, speed, easing, callback ); }; } ); jQuery.timers = []; jQuery.fx.tick = function() { var timer, i = 0, timers = jQuery.timers; fxNow = Date.now(); for ( ; i < timers.length; i++ ) { timer = timers[ i ]; // Run the timer and safely remove it when done (allowing for external removal) if ( !timer() && timers[ i ] === timer ) { timers.splice( i--, 1 ); } } if ( !timers.length ) { jQuery.fx.stop(); } fxNow = undefined; }; jQuery.fx.timer = function( timer ) { jQuery.timers.push( timer ); jQuery.fx.start(); }; jQuery.fx.start = function() { if ( inProgress ) { return; } inProgress = true; schedule(); }; jQuery.fx.stop = function() { inProgress = null; }; jQuery.fx.speeds = { slow: 600, fast: 200, // Default speed _default: 400 }; export { jQuery, jQuery as $ };