WME Reload Map Position Fix

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

当前为 2023-03-07 提交的版本,查看 最新版本

  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.07.01
  6. // @author dBsooner
  7. // @grant none
  8. // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
  9. // @license GPLv3
  10. // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?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.07.01: New bootstrap routine. Code structure with new linter options. *
  21. * */
  22.  
  23. (function () {
  24. 'use strict';
  25.  
  26. const SETTINGS_STORE_NAME = 'WME_RMPF';
  27.  
  28. function log(message) { console.log('WME-RMPF:', message); }
  29.  
  30. function updatedSavedMapPosition() {
  31. const storage = { savedCenter: W.map.getCenter(), savedZoom: W.map.getZoom() };
  32. localStorage.setItem(SETTINGS_STORE_NAME, JSON.stringify(storage));
  33. sessionStorage.setItem(SETTINGS_STORE_NAME, JSON.stringify(storage));
  34. }
  35.  
  36. function onWmeReady() {
  37. const loadedSettings = $.parseJSON(sessionStorage.getItem(SETTINGS_STORE_NAME)) || $.parseJSON(localStorage.getItem(SETTINGS_STORE_NAME)),
  38. savedCenter = (loadedSettings) ? loadedSettings.savedCenter : W.map.getCenter(),
  39. savedZoom = (loadedSettings) ? loadedSettings.savedZoom : W.map.getZoom(),
  40. currCenter = W.map.getCenter(),
  41. currZoom = W.map.getZoom(),
  42. urlParams = new URLSearchParams(window.location.search);
  43. if (!urlParams.get('lon') && !urlParams.get('lat') && !urlParams.get('zoomLevel') && ((currCenter.lon !== savedCenter.lon) || (currCenter.lat !== savedCenter.lat) || (savedZoom !== currZoom))) {
  44. log('Changing map position.');
  45. W.map.getOLMap().moveTo(new OpenLayers.LonLat([savedCenter.lon, savedCenter.lat]), savedZoom);
  46. }
  47. W.map.events.register('zoomend', null, updatedSavedMapPosition);
  48. W.map.events.register('moveend', null, updatedSavedMapPosition);
  49. window.addEventListener('beforeunload', updatedSavedMapPosition, false);
  50. }
  51.  
  52. function onWmeInitialized() {
  53. if (W.userscripts?.state?.isReady) {
  54. log('W is ready and already in "wme-ready" state. Proceeding with initialization.');
  55. onWmeReady();
  56. }
  57. else {
  58. log('W is ready, but state is not "wme-ready". Adding event listener.');
  59. document.addEventListener('wme-ready', onWmeReady, { once: true });
  60. }
  61. }
  62.  
  63. function bootstrap() {
  64. if (!W) {
  65. log('W is not available. Adding event listener.');
  66. document.addEventListener('wme-initialized', onWmeInitialized, { once: true });
  67. }
  68. else {
  69. onWmeInitialized();
  70. }
  71. }
  72.  
  73. bootstrap();
  74. }
  75. )();