meshviewer/lib/utils/helper.js

243 lines
5.0 KiB
JavaScript
Raw Normal View History

'use strict';
2016-05-27 21:59:01 +00:00
2016-05-26 16:37:24 +00:00
define({
get: function get(url) {
2016-05-26 16:37:24 +00:00
return new Promise(function (resolve, reject) {
var req = new XMLHttpRequest();
req.open('GET', url);
2016-05-26 16:37:24 +00:00
req.onload = function onload() {
if (req.status === 200) {
2016-05-26 16:37:24 +00:00
resolve(req.response);
} else {
2016-05-26 16:37:24 +00:00
reject(Error(req.statusText));
}
};
req.onerror = function onerror() {
reject(Error('Network Error'));
2016-05-26 16:37:24 +00:00
};
req.send();
});
},
getJSON: function getJSON(url) {
return require('helper').get(url).then(JSON.parse);
2016-05-26 16:37:24 +00:00
},
sortByKey: function sortByKey(key, d) {
2016-05-26 16:37:24 +00:00
return d.slice().sort(function (a, b) {
return a[key] - b[key];
}).reverse();
},
limit: function limit(key, m, d) {
return d.filter(function (n) {
return n[key].isAfter(m);
2016-05-26 16:37:24 +00:00
});
},
sum: function sum(a) {
return a.reduce(function (b, c) {
return b + c;
2016-05-26 16:37:24 +00:00
}, 0);
},
one: function one() {
2016-05-26 16:37:24 +00:00
return 1;
},
trueDefault: function trueDefault(d) {
2016-05-26 16:37:24 +00:00
return d === undefined ? true : d;
},
dictGet: function dictGet(dict, key) {
2016-05-26 16:37:24 +00:00
var k = key.shift();
if (!(k in dict)) {
return null;
}
if (key.length === 0) {
2016-05-26 16:37:24 +00:00
return dict[k];
}
return this.dictGet(dict[k], key);
},
localStorageTest: function localStorageTest() {
var test = 'test';
2016-05-26 16:37:24 +00:00
try {
localStorage.setItem(test, test);
localStorage.removeItem(test);
return true;
} catch (e) {
return false;
}
},
listReplace: function listReplace(s, subst) {
2016-05-27 21:59:01 +00:00
for (var key in subst) {
var re = new RegExp(key, 'g');
2016-05-26 16:37:24 +00:00
s = s.replace(re, subst[key]);
}
return s;
},
/* Helpers working with nodes */
offline: function offline(d) {
2016-05-26 16:37:24 +00:00
return !d.flags.online;
},
online: function online(d) {
2016-05-26 16:37:24 +00:00
return d.flags.online;
},
hasLocation: function hasLocation(d) {
return 'location' in d.nodeinfo &&
2016-05-26 16:37:24 +00:00
Math.abs(d.nodeinfo.location.latitude) < 90 &&
Math.abs(d.nodeinfo.location.longitude) < 180;
},
subtract: function subtract(a, b) {
2016-05-26 16:37:24 +00:00
var ids = {};
b.forEach(function (d) {
ids[d.nodeinfo.node_id] = true;
});
return a.filter(function (d) {
return !(d.nodeinfo.node_id in ids);
});
},
/* Helpers working with links */
showDistance: function showDistance(d) {
2016-05-26 16:37:24 +00:00
if (isNaN(d.distance)) {
return '';
2016-05-26 16:37:24 +00:00
}
return d.distance.toFixed(0) + ' m';
2016-05-26 16:37:24 +00:00
},
showTq: function showTq(d) {
return (1 / d.tq * 100).toFixed(0) + '%';
2016-05-26 16:37:24 +00:00
},
attributeEntry: function attributeEntry(el, label, value) {
if (value === null || value === undefined) {
return '';
2016-05-26 16:37:24 +00:00
}
var tr = document.createElement('tr');
var th = document.createElement('th');
2017-01-28 14:33:13 +00:00
th.textContent = _.t(label);
2016-05-26 16:37:24 +00:00
tr.appendChild(th);
var td = document.createElement('td');
2016-05-26 16:37:24 +00:00
if (typeof value === 'function') {
2016-05-26 16:37:24 +00:00
value(td);
} else {
td.appendChild(document.createTextNode(value));
}
tr.appendChild(td);
el.appendChild(tr);
return td;
},
createIframe: function createIframe(opt, width, height) {
var el = document.createElement('iframe');
width = typeof width !== 'undefined' ? width : '525px';
height = typeof height !== 'undefined' ? height : '350px';
2016-05-26 16:37:24 +00:00
if (opt.src) {
el.src = opt.src;
} else {
el.src = opt;
}
if (opt.frameBorder) {
el.frameBorder = opt.frameBorder;
} else {
el.frameBorder = 1;
}
if (opt.width) {
el.width = opt.width;
} else {
el.width = width;
}
if (opt.height) {
el.height = opt.height;
} else {
el.height = height;
}
el.scrolling = 'no';
el.seamless = 'seamless';
2016-05-26 16:37:24 +00:00
return el;
},
showStat: function showStat(o, subst) {
var content;
var caption;
subst = typeof subst !== 'undefined' ? subst : {};
2016-05-26 16:37:24 +00:00
if (o.thumbnail) {
content = document.createElement('img');
content.src = require('helper').listReplace(o.thumbnail, subst);
2016-05-26 16:37:24 +00:00
}
if (o.caption) {
caption = require('helper').listReplace(o.caption, subst);
2016-05-26 16:37:24 +00:00
if (!content) {
content = document.createTextNode(caption);
}
}
if (o.iframe) {
content = require('helper').createIframe(o.iframe, o.width, o.height);
2016-05-26 16:37:24 +00:00
if (o.iframe.src) {
content.src = require('helper').listReplace(o.iframe.src, subst);
2016-05-26 16:37:24 +00:00
} else {
content.src = require('helper').listReplace(o.iframe, subst);
2016-05-26 16:37:24 +00:00
}
}
var p = document.createElement('p');
2016-05-26 16:37:24 +00:00
if (o.href) {
var link = document.createElement('a');
link.target = '_blank';
link.href = require('helper').listReplace(o.href, subst);
2016-05-26 16:37:24 +00:00
link.appendChild(content);
if (caption && o.thumbnail) {
link.title = caption;
}
p.appendChild(link);
} else {
p.appendChild(content);
}
return p;
},
getTileBBox: function getTileBBox(s, map, tileSize, margin) {
var tl = map.unproject([s.x - margin, s.y - margin]);
var br = map.unproject([s.x + margin + tileSize, s.y + margin + tileSize]);
return [br.lat, tl.lng, tl.lat, br.lng];
2016-05-26 16:37:24 +00:00
}
});