mirror of https://github.com/rscmbbng/Border-Check
psy
11 years ago
6 changed files with 8519 additions and 29 deletions
File diff suppressed because one or more lines are too long
@ -0,0 +1,228 @@ |
|||||
|
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(); |
||||
|
}); |
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue