diff options
author | mert <mert.tumer@collabora.com> | 2020-06-09 20:23:48 +0300 |
---|---|---|
committer | Mert Tumer <mert.tumer@collabora.com> | 2020-09-28 11:53:34 +0200 |
commit | f7f4464b3c835ccaacf5519ad7ef9ef0bc98d668 (patch) | |
tree | b3b957d0da30776f0641df3d88d5e6fdae30b832 | |
parent | 2e28b9bb655ac7ebc5b580fabb5636b629dd7f85 (diff) |
Save and restore UI element states via localStorage
Also handle Show/Hide sidebar with localstorage
Change-Id: I2e6f8b7480d7d55173a3324b819f6e4e829e512f
Signed-off-by: mert <mert.tumer@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/96511
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
-rw-r--r-- | loleaflet/src/control/Control.LokDialog.js | 7 | ||||
-rw-r--r-- | loleaflet/src/control/Control.Menubar.js | 6 | ||||
-rw-r--r-- | loleaflet/src/control/Control.StatusBar.js | 7 | ||||
-rw-r--r-- | loleaflet/src/control/Control.Toolbar.js | 4 | ||||
-rw-r--r-- | loleaflet/src/control/Control.UIManager.js | 38 | ||||
-rw-r--r-- | loleaflet/src/map/Map.js | 7 |
6 files changed, 54 insertions, 15 deletions
diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index 23fe890cd..87b97e9cf 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -1092,6 +1092,9 @@ L.Control.LokDialog = L.Control.extend({ else $(panel).parent().hide(); + if (window.initSidebarState) + this._map.uiManager.setSavedState('ShowSidebar', width > 1); + // Render window. this._sendPaintWindowRect(id); } else { @@ -1141,6 +1144,8 @@ L.Control.LokDialog = L.Control.extend({ this._createDialogCursor(strId); this._postLaunch(id, panelContainer, panelCanvas); + if (window.initSidebarState) + this._map.uiManager.setSavedState('ShowSidebar', true); }, _postLaunch: function(id, panelContainer, panelCanvas) { @@ -1409,6 +1414,8 @@ L.Control.LokDialog = L.Control.extend({ this._map.focus(); } $('#document-container').addClass('sidebar-closed'); + if (window.initSidebarState) + this._map.uiManager.setSavedState('ShowSidebar', false); }, _onCalcInputBarClose: function(dialogId) { diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js index d3e3988a7..2dd0a6979 100644 --- a/loleaflet/src/control/Control.Menubar.js +++ b/loleaflet/src/control/Control.Menubar.js @@ -1309,6 +1309,12 @@ L.Control.Menubar = L.Control.extend({ return; } + if (unoCommand.startsWith('.uno:Sidebar') || unoCommand.startsWith('.uno:SlideMasterPage') || + unoCommand.startsWith('.uno:ModifyPage') || unoCommand.startsWith('.uno:SlideChangeWindow') || + unoCommand.startsWith('.uno:CustomAnimation') || unoCommand.startsWith('.uno:MasterSlidesPanel')) { + window.initSidebarState = true; + } + this._map.sendUnoCommand(unoCommand); }, diff --git a/loleaflet/src/control/Control.StatusBar.js b/loleaflet/src/control/Control.StatusBar.js index 62f368403..0a82d5c6f 100644 --- a/loleaflet/src/control/Control.StatusBar.js +++ b/loleaflet/src/control/Control.StatusBar.js @@ -397,12 +397,7 @@ L.Control.StatusBar = L.Control.extend({ if (statusbar) statusbar.refresh(); - var showStatusbar = true; - if (window.uiDefaults) { - if (window.uiDefaults[docType]) { - showStatusbar = window.uiDefaults[docType].ShowStatusbar !== false; - } - } + var showStatusbar = this.map.uiManager.getSavedStateOrDefault('ShowStatusbar'); if (showStatusbar) $('#toolbar-down').show(); else diff --git a/loleaflet/src/control/Control.Toolbar.js b/loleaflet/src/control/Control.Toolbar.js index 7fa110194..97767962d 100644 --- a/loleaflet/src/control/Control.Toolbar.js +++ b/loleaflet/src/control/Control.Toolbar.js @@ -70,6 +70,10 @@ function onClick(e, id, item) { throw new Error('unknown id: ' + id); } + if (id === 'sidebar' || id === 'modifypage' || id === 'slidechangewindow' || id === 'customanimation' || id === 'masterslidespanel') { + window.initSidebarState = true; + } + // In the iOS app we don't want clicking on the toolbar to pop up the keyboard. if (!window.ThisIsTheiOSApp && id !== 'zoomin' && id !== 'zoomout' && id !== 'mobile_wizard' && id !== 'insertion_mobile_wizard') { map.focus(map.canAcceptKeyboardInput()); // Maintain same keyboard state. diff --git a/loleaflet/src/control/Control.UIManager.js b/loleaflet/src/control/Control.UIManager.js index edc0472e6..de3be968f 100644 --- a/loleaflet/src/control/Control.UIManager.js +++ b/loleaflet/src/control/Control.UIManager.js @@ -114,12 +114,7 @@ L.Control.UIManager = L.Control.extend({ L.DomUtil.remove(L.DomUtil.get('presentation-controls-wrapper')); if ((window.mode.isTablet() || window.mode.isDesktop())) { - var showRuler = true; - if (window.uiDefaults) { - if (window.uiDefaults[docType]) { - showRuler = window.uiDefaults[docType].ShowRuler || false; - } - } + var showRuler = this.getSavedStateOrDefault('ShowRuler'); var interactiveRuler = this.map.isPermissionEdit(); L.control.ruler({position:'topleft', interactive:interactiveRuler, showruler: showRuler}).addTo(this.map); } @@ -190,11 +185,13 @@ L.Control.UIManager = L.Control.extend({ showRuler: function() { $('.loleaflet-ruler').show(); $('#map').addClass('hasruler'); + this.setSavedState('ShowRuler', true); }, hideRuler: function() { $('.loleaflet-ruler').hide(); $('#map').removeClass('hasruler'); + this.setSavedState('ShowRuler', false); }, toggleRuler: function() { @@ -272,7 +269,7 @@ L.Control.UIManager = L.Control.extend({ $('#document-container').css('bottom', this.documentBottom); $('#presentation-controls-wrapper').css('bottom', this.presentationControlBottom); $('#toolbar-down').show(); - this.map.invalidateSize(); + this.setSavedState('ShowStatusbar', true); }, hideStatusBar: function(firstStart) { @@ -284,6 +281,8 @@ L.Control.UIManager = L.Control.extend({ $('#document-container').css('bottom', '0px'); $('#presentation-controls-wrapper').css('bottom','33px'); $('#toolbar-down').hide(); + if (!firstStart) + this.setSavedState('ShowStatusbar', false); }, toggleStatusBar: function() { @@ -373,6 +372,31 @@ L.Control.UIManager = L.Control.extend({ } obj.css({'top': String(prevTop) + 'px'}); } + }, + + setSavedState: function(name, state) { + localStorage.setItem('UIDefaults_' + this.map.getDocType() + '_' + name, state); + }, + + getSavedStateOrDefault: function(name) { + var retval = true; + var docType = this.map.getDocType(); + var state = localStorage.getItem('UIDefaults_' + docType + '_' + name); + switch (state) { + case 'true': + return true; + case 'false': + return false; + default: + // no saved state; must check the UIDefaults + if (window.uiDefaults && window.uiDefaults[docType]) + retval = window.uiDefaults[docType][name]; + + if (retval === undefined || retval === null) + return true; + else + return retval; + } } }); diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 20f495114..70f22c605 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -282,9 +282,12 @@ L.Map = L.Evented.extend({ // Let the first page finish loading then load the sidebar. var map = this; setTimeout(function () { - // Show the sidebar by default, but not on mobile. + // Hide the sidebar on start if saved state or UIDefault is set. if (window.mode.isDesktop() && !window.ThisIsAMobileApp) { - map._socket.sendMessage('uno .uno:SidebarShow'); + var showSidebar = map.uiManager.getSavedStateOrDefault('ShowSidebar'); + + if (showSidebar === false) + map._socket.sendMessage('uno .uno:SidebarHide'); } else if (window.mode.isChromebook()) { // HACK - currently the sidebar shows when loaded, |