Adds a Map Permalink button to events on the Munzee Calendar.
目前為
// ==UserScript==
// @name Munzee Calendar Permalink
// @version 1.0
// @description Adds a Map Permalink button to events on the Munzee Calendar.
// @author sohcah
// @match https://calendar.munzee.com/*
// @grant none
// @namespace https://greasyfork.org/users/398283
// ==/UserScript==
(function () {
'use strict';
const BITS = [16, 8, 4, 2, 1];
const BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz";
const NEIGHBORS = {
right: { even: "bc01fg45238967deuvhjyznpkmstqrwx" },
left: { even: "238967debc01fg45kmstqrwxuvhjyznp" },
top: { even: "p0r21436x8zb9dcf5h7kjnmqesgutwvy" },
bottom: { even: "14365h7k9dcfesgujnmqp0r2twvyx8zb" }
};
const BORDERS = {
right: { even: "bcfguvyz" },
left: { even: "0145hjnp" },
top: { even: "prxz" },
bottom: { even: "028b" }
};
NEIGHBORS.bottom.odd = NEIGHBORS.left.even;
NEIGHBORS.top.odd = NEIGHBORS.right.even;
NEIGHBORS.left.odd = NEIGHBORS.bottom.even;
NEIGHBORS.right.odd = NEIGHBORS.top.even;
BORDERS.bottom.odd = BORDERS.left.even;
BORDERS.top.odd = BORDERS.right.even;
BORDERS.left.odd = BORDERS.bottom.even;
BORDERS.right.odd = BORDERS.top.even;
function encodeGeoHash(latitude, longitude) {
var is_even = 1;
var i = 0;
var lat = []; var lon = [];
var bit = 0;
var ch = 0;
var precision = 12;
var geohash = "";
var mid;
lat[0] = -90.0; lat[1] = 90.0;
lon[0] = -180.0; lon[1] = 180.0;
while (geohash.length < precision) {
if (is_even) {
mid = (lon[0] + lon[1]) / 2;
if (longitude > mid) {
ch |= BITS[bit];
lon[0] = mid;
} else
lon[1] = mid;
} else {
mid = (lat[0] + lat[1]) / 2;
if (latitude > mid) {
ch |= BITS[bit];
lat[0] = mid;
} else
lat[1] = mid;
}
is_even = !is_even;
if (bit < 4)
bit++;
else {
geohash += BASE32[ch];
bit = 0;
ch = 0;
}
}
return geohash;
}
$(() => {
setTimeout(()=>{
const link = `https://www.munzee.com/map/${encodeGeoHash(window.map.getCenter().lat, window.map.getCenter().lng)}/16.0`;
$('.event-indicator')[0].outerHTML = `<a style="color: black;" href="${link}"> 📌 Map Link</a> | ` + $('.event-indicator')[0].outerHTML;
}, 2000);
})
})();