mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Fix #11767. Modularize build and unit tests for exluding effects.
Closes gh-785. To build a version of jQuery without effects, use `grunt build:*:*:-effects`. The unit tests feature-check for the interfaces and skip the unit tests for effects if they don't detect it.
This commit is contained in:
parent
82d4c72fb1
commit
7f2cc46955
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,6 +7,5 @@ dist
|
|||||||
*.patch
|
*.patch
|
||||||
/*.html
|
/*.html
|
||||||
.DS_Store
|
.DS_Store
|
||||||
dist/.sizecache.json
|
|
||||||
build/.sizecache.json
|
build/.sizecache.json
|
||||||
node_modules
|
node_modules
|
||||||
|
69
grunt.js
69
grunt.js
@ -50,7 +50,7 @@ module.exports = function( grunt ) {
|
|||||||
"src/ajax/jsonp.js",
|
"src/ajax/jsonp.js",
|
||||||
"src/ajax/script.js",
|
"src/ajax/script.js",
|
||||||
"src/ajax/xhr.js",
|
"src/ajax/xhr.js",
|
||||||
"src/effects.js",
|
{ flag: "effects", src: "src/effects.js" },
|
||||||
"src/offset.js",
|
"src/offset.js",
|
||||||
"src/dimensions.js",
|
"src/dimensions.js",
|
||||||
"src/exports.js",
|
"src/exports.js",
|
||||||
@ -103,7 +103,7 @@ module.exports = function( grunt ) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Default grunt.
|
// Default grunt.
|
||||||
grunt.registerTask( "default", "selector build lint min compare_size" );
|
grunt.registerTask( "default", "selector build:*:* lint min compare_size" );
|
||||||
|
|
||||||
grunt.loadNpmTasks("grunt-compare-size");
|
grunt.loadNpmTasks("grunt-compare-size");
|
||||||
|
|
||||||
@ -159,29 +159,48 @@ module.exports = function( grunt ) {
|
|||||||
|
|
||||||
|
|
||||||
// Special concat/build task to handle various jQuery build requirements
|
// Special concat/build task to handle various jQuery build requirements
|
||||||
grunt.registerMultiTask( "build", "Concatenate source, embed date/version", function() {
|
grunt.registerMultiTask(
|
||||||
// Concat specified files.
|
"build",
|
||||||
var compiled = "",
|
"Concatenate source (include/exclude modules with +/- flags), embed date/version",
|
||||||
name = this.file.dest;
|
function() {
|
||||||
|
// Concat specified files.
|
||||||
|
var compiled = "",
|
||||||
|
modules = this.flags,
|
||||||
|
optIn = !modules["*"],
|
||||||
|
name = this.file.dest;
|
||||||
|
|
||||||
this.file.src.forEach(function( filepath ) {
|
this.file.src.forEach(function( filepath ) {
|
||||||
compiled += file.read( filepath ).replace( /.function..jQuery...\{/g, "" ).replace( /\}...jQuery..;/g, "" );
|
// Include optional modules per build flags; exclusion trumps inclusion
|
||||||
|
var flag = filepath.flag;
|
||||||
|
if ( flag ) {
|
||||||
|
if ( modules[ "-" + flag ] ||
|
||||||
|
optIn && !modules[ flag ] && !modules[ "+" + flag ] ) {
|
||||||
|
|
||||||
|
log.writeln( "Excluding " + filepath.flag + ": '" + filepath.src + "'." );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log.writeln( "Including " + filepath.flag + ": '" + filepath.src + "'." );
|
||||||
|
filepath = filepath.src;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unwrap redundant IIFEs
|
||||||
|
compiled += file.read( filepath ).replace( /^\(function\( jQuery \) \{|\}\)\( jQuery \);\s*$/g, "" );
|
||||||
|
});
|
||||||
|
|
||||||
|
// Embed Date
|
||||||
|
// Embed Version
|
||||||
|
compiled = compiled.replace( "@DATE", new Date() )
|
||||||
|
.replace( "@VERSION", config("pkg.version") );
|
||||||
|
|
||||||
|
// Write concatenated source to file
|
||||||
|
file.write( name, compiled );
|
||||||
|
|
||||||
|
// Fail task if errors were logged.
|
||||||
|
if ( this.errorCount ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, print a success message.
|
||||||
|
log.writeln( "File '" + name + "' created." );
|
||||||
});
|
});
|
||||||
|
|
||||||
// Embed Date
|
|
||||||
// Embed Version
|
|
||||||
compiled = compiled.replace( "@DATE", new Date() )
|
|
||||||
.replace( "@VERSION", config("pkg.version") );
|
|
||||||
|
|
||||||
// Write concatenated source to file
|
|
||||||
file.write( name, compiled );
|
|
||||||
|
|
||||||
// Fail task if errors were logged.
|
|
||||||
if ( this.errorCount ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise, print a success message.
|
|
||||||
log.writeln( "File '" + name + "' created." );
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
134
src/css.js
134
src/css.js
@ -3,7 +3,8 @@
|
|||||||
// order is important!
|
// order is important!
|
||||||
jQuery.cssExpand = [ "Top", "Right", "Bottom", "Left" ];
|
jQuery.cssExpand = [ "Top", "Right", "Bottom", "Left" ];
|
||||||
|
|
||||||
var ralpha = /alpha\([^)]*\)/i,
|
var curCSS, iframe, iframeDoc,
|
||||||
|
ralpha = /alpha\([^)]*\)/i,
|
||||||
ropacity = /opacity=([^)]*)/,
|
ropacity = /opacity=([^)]*)/,
|
||||||
// fixed for IE9, see #8346
|
// fixed for IE9, see #8346
|
||||||
rupper = /([A-Z]|^ms)/g,
|
rupper = /([A-Z]|^ms)/g,
|
||||||
@ -11,14 +12,14 @@ var ralpha = /alpha\([^)]*\)/i,
|
|||||||
rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
|
rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
|
||||||
rrelNum = /^([\-+])=([\-+.\de]+)/,
|
rrelNum = /^([\-+])=([\-+.\de]+)/,
|
||||||
rmargin = /^margin/,
|
rmargin = /^margin/,
|
||||||
|
elemdisplay = {},
|
||||||
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
||||||
|
|
||||||
cssExpand = jQuery.cssExpand,
|
cssExpand = jQuery.cssExpand,
|
||||||
cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
|
cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
|
||||||
rposition = /^(top|right|bottom|left)$/,
|
rposition = /^(top|right|bottom|left)$/,
|
||||||
|
|
||||||
curCSS;
|
eventsToggle = jQuery.fn.toggle;
|
||||||
|
|
||||||
// return a css property mapped to a potentially vendor prefixed property
|
// return a css property mapped to a potentially vendor prefixed property
|
||||||
function vendorPropName( style, name ) {
|
function vendorPropName( style, name ) {
|
||||||
@ -43,13 +44,83 @@ function vendorPropName( style, name ) {
|
|||||||
return origName;
|
return origName;
|
||||||
}
|
}
|
||||||
|
|
||||||
jQuery.fn.css = function( name, value ) {
|
function showHide( elements, show ) {
|
||||||
return jQuery.access( this, function( elem, name, value ) {
|
var elem, display,
|
||||||
return value !== undefined ?
|
values = [],
|
||||||
jQuery.style( elem, name, value ) :
|
index = 0,
|
||||||
jQuery.css( elem, name );
|
length = elements.length;
|
||||||
}, name, value, arguments.length > 1 );
|
|
||||||
};
|
for ( ; index < length; index++ ) {
|
||||||
|
elem = elements[ index ];
|
||||||
|
if ( !elem.style ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
values[ index ] = jQuery._data( elem, "olddisplay" );
|
||||||
|
if ( show ) {
|
||||||
|
// Reset the inline display of this element to learn if it is
|
||||||
|
// being hidden by cascaded rules or not
|
||||||
|
if ( !values[ index ] && elem.style.display === "none" ) {
|
||||||
|
elem.style.display = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set elements which have been overridden with display: none
|
||||||
|
// in a stylesheet to whatever the default browser style is
|
||||||
|
// for such an element
|
||||||
|
if ( (elem.style.display === "" && curCSS( elem, "display" ) === "none") ||
|
||||||
|
!jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
|
||||||
|
values[ index ] = jQuery._data( elem, "olddisplay", jQuery.defaultDisplay(elem.nodeName) );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
display = curCSS( elem, "display" );
|
||||||
|
|
||||||
|
if ( !values[ index ] && display !== "none" ) {
|
||||||
|
jQuery._data( elem, "olddisplay", display );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the display of most of the elements in a second loop
|
||||||
|
// to avoid the constant reflow
|
||||||
|
for ( index = 0; index < length; index++ ) {
|
||||||
|
elem = elements[ index ];
|
||||||
|
if ( !elem.style ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
|
||||||
|
elem.style.display = show ? values[ index ] || "" : "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
|
||||||
|
jQuery.fn.extend({
|
||||||
|
css: function( name, value ) {
|
||||||
|
return jQuery.access( this, function( elem, name, value ) {
|
||||||
|
return value !== undefined ?
|
||||||
|
jQuery.style( elem, name, value ) :
|
||||||
|
jQuery.css( elem, name );
|
||||||
|
}, name, value, arguments.length > 1 );
|
||||||
|
},
|
||||||
|
show: function() {
|
||||||
|
return showHide( this, true );
|
||||||
|
},
|
||||||
|
hide: function() {
|
||||||
|
return showHide( this );
|
||||||
|
},
|
||||||
|
toggle: function( fn, fn2 ) {
|
||||||
|
var bool = typeof fn === "boolean";
|
||||||
|
|
||||||
|
if ( jQuery.isFunction( fn ) && jQuery.isFunction( fn2 ) ) {
|
||||||
|
return eventsToggle.apply( this, arguments );
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.each(function() {
|
||||||
|
var state = bool ? fn : jQuery( this ).is(":hidden");
|
||||||
|
showHide([ this ], state );
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
jQuery.extend({
|
jQuery.extend({
|
||||||
// Add in style property hooks for overriding the default
|
// Add in style property hooks for overriding the default
|
||||||
@ -200,6 +271,49 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Try to determine the default display value of an element
|
||||||
|
defaultDisplay: function( nodeName ) {
|
||||||
|
if ( elemdisplay[ nodeName ] ) {
|
||||||
|
return elemdisplay[ nodeName ];
|
||||||
|
}
|
||||||
|
|
||||||
|
var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
|
||||||
|
display = elem.css("display");
|
||||||
|
elem.remove();
|
||||||
|
|
||||||
|
// If the simple way fails,
|
||||||
|
// get element's real default display by attaching it to a temp iframe
|
||||||
|
if ( display === "none" || display === "" ) {
|
||||||
|
// Use the already-created iframe if possible
|
||||||
|
iframe = document.body.appendChild(
|
||||||
|
iframe || jQuery.extend( document.createElement("iframe"), {
|
||||||
|
frameBorder: 0,
|
||||||
|
width: 0,
|
||||||
|
height: 0
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// Create a cacheable copy of the iframe document on first call.
|
||||||
|
// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
|
||||||
|
// document to it; WebKit & Firefox won't allow reusing the iframe document.
|
||||||
|
if ( !iframeDoc || !iframe.createElement ) {
|
||||||
|
iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
|
||||||
|
iframeDoc.write("<!doctype html><html><body>");
|
||||||
|
iframeDoc.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
|
||||||
|
|
||||||
|
display = curCSS( elem, "display" );
|
||||||
|
document.body.removeChild( iframe );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store the correct default display
|
||||||
|
elemdisplay[ nodeName ] = display;
|
||||||
|
|
||||||
|
return display;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
141
src/effects.js
vendored
141
src/effects.js
vendored
@ -1,7 +1,6 @@
|
|||||||
(function( jQuery ) {
|
(function( jQuery ) {
|
||||||
|
|
||||||
var fxNow, timerId, iframe, iframeDoc,
|
var fxNow, timerId,
|
||||||
elemdisplay = {},
|
|
||||||
rfxtypes = /^(?:toggle|show|hide)$/,
|
rfxtypes = /^(?:toggle|show|hide)$/,
|
||||||
rfxnum = /^([\-+]=)?((?:\d*\.)?\d+)([a-z%]*)$/i,
|
rfxnum = /^([\-+]=)?((?:\d*\.)?\d+)([a-z%]*)$/i,
|
||||||
rrun = /queueHooks$/,
|
rrun = /queueHooks$/,
|
||||||
@ -31,8 +30,7 @@ var fxNow, timerId, iframe, iframeDoc,
|
|||||||
}
|
}
|
||||||
return tween;
|
return tween;
|
||||||
}]
|
}]
|
||||||
},
|
};
|
||||||
oldToggle = jQuery.fn.toggle;
|
|
||||||
|
|
||||||
// Animations created synchronously will run synchronously
|
// Animations created synchronously will run synchronously
|
||||||
function createFxNow() {
|
function createFxNow() {
|
||||||
@ -255,7 +253,7 @@ function defaultPrefilter( elem, props, opts ) {
|
|||||||
|
|
||||||
// inline-level elements accept inline-block;
|
// inline-level elements accept inline-block;
|
||||||
// block-level elements need to be inline with layout
|
// block-level elements need to be inline with layout
|
||||||
if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
|
if ( !jQuery.support.inlineBlockNeedsLayout || jQuery.defaultDisplay( elem.nodeName ) === "inline" ) {
|
||||||
style.display = "inline-block";
|
style.display = "inline-block";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -290,10 +288,10 @@ function defaultPrefilter( elem, props, opts ) {
|
|||||||
if ( length ) {
|
if ( length ) {
|
||||||
dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
|
dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
|
||||||
if ( hidden ) {
|
if ( hidden ) {
|
||||||
showHide([ elem ], true );
|
jQuery( elem ).show();
|
||||||
} else {
|
} else {
|
||||||
anim.finish(function() {
|
anim.finish(function() {
|
||||||
showHide([ elem ]);
|
jQuery( elem ).hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
anim.finish(function() {
|
anim.finish(function() {
|
||||||
@ -400,84 +398,18 @@ function isHidden( elem, el ) {
|
|||||||
return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument.documentElement, elem );
|
return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument.documentElement, elem );
|
||||||
}
|
}
|
||||||
|
|
||||||
function showHide( elements, show ) {
|
jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
|
||||||
var elem, display,
|
var cssFn = jQuery.fn[ name ];
|
||||||
values = [],
|
jQuery.fn[ name ] = function( speed, easing, callback ) {
|
||||||
index = 0,
|
return speed == null || typeof speed === "boolean" ||
|
||||||
length = elements.length;
|
// special check for .toggle( handler, handler, ... )
|
||||||
|
( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?
|
||||||
for ( ; index < length; index++ ) {
|
cssFn.apply( this, arguments ) :
|
||||||
elem = elements[ index ];
|
this.animate( genFx( name, true ), speed, easing, callback );
|
||||||
if ( !elem.style ) {
|
};
|
||||||
continue;
|
});
|
||||||
}
|
|
||||||
values[ index ] = jQuery._data( elem, "olddisplay" );
|
|
||||||
if ( show ) {
|
|
||||||
// Reset the inline display of this element to learn if it is
|
|
||||||
// being hidden by cascaded rules or not
|
|
||||||
if ( !values[ index ] && elem.style.display === "none" ) {
|
|
||||||
elem.style.display = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set elements which have been overridden with display: none
|
|
||||||
// in a stylesheet to whatever the default browser style is
|
|
||||||
// for such an element
|
|
||||||
if ( elem.style.display === "" && isHidden( elem ) ) {
|
|
||||||
values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay( elem.nodeName ) );
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
display = jQuery.css( elem, "display" );
|
|
||||||
|
|
||||||
if ( !values[ index ] && display !== "none" ) {
|
|
||||||
jQuery._data( elem, "olddisplay", display );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the display of most of the elements in a second loop
|
|
||||||
// to avoid the constant reflow
|
|
||||||
for ( index = 0; index < length; index++ ) {
|
|
||||||
elem = elements[ index ];
|
|
||||||
if ( !elem.style ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
|
|
||||||
elem.style.display = show ? values[ index ] || "" : "none";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return elements;
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery.fn.extend({
|
jQuery.fn.extend({
|
||||||
show: function( speed, easing, callback ) {
|
|
||||||
return speed || speed === 0 ?
|
|
||||||
this.animate( genFx( "show", true ), speed, easing, callback ) :
|
|
||||||
showHide( this, true );
|
|
||||||
},
|
|
||||||
hide: function( speed, easing, callback ) {
|
|
||||||
return speed || speed === 0 ?
|
|
||||||
this.animate( genFx( "hide", true ), speed, easing, callback ) :
|
|
||||||
showHide( this );
|
|
||||||
},
|
|
||||||
toggle: function( fn, fn2, callback ) {
|
|
||||||
var bool = typeof fn === "boolean";
|
|
||||||
|
|
||||||
if ( jQuery.isFunction( fn ) && jQuery.isFunction( fn2 ) ) {
|
|
||||||
oldToggle.apply( this, arguments );
|
|
||||||
|
|
||||||
} else if ( fn == null || bool ) {
|
|
||||||
this.each(function() {
|
|
||||||
var state = bool ? fn : isHidden( this );
|
|
||||||
showHide([ this ], state );
|
|
||||||
});
|
|
||||||
|
|
||||||
} else {
|
|
||||||
this.animate( genFx( "toggle", true ), fn, fn2, callback );
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
},
|
|
||||||
fadeTo: function( speed, to, easing, callback ) {
|
fadeTo: function( speed, to, easing, callback ) {
|
||||||
|
|
||||||
// show any hidden elements after setting opacity to 0
|
// show any hidden elements after setting opacity to 0
|
||||||
@ -681,47 +613,4 @@ if ( jQuery.expr && jQuery.expr.filters ) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to restore the default display value of an element
|
|
||||||
function defaultDisplay( nodeName ) {
|
|
||||||
if ( elemdisplay[ nodeName ] ) {
|
|
||||||
return elemdisplay[ nodeName ];
|
|
||||||
}
|
|
||||||
|
|
||||||
var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
|
|
||||||
display = elem.css("display");
|
|
||||||
elem.remove();
|
|
||||||
|
|
||||||
// If the simple way fails,
|
|
||||||
// get element's real default display by attaching it to a temp iframe
|
|
||||||
if ( display === "none" || display === "" ) {
|
|
||||||
// Use the already-created iframe if possible
|
|
||||||
iframe = document.body.appendChild(
|
|
||||||
iframe || jQuery.extend( document.createElement("iframe"), {
|
|
||||||
frameBorder: 0,
|
|
||||||
width: 0,
|
|
||||||
height: 0
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
// Create a cacheable copy of the iframe document on first call.
|
|
||||||
// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
|
|
||||||
// document to it; WebKit & Firefox won't allow reusing the iframe document.
|
|
||||||
if ( !iframeDoc || !iframe.createElement ) {
|
|
||||||
iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
|
|
||||||
iframeDoc.write("<!doctype html><html><body>");
|
|
||||||
iframeDoc.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
|
|
||||||
|
|
||||||
display = jQuery.css( elem, "display" );
|
|
||||||
document.body.removeChild( iframe );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store the correct default display
|
|
||||||
elemdisplay[ nodeName ] = display;
|
|
||||||
|
|
||||||
return display;
|
|
||||||
}
|
|
||||||
|
|
||||||
})( jQuery );
|
})( jQuery );
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit e844a8c04235cec865dff32af88bc3d498c3cd23
|
Subproject commit feebbd7e053bff426444c7b348c776c99c7490ee
|
@ -163,7 +163,7 @@ function url(value) {
|
|||||||
equal( fragmentsLength, oldFragmentsLength, "No unit tests leak memory in jQuery.fragments" );
|
equal( fragmentsLength, oldFragmentsLength, "No unit tests leak memory in jQuery.fragments" );
|
||||||
oldFragmentsLength = fragmentsLength;
|
oldFragmentsLength = fragmentsLength;
|
||||||
}
|
}
|
||||||
if ( jQuery.timers.length !== oldTimersLength ) {
|
if ( jQuery.timers && jQuery.timers.length !== oldTimersLength ) {
|
||||||
equal( jQuery.timers.length, oldTimersLength, "No timers are still running" );
|
equal( jQuery.timers.length, oldTimersLength, "No timers are still running" );
|
||||||
oldTimersLength = jQuery.timers.length;
|
oldTimersLength = jQuery.timers.length;
|
||||||
}
|
}
|
||||||
|
184
test/unit/css.js
184
test/unit/css.js
@ -411,6 +411,179 @@ test("css(Object) where values are Functions with incoming values", function() {
|
|||||||
jQuery("#cssFunctionTest").remove();
|
jQuery("#cssFunctionTest").remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("show(); hide()", function() {
|
||||||
|
expect(22);
|
||||||
|
|
||||||
|
var hiddendiv = jQuery("div.hidden");
|
||||||
|
hiddendiv.hide();
|
||||||
|
equal( hiddendiv.css("display"), "none", "Non-detached div hidden" );
|
||||||
|
hiddendiv.show();
|
||||||
|
equal( hiddendiv.css("display"), "block", "Pre-hidden div shown" );
|
||||||
|
|
||||||
|
var div = jQuery("<div>").hide();
|
||||||
|
equal( div.css("display"), "none", "Detached div hidden" );
|
||||||
|
div.appendTo("#qunit-fixture").show();
|
||||||
|
equal( div.css("display"), "block", "Pre-hidden div shown" );
|
||||||
|
|
||||||
|
QUnit.reset();
|
||||||
|
|
||||||
|
hiddendiv = jQuery("div.hidden");
|
||||||
|
|
||||||
|
equal(jQuery.css( hiddendiv[0], "display"), "none", "hiddendiv is display: none");
|
||||||
|
|
||||||
|
hiddendiv.css("display", "block");
|
||||||
|
equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
|
||||||
|
|
||||||
|
hiddendiv.show();
|
||||||
|
equal(jQuery.css( hiddendiv[0], "display"), "block", "hiddendiv is display: block");
|
||||||
|
|
||||||
|
hiddendiv.css("display","");
|
||||||
|
|
||||||
|
var pass = true;
|
||||||
|
div = jQuery("#qunit-fixture div");
|
||||||
|
div.show().each(function(){
|
||||||
|
if ( this.style.display == "none" ) pass = false;
|
||||||
|
});
|
||||||
|
ok( pass, "Show" );
|
||||||
|
|
||||||
|
// #show-tests * is set display: none in CSS
|
||||||
|
jQuery("#qunit-fixture").append("<div id='show-tests'><div><p><a href='#'></a></p><code></code><pre></pre><span></span></div><table><thead><tr><th></th></tr></thead><tbody><tr><td></td></tr></tbody></table><ul><li></li></ul></div><table id='test-table'></table>");
|
||||||
|
|
||||||
|
var old = jQuery("#test-table").show().css("display") !== "table";
|
||||||
|
jQuery("#test-table").remove();
|
||||||
|
|
||||||
|
var test = {
|
||||||
|
"div" : "block",
|
||||||
|
"p" : "block",
|
||||||
|
"a" : "inline",
|
||||||
|
"code" : "inline",
|
||||||
|
"pre" : "block",
|
||||||
|
"span" : "inline",
|
||||||
|
"table" : old ? "block" : "table",
|
||||||
|
"thead" : old ? "block" : "table-header-group",
|
||||||
|
"tbody" : old ? "block" : "table-row-group",
|
||||||
|
"tr" : old ? "block" : "table-row",
|
||||||
|
"th" : old ? "block" : "table-cell",
|
||||||
|
"td" : old ? "block" : "table-cell",
|
||||||
|
"ul" : "block",
|
||||||
|
"li" : old ? "block" : "list-item"
|
||||||
|
};
|
||||||
|
|
||||||
|
jQuery.each(test, function(selector, expected) {
|
||||||
|
var elem = jQuery(selector, "#show-tests").show();
|
||||||
|
equal( elem.css("display"), expected, "Show using correct display type for " + selector );
|
||||||
|
});
|
||||||
|
|
||||||
|
// Make sure that showing or hiding a text node doesn't cause an error
|
||||||
|
jQuery("<div>test</div> text <span>test</span>").show().remove();
|
||||||
|
jQuery("<div>test</div> text <span>test</span>").hide().remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("show() resolves correct default display #8099", function() {
|
||||||
|
expect(7);
|
||||||
|
var tt8099 = jQuery("<tt/>").appendTo("body"),
|
||||||
|
dfn8099 = jQuery("<dfn/>", { html: "foo"}).appendTo("body");
|
||||||
|
|
||||||
|
equal( tt8099.css("display"), "none", "default display override for all tt" );
|
||||||
|
equal( tt8099.show().css("display"), "inline", "Correctly resolves display:inline" );
|
||||||
|
|
||||||
|
equal( jQuery("#foo").hide().show().css("display"), "block", "Correctly resolves display:block after hide/show" );
|
||||||
|
|
||||||
|
equal( tt8099.hide().css("display"), "none", "default display override for all tt" );
|
||||||
|
equal( tt8099.show().css("display"), "inline", "Correctly resolves display:inline" );
|
||||||
|
|
||||||
|
equal( dfn8099.css("display"), "none", "default display override for all dfn" );
|
||||||
|
equal( dfn8099.show().css("display"), "inline", "Correctly resolves display:inline" );
|
||||||
|
|
||||||
|
tt8099.remove();
|
||||||
|
dfn8099.remove();
|
||||||
|
});
|
||||||
|
|
||||||
|
test( "show() resolves correct default display, detached nodes (#10006)", function(){
|
||||||
|
// Tests originally contributed by Orkel in
|
||||||
|
// https://github.com/jquery/jquery/pull/458
|
||||||
|
expect( 11 );
|
||||||
|
|
||||||
|
var div, span;
|
||||||
|
|
||||||
|
div = jQuery("<div class='hidden'>");
|
||||||
|
div.show().appendTo("#qunit-fixture");
|
||||||
|
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div is visible." );
|
||||||
|
|
||||||
|
div = jQuery("<div style='display: none'>");
|
||||||
|
div.show().appendTo("#qunit-fixture");
|
||||||
|
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div is visible." );
|
||||||
|
|
||||||
|
span = jQuery("<span class='hidden'/>");
|
||||||
|
span.show().appendTo("#qunit-fixture");
|
||||||
|
equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through stylesheets ) span has default display." );
|
||||||
|
|
||||||
|
span = jQuery("<span style='display: inline'/>");
|
||||||
|
span.show().appendTo("#qunit-fixture");
|
||||||
|
equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through inline style ) span has default display." );
|
||||||
|
|
||||||
|
div = jQuery("<div><div class='hidden'></div></div>").children("div");
|
||||||
|
div.show().appendTo("#qunit-fixture");
|
||||||
|
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div inside another visible div is visible." );
|
||||||
|
|
||||||
|
div = jQuery("<div><div style='display: none'></div></div>").children("div");
|
||||||
|
div.show().appendTo("#qunit-fixture");
|
||||||
|
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div inside another visible div is visible." );
|
||||||
|
|
||||||
|
div = jQuery("div.hidden");
|
||||||
|
div.detach().show();
|
||||||
|
equal( div.css("display"), "block", "Make sure a detached( through detach() ), pre-hidden div is visible." );
|
||||||
|
div.remove();
|
||||||
|
|
||||||
|
span = jQuery("<span>");
|
||||||
|
span.appendTo("#qunit-fixture").detach().show().appendTo("#qunit-fixture" );
|
||||||
|
equal( span.css("display"), "inline", "Make sure a detached( through detach() ), pre-hidden span has default display." );
|
||||||
|
span.remove();
|
||||||
|
|
||||||
|
div = jQuery("<div>");
|
||||||
|
div.show().appendTo("#qunit-fixture");
|
||||||
|
ok( !!div.get( 0 ).style.display, "Make sure not hidden div has a inline style." );
|
||||||
|
|
||||||
|
div = jQuery( document.createElement("div") );
|
||||||
|
div.show().appendTo("#qunit-fixture");
|
||||||
|
equal( div.css("display"), "block", "Make sure a pre-created element has default display." );
|
||||||
|
|
||||||
|
div = jQuery("<div style='display: inline'/>");
|
||||||
|
div.show().appendTo("#qunit-fixture");
|
||||||
|
equal( div.css("display"), "inline", "Make sure that element has same display when it was created." );
|
||||||
|
});
|
||||||
|
|
||||||
|
test("toggle()", function() {
|
||||||
|
expect(6);
|
||||||
|
var x = jQuery("#foo");
|
||||||
|
ok( x.is(":visible"), "is visible" );
|
||||||
|
x.toggle();
|
||||||
|
ok( x.is(":hidden"), "is hidden" );
|
||||||
|
x.toggle();
|
||||||
|
ok( x.is(":visible"), "is visible again" );
|
||||||
|
|
||||||
|
x.toggle(true);
|
||||||
|
ok( x.is(":visible"), "is visible" );
|
||||||
|
x.toggle(false);
|
||||||
|
ok( x.is(":hidden"), "is hidden" );
|
||||||
|
x.toggle(true);
|
||||||
|
ok( x.is(":visible"), "is visible again" );
|
||||||
|
});
|
||||||
|
|
||||||
|
test("hide hidden elements (bug #7141)", function() {
|
||||||
|
expect(3);
|
||||||
|
QUnit.reset();
|
||||||
|
|
||||||
|
var div = jQuery("<div style='display:none'></div>").appendTo("#qunit-fixture");
|
||||||
|
equal( div.css("display"), "none", "Element is hidden by default" );
|
||||||
|
div.hide();
|
||||||
|
ok( !jQuery._data(div, "olddisplay"), "olddisplay is undefined after hiding an already-hidden element" );
|
||||||
|
div.show();
|
||||||
|
equal( div.css("display"), "block", "Show a double-hidden element" );
|
||||||
|
|
||||||
|
div.remove();
|
||||||
|
});
|
||||||
|
|
||||||
test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", function () {
|
test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", function () {
|
||||||
expect(4);
|
expect(4);
|
||||||
|
|
||||||
@ -545,13 +718,8 @@ test("percentage position properties in IE<9 should not be incorrectly transform
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("Do not append px to 'fill-opacity' #9548", 1, function() {
|
test("Do not append px to 'fill-opacity' #9548", 1, function() {
|
||||||
|
var $div = jQuery("<div>").appendTo("#qunit-fixture").css("fill-opacity", 1);
|
||||||
var $div = jQuery("<div>").appendTo("#qunit-fixture");
|
equal( $div.css("fill-opacity"), 1, "Do not append px to 'fill-opacity'");
|
||||||
|
|
||||||
$div.css("fill-opacity", 0).animate({ "fill-opacity": 1.0 }, 0, function () {
|
|
||||||
equal( jQuery(this).css("fill-opacity"), 1, "Do not append px to 'fill-opacity'");
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("outerWidth(true) and css('margin') returning % instead of px in Webkit, see #10639", function() {
|
test("outerWidth(true) and css('margin') returning % instead of px in Webkit, see #10639", function() {
|
||||||
@ -609,4 +777,4 @@ test( "cssHooks - expand", function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
108
test/unit/effects.js
vendored
108
test/unit/effects.js
vendored
@ -1,3 +1,5 @@
|
|||||||
|
if ( jQuery.fx ) {
|
||||||
|
|
||||||
module("effects", { teardown: moduleTeardown });
|
module("effects", { teardown: moduleTeardown });
|
||||||
|
|
||||||
test("sanity check", function() {
|
test("sanity check", function() {
|
||||||
@ -6,7 +8,7 @@ test("sanity check", function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("show()", function() {
|
test("show()", function() {
|
||||||
expect(28);
|
expect(26);
|
||||||
|
|
||||||
var hiddendiv = jQuery("div.hidden");
|
var hiddendiv = jQuery("div.hidden");
|
||||||
|
|
||||||
@ -42,7 +44,6 @@ test("show()", function() {
|
|||||||
var speeds = {
|
var speeds = {
|
||||||
"null speed": null,
|
"null speed": null,
|
||||||
"undefined speed": undefined,
|
"undefined speed": undefined,
|
||||||
"empty string speed": "",
|
|
||||||
"false speed": false
|
"false speed": false
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -167,82 +168,6 @@ test("Persist correct display value", function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test("show() resolves correct default display #8099", function() {
|
|
||||||
expect(7);
|
|
||||||
var tt8099 = jQuery("<tt/>").appendTo("body"),
|
|
||||||
dfn8099 = jQuery("<dfn/>", { html: "foo"}).appendTo("body");
|
|
||||||
|
|
||||||
equal( tt8099.css("display"), "none", "default display override for all tt" );
|
|
||||||
equal( tt8099.show().css("display"), "inline", "Correctly resolves display:inline" );
|
|
||||||
|
|
||||||
equal( jQuery("#foo").hide().show().css("display"), "block", "Correctly resolves display:block after hide/show" );
|
|
||||||
|
|
||||||
equal( tt8099.hide().css("display"), "none", "default display override for all tt" );
|
|
||||||
equal( tt8099.show().css("display"), "inline", "Correctly resolves display:inline" );
|
|
||||||
|
|
||||||
equal( dfn8099.css("display"), "none", "default display override for all dfn" );
|
|
||||||
equal( dfn8099.show().css("display"), "inline", "Correctly resolves display:inline" );
|
|
||||||
|
|
||||||
tt8099.remove();
|
|
||||||
dfn8099.remove();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
test( "show() resolves correct default display, detached nodes (#10006)", function(){
|
|
||||||
// Tests originally contributed by Orkel in
|
|
||||||
// https://github.com/jquery/jquery/pull/458
|
|
||||||
expect( 11 );
|
|
||||||
|
|
||||||
var div, span;
|
|
||||||
|
|
||||||
div = jQuery("<div class='hidden'>");
|
|
||||||
div.show().appendTo("#qunit-fixture");
|
|
||||||
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div is visible." );
|
|
||||||
|
|
||||||
div = jQuery("<div style='display: none'>");
|
|
||||||
div.show().appendTo("#qunit-fixture");
|
|
||||||
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div is visible." );
|
|
||||||
|
|
||||||
span = jQuery("<span class='hidden'/>");
|
|
||||||
span.show().appendTo("#qunit-fixture");
|
|
||||||
equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through stylesheets ) span has default display." );
|
|
||||||
|
|
||||||
span = jQuery("<span style='display: inline'/>");
|
|
||||||
span.show().appendTo("#qunit-fixture");
|
|
||||||
equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through inline style ) span has default display." );
|
|
||||||
|
|
||||||
div = jQuery("<div><div class='hidden'></div></div>").children("div");
|
|
||||||
div.show().appendTo("#qunit-fixture");
|
|
||||||
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div inside another visible div is visible." );
|
|
||||||
|
|
||||||
div = jQuery("<div><div style='display: none'></div></div>").children("div");
|
|
||||||
div.show().appendTo("#qunit-fixture");
|
|
||||||
equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div inside another visible div is visible." );
|
|
||||||
|
|
||||||
div = jQuery("div.hidden");
|
|
||||||
div.detach().show();
|
|
||||||
equal( div.css("display"), "block", "Make sure a detached( through detach() ), pre-hidden div is visible." );
|
|
||||||
div.remove();
|
|
||||||
|
|
||||||
span = jQuery("<span>");
|
|
||||||
span.appendTo("#qunit-fixture").detach().show().appendTo("#qunit-fixture" );
|
|
||||||
equal( span.css("display"), "inline", "Make sure a detached( through detach() ), pre-hidden span has default display." );
|
|
||||||
span.remove();
|
|
||||||
|
|
||||||
div = jQuery("<div>");
|
|
||||||
div.show().appendTo("#qunit-fixture");
|
|
||||||
ok( !!div.get( 0 ).style.display, "Make sure not hidden div has a inline style." );
|
|
||||||
|
|
||||||
div = jQuery( document.createElement("div") );
|
|
||||||
div.show().appendTo("#qunit-fixture");
|
|
||||||
equal( div.css("display"), "block", "Make sure a pre-created element has default display." );
|
|
||||||
|
|
||||||
div = jQuery("<div style='display: inline'/>");
|
|
||||||
div.show().appendTo("#qunit-fixture");
|
|
||||||
equal( div.css("display"), "inline", "Make sure that element has same display when it was created." );
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
test("animate(Hash, Object, Function)", function() {
|
test("animate(Hash, Object, Function)", function() {
|
||||||
expect(1);
|
expect(1);
|
||||||
stop();
|
stop();
|
||||||
@ -480,7 +405,6 @@ asyncTest( "animate option { queue: true }", function() {
|
|||||||
notEqual( foo.queue().length, 0, "Default queue is not empty" );
|
notEqual( foo.queue().length, 0, "Default queue is not empty" );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
asyncTest( "animate option { queue: 'name' }", function() {
|
asyncTest( "animate option { queue: 'name' }", function() {
|
||||||
expect( 5 );
|
expect( 5 );
|
||||||
var foo = jQuery( "#foo" ),
|
var foo = jQuery( "#foo" ),
|
||||||
@ -1295,20 +1219,6 @@ test("animate with CSS shorthand properties", function(){
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test("hide hidden elements (bug #7141)", function() {
|
|
||||||
expect(3);
|
|
||||||
QUnit.reset();
|
|
||||||
|
|
||||||
var div = jQuery("<div style='display:none'></div>").appendTo("#qunit-fixture");
|
|
||||||
equal( div.css("display"), "none", "Element is hidden by default" );
|
|
||||||
div.hide();
|
|
||||||
ok( !jQuery._data(div, "olddisplay"), "olddisplay is undefined after hiding an already-hidden element" );
|
|
||||||
div.show();
|
|
||||||
equal( div.css("display"), "block", "Show a double-hidden element" );
|
|
||||||
|
|
||||||
div.remove();
|
|
||||||
});
|
|
||||||
|
|
||||||
test("hide hidden elements, with animation (bug #7141)", function() {
|
test("hide hidden elements, with animation (bug #7141)", function() {
|
||||||
expect(3);
|
expect(3);
|
||||||
QUnit.reset();
|
QUnit.reset();
|
||||||
@ -1437,6 +1347,14 @@ test("animate will scale margin properties individually", function() {
|
|||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("Do not append px to 'fill-opacity' #9548", 1, function() {
|
||||||
|
var $div = jQuery("<div>").appendTo("#qunit-fixture");
|
||||||
|
|
||||||
|
$div.css("fill-opacity", 0).animate({ "fill-opacity": 1.0 }, 0, function () {
|
||||||
|
equal( jQuery(this).css("fill-opacity"), 1, "Do not append px to 'fill-opacity'");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Start 1.8 Animation tests
|
// Start 1.8 Animation tests
|
||||||
asyncTest( "jQuery.Animation( object, props, opts )", 1, function() {
|
asyncTest( "jQuery.Animation( object, props, opts )", 1, function() {
|
||||||
var testObject = {
|
var testObject = {
|
||||||
@ -1708,4 +1626,6 @@ asyncTest( "multiple unqueued and promise", 4, function() {
|
|||||||
strictEqual( step++, 4, "Step 4" );
|
strictEqual( step++, 4, "Step 4" );
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
} // if ( jQuery.fx )
|
@ -101,11 +101,13 @@ test("callbacks keep their place in the queue", function() {
|
|||||||
div.queue(function( next ) {
|
div.queue(function( next ) {
|
||||||
equal( ++counter, 1, "Queue/callback order: first called" );
|
equal( ++counter, 1, "Queue/callback order: first called" );
|
||||||
setTimeout( next, 200 );
|
setTimeout( next, 200 );
|
||||||
}).show(100, function() {
|
}).delay( 100 ).queue(function( next ) {
|
||||||
equal( ++counter, 2, "Queue/callback order: second called" );
|
equal( ++counter, 2, "Queue/callback order: second called" );
|
||||||
jQuery(this).hide(100, function() {
|
jQuery( this ).delay( 100 ).queue(function( next ) {
|
||||||
equal( ++counter, 4, "Queue/callback order: fourth called" );
|
equal( ++counter, 4, "Queue/callback order: fourth called" );
|
||||||
|
next();
|
||||||
});
|
});
|
||||||
|
next();
|
||||||
}).queue(function( next ) {
|
}).queue(function( next ) {
|
||||||
equal( ++counter, 3, "Queue/callback order: third called" );
|
equal( ++counter, 3, "Queue/callback order: third called" );
|
||||||
next();
|
next();
|
||||||
@ -133,44 +135,6 @@ test("delay()", function() {
|
|||||||
equal( run, 0, "The delay delayed the next function from running." );
|
equal( run, 0, "The delay delayed the next function from running." );
|
||||||
});
|
});
|
||||||
|
|
||||||
test("delay() can be stopped", function() {
|
|
||||||
expect( 3 );
|
|
||||||
stop();
|
|
||||||
|
|
||||||
var foo = jQuery({}), run = 0;
|
|
||||||
|
|
||||||
foo
|
|
||||||
.queue( "alternate", function( next ) {
|
|
||||||
run++;
|
|
||||||
ok( true, "This first function was dequeued" );
|
|
||||||
next();
|
|
||||||
})
|
|
||||||
.delay( 1000, "alternate" )
|
|
||||||
.queue( "alternate", function() {
|
|
||||||
run++;
|
|
||||||
ok( true, "The function was dequeued immediately, the delay was stopped" );
|
|
||||||
})
|
|
||||||
.dequeue( "alternate" )
|
|
||||||
|
|
||||||
// stop( "alternate", false ) will NOT clear the queue, so it should automatically dequeue the next
|
|
||||||
.stop( "alternate", false, false )
|
|
||||||
|
|
||||||
// this test
|
|
||||||
.delay( 1000 )
|
|
||||||
.queue(function() {
|
|
||||||
run++;
|
|
||||||
ok( false, "This queue should never run" );
|
|
||||||
})
|
|
||||||
|
|
||||||
// stop( clearQueue ) should clear the queue
|
|
||||||
.stop( true, false );
|
|
||||||
|
|
||||||
equal( run, 2, "Queue ran the proper functions" );
|
|
||||||
|
|
||||||
setTimeout( start, 2000 );
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
test("clearQueue(name) clears the queue", function() {
|
test("clearQueue(name) clears the queue", function() {
|
||||||
expect(2);
|
expect(2);
|
||||||
|
|
||||||
@ -265,22 +229,63 @@ test( ".promise(obj)", function() {
|
|||||||
strictEqual( promise, obj, ".promise(type, obj) returns obj" );
|
strictEqual( promise, obj, ".promise(type, obj) returns obj" );
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( "queue stop hooks", 2, function() {
|
|
||||||
var foo = jQuery( "#foo" );
|
|
||||||
|
|
||||||
foo.queue( function( next, hooks ) {
|
if ( jQuery.fn.stop ) {
|
||||||
hooks.stop = function( gotoEnd ) {
|
test("delay() can be stopped", function() {
|
||||||
equal( !!gotoEnd, false, "Stopped without gotoEnd" );
|
expect( 3 );
|
||||||
};
|
stop();
|
||||||
});
|
|
||||||
foo.stop();
|
|
||||||
|
|
||||||
foo.queue( function( next, hooks ) {
|
var foo = jQuery({}), run = 0;
|
||||||
hooks.stop = function( gotoEnd ) {
|
|
||||||
equal( gotoEnd, true, "Stopped with gotoEnd" );
|
foo
|
||||||
start();
|
.queue( "alternate", function( next ) {
|
||||||
};
|
run++;
|
||||||
|
ok( true, "This first function was dequeued" );
|
||||||
|
next();
|
||||||
|
})
|
||||||
|
.delay( 1000, "alternate" )
|
||||||
|
.queue( "alternate", function() {
|
||||||
|
run++;
|
||||||
|
ok( true, "The function was dequeued immediately, the delay was stopped" );
|
||||||
|
})
|
||||||
|
.dequeue( "alternate" )
|
||||||
|
|
||||||
|
// stop( "alternate", false ) will NOT clear the queue, so it should automatically dequeue the next
|
||||||
|
.stop( "alternate", false, false )
|
||||||
|
|
||||||
|
// this test
|
||||||
|
.delay( 1000 )
|
||||||
|
.queue(function() {
|
||||||
|
run++;
|
||||||
|
ok( false, "This queue should never run" );
|
||||||
|
})
|
||||||
|
|
||||||
|
// stop( clearQueue ) should clear the queue
|
||||||
|
.stop( true, false );
|
||||||
|
|
||||||
|
equal( run, 2, "Queue ran the proper functions" );
|
||||||
|
|
||||||
|
setTimeout( start, 2000 );
|
||||||
});
|
});
|
||||||
|
|
||||||
foo.stop( false, true );
|
asyncTest( "queue stop hooks", 2, function() {
|
||||||
});
|
var foo = jQuery( "#foo" );
|
||||||
|
|
||||||
|
foo.queue( function( next, hooks ) {
|
||||||
|
hooks.stop = function( gotoEnd ) {
|
||||||
|
equal( !!gotoEnd, false, "Stopped without gotoEnd" );
|
||||||
|
};
|
||||||
|
});
|
||||||
|
foo.stop();
|
||||||
|
|
||||||
|
foo.queue( function( next, hooks ) {
|
||||||
|
hooks.stop = function( gotoEnd ) {
|
||||||
|
equal( gotoEnd, true, "Stopped with gotoEnd" );
|
||||||
|
start();
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
foo.stop( false, true );
|
||||||
|
});
|
||||||
|
|
||||||
|
} // if ( jQuery.fn.stop )
|
Loading…
Reference in New Issue
Block a user