60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
/*
|
|
* Add async initialization of layers to L.Control.Layers
|
|
*/
|
|
L.Control.Layers.include({
|
|
_loadScripts: function(scripts, cb, args) {
|
|
if (!scripts || scripts.length === 0)
|
|
return cb(args);
|
|
var _this = this, s = scripts.pop(), c;
|
|
c = L.Control.Layers._script_cache[s];
|
|
if (c === undefined) {
|
|
c = {url: s, wait: []};
|
|
//console.info("Load " + s);
|
|
var script = document.createElement('script');
|
|
script.src = s;
|
|
script.type = 'text/javascript';
|
|
script.onload = function () {
|
|
var i = 0;
|
|
for (i = 0; i < c.wait.length; i++)
|
|
c.wait[i]();
|
|
};
|
|
c.e = script;
|
|
document.getElementsByTagName('head')[0].appendChild(script);
|
|
}
|
|
function _cb() { _this._loadScripts(scripts, cb, args); }
|
|
c.wait.push(_cb);
|
|
if (c.e.readyState === 'completed')
|
|
_cb();
|
|
L.Control.Layers._script_cache[s] = c;
|
|
},
|
|
|
|
addLayerDef: function(name, def) {
|
|
if (this._layer_defs === undefined)
|
|
this._layer_defs = {};
|
|
this._layer_defs[name] = def;
|
|
},
|
|
|
|
addLayerDefs: function(defs) {
|
|
if (this._layer_defs === undefined)
|
|
this._layer_defs = {};
|
|
L.Util.extend(this._layer_defs, defs);
|
|
},
|
|
|
|
loadLayer: function(name, deflt) {
|
|
var _this = this, l = this._layer_defs[name];
|
|
l['default'] = deflt;
|
|
this._loadScripts(l.js.reverse(), function(l) {_this._loadLayer(l);}, l);
|
|
},
|
|
|
|
_loadLayer: function(l) {
|
|
var x = l.init();
|
|
if (l['default'] && this._map)
|
|
this._map.addLayer(x);
|
|
if (!l.overlay)
|
|
this.addBaseLayer(x, l.name);
|
|
else
|
|
this.addOverlay(x, l.name);
|
|
}
|
|
});
|
|
|
|
L.Control.Layers._script_cache = {};
|