lets you hide ui in singleplayer in several different ways
当前为
// ==UserScript==
// @name GeoGuessr Hide UI
// @namespace https://greasyfork.org/en/users/1501889
// @version 1312
// @description lets you hide ui in singleplayer in several different ways
// @author Clemens
// @match https://www.geoguessr.com/*
// @icon https://www.google.com/s2/favicons?domain=geoguessr.com
// @run-at document-idle
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const localStorageKeyViewMode = 'geoguessr_view_mode_v3';
const localStorageKeyPreviousViewMode = 'geoguessr_previous_view_mode_v3';
const localStorageKeyMapHidden = 'geoguessr_map_hidden_v3';
const localStorageKeyHealthbarsHidden = 'geoguessr_healthbars_hidden_v3';
const mapSelector = 'div[data-qa="guess-map"]';
const compassSelector = '.panorama-compass_compassContainer__VAYam';
const timerSelector = '#timernode';
const scoreAndRoundSelector = '.game_status___YFni .status_inner__eAJp4:not(#timernode)';
const mainStatusContainerSelector = '.game_status___YFni';
const nonMapOverlays = [
'.game_controls__xgq6p',
'.game_inGameLogos__T9d3L',
'img[alt="Google Maps Logo"]',
'div[style*="position: absolute; right: 0px; bottom: 0px;"] .gmnoprint',
'.duels-panorama_controls___OEib',
'.hud-2_healthbar__ut7QO'
];
const allUIElements = nonMapOverlays.concat([
mapSelector,
compassSelector,
mainStatusContainerSelector
]);
const saveAndSetViewMode = (mode) => {
const currentMode = localStorage.getItem(localStorageKeyViewMode) || 'default';
if (currentMode !== mode) {
localStorage.setItem(localStorageKeyPreviousViewMode, currentMode);
}
localStorage.setItem(localStorageKeyViewMode, mode);
localStorage.setItem(localStorageKeyMapHidden, 'false');
localStorage.setItem(localStorageKeyHealthbarsHidden, 'false');
applySavedPreference();
};
const applySavedPreference = () => {
const viewMode = localStorage.getItem(localStorageKeyViewMode) || 'default';
const isMapHidden = localStorage.getItem(localStorageKeyMapHidden) === 'true';
const isHealthbarsHidden = localStorage.getItem(localStorageKeyHealthbarsHidden) === 'true';
document.querySelectorAll(allUIElements.join(', ') + ', ' + scoreAndRoundSelector + ', ' + timerSelector).forEach(el => {
el.style.display = 'none';
});
const mainStatus = document.querySelector(mainStatusContainerSelector);
if (mainStatus) {
mainStatus.style.display = 'none';
}
switch (viewMode) {
case 'default': {
document.querySelectorAll(allUIElements.join(', ') + ', ' + scoreAndRoundSelector + ', ' + timerSelector).forEach(el => {
el.style.display = '';
});
break;
}
case 'minimal': {
document.querySelector(mapSelector).style.display = '';
document.querySelector(compassSelector).style.display = '';
break;
}
case 'focused-timer': {
document.querySelector(mapSelector).style.display = '';
document.querySelector(compassSelector).style.display = '';
if (mainStatus) mainStatus.style.display = '';
const timer = document.querySelector(timerSelector);
if (timer) timer.style.display = '';
const scoreAndRound = document.querySelector(scoreAndRoundSelector);
if (scoreAndRound) scoreAndRound.style.display = 'none';
break;
}
case 'focused-all-status': {
document.querySelector(mapSelector).style.display = '';
document.querySelector(compassSelector).style.display = '';
if (mainStatus) mainStatus.style.display = '';
const scoreAndRound = document.querySelector(scoreAndRoundSelector);
if (scoreAndRound) scoreAndRound.style.display = '';
const timer = document.querySelector(timerSelector);
if (timer) timer.style.display = '';
break;
}
case 'all-hidden': {
break;
}
case 'map-only': {
document.querySelector(mapSelector).style.display = '';
break;
}
}
if (isMapHidden && (viewMode === 'default' || viewMode === 'minimal' || viewMode === 'focused-timer' || viewMode === 'focused-all-status')) {
const mapContainer = document.querySelector(mapSelector);
if (mapContainer) mapContainer.style.display = 'none';
}
if (isHealthbarsHidden) {
document.querySelectorAll('.hud-2_healthbar__ut7QO').forEach(el => {
el.style.display = 'none';
});
}
};
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'childList') {
const mapElement = document.querySelector(mapSelector);
if (mapElement) {
applySavedPreference();
}
}
}
});
document.addEventListener('keydown', (event) => {
const target = event.target;
const isEditable = target.isContentEditable ||
target.tagName === 'INPUT' ||
target.tagName === 'TEXTAREA' ||
target.tagName === 'SELECT' ||
(target.hasAttribute('role') && target.getAttribute('role') === 'textbox');
if (isEditable) {
return;
}
const currentViewMode = localStorage.getItem(localStorageKeyViewMode);
if (event.key === 'z') {
if (currentViewMode === 'all-hidden') {
saveAndSetViewMode('map-only');
} else if (currentViewMode === 'map-only') {
saveAndSetViewMode('all-hidden');
} else {
const isMapHidden = localStorage.getItem(localStorageKeyMapHidden) === 'true';
localStorage.setItem(localStorageKeyMapHidden, (!isMapHidden).toString());
applySavedPreference();
}
}
if (event.key === 'u') {
if (currentViewMode === 'all-hidden') {
const previousMode = localStorage.getItem(localStorageKeyPreviousViewMode);
saveAndSetViewMode(previousMode || 'default');
} else {
saveAndSetViewMode('all-hidden');
}
}
if (event.key === 'h') {
if (currentViewMode === 'minimal') {
const previousMode = localStorage.getItem(localStorageKeyPreviousViewMode);
saveAndSetViewMode(previousMode || 'default');
} else {
saveAndSetViewMode('minimal');
}
}
if (event.key === 'j') {
if (currentViewMode === 'focused-timer') {
const previousMode = localStorage.getItem(localStorageKeyPreviousViewMode);
saveAndSetViewMode(previousMode || 'default');
} else {
saveAndSetViewMode('focused-timer');
}
}
if (event.key === 'k') {
if (currentViewMode === 'focused-all-status') {
const previousMode = localStorage.getItem(localStorageKeyPreviousViewMode);
saveAndSetViewMode(previousMode || 'default');
} else {
saveAndSetViewMode('focused-all-status');
}
}
if (event.key === 'o') {
const isHealthbarsHidden = localStorage.getItem(localStorageKeyHealthbarsHidden) === 'true';
localStorage.setItem(localStorageKeyHealthbarsHidden, (!isHealthbarsHidden).toString());
applySavedPreference();
}
if (event.key === 'i') {
saveAndSetViewMode('default');
}
const hotkeys = ['z', 'u', 'h', 'j', 'k', 'i', 'o'];
if (hotkeys.includes(event.key)) {
event.preventDefault();
}
});
observer.observe(document.body, { childList: true, subtree: true });
applySavedPreference();
})();