Ingress Intel地图链接工具

在维基百科及其链接到的Geohack网站上提供Ingress Intel的地图链接

  1. // ==UserScript==
  2. // @name Intel Maps Link Provider
  3. // @name:zh-CN Ingress Intel地图链接工具
  4. // @name:zh-TW Ingress Intel地圖連接工具
  5. // @namespace http://cyblocker.com/
  6. // @version 0.9
  7. // @description Provide Ingress Intel map link to the coordinate information on Wikipedia and Geohack.
  8. // @description:zh-CN 在维基百科及其链接到的Geohack网站上提供Ingress Intel的地图链接
  9. // @description:zh-TW 在維基百科及其連接到的Geohack上提供Ingress Intel地圖連接
  10. // @author cyblocker
  11. // @match https://tools.wmflabs.org/geohack/*
  12. // @match https://geohack.toolforge.org/*
  13. // @match https://*.wikipedia.org/wiki/*
  14. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
  15. // @supportURL https://github.com/cyblocker/Intel-Map-Provider/issues
  16. // @grant none
  17. // ==/UserScript==
  18.  
  19. (function () {
  20.  
  21. 'use strict';
  22.  
  23. const GEOHACK_URL_FORMAT = /geohack.toolforge.org\/geohack.php?/i;
  24. const OLD_GEOHACK_URL_FORMAT = /tools.wmflabs.org\/geohack\/geohack.php?/i;
  25. const WIKIPEDIA_URL_FORMAT = /wikipedia.org\/wiki/i;
  26. const GELHACK_DOM_PREFIX = "a[href*='geohack.toolforge.org\/geohack.php?']";
  27. const OLD_GELHACK_DOM_PREFIX = "a[href*='tools.wmflabs.org\/geohack\/geohack.php?']";
  28.  
  29. const INTEL_URL_PREFIX = "https://intel.ingress.com/intel?ll=";
  30.  
  31. function convertGeoUrlParams(input) {
  32. var parts = input.split("_");
  33. var i = 0;
  34. var latitude = 0;
  35. var devider = 1;
  36. for (; i < parts.length; i++) {
  37. if (parts[i] != "S" && parts[i] != "N") {
  38. latitude = latitude + parts[i] / devider;
  39. devider = devider * 60;
  40. } else {
  41. if (parts[i] == "S") latitude = latitude * -1;
  42. break;
  43. }
  44. }
  45. var longitude = 0;
  46. devider = 1;
  47. for (i = i + 1; i < parts.length; i++) {
  48. if (parts[i] != "W" && parts[i] != "E") {
  49. longitude = longitude + parts[i] / devider;
  50. devider = devider * 60;
  51. } else {
  52. if (parts[i] == "W") longitude = longitude * -1;
  53. break;
  54. }
  55. }
  56. return latitude.toFixed(6) + "," + longitude.toFixed(6);
  57. }
  58.  
  59. function getIntelUrl() {
  60. var geoUrl;
  61. if (GEOHACK_URL_FORMAT.test(document.URL)) {
  62. geoUrl = document.URL;
  63. } else if (GEOHACK_URL_FORMAT.test(document.body.innerHTML)){
  64. geoUrl = $(GELHACK_DOM_PREFIX).attr("href");
  65. } else {
  66. geoUrl = $(OLD_GELHACK_DOM_PREFIX).attr("href");
  67. }
  68. var geoParams = /[&?]params=[0-9NSWE_.]+/.exec(geoUrl)[0].slice(8);
  69. var intelUrl = INTEL_URL_PREFIX + convertGeoUrlParams(geoParams);
  70. return intelUrl;
  71. }
  72.  
  73. function getWikiLinkItem(url) {
  74. var linkItem = document.createElement("a");
  75. linkItem.setAttribute("href", url);
  76. linkItem.setAttribute("target", "_blank");
  77. linkItem.innerHTML = '<img width="17" title="Ingress Intel Map" src="https://upload.wikimedia.org/wikipedia/commons/6/63/Ingress_Logo.png">';
  78. return linkItem;
  79. }
  80.  
  81. if (GEOHACK_URL_FORMAT.test(document.URL) || OLD_GEOHACK_URL_FORMAT.test(document.URL)) {
  82.  
  83. // Find correct location and insert
  84. if ($("#GEOTEMPLATE-GLOBAL").length != 0) {
  85. var mapName = "Map";
  86. if (/language=zh-yue/.test(document.URL)) {
  87. mapName = "地圖";
  88. } else if (/language=ja/.test(document.URL)) {
  89. mapName = "地図";
  90. } else if (/language=zh/.test(document.URL)) {
  91. mapName = "地图";
  92. }
  93. var tableNode = document.getElementById("GEOTEMPLATE-GLOBAL").getElementsByTagName("tbody")[0];
  94. // Emsamble the table
  95. var insertItem = document.createElement("tr");
  96. var serviceName = document.createElement("th");
  97. serviceName.innerHTML = '<img width="16" alt="Ingress Logo" src="https://upload.wikimedia.org/wikipedia/commons/6/63/Ingress_Logo.png"> Ingress Intel Map';
  98. serviceName.setAttribute("scope", "row");
  99. serviceName.setAttribute("style", "font-weight:normal; text-align:left;");
  100. insertItem.appendChild(serviceName);
  101. var mapLink = document.createElement("td");
  102. mapLink.innerHTML = '<a href="' + getIntelUrl() + '" target = "_blank">' + mapName + '</a>';
  103. insertItem.appendChild(mapLink);
  104. var emptyTd = document.createElement("td");
  105. insertItem.appendChild(emptyTd);
  106. insertItem.appendChild(emptyTd);
  107. var firstItemNode = tableNode.getElementsByTagName("tr")[1];
  108. tableNode.insertBefore(insertItem, firstItemNode);
  109. }
  110. $("a[href^=geo]").after(getWikiLinkItem(getIntelUrl()));
  111. }
  112.  
  113. if (WIKIPEDIA_URL_FORMAT.test(document.URL)) {
  114. if (GEOHACK_URL_FORMAT.test(document.body.innerHTML) == false && OLD_GEOHACK_URL_FORMAT.test(document.body.innerHTML) == false) {
  115. // Try to parse the internal map element, if possible.
  116. $(document).one( "mousemove", "a[href*='\/maplink\/']", function(){
  117. var wikiMapLink = $("a[href*='\/maplink\/']");
  118. if (wikiMapLink.length == 0) return;
  119. if (!(wikiMapLink.attr("data-lat") && wikiMapLink.attr("data-lon"))) return;
  120. var url = INTEL_URL_PREFIX + wikiMapLink.attr("data-lat") + "," + wikiMapLink.attr("data-lon");
  121. wikiMapLink.parent().before(getWikiLinkItem(url));
  122. });
  123. }
  124. $(GELHACK_DOM_PREFIX).before(getWikiLinkItem(getIntelUrl()));
  125. $(OLD_GELHACK_DOM_PREFIX).before(getWikiLinkItem(getIntelUrl()));
  126. }
  127.  
  128. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址