// ==UserScript== // @author itayo // @id IngressMaxFields@itayo // @name Ingress Maxfields // @category Information // @version 0.2.0.0 // @namespace http://github.com/jonatkins/ingress-intel-total-conversion // @updateURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/itayo/IngressMaxFields.meta.js // @downloadURL https://raw.githubusercontent.com/IITC-CE/Community-plugins/master/dist/itayo/IngressMaxFields.user.js // @description Exports portals in the format for http://www.ingress-maxfield.com/ and allow direct transfer to site // @include https://intel.ingress.com/* // @match https://intel.ingress.com/* // @grant none // ==/UserScript== /*global $:false */ /*global map:false */ /*global L:false */ function wrapper() { // in case IITC is not available yet, define the base plugin object if (typeof window.plugin !== "function") { window.plugin = function() {}; } // base context for plugin window.plugin.ingressmaxfield = function() {}; var self = window.plugin.ingressmaxfield; self.portalInScreen = function portalInScreen(p) { return map.getBounds().contains(p.getLatLng()); }; // adapted from //+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/math/is-point-in-poly [rev. #0] self.portalInPolygon = function portalInPolygon(polygon, portal) { var poly = polygon.getLatLngs(); var pt = portal.getLatLng(); var c = false; for (var i = -1, l = poly.length, j = l - 1; ++i < l; j = i) { ((poly[i].lat <= pt.lat && pt.lat < poly[j].lat) || (poly[j].lat <= pt.lat && pt.lat < poly[i].lat)) && (pt.lng < (poly[j].lng - poly[i].lng) * (pt.lat - poly[i].lat) / (poly[j].lat - poly[i].lat) + poly[i].lng) && (c = !c); } return c; }; // return if the portal is within the drawtool objects. // Polygon and circles are available, and circles are implemented // as round polygons. self.portalInForm = function(layer) { if (layer instanceof L.Rectangle) { return true; } if (layer instanceof L.Circle) { return true; } return false; }; self.portalInGeo = function(layer) { if (layer instanceof L.GeodesicPolygon) { return true; } if (layer instanceof L.GeodesicCircle) { return true; } return false; }; self.portalInDrawnItems = function(portal) { var c = false; window.plugin.drawTools.drawnItems.eachLayer(function(layer) { if (!(self.portalInForm(layer) || self.portalInGeo(layer))) { return false; } if (self.portalInPolygon(layer, portal)) { c = true; } }); return c; }; self.inBounds = function(portal) { if (window.plugin.drawTools && window.plugin.drawTools.drawnItems.getLayers().length) { return self.portalInDrawnItems(portal); } else { return self.portalInScreen(portal); } }; self.genStr = function genStr(title, lat, lng, portalGuid) { var href = "https://www.ingress.com/intel?ll=" + lat + "," + lng + "&z=17&pll=" + lat + "," + lng; var str = ""; var keyCount = 0; str = title; str = str.replace(/\"/g, "\\\""); str = str.replace(";", " "); str = str + ";" + href; if (typeof window.portals[portalGuid] !== "undefined") { if (window.plugin.keys) { keyCount = window.plugin.keys.keys[portalGuid] || 0; } else if (window.plugin.LiveInventory && typeof window.plugin.LiveInventory.keyMap[portalGuid] !== "undefined") { keyCount = window.plugin.LiveInventory.keyMap[portalGuid].count; } str = str + ";" + keyCount; } return str; }; self.genStrFromPortal = function genStrFromPortal(portal, portalGuid) { var lat = portal._latlng.lat, lng = portal._latlng.lng, title = portal.options.data.title || portal.label || "untitled portal"; return self.genStr(title, lat, lng, portalGuid); }; self.managePortals = function managePortals(obj, portal, x) { if (self.inBounds(portal)) { var str = self.genStrFromPortal(portal, x); obj.list.push(str); obj.count += 1; } return obj; }; self.checkPortals = function checkPortals(portals) { var obj = { list: [], count: 0 }; for (var x in portals) { if (typeof window.portals[x] !== "undefined") { self.managePortals(obj, window.portals[x], x); } } return obj; }; // Return markup for the bookmarks to show in the IMF dialog self.renderPortalBookmarkFolders = function renderPortalBookmarkFolder(folders) { var data = "
With Portal Bookmarks, you can populate the list with a folder you have created instead:
"; for (var folder in folders) { if (folders.hasOwnProperty(folder)) { data += `