WME Reload Map Position Fix

Keeps track of the current map center and zoom and restores it upon reloading.

  1. // ==UserScript==
  2. // @name WME Reload Map Position Fix
  3. // @namespace https://greasyfork.org/users/166843
  4. // @description Keeps track of the current map center and zoom and restores it upon reloading.
  5. // @version 2023.03.15.01
  6. // @author dBsooner
  7. // @grant none
  8. // @license GPLv3
  9. // @match http*://*.waze.com/*editor*
  10. // @exclude http*://*.waze.com/user/editor*
  11. // @contributionURL https://github.com/WazeDev/Thank-The-Authors
  12. // ==/UserScript==
  13.  
  14. /* global W, $, OpenLayers */
  15.  
  16. /* Changelog: *
  17. * 2020.09.08.01: Initial release. *
  18. * 2020.09.09.01: Check for URL parameters. *
  19. * 2021.09.01.01: Update to latest WME zoom level changes. *
  20. * 2023.03.15.01: New bootstrap routine. *
  21. * Code structure with new linter options. *
  22. * Change @include to @match with @exclude in userscript headers. *
  23. * */
  24.  
  25. (function () {
  26. 'use strict';
  27.  
  28. const SETTINGS_STORE_NAME = 'WME_RMPF';
  29.  
  30. function log(message) { console.log('WME-RMPF:', message); }
  31.  
  32. function updatedSavedMapPosition() {
  33. const storage = { savedCenter: W.map.getCenter(), savedZoom: W.map.getZoom() };
  34. localStorage.setItem(SETTINGS_STORE_NAME, JSON.stringify(storage));
  35. sessionStorage.setItem(SETTINGS_STORE_NAME, JSON.stringify(storage));
  36. }
  37.  
  38. function onWmeReady() {
  39. const loadedSettings = $.parseJSON(sessionStorage.getItem(SETTINGS_STORE_NAME)) || $.parseJSON(localStorage.getItem(SETTINGS_STORE_NAME)),
  40. savedCenter = (loadedSettings) ? loadedSettings.savedCenter : W.map.getCenter(),
  41. savedZoom = (loadedSettings) ? loadedSettings.savedZoom : W.map.getZoom(),
  42. currCenter = W.map.getCenter(),
  43. currZoom = W.map.getZoom(),
  44. urlParams = new URLSearchParams(window.location.search);
  45. if (!urlParams.get('lon') && !urlParams.get('lat') && !urlParams.get('zoomLevel') && ((currCenter.lon !== savedCenter.lon) || (currCenter.lat !== savedCenter.lat) || (savedZoom !== currZoom))) {
  46. log('Changing map position.');
  47. W.map.getOLMap().moveTo(new OpenLayers.LonLat([savedCenter.lon, savedCenter.lat]), savedZoom);
  48. }
  49. W.map.events.register('zoomend', null, updatedSavedMapPosition);
  50. W.map.events.register('moveend', null, updatedSavedMapPosition);
  51. window.addEventListener('beforeunload', updatedSavedMapPosition, false);
  52. }
  53.  
  54. function onWmeInitialized() {
  55. if (W.userscripts?.state?.isReady) {
  56. log('W is ready and already in "wme-ready" state. Proceeding with initialization.');
  57. onWmeReady();
  58. }
  59. else {
  60. log('W is ready, but state is not "wme-ready". Adding event listener.');
  61. document.addEventListener('wme-ready', onWmeReady, { once: true });
  62. }
  63. }
  64.  
  65. function bootstrap() {
  66. if (!W) {
  67. log('W is not available. Adding event listener.');
  68. document.addEventListener('wme-initialized', onWmeInitialized, { once: true });
  69. }
  70. else {
  71. onWmeInitialized();
  72. }
  73. }
  74.  
  75. bootstrap();
  76. }
  77. )();