so others may contribute
This commit is contained in:
108
code/portal_detail_display.js
Normal file
108
code/portal_detail_display.js
Normal file
@ -0,0 +1,108 @@
|
||||
|
||||
// PORTAL DETAILS MAIN ///////////////////////////////////////////////
|
||||
// main code block that renders the portal details in the sidebar and
|
||||
// methods that highlight the portal in the map view.
|
||||
|
||||
window.renderPortalDetails = function(guid) {
|
||||
var update = selectPortal(guid);
|
||||
var d = portalsDetail[guid];
|
||||
|
||||
// collect some random data that’s not worth to put in an own method
|
||||
var links = {incoming: 0, outgoing: 0};
|
||||
if(d.portalV2.linkedEdges) $.each(d.portalV2.linkedEdges, function(ind, link) {
|
||||
links[link.isOrigin ? 'outgoing' : 'incoming']++;
|
||||
});
|
||||
var linksText = 'links: ↳ ' + links.incoming+' • '+links.outgoing+' ↴';
|
||||
|
||||
var player = d.captured && d.captured.capturingPlayerId
|
||||
? getPlayerName(d.captured.capturingPlayerId)
|
||||
: null;
|
||||
var playerText = player ? 'owner: ' + player : null;
|
||||
|
||||
var time = d.captured ? unixTimeToString(d.captured.capturedTime) : null;
|
||||
var sinceText = time ? 'since: ' + time : null;
|
||||
|
||||
// collect and html-ify random data
|
||||
var randDetails = [playerText, sinceText, getRangeText(d), getEnergyText(d), linksText, getAvgResoDistText(d)];
|
||||
randDetails = randDetails.map(function(e) {
|
||||
if(!e) return '';
|
||||
e = e.split(':');
|
||||
e = '<aside>'+e.shift()+'<span>'+e.join(':')+'</span></aside>';
|
||||
return e;
|
||||
}).join('\n');
|
||||
|
||||
// replacing causes flicker, so if the selected portal does not
|
||||
// change, only update the data points that are likely to change.
|
||||
if(update) {
|
||||
console.log('Updating portal details');
|
||||
$('#level').text(Math.floor(getPortalLevel(d)));
|
||||
$('.mods').html(getModDetails(d));
|
||||
$('#randdetails').html(randDetails);
|
||||
$('#resodetails').html(getResonatorDetails(d));
|
||||
$('#portaldetails').attr('class', TEAM_TO_CSS[getTeam(d)]);
|
||||
} else {
|
||||
console.log('exchanging portal details');
|
||||
setPortalIndicators(d);
|
||||
var img = d.imageByUrl && d.imageByUrl.imageUrl ? d.imageByUrl.imageUrl : DEFAULT_PORTAL_IMG;
|
||||
|
||||
var lat = d.locationE6.latE6;
|
||||
var lng = d.locationE6.lngE6;
|
||||
var perma = 'http://ingress.com/intel?latE6='+lat+'&lngE6='+lng+'&z=17&pguid='+guid;
|
||||
|
||||
$('#portaldetails')
|
||||
.attr('class', TEAM_TO_CSS[getTeam(d)])
|
||||
.html(''
|
||||
+ '<h3>'+d.portalV2.descriptiveText.TITLE+'</h3>'
|
||||
+ '<div class="imgpreview"><img src="'+img+'" title="'+getPortalDescriptionFromDetails(d)+'\n\nClick to show full image."/></div>'
|
||||
+ '<span id="level">'+Math.floor(getPortalLevel(d))+'</span>'
|
||||
+ '<div class="mods">'+getModDetails(d)+'</div>'
|
||||
+ '<div id="randdetails">'+randDetails+'</div>'
|
||||
+ '<div id="resodetails">'+getResonatorDetails(d)+'</div>'
|
||||
+ '<div class="linkdetails">'
|
||||
+ '<aside><a href="'+perma+'">portal link</a></aside>'
|
||||
+ '<aside><a onclick="window.reportPortalIssue(\''+getReportIssueInfoText(d)+'\')">report issue</a></aside>'
|
||||
+ '</div>'
|
||||
);
|
||||
}
|
||||
|
||||
// try to resolve names that were required for above functions, but
|
||||
// weren’t available yet.
|
||||
resolvePlayerNames();
|
||||
}
|
||||
|
||||
// draws link-range and hack-range circles around the portal with the
|
||||
// given details.
|
||||
window.setPortalIndicators = function(d) {
|
||||
if(portalRangeIndicator) map.removeLayer(portalRangeIndicator);
|
||||
var range = getPortalRange(d);
|
||||
var coord = [d.locationE6.latE6/1E6, d.locationE6.lngE6/1E6];
|
||||
portalRangeIndicator = (range > 0
|
||||
? L.circle(coord, range, { fill: false, color: RANGE_INDICATOR_COLOR, weight: 3, clickable: false })
|
||||
: L.circle(coord, range, { fill: false, stroke: false, clickable: false })
|
||||
).addTo(map);
|
||||
if(!portalAccessIndicator)
|
||||
portalAccessIndicator = L.circle(coord, HACK_RANGE,
|
||||
{ fill: false, color: ACCESS_INDICATOR_COLOR, weight: 2, clickable: false }
|
||||
).addTo(map);
|
||||
else
|
||||
portalAccessIndicator.setLatLng(coord);
|
||||
|
||||
}
|
||||
|
||||
// highlights portal with given GUID. Automatically clears highlights
|
||||
// on old selection. Returns false if the selected portal changed.
|
||||
// Returns true if it’s still the same portal that just needs an
|
||||
// update.
|
||||
window.selectPortal = function(guid) {
|
||||
var update = selectedPortal === guid;
|
||||
var oldPortal = portals[selectedPortal];
|
||||
if(!update && oldPortal)
|
||||
oldPortal.setStyle({color: oldPortal.options.fillColor});
|
||||
|
||||
selectedPortal = guid;
|
||||
|
||||
if(portals[guid])
|
||||
portals[guid].bringToFront().setStyle({color: COLOR_SELECTED_PORTAL});
|
||||
|
||||
return update;
|
||||
}
|
Reference in New Issue
Block a user