diff --git a/plugins/show-linked-portals.user.js b/plugins/show-linked-portals.user.js index 55ea87dc..04e832c3 100644 --- a/plugins/show-linked-portals.user.js +++ b/plugins/show-linked-portals.user.js @@ -2,7 +2,7 @@ // @id iitc-plugin-show-linked-portals@fstopienski // @name IITC plugin: Show linked portals // @category Portal Info -// @version 0.2.0.@@DATETIMEVERSION@@ +// @version 0.3.0.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -24,72 +24,83 @@ window.plugin.showLinkedPortal = function () { window.plugin.showLinkedPortal.portalDetail = function (data) { var portalLinks = getPortalLinks(data.guid); + var length = portalLinks.in.length + portalLinks.out.length var c = 1; - $.each(portalLinks.out, function(index,linkGuid) { - // outgoing links - so the other portal is the destination - var otherPortalGuid = window.links[linkGuid].options.data.dGuid; - var portalInfo = window.plugin.showLinkedPortal.getPortalByGuid(otherPortalGuid, true); - $('#portaldetails').append(''); - c = c + 1; - }); - $.each(portalLinks.in, function(index,linkGuid) { - // incoming link - so the other portal is the origin - var otherPortalGuid = window.links[linkGuid].options.data.oGuid; - var portalInfo = window.plugin.showLinkedPortal.getPortalByGuid(otherPortalGuid, false); - $('#portaldetails').append(''); - c = c + 1; - }); + function renderLinkedPortal(linkGuid) { + if(c > 16) return; - $('.showLinkedPortalLink:not(.outOfRange)').bind('click', function () { - var guid = $(this).attr('data-guid'); - window.renderPortalDetails(guid); - var latlng = findPortalLatLng(guid); - if (latlng) { - if (!map.getBounds().pad(-0.1).contains(latlng)) { - map.panTo(latlng); - } + 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 div = $('
').addClass('showLinkedPortalLink showLinkedPortalLink' + c); + + var title; + + if(portals[guid]) { + var data = portals[guid].options.data; + + title = data.title; + div.append($('').attr({ + 'src': fixPortalImageUrl(data.image), + 'class': 'minImg', + 'alt': title, + })); } else { - // no idea where this portal is(!) - so step back one zoom level - map.setZoom(map.getZoom()-1); + title = 'Go to portal'; + div + .addClass('outOfRange') + .append($('') + .text('Portal out of range.')) } - }); + div + .attr({ + 'data-guid': guid, + 'data-lat': lat, + 'data-lng': lng, + 'title': $('
') + .append($('').text(title)) + .append($('
')) + .append($('').text(key=='d' ? '↴ outgoing link' : '↳ incoming link')) + .html(), + }) + .appendTo('#portaldetails'); + + c++; + } + + portalLinks.out.forEach(renderLinkedPortal, 'd'); + portalLinks.in.forEach(renderLinkedPortal, 'o'); + + if(length > 16) { + $('
') + .addClass('showLinkedPortalLink showLinkedPortalOverflow') + .text(length-16 + ' more') + .appendTo('#portaldetails'); + } + + $('#portaldetails').on('click', '.showLinkedPortalLink', plugin.showLinkedPortal.onLinkedPortalClick); } -window.plugin.showLinkedPortal.getPortalByGuid = function (guid,isorigin) { - var linkDirection = $('').text(isorigin?'↴ outgoing link':'↳ incoming link'); +plugin.showLinkedPortal.onLinkedPortalClick = function() { + var element = $(this); + var guid = element.attr('data-guid'); + var lat = element.attr('data-lat'); + var lng = element.attr('data-lng'); - var portalInfoString; + if(!guid) return; // overflow - if (window.portals[guid] !== undefined) { - var portalData = window.portals[guid].options.data; - - var portalNameAddressAlt = "'" + portalData.title + "'"; - var portalNameAddressTitle = $('
').append($('').text(portalData.title)) - .append($('
')) - .append(linkDirection) - .html(); - var imageUrl = fixPortalImageUrl(portalData.image); - portalInfoString = $('
').html($('').attr('src', imageUrl) - .attr('class', 'minImg') - .attr('alt', portalNameAddressAlt) - .attr('title', portalNameAddressTitle)) - .html(); - } else { - var title = $('
').append($('').text('Go to portal')) - .append($('
')) - .append(linkDirection) - .html(); - - portalInfoString = $('
').html($('').attr('class','outOfRange') - .attr('title',title) - .text('Portal out of range.')) - .html(); - } - - return portalInfoString; + var position = L.latLng(lat, lng); + if(!map.getBounds().contains(position)) map.setView(position); + if(portals[guid]) + renderPortalDetails(guid); + else + zoomToAndShowPortal(guid, position); }; var setup = function () { @@ -97,17 +108,18 @@ var setup = function () { $('head').append(''); }