Loader
function Loader() {
}
Loader.prototype = {
| 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);
},
| Option name | Type | Description | 
|---|---|---|
| url | ||
| type | 
Append item to map
append: function (url, type) {
    return map.add(url, type, true)
}
    };
    return Loader;
| 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();
        });
    });
}
})();