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