WME Reload Map Position Fix

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

当前为 2020-09-09 提交的版本,查看 最新版本

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