mirror of https://github.com/rscmbbng/Border-Check
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
5.6 KiB
228 lines
5.6 KiB
var DEFAULT_POINT = new L.LatLng(52.50085, 13.42232);
|
|
var map;
|
|
var rapath;
|
|
var info;
|
|
|
|
function RaPath() {
|
|
this.layers = [];
|
|
this.timeout = null;
|
|
}
|
|
|
|
RaPath.prototype = {
|
|
addPathPart: function (hop_src, hop_dest, cb) {
|
|
var b = new R.BezierAnim([hop_src.p, hop_dest.p], {}, function () {
|
|
if (cb)
|
|
cb();
|
|
});
|
|
this.layers.push(b);
|
|
map.addLayer(b);
|
|
},
|
|
addPulse: function (hop) {
|
|
var pulse = new R.Pulse(
|
|
hop.p,
|
|
3,
|
|
{'stroke': '#2478ad', 'fill': '#30a3ec'},
|
|
{'stroke': '#30a3ec', 'stroke-width': 2});
|
|
pulse.tooltip = this.getHopsText(hop);
|
|
// var caller = this;
|
|
pulse.click = function (e) {
|
|
//alert(caller.getHopsText(hop));
|
|
// var popup = L.popup()
|
|
// .setLatLng(hop.p)
|
|
// .setContent(caller.getHopsText(hop))
|
|
// .openOn(map);
|
|
};
|
|
this.layers.push(pulse);
|
|
map.addLayer(pulse);
|
|
return pulse;
|
|
},
|
|
getHopsText: function (hop) {
|
|
return hop.ip + ' - ' + (hop.geo.city ? hop.geo.city + ', ' : '') + hop.geo.country;
|
|
},
|
|
clear: function () {
|
|
if (this.timeout)
|
|
window.clearTimeout(this.timeout);
|
|
this.timeout = null;
|
|
this.setButton(false);
|
|
if (this.layers.length > 0)
|
|
this.layers.forEach(function (l) {
|
|
map.removeLayer(l);
|
|
});
|
|
info.clear();
|
|
},
|
|
setButton: function (active) {
|
|
if (this.geotrace)
|
|
if (active)
|
|
$('#btn_' + this.geotrace.id).addClass('btn_active', active);
|
|
else
|
|
$('#btn_' + this.geotrace.id).removeClass('btn_active', active);
|
|
},
|
|
start: function (geotrace) {
|
|
$('.leaflet-top').fadeIn();
|
|
this.clear();
|
|
this.geotrace = geotrace;
|
|
this.layers = [];
|
|
info.append(texts.requestline + ' ' + geotrace.name);
|
|
this.setButton(true);
|
|
this.processStep(0);
|
|
},
|
|
processStep: function (index) {
|
|
var hop = this.geotrace.hops[index];
|
|
info.append(this.getHopsText(hop));
|
|
this.addPulse(hop);
|
|
map.panTo(hop.p);
|
|
var caller = this;
|
|
this.timeout = window.setTimeout(function () {
|
|
caller.stepPath(index + 1);
|
|
}, 200);
|
|
},
|
|
displayEnd: function () {
|
|
//this.setButton(false); just let it active
|
|
//$('.leaflet-control-zoom').show();
|
|
var result = [];
|
|
for (key in this.geotrace.agencies) {
|
|
result.push(this.geotrace.agencies[key].name + ' (' + this.geotrace.agencies[key].cc + ')');
|
|
}
|
|
info.append('<div id="agencies">' + texts.resultline + '</div>');
|
|
info.append('<div id="agencies">' + result.join(' - ') + '</div>');
|
|
map.fitBounds(this.geotrace.bounds);
|
|
},
|
|
stepPath: function (index) {
|
|
var caller = this;
|
|
if (index >= this.geotrace.hops.length) {
|
|
this.timeout = window.setTimeout(function () {
|
|
caller.displayEnd();
|
|
}, 3000);
|
|
return;
|
|
}
|
|
this.addPathPart(this.geotrace.hops[index - 1], this.geotrace.hops[index], function () {
|
|
caller.processStep(index);
|
|
});
|
|
}
|
|
};
|
|
|
|
function getUrlVars() { // Read a page's GET URL variables and return them as an associative array.
|
|
var vars = {},
|
|
hash;
|
|
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
|
|
for (var i = 0; i < hashes.length; i++) {
|
|
hash = hashes[i].split('=');
|
|
vars[hash[0]] = hash[1];
|
|
}
|
|
return vars;
|
|
}
|
|
|
|
function init() {
|
|
try {
|
|
var query = getUrlVars();
|
|
if (query.src) {
|
|
if (query.src == 'ch')
|
|
selectSrc('ch');
|
|
else
|
|
if (query.src == 'fr')
|
|
selectSrc('fr');
|
|
}
|
|
if ((query.colors) && (query.colors == "nzz")) {
|
|
$('body').attr('colors', "nzz");
|
|
}
|
|
|
|
}
|
|
catch (e) {
|
|
//nop;
|
|
}
|
|
|
|
map = new L.Map("map", { center: DEFAULT_POINT, zoom: 3});
|
|
|
|
map.addLayer(
|
|
new L.TileLayer("http://trace.opendatacloud.de/{z}/{x}/{y}.png ",
|
|
{attribution: 'OpenDataCity, CC-BY',
|
|
minZoom: 2,
|
|
maxZoom: 5}
|
|
)
|
|
);
|
|
|
|
rapath = new RaPath();
|
|
|
|
var legend = L.control({position: 'bottomleft'});
|
|
legend.onAdd = function (map) {
|
|
var div = L.DomUtil.create('div', 'legend');
|
|
$(div).html('<div class="legend border"><span id="cable"> </span> ' + texts.cable + '</div>');
|
|
return div;
|
|
};
|
|
legend.addTo(map);
|
|
|
|
info = L.control({position: 'topleft'});
|
|
info.onAdd = function (map) {
|
|
var div = L.DomUtil.create('div', 'hops');
|
|
this._div = $(div);
|
|
this._div.attr('id', 'hops');
|
|
this._div.empty();
|
|
if (isFrame) {
|
|
this.append('<span class="upper">' + texts.tagline + '</span>');
|
|
this.append(texts.subline);
|
|
this.append(texts.helpline);
|
|
}
|
|
return div;
|
|
};
|
|
info.setText = function (txt) {
|
|
this._div.text(txt);
|
|
};
|
|
info.setHTML = function (h) {
|
|
this._div.html(h);
|
|
};
|
|
info.append = function (txt) {
|
|
if (this._div.children().length > 30)
|
|
this._div.children().first().remove();
|
|
this._div.append('<p>' + txt + '</p>');
|
|
|
|
this._div.scrollTop(this._div.prop("scrollHeight"));
|
|
};
|
|
info.clear = function () {
|
|
this._div.empty();
|
|
};
|
|
info.addTo(map);
|
|
|
|
|
|
//var lines = [texts.helpline];
|
|
//new Typing().beginTyping(lines, $('#hops'));
|
|
}
|
|
|
|
function showRoute(id) {
|
|
if (routedata[id]) {
|
|
var route_agencies = {};
|
|
var routes = routedata[id].routes;
|
|
if (routes && routes.length) {
|
|
var route = routes[(parseInt((Math.random() * 1000), 10) % routes.length)];
|
|
var geotrace = {};
|
|
geotrace.hops = [];
|
|
for (var i = 0; i < route.trace.length; i++) {
|
|
var ip = route.trace[i];
|
|
var geo = geoinfo[ip];
|
|
var hop = {
|
|
p: new L.LatLng(geo.lat, geo.lng),
|
|
ip: ip,
|
|
geo: geo
|
|
};
|
|
var agency = agencies[geo.cc];
|
|
if (agency)
|
|
route_agencies[agency.name] = agency;
|
|
geotrace.hops.push(hop);
|
|
}
|
|
var southWest = new L.LatLng(route.south, route.west),
|
|
northEast = new L.LatLng(route.north, route.east);
|
|
geotrace.bounds = new L.LatLngBounds(southWest, northEast);
|
|
geotrace.agencies = route_agencies;
|
|
geotrace.id = id;
|
|
geotrace.name = routedata[id].name;
|
|
rapath.start(geotrace);
|
|
}
|
|
}
|
|
}
|
|
|
|
function selectSrc(cc) {
|
|
$('body').attr('requests', cc);
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
init();
|
|
});
|