// ==UserScript==
// @name wplace - fast map browser
// @namespace http://pawing.cv
// @version v1.0
// @description use openstreetmap to navigate the world faster!
// @author cv
// @match https://wplace.live/*
// @grant none
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
function openmap() {
let popupcode = `
OpenStreetMap
`;
const left = (window.screen.width - 800) / 2; const top = (window.screen.height - 600) / 2;
const popup = window.open(
'',
'wplace_map_popup',
`width=800,height=600,left=${left},top=${top},resizable=yes,scrollbars=no,status=no,location=no,toolbar=no,menubar=no`
);
if (popup) {
const writepopup = () => {
if (popup.document && popup.document.readyState === "complete") {
popup.document.open(); popup.document.write(popupcode); popup.document.close();
} else {setTimeout(writepopup, 10)}
}; writepopup();
} else {alert("Popup failed to open! (do you have popups disabled?)")}
}
function cleanlink() {
const cleanlink = new URL(window.location.href);
cleanlink.searchParams.delete('lat');
cleanlink.searchParams.delete('lng');
cleanlink.searchParams.delete('zoom');
window.history.replaceState({}, '', cleanlink.pathname + cleanlink.search + cleanlink.hash);
}
window.addEventListener('message', function(event) {
if (event.data && event.data.source === 'wplace-map-popup' &&
typeof event.data.lat === 'number' && typeof event.data.lng === 'number') {
const currentlink = new URL(window.location.href);
currentlink.searchParams.set('lat', event.data.lat);
currentlink.searchParams.set('lng', event.data.lng);
if (typeof event.data.zoom === 'number') {
currentlink.searchParams.set('zoom', event.data.zoom);
}
window.location.replace(currentlink.toString());
window.addEventListener('pageshow', cleanlink);
}
});
window.addEventListener('DOMContentLoaded', function() {
const url = new URL(window.location.href);
if (url.searchParams.has('lat') || url.searchParams.has('lng') || url.searchParams.has('zoom')) {
cleanlink();
}
});
document.addEventListener('keydown', function(e) {
if (e.key === 'M' || e.key === 'm') {openmap()}
});
})();