-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGMapComponentAsyncLoader.js
99 lines (71 loc) · 1.93 KB
/
GMapComponentAsyncLoader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
This Source Code Form is subject to the
terms of the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed
with this file, You can obtain one at
http://mozilla.org/MPL/2.0/.
*/
var loadGoogleMapsOverlay = (function($) {
var now = $.now(), promise;
return function() {
if (promise) {
return promise;
}
//Create a Deferred Object
var deferred = $.Deferred(),
//Declare a resolve function, pass google.maps for the done functions
resolve = function() {
deferred.resolve(window.google && google.maps ? google.maps: false);
},
//global callback name
callbackName = "loadGoogleMapsOverlay_" + (now++),
//Ajax URL params
params;
//If google.maps exists, then Google Maps API was probably loaded with the <script> tag
if (window.google && google.maps) {
resolve();
//If the google.load method exists, lets load the Google Maps API in Async.
} else if (window.google && google.load) {
google.load("maps", "3.exp", {
"other_params": "sensor=false&libraries=places",
"callback": resolve
});
//Last, try pure jQuery Ajax technique to load the Google Maps API in Async.
} else {
//Ajax URL params
/*
params = $.extend({
'v': '3.exp',
'sensor': false,
'libraries': 'places',
'callback': callbackName
}: {});
*/
params = {
'v': '3.exp',
'sensor': false,
'libraries': 'places',
'callback': callbackName
};
//Declare the global callback
window[callbackName] = function() {
resolve();
//Delete callback
setTimeout(function() {
try {
delete window[callbackName];
} catch(e) {}
},
20);
};
//Can't use the jXHR promise because 'script' doesn't support 'callback=?'
$.ajax({
dataType: 'script',
data: params,
url: 'http://maps.googleapis.com/maps/api/js'
});
}
promise = deferred.promise();
return promise;
};
} (jQuery));