NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @id iitc-plugin-portal-links-on-map@odrick // @name IITC plugin: Portal links on map // @author Odrick // @category Portal info // @license MIT // @version 0.0.2 // @description Show portal links and linked portals on map // @include https://*.ingress.com/intel* // @include http://*.ingress.com/intel* // @match https://*.ingress.com/intel* // @match http://*.ingress.com/intel* // @include https://*.ingress.com/mission/* // @include http://*.ingress.com/mission/* // @match https://*.ingress.com/mission/* // @match http://*.ingress.com/mission/* // @grant none // @namespace https://greasyfork.org/users/410740 // ==/UserScript== function wrapper(plugin_info) { if(typeof window.plugin !== 'function') window.plugin = function() {}; plugin_info.buildName = 'Portal links on map'; plugin_info.dateTimeVersion = '20191130163000'; plugin_info.pluginId = 'iitc-plugin-portal-links-on-map@odrick'; window.plugin.portalLinksOnMap = function () {}; var viewOutOptions = { color: "#ff6666", opacity: 1, weight: 2, fill: false, interactive: false, clickable: false, radius: 8 }; var viewInOptions = { color: "#ffff66", opacity: 1, weight: 2, fill: false, interactive: false, clickable: false, radius: 8 }; var viewCurrentOptions = { color: "#ffffff", opacity: 1, weight: 2, fill: false, interactive: false, clickable: false, radius: 8 }; var viewCurrentFullOptions = { color: "#ff0000", opacity: 1, weight: 2, fill: false, interactive: false, clickable: false, radius: 8 }; function highLightLink(sourcePortal, isIn, guid) { var link = window.links[guid]; var portalGuid; if(isIn) portalGuid = link.options.data.oGuid; else portalGuid = link.options.data.dGuid; var portal = window.portals[portalGuid]; if(!portal) return; var options = isIn ? viewInOptions : viewOutOptions; L.circleMarker(portal.getLatLng(), options).addTo(viewLayer); L.geodesicPolyline([sourcePortal.getLatLng(), portal.getLatLng()], options).addTo(viewLayer); } window.plugin.portalLinksOnMap.handlePortalSelect = function(data) { viewLayer.clearLayers(); var portal = window.portals[data.selectedPortalGuid]; var links = getPortalLinks(data.selectedPortalGuid); for(var i=0; i<links.in.length; i++) { highLightLink(portal, true, links.in[i]); } for(i=0; i<links.out.length; i++) { highLightLink(portal, false, links.out[i]); } L.circleMarker(portal.getLatLng(), links.out.length >= 8 ? viewCurrentFullOptions : viewCurrentOptions).addTo(viewLayer); var outCount = L.marker(portal.getLatLng(), { icon: L.divIcon({ className: 'plugin-portal-links-on-map-out', iconAnchor: [15,30], iconSize: [12,10], html: links.out.length + '↑' }), guid: data.selectedPortalGuid + '_out' }); outCount.addTo(viewLayer); var inCount = L.marker(portal.getLatLng(), { icon: L.divIcon({ className: 'plugin-portal-links-on-map-in', iconAnchor: [-5,30], iconSize: [12,10], html: links.in.length + '↓' }), guid: data.selectedPortalGuid + '_in' }); inCount.addTo(viewLayer); }; function setupCSS() { $("<style>") .prop("type", "text/css") .html(".plugin-portal-links-on-map-out {\ font-size: 14px;\ font-weight: bold;\ color: #ff9999;\ font-family: monospace;\ text-align: center;\ text-shadow: 0 0 3px black, 0 0 3px black, 0 0 3px black;\ pointer-events: none;\ -webkit-text-size-adjust:none;\ }\ .plugin-portal-links-on-map-in {\ font-size: 14px;\ font-weight: bold;\ color: #ffff66;\ font-family: monospace;\ text-align: center;\ text-shadow: 0 0 3px black, 0 0 3px black, 0 0 3px black;\ pointer-events: none;\ -webkit-text-size-adjust:none;\ }") .appendTo("head"); } var viewLayer; function setup() { setupCSS(); window.addHook('portalSelected', window.plugin.portalLinksOnMap.handlePortalSelect); viewLayer = new L.LayerGroup(); window.addLayerGroup('Portal Links', viewLayer, false); } setup.info = plugin_info; if (!window.bootPlugins) window.bootPlugins = []; window.bootPlugins.push(setup); if (window.iitcLoaded && typeof setup === 'function') setup(); } var script = document.createElement('script'); var info = {}; if(typeof GM_info !== 'undefined' && GM_info && GM_info.script) { info.script = { version: GM_info.script.version, name: GM_info.script.name, description: GM_info.script.description }; } var textContent = document.createTextNode('('+ wrapper +')('+ JSON.stringify(info) +')'); script.appendChild(textContent); (document.body || document.head || document.documentElement).appendChild(script);