Makes prefilters and transport inspection more robust and uses better variable names for readability.

This commit is contained in:
jaubourg 2011-01-24 04:22:46 +01:00
parent 02ca45573b
commit 33de9c5597

View file

@ -76,38 +76,42 @@ function addToPrefiltersOrTransports( structure ) {
//Base inspection function for prefilters and transports //Base inspection function for prefilters and transports
function inspectPrefiltersOrTransports( structure, options, originalOptions, function inspectPrefiltersOrTransports( structure, options, originalOptions,
dataType /* internal */, tested /* internal */ ) { dataType /* internal */, inspected /* internal */ ) {
dataType = dataType || options.dataTypes[ 0 ]; dataType = dataType || options.dataTypes[ 0 ];
tested = tested || {}; inspected = inspected || {};
tested[ dataType ] = true; inspected[ dataType ] = true;
var list = structure[ dataType ], var list = structure[ dataType ],
i = 0, i = 0,
length = list ? list.length : 0, length = list ? list.length : 0,
executeOnly = structure === prefilters, executeOnly = ( structure === prefilters ),
selected; selection;
for(; i < length && !( executeOnly ? typeof selected === "string" && !tested[ selected ] : selected ); i++ ) { for(; i < length && ( executeOnly || !selection ); i++ ) {
selected = list[ i ]( options, originalOptions ); selection = list[ i ]( options, originalOptions );
// If we got redirected to another dataType
// we try there if not done already
if ( typeof selection === "string" ) {
if ( inspected[ selection ] ) {
selection = undefined;
} else {
options.dataTypes.unshift( selection );
selection = inspectPrefiltersOrTransports(
structure, options, originalOptions, selection, inspected );
}
}
} }
// If we got redirected to another dataType
// we try there
if ( typeof selected === "string" && !tested[ selected ] ) {
options.dataTypes.unshift( selected );
selected = inspectPrefiltersOrTransports(
structure, options, originalOptions, selected, tested );
// If we're only executing or nothing was selected // If we're only executing or nothing was selected
// we try the catchall dataType if not done already // we try the catchall dataType if not done already
} else if ( ( executeOnly || !selected ) && !tested[ "*" ] ) { if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
selected = inspectPrefiltersOrTransports( selection = inspectPrefiltersOrTransports(
structure, options, originalOptions, "*" ,tested ); structure, options, originalOptions, "*", inspected );
} }
// unnecessary when only executing (prefilters) // unnecessary when only executing (prefilters)
// but it'll be ignored by the caller in that case // but it'll be ignored by the caller in that case
return selected; return selection;
} }
jQuery.fn.extend({ jQuery.fn.extend({