diff --git a/plugins/show-linked-portals.user.js b/plugins/show-linked-portals.user.js new file mode 100644 index 00000000..e39719cd --- /dev/null +++ b/plugins/show-linked-portals.user.js @@ -0,0 +1,127 @@ +// ==UserScript== +// @id iitc-plugin-show-linked-portals@fstopienski +// @name IITC plugin: Show linked portals +// @version 0.0.1.@@DATETIMEVERSION@@ +// @namespace https://github.com/jonatkins/ingress-intel-total-conversion +// @updateURL @@UPDATEURL@@ +// @downloadURL @@DOWNLOADURL@@ +// @description [@@BUILDNAME@@-@@BUILDDATE@@] Tries to show the linked portals (image, name and address) in portal detail view and jump to linked portal on click +// @include https://www.ingress.com/intel* +// @include http://www.ingress.com/intel* +// @match https://www.ingress.com/intel* +// @match http://www.ingress.com/intel* +// ==/UserScript== + +/* +* 0.0.1 initial release, show images, names and addresses of linked portal in portal detailview +* - mouse click of the linked portal image selected the portal and adjust map +* - click of "Linked Portal is out of range" zoom a step out +*/ + +function wrapper() { +// ensure plugin framework is there, even if iitc is not yet loaded +if (typeof window.plugin !== 'function') { + window.plugin = function () { + }; +} + +// PLUGIN START //////////////////////////////////////////////////////// + +// use own namespace for plugin +window.plugin.showLinkedPortal = function () { +}; + +window.plugin.showLinkedPortal.handleUpdate = function () { + if (!requests.isLastRequest('getThinnedEntitiesV2')) { + return; + } +} + +window.plugin.showLinkedPortal.portalDetail = function (data) { + + var d = data.portalDetails.portalV2, + c = 1, + classAdd = ''; + //get linked portals + $(d.linkedEdges).each(function () { + if (c < 5) { + classAdd = ' showLinkedPortalLinkLeft'; + } + else { + classAdd = ' showLinkedPortalLinkRight'; + } + var portalInfo = window.plugin.showLinkedPortal.getPortalByGuid(this.otherPortalGuid); + $('#portaldetails').append(''); + c = c + 1; + }); + + $('.showLinkedPortalLink:not(.outOfRange)').bind('click', function () { + var guid = $(this).attr('data-guid'); + if (window.portals[guid] !== undefined) { + window.selectPortal($(this).attr('data-guid')); + window.renderPortalDetails(window.selectedPortal); + var portalDetails = window.portals[guid].options.details; + var lat0 = portalDetails.locationE6.latE6 / 1E6; + var lon0 = portalDetails.locationE6.lngE6 / 1E6; + var Rlatlng = [lat0, lon0]; + map.setView(Rlatlng, map.getZoom()); + } + else { + map.setZoom((map.getZoom() - 1)); + } + }); +} + +window.plugin.showLinkedPortal.getPortalByGuid = function (guid) { + var portalInfoString = 'Linked Portal out of range.'; + if (window.portals[guid] !== undefined) { + var portalDetails = window.portals[guid].options.details; + portalInfoString = ''; + var portalNameAdressAlt = "'" + portalDetails.portalV2.descriptiveText.TITLE + "' (" + portalDetails.portalV2.descriptiveText.ADDRESS + ")"; + var portalNameAdressTitle = "'" + portalDetails.portalV2.descriptiveText.TITLE + "'
(" + portalDetails.portalV2.descriptiveText.ADDRESS + ")"; + portalInfoString = '' + portalNameAdressAlt + ''; + } + return portalInfoString; +}; + +window.plugin.showLinkedPortal.setupCallback = function () { + // make the value update when the map data updates + var handleDataResponseOrig = window.handleDataResponse; + window.handleDataResponse = function (data, textStatus, jqXHR) { + handleDataResponseOrig(data, textStatus, jqXHR); + window.renderPortalDetails(window.selectedPortal); + } +} + +var setup = function () { + window.addHook('requestFinished', window.plugin.showLinkedPortal.handleUpdate); + window.addHook('portalDetailsUpdated', window.plugin.showLinkedPortal.portalDetail); + $('head').append(''); + window.plugin.showLinkedPortal.setupCallback(); +} +// PLUGIN END ////////////////////////////////////////////////////////// + +if (window.iitcLoaded && typeof setup === 'function') { + setup(); +} else { + if (window.bootPlugins) + window.bootPlugins.push(setup); + else + window.bootPlugins = [setup]; +} +} // wrapper end +// inject code into site context +var script = document.createElement('script'); +script.appendChild(document.createTextNode('(' + wrapper + ')();')); +(document.body || document.head || document.documentElement).appendChild(script);