Subversion Repositories eFlore/Applications.moissonnage

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

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;
        }
});