NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name GeoGuessr Maps Enhanced // @namespace kommu // @description Display all your maps in a simple table. // @version 0.0.1 // @include https://www.geoguessr.com/* // @run-at document-start // @license MIT // ==/UserScript== /*jshint esversion: 6 */ var oldHref = document.location.href; window.onload = (event) => { mapsBehavior(); var bodyList = document.querySelector("body"), observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { if (oldHref != document.location.href) { oldHref = document.location.href; mapsBehavior(); } }); }); var config = { childList: true, subtree: true }; observer.observe(bodyList, config); }; function mapsBehavior() { if (!location.pathname.startsWith("/me/maps") || location.pathname.endsWith("#")) { return false; } var style = "table.custom-table {\n" + " border: 1px solid #e2e2e2;\n" + " width: 100%;\n" + " border-collapse: collapse;\n" + " margin-bottom: 40px;\n" + " font-size: 12px;\n" + "}\n" + "\n" + "table.custom-table td, table.custom-table th {\n" + " padding: 5px 10px;\n" + " border: 1px solid #e2e2e2;\n" + "}\n" + "\n" + "table.custom-table th {\n" + " text-transform: uppercase;\n" + " font-size: 10px;\n" + "}\n" + "\n" + "table.custom-table td:nth-child(3) {\n" + " font-size: 10px;\n" + " width: 300px!important;\n" + " max-width: 500px;\n" + "}\n" + "\n" + "table.custom-table td:nth-child(1),\n" + "table.custom-table td:nth-child(4),\n" + "table.custom-table td:nth-child(5),\n" + "table.custom-table td:nth-child(6),\n" + "table.custom-table td:nth-child(7) {\n" + " text-align: center;\n" + "}"; var table = "<style>" + style + "</style><table class=\"custom-table\"><tr><th>published</th><th>Name</th><th>Description</th><th>Nb coordinates</th><th>Likes</th><th>Nb games</th><th>Actions</th></tr>"; var current = null; var page = 0; while (current === null || current % 100 === 0) { if (current === null) { current = 0; } var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", 'https://www.geoguessr.com/api/v3/profiles/maps?page=' + page + '&count=100', false); xmlhttp.send(); if (xmlhttp.status === 200) { var data = JSON.parse(xmlhttp.responseText); current = current + data.length; page++; table += getHtml(data); } else { alert('An error occured, while getting maps.'); return false; } } table += "</table>"; var div = document.createElement('div'); div.innerHTML = table; var elements = document.getElementsByClassName('container__content'); elements[0].parentNode.insertBefore(div, elements[0]); } function getHtml(data) { var output = ''; for (let obj in data) { var map = data[obj]; output += '<tr>' + '<td>' + ((map.published) ? '✅' : '') + '</td>' + '<td>' + map.name + '</td>' + '<td style="width: 200px">' + map.description + '</td>' + '<td>' + map.coordinateCount + '</td>' + '<td>' + map.likes + '</td>' + '<td>' + map.numFinishedGames + '</td>' + '<td>' + '<a target="_blank" class="button button--small button--secondary" href="/map-maker/' + map.id + '"><span class="button__animation"></span><span class="button__label">Edit</span></a>' + ' <a target="_blank" class="button button--small button--primary" href="/maps/' + map.id + '"><span class="button__animation"></span><span class="button__label">Open</span></a>' + '</td>' + '</tr>'; } return output; }