Ingress Intel地图链接工具

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

目前为 2020-03-22 提交的版本。查看 最新版本

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