Subversion Repositories eFlore/Applications.moissonnage

Compare Revisions

Ignore whitespace Rev 5 → Rev 6

/trunk/widget/modules/carto/squelettes/scripts/layer/Layer.Deferred.js
New file
0,0 → 1,57
L.DeferredLayer = L.LayerGroup.extend({
options: {
js: [],
init: null
},
 
_script_cache: {},
 
initialize: function(options) {
L.Util.setOptions(this, options);
L.LayerGroup.prototype.initialize.apply(this);
this._loaded = false;
},
 
onAdd: function(map) {
L.LayerGroup.prototype.onAdd.apply(this, [map]);
if (this._loaded) return;
//console.info("Script cache", this._script_cache);
var loaded = function() {
//console.info("Loaded", this, this.options);
this._loaded = true;
var l = this.options.init();
if (l)
this.addLayer(l);
}
this._loadScripts(this.options.js.reverse(), L.Util.bind(loaded, this));
},
 
_loadScripts: function(scripts, cb, args) {
if (!scripts || scripts.length == 0)
return cb(args);
var _this = this, s = scripts.pop(), c;
c = this._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 () {
//console.info("Element(cb)", c.e.readyState);
c.e.readyState = "completed";
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);
//console.info("Element", c.e.readyState);
if (c.e.readyState == "completed")
_cb();
this._script_cache[s] = c;
}
});