'use strict';
|
var L = global.L || require('leaflet');
|
var Promise = require('lie');
|
|
module.exports = function (url, options) {
|
options = options || {};
|
var head = document.getElementsByTagName('head')[0];
|
var scriptNode = L.DomUtil.create('script', '', head);
|
var cbName, ourl, cbSuffix, cancel;
|
var out = new Promise(function (resolve, reject) {
|
cancel = reject;
|
var cbParam = options.cbParam || 'callback';
|
if (options.callbackName) {
|
cbName = options.callbackName;
|
} else {
|
cbSuffix = '_' + ('' + Math.random()).slice(2);
|
cbName = '_leafletJSONPcallbacks.' + cbSuffix;
|
}
|
scriptNode.type = 'text/javascript';
|
if (cbSuffix) {
|
if (!global._leafletJSONPcallbacks) {
|
global._leafletJSONPcallbacks = {
|
length: 0
|
};
|
}
|
global._leafletJSONPcallbacks.length++;
|
global._leafletJSONPcallbacks[cbSuffix] = function (data) {
|
head.removeChild(scriptNode);
|
delete global._leafletJSONPcallbacks[cbSuffix];
|
global._leafletJSONPcallbacks.length--;
|
if (!global._leafletJSONPcallbacks.length) {
|
delete global._leafletJSONPcallbacks;
|
}
|
resolve(data);
|
};
|
}
|
if (url.indexOf('?') === -1) {
|
ourl = url + '?' + cbParam + '=' + cbName;
|
} else {
|
ourl = url + '&' + cbParam + '=' + cbName;
|
}
|
scriptNode.src = ourl;
|
}).then(null, function (reason) {
|
head.removeChild(scriptNode);
|
delete L.Util.ajax.cb[cbSuffix];
|
return reason;
|
});
|
out.abort = cancel;
|
return out;
|
};
|