WME Reload Map Position Fix

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

目前為 2021-09-01 提交的版本,檢視 最新版本

  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 2021.09.01.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 window, localStorage, sessionStorage, W, $, OpenLayers, WazeWrap */
  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. * */
  21.  
  22. const SETTINGS_STORE_NAME = 'WME_RMPF';
  23.  
  24. let _bootstrapTimeout;
  25.  
  26. function updatedSavedMapPosition() {
  27. const storage = { savedCenter: W.map.getCenter(), savedZoom: W.map.getZoom() };
  28. localStorage.setItem(SETTINGS_STORE_NAME, JSON.stringify(storage));
  29. sessionStorage.setItem(SETTINGS_STORE_NAME, JSON.stringify(storage));
  30. }
  31.  
  32. function init() {
  33. const loadedSettings = $.parseJSON(sessionStorage.getItem(SETTINGS_STORE_NAME)) || $.parseJSON(localStorage.getItem(SETTINGS_STORE_NAME)),
  34. savedCenter = (loadedSettings) ? loadedSettings.savedCenter : W.map.getCenter(),
  35. savedZoom = (loadedSettings) ? loadedSettings.savedZoom : W.map.getZoom(),
  36. currCenter = W.map.getCenter(),
  37. currZoom = W.map.getZoom(),
  38. urlParams = new URLSearchParams(window.location.search);
  39. if (!urlParams.get('lon') && !urlParams.get('lat') && !urlParams.get('zoomLevel') && ((currCenter.lon !== savedCenter.lon) || (currCenter.lat !== savedCenter.lat) || (savedZoom !== currZoom)))
  40. W.map.getOLMap().moveTo(new OpenLayers.LonLat([savedCenter.lon, savedCenter.lat]), savedZoom);
  41. W.map.events.register('zoomend', null, updatedSavedMapPosition);
  42. W.map.events.register('moveend', null, updatedSavedMapPosition);
  43. window.addEventListener('beforeunload', updatedSavedMapPosition, false);
  44. }
  45.  
  46. function bootstrap(tries) {
  47. if (W && W.map && $ && WazeWrap.Ready) {
  48. window.clearTimeout(_bootstrapTimeout);
  49. _bootstrapTimeout = undefined;
  50. init();
  51. }
  52. else if (tries < 1000) {
  53. console.log(`RMPF: WME not ready. Retrying ${tries} of 1000`);
  54. _bootstrapTimeout = window.setTimeout(bootstrap, 200, ++tries);
  55. }
  56. else {
  57. console.error('RMPF: Bootstrap timed out waiting for WME to become ready.');
  58. }
  59. }
  60.  
  61. bootstrap(1);