commit 519a424eb10613eedd80322d2da390c45837a4a5
parent 1590676270e717c328366df0333c3335749db08b
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Fri, 13 May 2022 21:08:42 +0200
Add hash state parameter for overriding minimize/expand behaviour of controls
Diffstat:
M | src/App.js | | | 55 | ++++++++++++++++++++++++++++++++++++++++++++++++------- |
1 file changed, 48 insertions(+), 7 deletions(-)
diff --git a/src/App.js b/src/App.js
@@ -42,7 +42,11 @@ const locationErrorMessage = {
2: 'Failed to acquire position for unknown reason.',
};
-function setUp() {
+const minimizeStateAuto = 0;
+const minimizeStateMinimized = 1;
+const minimizeStateExpanded = 2;
+
+function setUp() { // eslint-disable-line complexity
const startInfo = {
href: window.location.href,
localStorageKeys: Object.keys(safeLocalStorage),
@@ -50,6 +54,21 @@ function setUp() {
};
fixAll();
+ function validateMinimizeState(state) {
+ state = Number(state);
+ if (state === minimizeStateMinimized || state === minimizeStateExpanded) {
+ return state;
+ }
+ return minimizeStateAuto;
+ }
+ const minimizeState = hashState.getState('min') ?? [];
+ const minimizeControls = {
+ tracks: validateMinimizeState(minimizeState[0]),
+ layers: validateMinimizeState(minimizeState[1]),
+ print: validateMinimizeState(minimizeState[2]),
+ search: validateMinimizeState(minimizeState[3]),
+ };
+
const map = new MapWithSidebars('map', {
zoomControl: false,
fadeAnimation: false,
@@ -71,7 +90,19 @@ function setUp() {
new ZoomDisplay().addTo(map);
- const searchControl = new SearchControl({position: 'topleft', stackHorizontally: true, maxMapWidthToMinimize: 620})
+ const searchOptions = {
+ position: 'topleft',
+ stackHorizontally: true,
+ maxMapWidthToMinimize: 620,
+ };
+ if (minimizeControls.search === minimizeStateMinimized) {
+ searchOptions.maxMapHeightToMinimize = Infinity;
+ searchOptions.maxMapWidthToMinimize = Infinity;
+ } else if (minimizeControls.search === minimizeStateExpanded) {
+ searchOptions.maxMapHeightToMinimize = 0;
+ searchOptions.maxMapWidthToMinimize = 0;
+ }
+ const searchControl = new SearchControl(searchOptions)
.addTo(map)
.enableHashState('q');
map.getPlacemarkHashStateInterface().enableHashState('r');
@@ -142,7 +173,10 @@ function setUp() {
const printControl = new L.Control.PrintPages({position: 'bottomleft'})
.addTo(map)
.enableHashState('p');
- if (!printControl.hasPages()) {
+ if (
+ minimizeControls.print === minimizeStateMinimized ||
+ (minimizeControls.print === minimizeStateAuto && !printControl.hasPages())
+ ) {
printControl.setMinimized();
}
@@ -187,17 +221,24 @@ function setUp() {
/* adaptive layout */
- if (L.Browser.mobile) {
+ if (
+ minimizeControls.layers === minimizeStateAuto && L.Browser.mobile ||
+ minimizeControls.layers === minimizeStateMinimized
+ ) {
layersControl.setMinimized();
- if (!tracklist.hasTracks()) {
- tracklist.setMinimized();
- }
}
if (L.Browser.mobile) {
map.on('mousedown dragstart', () => layersControl.setMinimized());
}
+ if (
+ minimizeControls.tracks === minimizeStateAuto && L.Browser.mobile && !tracklist.hasTracks() ||
+ minimizeControls.tracks === minimizeStateMinimized
+ ) {
+ tracklist.setMinimized();
+ }
+
raiseControlsOnFocus(map);
/* save state at unload */