',{id:'showLinkedPortalContainer'}).appendTo('#portaldetails');
function renderLinkedPortal(linkGuid) {
if(c > 16) return;
var key = this; // passed by Array.prototype.forEach
var link = window.links[linkGuid].options.data;
var guid = link[key + 'Guid'];
var lat = link[key + 'LatE6']/1E6;
var lng = link[key + 'LngE6']/1E6;
var length = L.latLng(link.oLatE6/1E6, link.oLngE6/1E6).distanceTo([link.dLatE6/1E6, link.dLngE6/1E6]);
var lengthFull = digits(Math.round(length)) + 'm';
var lengthShort = length < 100000 ? lengthFull : digits(Math.round(length/1000)) + 'km'
var div = $('
').addClass('showLinkedPortalLink showLinkedPortalLink' + c + (key=='d' ? ' outgoing' : ' incoming'));
var title;
var data = (portals[guid] && portals[guid].options.data) || portalDetail.get(guid) || null;
if(data && data.title) {
title = data.title;
div.append($('
![]()
').attr({
'src': fixPortalImageUrl(data.image),
'class': 'minImg',
'alt': title,
}));
} else {
title = 'Go to portal';
div
.addClass('outOfRange')
.append($('
')
.html('Portal not loaded.
' + lengthShort));
}
div
.attr({
'data-guid': guid,
'data-lat': lat,
'data-lng': lng,
'title': $('
')
.append($('
').text(title))
.append($('
'))
.append($('
').text(key=='d' ? '↴ outgoing link' : '↳ incoming link'))
.append($('
'))
.append($('
').html(lengthFull))
.html(),
})
.appendTo('#showLinkedPortalContainer');
c++;
}
portalLinks.out.forEach(renderLinkedPortal, 'd');
portalLinks.in.forEach(renderLinkedPortal, 'o');
if(length > 16) {
$('
')
.addClass('showLinkedPortalLink showLinkedPortalOverflow')
.text(length-16 + ' more')
.appendTo('#showLinkedPortalContainer');
}
$('#showLinkedPortalContainer')
.on('click', '.showLinkedPortalLink', plugin.showLinkedPortal.onLinkedPortalClick)
.on('mouseover', '.showLinkedPortalLink', plugin.showLinkedPortal.onLinkedPortalMouseOver)
.on('mouseout', '.showLinkedPortalLink', plugin.showLinkedPortal.onLinkedPortalMouseOut);
}
plugin.showLinkedPortal.onLinkedPortalClick = function() {
plugin.showLinkedPortal.removePreview();
var element = $(this);
var guid = element.attr('data-guid');
var lat = element.attr('data-lat');
var lng = element.attr('data-lng');
if(!guid) return; // overflow
var position = L.latLng(lat, lng);
if(!map.getBounds().contains(position)) map.setView(position);
if(portals[guid])
renderPortalDetails(guid);
else
zoomToAndShowPortal(guid, position);
};
plugin.showLinkedPortal.onLinkedPortalMouseOver = function() {
plugin.showLinkedPortal.removePreview();
var element = $(this);
var lat = element.attr('data-lat');
var lng = element.attr('data-lng');
if(!(lat && lng)) return; // overflow
var remote = L.latLng(lat, lng);
var local = portals[selectedPortal].getLatLng();
plugin.showLinkedPortal.preview = L.layerGroup().addTo(map);
L.circleMarker(remote, plugin.showLinkedPortal.previewOptions)
.addTo(plugin.showLinkedPortal.preview);
L.geodesicPolyline([local, remote], plugin.showLinkedPortal.previewOptions)
.addTo(plugin.showLinkedPortal.preview);
};
plugin.showLinkedPortal.onLinkedPortalMouseOut = function() {
plugin.showLinkedPortal.removePreview();
};
plugin.showLinkedPortal.removePreview = function() {
if(plugin.showLinkedPortal.preview)
map.removeLayer(plugin.showLinkedPortal.preview);
plugin.showLinkedPortal.preview = null;
};
var setup = function () {
window.addHook('portalDetailsUpdated', window.plugin.showLinkedPortal.portalDetail);
$('