// ==UserScript== // @name Intel Maps Link Provider // @name:zh-CN Ingress Intel地图链接工具 // @name:zh-TW Ingress Intel地圖連接工具 // @namespace http://cyblocker.com/ // @version 0.9 // @description Provide Ingress Intel map link to the coordinate information on Wikipedia and Geohack. // @description:zh-CN 在维基百科及其链接到的Geohack网站上提供Ingress Intel的地图链接 // @description:zh-TW 在維基百科及其連接到的Geohack上提供Ingress Intel地圖連接 // @author cyblocker // @match https://tools.wmflabs.org/geohack/* // @match https://geohack.toolforge.org/* // @match https://*.wikipedia.org/wiki/* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js // @supportURL https://github.com/cyblocker/Intel-Map-Provider/issues // @grant none // @downloadURL https://update.greasyfork.icu/scripts/398243/Intel%20Maps%20Link%20Provider.user.js // @updateURL https://update.greasyfork.icu/scripts/398243/Intel%20Maps%20Link%20Provider.meta.js // ==/UserScript== (function () { 'use strict'; const GEOHACK_URL_FORMAT = /geohack.toolforge.org\/geohack.php?/i; const OLD_GEOHACK_URL_FORMAT = /tools.wmflabs.org\/geohack\/geohack.php?/i; const WIKIPEDIA_URL_FORMAT = /wikipedia.org\/wiki/i; const GELHACK_DOM_PREFIX = "a[href*='geohack.toolforge.org\/geohack.php?']"; const OLD_GELHACK_DOM_PREFIX = "a[href*='tools.wmflabs.org\/geohack\/geohack.php?']"; const INTEL_URL_PREFIX = "https://intel.ingress.com/intel?ll="; function convertGeoUrlParams(input) { var parts = input.split("_"); var i = 0; var latitude = 0; var devider = 1; for (; i < parts.length; i++) { if (parts[i] != "S" && parts[i] != "N") { latitude = latitude + parts[i] / devider; devider = devider * 60; } else { if (parts[i] == "S") latitude = latitude * -1; break; } } var longitude = 0; devider = 1; for (i = i + 1; i < parts.length; i++) { if (parts[i] != "W" && parts[i] != "E") { longitude = longitude + parts[i] / devider; devider = devider * 60; } else { if (parts[i] == "W") longitude = longitude * -1; break; } } return latitude.toFixed(6) + "," + longitude.toFixed(6); } function getIntelUrl() { var geoUrl; if (GEOHACK_URL_FORMAT.test(document.URL)) { geoUrl = document.URL; } else if (GEOHACK_URL_FORMAT.test(document.body.innerHTML)){ geoUrl = $(GELHACK_DOM_PREFIX).attr("href"); } else { geoUrl = $(OLD_GELHACK_DOM_PREFIX).attr("href"); } var geoParams = /[&?]params=[0-9NSWE_.]+/.exec(geoUrl)[0].slice(8); var intelUrl = INTEL_URL_PREFIX + convertGeoUrlParams(geoParams); return intelUrl; } function getWikiLinkItem(url) { var linkItem = document.createElement("a"); linkItem.setAttribute("href", url); linkItem.setAttribute("target", "_blank"); linkItem.innerHTML = ''; return linkItem; } if (GEOHACK_URL_FORMAT.test(document.URL) || OLD_GEOHACK_URL_FORMAT.test(document.URL)) { // Find correct location and insert if ($("#GEOTEMPLATE-GLOBAL").length != 0) { var mapName = "Map"; if (/language=zh-yue/.test(document.URL)) { mapName = "地圖"; } else if (/language=ja/.test(document.URL)) { mapName = "地図"; } else if (/language=zh/.test(document.URL)) { mapName = "地图"; } var tableNode = document.getElementById("GEOTEMPLATE-GLOBAL").getElementsByTagName("tbody")[0]; // Emsamble the table var insertItem = document.createElement("tr"); var serviceName = document.createElement("th"); serviceName.innerHTML = 'Ingress Logo Ingress Intel Map'; serviceName.setAttribute("scope", "row"); serviceName.setAttribute("style", "font-weight:normal; text-align:left;"); insertItem.appendChild(serviceName); var mapLink = document.createElement("td"); mapLink.innerHTML = '' + mapName + ''; insertItem.appendChild(mapLink); var emptyTd = document.createElement("td"); insertItem.appendChild(emptyTd); insertItem.appendChild(emptyTd); var firstItemNode = tableNode.getElementsByTagName("tr")[1]; tableNode.insertBefore(insertItem, firstItemNode); } $("a[href^=geo]").after(getWikiLinkItem(getIntelUrl())); } if (WIKIPEDIA_URL_FORMAT.test(document.URL)) { if (GEOHACK_URL_FORMAT.test(document.body.innerHTML) == false && OLD_GEOHACK_URL_FORMAT.test(document.body.innerHTML) == false) { // Try to parse the internal map element, if possible. $(document).one( "mousemove", "a[href*='\/maplink\/']", function(){ var wikiMapLink = $("a[href*='\/maplink\/']"); if (wikiMapLink.length == 0) return; if (!(wikiMapLink.attr("data-lat") && wikiMapLink.attr("data-lon"))) return; var url = INTEL_URL_PREFIX + wikiMapLink.attr("data-lat") + "," + wikiMapLink.attr("data-lon"); wikiMapLink.parent().before(getWikiLinkItem(url)); }); } $(GELHACK_DOM_PREFIX).before(getWikiLinkItem(getIntelUrl())); $(OLD_GELHACK_DOM_PREFIX).before(getWikiLinkItem(getIntelUrl())); } })();