Munzee Map Permalinks

Adds a Map Permalink button to events on the Munzee Calendar, and a better Map Link button to a Munzee's page.

当前为 2021-03-18 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Munzee Map Permalinks
  3. // @version 1.1
  4. // @description Adds a Map Permalink button to events on the Munzee Calendar, and a better Map Link button to a Munzee's page.
  5. // @author sohcah
  6. // @match https://calendar.munzee.com/*
  7. // @match https://munzee.com/*
  8. // @match https://www.munzee.com/*
  9. // @grant none
  10. // @namespace https://greasyfork.org/users/398283
  11. // ==/UserScript==
  12.  
  13. const BITS = [16, 8, 4, 2, 1];
  14.  
  15. const BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz";
  16. const NEIGHBORS = {
  17. right: { even: "bc01fg45238967deuvhjyznpkmstqrwx" },
  18. left: { even: "238967debc01fg45kmstqrwxuvhjyznp" },
  19. top: { even: "p0r21436x8zb9dcf5h7kjnmqesgutwvy" },
  20. bottom: { even: "14365h7k9dcfesgujnmqp0r2twvyx8zb" }
  21. };
  22. const BORDERS = {
  23. right: { even: "bcfguvyz" },
  24. left: { even: "0145hjnp" },
  25. top: { even: "prxz" },
  26. bottom: { even: "028b" }
  27. };
  28.  
  29. NEIGHBORS.bottom.odd = NEIGHBORS.left.even;
  30. NEIGHBORS.top.odd = NEIGHBORS.right.even;
  31. NEIGHBORS.left.odd = NEIGHBORS.bottom.even;
  32. NEIGHBORS.right.odd = NEIGHBORS.top.even;
  33.  
  34. BORDERS.bottom.odd = BORDERS.left.even;
  35. BORDERS.top.odd = BORDERS.right.even;
  36. BORDERS.left.odd = BORDERS.bottom.even;
  37. BORDERS.right.odd = BORDERS.top.even;
  38.  
  39. (function () {
  40. 'use strict';
  41.  
  42. function encodeGeoHash(latitude, longitude) {
  43. var is_even = 1;
  44. var i = 0;
  45. var lat = []; var lon = [];
  46. var bit = 0;
  47. var ch = 0;
  48. var precision = 9;
  49. var geohash = "";
  50. var mid;
  51.  
  52. lat[0] = -90.0; lat[1] = 90.0;
  53. lon[0] = -180.0; lon[1] = 180.0;
  54.  
  55. while (geohash.length < precision) {
  56. if (is_even) {
  57. mid = (lon[0] + lon[1]) / 2;
  58. if (longitude > mid) {
  59. ch |= BITS[bit];
  60. lon[0] = mid;
  61. } else
  62. lon[1] = mid;
  63. } else {
  64. mid = (lat[0] + lat[1]) / 2;
  65. if (latitude > mid) {
  66. ch |= BITS[bit];
  67. lat[0] = mid;
  68. } else
  69. lat[1] = mid;
  70. }
  71.  
  72. is_even = !is_even;
  73. if (bit < 4)
  74. bit++;
  75. else {
  76. geohash += BASE32[ch];
  77. bit = 0;
  78. ch = 0;
  79. }
  80. }
  81. return geohash;
  82. }
  83. $(() => {
  84. setTimeout(()=>{
  85. if($('.event-indicator')[0]) {
  86. const link = `https://www.munzee.com/map/${encodeGeoHash(window.map.getCenter().lat, window.map.getCenter().lng)}/16.0`;
  87. $('.event-indicator')[0].outerHTML = `<a style="color: black;" href="${link}">&nbsp;📌 Map Link</a>&nbsp;|&nbsp;` + $('.event-indicator')[0].outerHTML;
  88. }
  89. if($("form#gotomap input")[0]) {
  90. const values = Array.from($("form#gotomap input")).map(i=>[i.name, i.value]);
  91. const link = `https://www.munzee.com/map/${encodeGeoHash(Number(values.find(i=>i[0] === "latitude")[1]), Number(values.find(i=>i[0] === "longitude")[1]))}/16.0`;
  92. $("#locationimage")[0].innerHTML = `<a href="${link}">&nbsp;📌 Map Link</a>` + $("#locationimage")[0].innerHTML;
  93.  
  94. }
  95. }, 2000);
  96. })
  97. })();