ФRuŠKać

Loader

constructor
Loader()

Loader

function Loader() {
}

Loader

prototype
Loader.prototype

Loader.prototype = {

load

method
Loader.prototype.load()

Option name Type Description
items Array

Load items

load: function (items) {

    var promises = [];

    items.forEach(function (item) {

        if (item.constructor !== Array) {
            item = Object.keys(item).map(function (key) {
                return item[key];
            });
        }

        promises.push(load.apply(this, item));
    });

    return Promise.all(promises);

},

append

method
Loader.prototype.append()

Option name Type Description
url
type

Append item to map

append: function (url, type) {
    return map.add(url, type, true)
}

    };

    return Loader;

load

function
load()

Option name Type Description
url string
name string
type string
options object

Initialize layers

function load(url, name, type, options) {

    options = util.extend({
        visible: false,
        show: [],
        hide: [],
        color: null
    }, options);

    return storage.add({
        id: name.toLowerCase(),
        visible: options.visible,
        on: options.visible
    }).then(function () {

        return new Promise(function (resolve) {

            var request = new XMLHttpRequest();

            request.open('GET', url, true);

            request.onload = function () {

                if (request.status >= 200 && request.status < 400) {

                    var promises = [];

                    JSON.parse(request.responseText).forEach(function (item) {
                        var p, container = storage.get([name, item.tag]);

                        var v = (function () {

                            if (options.show.length) { // whitelist
                                return options.show.indexOf(item.tag) !== -1;
                            }

                            if (options.hide.length) { // blacklist
                                return options.show.indexOf(item.tag) === -1;
                            }

                            return options.visible;

                        })();

                        if (container) {
                            // dummy promise to allow promise chain
                            p = new Promise(function (resolve) {
                                resolve();
                            });
                        } else {
                            // create subcategory
                            p = storage.add({
                                id: item.tag.toLowerCase(),
                                visible: v,
                                on: v,
                                type: type
                            }, name);
                        }

                        p.then(function () {
                            // when subcategory is created, add map item to storage
                            storage.add(item, [name.toLowerCase(), item.tag], type, v, options.color);
                        });

                        promises.push(p);

                    });

                    Promise.all(promises).then(function () {
                        resolve();
                    });

                }
            };

            request.send();

        });

    });
}

})();