Project

General

Profile

1
define( [
2
	"../core",
3
	"../var/document",
4
	"../ajax"
5
], function( jQuery, document ) {
6

    
7
"use strict";
8

    
9
// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
10
jQuery.ajaxPrefilter( function( s ) {
11
	if ( s.crossDomain ) {
12
		s.contents.script = false;
13
	}
14
} );
15

    
16
// Install script dataType
17
jQuery.ajaxSetup( {
18
	accepts: {
19
		script: "text/javascript, application/javascript, " +
20
			"application/ecmascript, application/x-ecmascript"
21
	},
22
	contents: {
23
		script: /\b(?:java|ecma)script\b/
24
	},
25
	converters: {
26
		"text script": function( text ) {
27
			jQuery.globalEval( text );
28
			return text;
29
		}
30
	}
31
} );
32

    
33
// Handle cache's special case and crossDomain
34
jQuery.ajaxPrefilter( "script", function( s ) {
35
	if ( s.cache === undefined ) {
36
		s.cache = false;
37
	}
38
	if ( s.crossDomain ) {
39
		s.type = "GET";
40
	}
41
} );
42

    
43
// Bind script tag hack transport
44
jQuery.ajaxTransport( "script", function( s ) {
45

    
46
	// This transport only deals with cross domain requests
47
	if ( s.crossDomain ) {
48
		var script, callback;
49
		return {
50
			send: function( _, complete ) {
51
				script = jQuery( "<script>" ).prop( {
52
					charset: s.scriptCharset,
53
					src: s.url
54
				} ).on(
55
					"load error",
56
					callback = function( evt ) {
57
						script.remove();
58
						callback = null;
59
						if ( evt ) {
60
							complete( evt.type === "error" ? 404 : 200, evt.type );
61
						}
62
					}
63
				);
64

    
65
				// Use native DOM manipulation to avoid our domManip AJAX trickery
66
				document.head.appendChild( script[ 0 ] );
67
			},
68
			abort: function() {
69
				if ( callback ) {
70
					callback();
71
				}
72
			}
73
		};
74
	}
75
} );
76

    
77
} );
(4-4/5)