[Libreoffice-commits] online.git: Branch 'feature/jsdialogs' - 1706 commits - android/app android/lib android/Makefile.am android/README android/templates bundled/include common/Authorization.cpp common/Common.hpp common/FileUtil.cpp common/FileUtil.hpp common/IoUtil.cpp common/Log.cpp common/Log.hpp common/MessageQueue.cpp common/Png.hpp common/Protocol.cpp common/Protocol.hpp common/Seccomp.cpp common/Session.cpp common/Session.hpp common/SigUtil.cpp common/SigUtil.hpp common/Unit.cpp common/Unit.hpp common/Util.cpp common/Util.hpp configure.ac cypress_test/cypress.json cypress_test/data cypress_test/.eslintignore cypress_test/.gitignore cypress_test/integration_tests cypress_test/Makefile.am cypress_test/package.json cypress_test/plugins cypress_test/README debian/control debian/loolwsd.postinst.in debian/loolwsd.postrm debian/loolwsd.preinst debian/rules discovery.xml docker/Dockerfile docker/l10n-docker-nightly.sh docker/README docker/scripts fuzzer/ClientSession.cpp fuzzer/data .gitignore i os/ios.h ios/ios.mm ios/Mobile ios/Mobile.xcodeproj kit/ChildSession.cpp kit/ChildSession.hpp kit/DummyLibreOfficeKit.cpp kit/ForKit.cpp kit/Kit.cpp kit/Kit.hpp kit/Watermark.hpp kubernetes/helm logerrit loleaflet/admin loleaflet/build loleaflet/css loleaflet/debug loleaflet/docs loleaflet/.eslintignore loleaflet/.eslintrc loleaflet/html loleaflet/images loleaflet/js loleaflet/l10n loleaflet/Makefile.am loleaflet/package.json loleaflet/plugins loleaflet/po loleaflet/README loleaflet/reference.html loleaflet/src loleaflet/util loolkitconfig-mobile.xcu loolkitconfig.xcu loolwsd.service loolwsd.spec.in loolwsd-systemplate-setup loolwsd.xml.in Makefile.am net/FakeSocket.cpp net/Socket.cpp net/Socket.hpp net/Ssl.cpp net/SslSocket.hpp net/WebSocketHandler.hpp scripts/downloadpootle.sh scripts/locorestrings.py scripts/unocommands.py test/countloolkits.hpp test/data test/DeltaTests.cpp test/fakesockettest.cpp test/helpers.hpp test/httpcrashtest.cpp test/httpwserror.cpp test/httpwstest.cpp t est/integration-http-server.cpp test/Makefile.am test/run_unit.sh.in test/test.cpp test/test.hpp test/TileCacheTests.cpp test/TileQueueTests.cpp test/UnitAdmin.cpp test/UnitBadDocLoad.cpp test/UnitCalc.cpp test/UnitClient.cpp test/UnitClose.cpp test/UnitConvert.cpp test/UnitCopyPaste.cpp test/UnitCursor.cpp test/UnitEachView.cpp test/UnitFuzz.cpp test/UnitHosting.cpp test/UnitHTTP.cpp test/UnitInsertDelete.cpp test/UnitLargePaste.cpp test/UnitLoad.cpp test/UnitLoadTorture.cpp test/UnitOOB.cpp test/UnitPasswordProtected.cpp test/UnitPaste.cpp test/UnitPrefork.cpp test/UnitRenderingOptions.cpp test/UnitRenderShape.cpp test/UnitSession.cpp test/UnitTimeout.cpp test/UnitTyping.cpp test/UnitUNOCommand.cpp test/UnitWOPI.cpp test/UnitWOPITemplate.cpp test/UnitWOPIWatermark.cpp test/WhiteBoxTests.cpp test/WopiTestServer.hpp tools/Config.cpp tools/Connect.cpp tools/KitClient.cpp tools/map.cpp tools/Stress.cpp tools/Tool.cpp tools/WebSocketDump.cpp wsd/Admin.cpp wsd/Admin.hpp wsd/AdminModel.c pp wsd/AdminModel.hpp wsd/Auth.cpp wsd/Auth.hpp wsd/ClientSession.cpp wsd/ClientSession.hpp wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp wsd/FileServer.cpp wsd/FileServer.hpp wsd/LOOLWSD.cpp wsd/LOOLWSD.hpp wsd/metrics.txt wsd/ProofKey.cpp wsd/ProofKey.hpp wsd/protocol.txt wsd/README wsd/reference.md wsd/Storage.cpp wsd/Storage.hpp wsd/TileCache.cpp wsd/TileCache.hpp wsd/TileDesc.hpp wsd/TraceFile.hpp

Fri, 06 Mar 2020 03:40:44 -0800

Rebased ref, commits from common ancestor:
commit d376f7f99c2d91f22b2c7f733954fb930fa0381f
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Fri Mar 6 12:30:35 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:35:01 2020 +0100

    jsdialog: implemented multilineedit control
    
    Change-Id: I1cda88437357f80cafbdcdbee03832af806a55d6

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index 9c673b329..199c91909 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -33,6 +33,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                this._controlHandlers['checkbox'] = this._checkboxControl;
                this._controlHandlers['spinfield'] = this._spinfieldControl;
                this._controlHandlers['edit'] = this._editControl;
+               this._controlHandlers['multilineedit'] = 
this._multiLineEditControl;
                this._controlHandlers['pushbutton'] = this._pushbuttonControl;
                this._controlHandlers['combobox'] = this._comboboxControl;
                this._controlHandlers['comboboxentry'] = this._comboboxEntry;
@@ -1090,6 +1091,27 @@ L.Control.JSDialogBuilder = L.Control.extend({
                return false;
        },
 
+       _multiLineEditControl: function(parentContainer, data, builder, 
callback) {
+               var edit = L.DomUtil.create('textarea', '', parentContainer);
+               edit.value = builder._cleanText(data.text);
+               edit.id = data.id;
+
+               if (data.enabled == 'false')
+                       $(edit).attr('disabled', 'disabled');
+
+               edit.addEventListener('change', function() {
+                       if (callback)
+                               callback(this.value);
+                       else
+                               builder.callback('edit', 'change', edit, 
this.value, builder);
+               });
+
+               if (data.hidden)
+                       $(edit).hide();
+
+               return false;
+       },
+
        _pushbuttonControl: function(parentContainer, data, builder, 
customCallback) {
                var pushbutton = L.DomUtil.create('button', '', 
parentContainer);
                pushbutton.innerHTML = builder._cleanText(data.text);
commit 530e49d31fc04869bad8fb80ae90fcda641ebbb6
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Fri Mar 6 10:57:09 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:58 2020 +0100

    jsdialog: custom change event for combobox
    
    Change-Id: Ic48ca0df400fc182a765974d143786afe9f19bd9

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index f06cd041f..9c673b329 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -1065,7 +1065,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                return false;
        },
 
-       _editControl: function(parentContainer, data, builder) {
+       _editControl: function(parentContainer, data, builder, callback) {
                var edit = L.DomUtil.create('input', '', parentContainer);
                edit.value = builder._cleanText(data.text);
                edit.id = data.id;
@@ -1074,7 +1074,10 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        $(edit).attr('disabled', 'disabled');
 
                edit.addEventListener('change', function() {
-                       builder.callback('edit', 'change', edit, this.value, 
builder);
+                       if (callback)
+                               callback(this.value);
+                       else
+                               builder.callback('edit', 'change', edit, 
this.value, builder);
                });
 
                edit.addEventListener('click', function(e) {
@@ -1123,7 +1126,11 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        sectionTitle.id = data.id;
 
                var leftDiv = L.DomUtil.create('div', 'ui-header-left', 
sectionTitle);
-               builder._editControl(leftDiv, data, builder);
+
+               var editCallback = function(value) {
+                       builder.callback('combobox', 'change', data, value, 
builder);
+               };
+               builder._editControl(leftDiv, data, builder, editCallback);
 
                var rightDiv = L.DomUtil.create('div', 'ui-header-right', 
sectionTitle);
 
commit 268d876332c30174ec331494b40ab2f415fcaab0
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Mar 5 14:40:54 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:54 2020 +0100

    jsdialog: send control type with event
    
    Change-Id: I6cd6f1d26b5c78715f9e0adc992a1869e0f19a97

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index d58615b54..f06cd041f 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -107,8 +107,11 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        data = typeof data === 'string' ? data.replace('"', 
'\\"') : data;
                        var windowId = window.windowId !== undefined ? 
window.windowId :
                                                                
(window.sidebarId !== undefined ? window.sidebarId : -1);
-                       var message = 'dialogevent ' + windowId +
-                           ' {\"id\":\"' + object.id + '\", \"cmd\": \"' + 
eventType + '\", \"data\":\"' + data + '\"}';
+                       var message = 'dialogevent ' + windowId
+                           + ' {\"id\":\"' + object.id
+                               + '\", \"cmd\": \"' + eventType
+                               + '\", \"data\": \"' + data
+                               + '\", \"type\": \"' + objectType + '\"}';
                        builder.map._socket.sendMessage(message);
                }
        },
commit 09e4bd8bd3974d23c7c5fd4906561d1d0aaa6f30
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Mar 5 14:40:26 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:51 2020 +0100

    jsdialog: close mobile wizard when dialog is closed
    
    Change-Id: I570317fc6019b22a6ee5ec36507edbb450938cdf

diff --git a/loleaflet/src/control/Control.LokDialog.js 
b/loleaflet/src/control/Control.LokDialog.js
index 636a02d4e..1cdefeca3 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -292,7 +292,6 @@ L.Control.LokDialog = L.Control.extend({
                                } else {
                                        // In mobile we get jsdialog messages.
                                        window.sidebarId = e.id;
-                                       window.windowId = undefined;
                                }
                        } else if (e.winType === 'child') {
                                var parentId = parseInt(e.parentId);
@@ -315,8 +314,14 @@ L.Control.LokDialog = L.Control.extend({
                }
 
                // All other callbacks doen't make sense without an active 
dialog.
-               if (!(this._isOpen(e.id) || this._getParentId(e.id)))
+               if (!(this._isOpen(e.id) || this._getParentId(e.id))) {
+                       if (e.action == 'close' && window.windowId == e.id) {
+                               window.windowId = undefined;
+                               this._map.fire('closemobilewizard');
+                       }
+
                        return;
+               }
 
                if (e.action === 'invalidate' && !this.hasMobilePanelOpened()) {
                        this.wasInvalidated = true;
commit 7e873bcd5af1b1b6eb8bb44dacae2e8cc4d7728f
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Mar 4 15:50:29 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:48 2020 +0100

    jsdialog: tabcontrol widget
    
    Change-Id: Ibe72a382e767869f94db4f8b475dfe2169fcc702

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index 808970857..d58615b54 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -44,6 +44,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                this._controlHandlers['frame'] = this._frameHandler;
                this._controlHandlers['panel'] = this._panelHandler;
                this._controlHandlers['calcfuncpanel'] = 
this._calcFuncListPanelHandler;
+               this._controlHandlers['tabcontrol'] = this._tabsControlHandler;
                this._controlHandlers['paneltabs'] = this._panelTabsHandler;
                this._controlHandlers['container'] = this._containerHandler;
                this._controlHandlers['window'] = this._containerHandler;
@@ -444,6 +445,56 @@ L.Control.JSDialogBuilder = L.Control.extend({
                };
        },
 
+       _tabsControlHandler: function(parentContainer, data, builder) {
+               if (data.tabs) {
+                       var tabsContainer = L.DomUtil.create('div', 'ui-tabs 
mobile-wizard ui-widget');
+                       tabsContainer.id = data.id;
+                       var contentsContainer = L.DomUtil.create('div', 
'ui-tabs-content mobile-wizard ui-widget', parentContainer);
+
+                       var tabs = [];
+                       var contentDivs = [];
+                       var labels = [];
+                       for (var tabIdx = 0; tabIdx < data.tabs.length; 
tabIdx++) {
+                               var item = data.tabs[tabIdx];
+
+                               var title = builder._cleanText(item.text);
+
+                               var tab = L.DomUtil.create('div', 'ui-tab 
mobile-wizard', tabsContainer);
+                               tab.id = title;
+                               tabs[tabIdx] = tab;
+
+                               var label = L.DomUtil.create('span', 
'ui-tab-content mobile-wizard unolabel', tab);
+                               label.innerHTML = title;
+                               labels[tabIdx] = title;
+
+                               var contentDiv = L.DomUtil.create('div', 
'ui-content level-' + builder._currentDepth + ' mobile-wizard', 
contentsContainer);
+                               contentDiv.title = title;
+
+                               $(contentDiv).hide();
+                               contentDivs[tabIdx] = contentDiv;
+                       }
+
+                       if (builder.wizard) {
+                               builder.wizard.setTabs(tabsContainer);
+
+                               for (var t = 0; t < tabs.length; t++) {
+                                       // to get capture of 't' right has to 
be a sub fn.
+                                       var fn = function(id) {
+                                               return function() {
+                                                       
builder._createTabClick(builder, id, tabs, contentDivs, labels)();
+                                                       
builder.callback('tabcontrol', 'selecttab', tabsContainer, id, builder);
+                                               };
+                                       };
+                                       $(tabs[t]).click(fn(t));
+                               }
+                       } else {
+                               console.debug('Builder used outside of mobile 
wizard: please implement the click handler');
+                       }
+               }
+
+               return true;
+       },
+
        _panelTabsHandler: function(parentContainer, data, builder) {
                var tabsContainer = L.DomUtil.create('div', 'ui-tabs 
mobile-wizard ui-widget');
                var contentsContainer = L.DomUtil.create('div', 
'ui-tabs-content mobile-wizard ui-widget', parentContainer);
commit 00359d115095d72446f9bb27b9b89d37a935f319
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Mon Mar 2 15:04:28 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:44 2020 +0100

    jsdialog: close dialog when closed mobile wizard
    
    Change-Id: I5ba1eab7a32eef19dd156c56068e725a14223f48

diff --git a/loleaflet/src/control/Control.MobileWizard.js 
b/loleaflet/src/control/Control.MobileWizard.js
index 84fe7176e..c3c2991b0 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -88,6 +88,12 @@ L.Control.MobileWizard = L.Control.extend({
        },
 
        _hideWizard: function() {
+               // dialog
+               if (this.map.dialog.hasMobilePanelOpened()) {
+                       this.map.dialog._onDialogClose(window.windowId, true);
+                       window.windowId = undefined;
+               }
+
                $('#mobile-wizard').hide();
                $('#mobile-wizard-content').empty();
                if (this.map._permission === 'edit') {
commit 5db81941235988428f60699d82718ae2fc975fe4
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Mon Mar 2 12:44:40 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:39 2020 +0100

    jsdialog: implement full combobox
    
    Change-Id: I02432c39ffb78906466efe407118a771de7001f1

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index a986cecac..808970857 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -1023,6 +1023,10 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        builder.callback('edit', 'change', edit, this.value, 
builder);
                });
 
+               edit.addEventListener('click', function(e) {
+                       e.stopPropagation();
+               });
+
                if (data.hidden)
                        $(edit).hide();
 
@@ -1058,11 +1062,62 @@ L.Control.JSDialogBuilder = L.Control.extend({
                }
        },
 
-       _comboboxControl: function(parentContainer, data, builder) {
-               if (data.entries)
-                       builder._listboxControl(parentContainer, data, builder);
+       _explorableEditControl: function(parentContainer, data, builder) {
+               var sectionTitle = L.DomUtil.create('div', 'ui-header level-' + 
builder._currentDepth + ' mobile-wizard ui-widget', parentContainer);
+               $(sectionTitle).css('justify-content', 'space-between');
+               if (data && data.id)
+                       sectionTitle.id = data.id;
+
+               var leftDiv = L.DomUtil.create('div', 'ui-header-left', 
sectionTitle);
+               builder._editControl(leftDiv, data, builder);
+
+               var rightDiv = L.DomUtil.create('div', 'ui-header-right', 
sectionTitle);
+
+               var arrowSpan = L.DomUtil.create('span', 'sub-menu-arrow', 
rightDiv);
+               arrowSpan.innerHTML = '>';
+
+               var contentDiv = L.DomUtil.create('div', 'ui-content level-' + 
builder._currentDepth + ' mobile-wizard', parentContainer);
+               contentDiv.title = data.text;
+
+               var entries = [];
+               if (data.entries) {
+                       for (var index in data.entries) {
+                               var style = 'ui-combobox-text';
+                               if ((data.selectedEntries && index == 
data.selectedEntries[0])
+                                       || data.entries[index] == data.text) {
+                                       style += ' selected';
+                               }
+
+                               var entry = { type: 'comboboxentry', text: 
data.entries[index], pos: index, parent: data, style: style };
+                               entries.push(entry);
+                       }
+               }
+
+               var contentNode = {type: 'container', children: entries};
+
+               builder._currentDepth++;
+               builder.build(contentDiv, [contentNode]);
+               builder._currentDepth--;
+
+               if (!data.nosubmenu)
+               {
+                       $(contentDiv).hide();
+                       if (builder.wizard) {
+                               $(sectionTitle).click(function(event, data) {
+                                       builder.wizard.goLevelDown(contentDiv, 
data);
+                                       if (contentNode.onshow)
+                                               contentNode.onshow();
+                               });
+                       } else {
+                               console.debug('Builder used outside of mobile 
wizard: please implement the click handler');
+                       }
+               }
                else
-                       builder._editControl(parentContainer, data, builder);
+                       $(sectionTitle).hide();
+       },
+
+       _comboboxControl: function(parentContainer, data, builder) {
+               builder._explorableEditControl(parentContainer, data, builder);
        },
 
        _listboxControl: function(parentContainer, data, builder) {
commit 67dc56093e1d55139e659db11cbb3081440c72f9
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Fri Feb 28 15:08:56 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:36 2020 +0100

    jsdialog: when combobox is empty show edit
    
    Change-Id: I84572335313654f22d5d899e003aaa82a002b128

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index 97e28a76f..a986cecac 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -36,7 +36,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
                this._controlHandlers['pushbutton'] = this._pushbuttonControl;
                this._controlHandlers['combobox'] = this._comboboxControl;
                this._controlHandlers['comboboxentry'] = this._comboboxEntry;
-               this._controlHandlers['listbox'] = this._comboboxControl;
+               this._controlHandlers['listbox'] = this._listboxControl;
                this._controlHandlers['valueset'] = this._valuesetControl;
                this._controlHandlers['fixedtext'] = this._fixedtextControl;
                this._controlHandlers['htmlcontrol'] = this._htmlControl;
@@ -1059,6 +1059,13 @@ L.Control.JSDialogBuilder = L.Control.extend({
        },
 
        _comboboxControl: function(parentContainer, data, builder) {
+               if (data.entries)
+                       builder._listboxControl(parentContainer, data, builder);
+               else
+                       builder._editControl(parentContainer, data, builder);
+       },
+
+       _listboxControl: function(parentContainer, data, builder) {
                // TODO: event listener in the next level...
 
                if (!data.entries || data.entries.length === 0)
commit 093960af44c8670449a7cd0de37c5c8534a24f86
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Tue Feb 25 10:50:43 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:30 2020 +0100

    jsdialog: build frame also without title
    
    Change-Id: Id5f94eb90756419305ab5d593791663ecb5eb41b

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index 90e066730..97e28a76f 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -394,10 +394,13 @@ L.Control.JSDialogBuilder = L.Control.extend({
        },
 
        _frameHandler: function(parentContainer, data, builder) {
-               data.text = builder._cleanText(data.children[0].text);
-               var contentNode = data.children[1];
-
-               builder._explorableEntry(parentContainer, data, contentNode, 
builder);
+               if (data.children.length > 1) {
+                       data.text = builder._cleanText(data.children[0].text);
+                       var contentNode = data.children[1];
+                       builder._explorableEntry(parentContainer, data, 
contentNode, builder);
+               } else {
+                       return true;
+               }
 
                return false;
        },
@@ -1597,10 +1600,12 @@ L.Control.JSDialogBuilder = L.Control.extend({
                }
 
                for (var idx = 0; idx < data.length; ++idx) {
-                       var controlId = data[idx].id;
-                       if (controlId && 
this._missingLabelData.hasOwnProperty(controlId)) {
-                               data.splice(idx, 0, 
this._missingLabelData[controlId]);
-                               ++idx;
+                       if (data[idx]) {
+                               var controlId = data[idx].id;
+                               if (controlId && 
this._missingLabelData.hasOwnProperty(controlId)) {
+                                       data.splice(idx, 0, 
this._missingLabelData[controlId]);
+                                       ++idx;
+                               }
                        }
                }
        },
@@ -1614,6 +1619,9 @@ L.Control.JSDialogBuilder = L.Control.extend({
        build: function(parent, data) {
                this._amendJSDialogData(data);
                for (var childIndex in data) {
+                       if (!data[childIndex])
+                               continue;
+
                        var childData = data[childIndex];
                        this._parentize(childData);
                        var childType = childData.type;
commit 74d3f38e0289a44bca4db4c777e5c36a499d960e
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Fri Feb 21 11:37:22 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:26 2020 +0100

    jsdialog: Don't show dialog window when mobile panel already opened
    
    Change-Id: I9828c1aafb7876160a5122a41109dc7165de481d

diff --git a/loleaflet/src/control/Control.LokDialog.js 
b/loleaflet/src/control/Control.LokDialog.js
index 211175f19..636a02d4e 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -59,6 +59,10 @@ L.Control.LokDialog = L.Control.extend({
 
        dialogIdPrefix: 'lokdialog-',
 
+       hasMobilePanelOpened: function() {
+               return window.windowId !== undefined;
+       },
+
        onPan: function (ev) {
                if (!draggedObject)
                        return;
@@ -278,7 +282,8 @@ L.Control.LokDialog = L.Control.extend({
                if (e.action === 'created') {
                        if (e.winType === 'dialog') {
                                // When left/top are invalid, the dialog shows 
in the center.
-                               this._launchDialog(e.id, left, top, width, 
height, e.title);
+                               if (!this.hasMobilePanelOpened())
+                                       this._launchDialog(e.id, left, top, 
width, height, e.title);
                        } else if (e.winType === 'calc-input-win') {
                                this._launchCalcInputBar(e.id, width, height);
                        } else if (e.winType === 'deck') {
@@ -313,7 +318,7 @@ L.Control.LokDialog = L.Control.extend({
                if (!(this._isOpen(e.id) || this._getParentId(e.id)))
                        return;
 
-               if (e.action === 'invalidate') {
+               if (e.action === 'invalidate' && !this.hasMobilePanelOpened()) {
                        this.wasInvalidated = true;
                        var parent = this._getParentId(e.id);
                        var rectangle = e.rectangle;
@@ -335,7 +340,7 @@ L.Control.LokDialog = L.Control.extend({
                                rectangle = this._createRectStr(e.id);
                        }
                        this._sendPaintWindow(e.id, rectangle);
-               } else if (e.action === 'size_changed') {
+               } else if (e.action === 'size_changed' && 
!this.hasMobilePanelOpened()) {
                        // FIXME: we don't really have to destroy and launch 
the dialog again but do it for
                        // now because the size sent to us previously in 
'created' cb is not correct
                        $('#' + strId).remove();
@@ -1204,6 +1209,9 @@ L.Control.LokDialog = L.Control.extend({
                                this._onDialogClose(dialogId, true);
                        }
                }
+               if (window.windowId !== undefined) {
+                       this._onDialogClose(window.windowId, true);
+               }
        },
 
        onCloseCurrentPopUp: function() {
commit 6baaeb9b373f65ea96e41712770b534c04c1664e
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Fri Feb 21 09:54:33 2020 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Fri Mar 6 12:34:13 2020 +0100

    jsdialog: use correct id also for dialogs in mobilewizard
    
    Change-Id: I585c5b92192655684eedd62d88817a92fc1fc0a8

diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js 
b/loleaflet/src/control/Control.JSDialogBuilder.js
index 45a00d502..90e066730 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -104,7 +104,9 @@ L.Control.JSDialogBuilder = L.Control.extend({
                        builder.map.sendUnoCommand(data);
                } else if (object) {
                        data = typeof data === 'string' ? data.replace('"', 
'\\"') : data;
-                       var message = 'dialogevent ' + (window.sidebarId !== 
undefined ? window.sidebarId : -1) +
+                       var windowId = window.windowId !== undefined ? 
window.windowId :
+                                                               
(window.sidebarId !== undefined ? window.sidebarId : -1);
+                       var message = 'dialogevent ' + windowId +
                            ' {\"id\":\"' + object.id + '\", \"cmd\": \"' + 
eventType + '\", \"data\":\"' + data + '\"}';
                        builder.map._socket.sendMessage(message);
                }
diff --git a/loleaflet/src/control/Control.LokDialog.js 
b/loleaflet/src/control/Control.LokDialog.js
index d106b1504..211175f19 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -287,6 +287,7 @@ L.Control.LokDialog = L.Control.extend({
                                } else {
                                        // In mobile we get jsdialog messages.
                                        window.sidebarId = e.id;
+                                       window.windowId = undefined;
                                }
                        } else if (e.winType === 'child') {
                                var parentId = parseInt(e.parentId);
diff --git a/loleaflet/src/control/Control.MobileWizard.js 
b/loleaflet/src/control/Control.MobileWizard.js
index e18b8ccdf..84fe7176e 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -278,6 +278,14 @@ L.Control.MobileWizard = L.Control.extend({
 
        _onMobileWizard: function(data) {
                if (data) {
+
+                       if (data.id && !isNaN(data.id)) {
+                               // id is a number - remember window id for 
interaction
+                               window.windowId = data.id;
+                       } else {
+                               window.windowId = undefined;
+                       }
+
                        var isSidebar = (data.children && data.children.length 
>= 1 &&
                                         data.children[0].type == 'deck');
 
commit f401f1f7147294e4b7d95782823c70b8f3f40686
Author:     Pedro Pinto Silva <pedro.si...@collabora.com>
AuthorDate: Wed Feb 26 12:04:31 2020 +0100
Commit:     Tamás Zolnai <tamas.zol...@collabora.com>
CommitDate: Wed Feb 26 12:41:57 2020 +0100

    Hamburger menu: adding ids (so it uses the respective icon)  and adjusting 
cypress file
    
    Change-Id: I33ad1671cc859ea1af1350f3e3d3a83b33c355c5
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89532
    Tested-by: Tamás Zolnai <tamas.zol...@collabora.com>
    Reviewed-by: Tamás Zolnai <tamas.zol...@collabora.com>

diff --git a/cypress_test/integration_tests/common/helper.js 
b/cypress_test/integration_tests/common/helper.js
index 364746044..6ead0f709 100644
--- a/cypress_test/integration_tests/common/helper.js
+++ b/cypress_test/integration_tests/common/helper.js
@@ -66,7 +66,7 @@ function selectAllMobile() {
                .click();
 
        // Open edit menu
-       cy.get('.ui-header.level-0 .sub-menu-title')
+       cy.get('.ui-header.level-0 .menu-entry-with-icon')
                .contains('Edit')
                .click();
 
diff --git a/loleaflet/src/control/Control.Menubar.js 
b/loleaflet/src/control/Control.Menubar.js
index a4b876536..62d8507f3 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -31,7 +31,7 @@ L.Control.Menubar = L.Control.extend({
                                {type: 'separator'},
                                {name: _('Close document'), id: 
'closedocument', type: 'action'}
                        ]},
-                       {name: _UNO('.uno:EditMenu', 'text'), type: 'menu', 
menu: [
+                       {name: _UNO('.uno:EditMenu', 'text'), id: 'editmenu', 
type: 'menu', menu: [
                                {uno: '.uno:Undo'},
                                {uno: '.uno:Redo'},
                                {name: _('Repair'), id: 'repair',  type: 
'action'},
@@ -259,7 +259,7 @@ L.Control.Menubar = L.Control.extend({
                                {type: 'separator'},
                                {name: _('Close document'), id: 
'closedocument', type: 'action'}
                        ]},
-                       {name: _UNO('.uno:EditMenu', 'presentation'), type: 
'menu', menu: [
+                       {name: _UNO('.uno:EditMenu', 'presentation'), id: 
'editmenu', type: 'menu', menu: [
                                {uno: '.uno:Undo'},
                                {uno: '.uno:Redo'},
                                {name: _('Repair'), id: 'repair',  type: 
'action'},
@@ -360,7 +360,7 @@ L.Control.Menubar = L.Control.extend({
                                {type: 'separator'},
                                {name: _('Close document'), id: 
'closedocument', type: 'action'}
                        ]},
-                       {name: _UNO('.uno:EditMenu', 'spreadsheet'), type: 
'menu', menu: [
+                       {name: _UNO('.uno:EditMenu', 'spreadsheet'), id: 
'editmenu', type: 'menu', menu: [
                                {uno: '.uno:Undo'},
                                {uno: '.uno:Redo'},
                                {name: _('Repair'), id: 'repair',  type: 
'action'},
@@ -477,7 +477,7 @@ L.Control.Menubar = L.Control.extend({
                                {name: _('Word Document (.docx)'), id: 
'downloadas-docx', type: 'action'},
                                {name: _('Rich Text (.rtf)'), id: 
'downloadas-rtf', type: 'action'}
                        ]},
-                       {name: _UNO('.uno:EditMenu', 'text'), type: 'menu', 
menu: [
+                       {name: _UNO('.uno:EditMenu', 'text'), id: 'editmenu', 
type: 'menu', menu: [
                                {uno: '.uno:Undo'},
                                {uno: '.uno:Redo'},
                                {name: _('Repair'), id: 'repair',  type: 
'action'},
@@ -523,7 +523,7 @@ L.Control.Menubar = L.Control.extend({
                                {name: _('PowerPoint 2003 Presentation 
(.ppt)'), id: 'downloadas-ppt', type: 'action'},
                                {name: _('PowerPoint Presentation (.pptx)'), 
id: 'downloadas-pptx', type: 'action'},
                        ]},
-                       {name: _UNO('.uno:EditMenu', 'presentation'), type: 
'menu', menu: [
+                       {name: _UNO('.uno:EditMenu', 'presentation'), id: 
'editmenu', type: 'menu', menu: [
                                {uno: '.uno:Undo'},
                                {uno: '.uno:Redo'},
                                {name: _('Repair'), id: 'repair',  type: 
'action'},
@@ -533,7 +533,7 @@ L.Control.Menubar = L.Control.extend({
                                {name: _UNO('.uno:Paste'), id: 
'warn-copy-paste',  type: 'action', mobileappuno: '.uno:Paste'},
                                {uno: '.uno:SelectAll'}
                        ]},
-                       {name: _UNO('.uno:TableMenu', 'text'/*HACK should be 
'presentation', but not in xcu*/), type: 'menu', menu: [
+                       {name: _UNO('.uno:TableMenu', 'text'/*HACK should be 
'presentation', but not in xcu*/), id: 'tablemenu', type: 'menu', menu: [
                                {uno: '.uno:InsertRowsBefore'},
                                {uno: '.uno:InsertRowsAfter'},
                                {type: 'separator'},
@@ -543,7 +543,7 @@ L.Control.Menubar = L.Control.extend({
                                {uno: '.uno:DeleteColumns'},
                                {uno: '.uno:MergeCells'}]
                        },
-                       {name: _UNO('.uno:SlideMenu', 'presentation'), type: 
'menu', menu: [
+                       {name: _UNO('.uno:SlideMenu', 'presentation'), id: 
'slidemenu', type: 'menu', menu: [
                                {name: _UNO('.uno:InsertSlide', 
'presentation'), id: 'insertpage', type: 'action'},
                                {name: _UNO('.uno:DuplicateSlide', 
'presentation'), id: 'duplicatepage', type: 'action'},
                                {name: _UNO('.uno:DeleteSlide', 
'presentation'), id: 'deletepage', type: 'action'}]
@@ -568,7 +568,7 @@ L.Control.Menubar = L.Control.extend({
                                {name: _('Excel 2003 Spreadsheet (.xls)'), id: 
'downloadas-xls', type: 'action'},
                                {name: _('Excel Spreadsheet (.xlsx)'), id: 
'downloadas-xlsx', type: 'action'}
                        ]},
-                       {name: _UNO('.uno:EditMenu', 'spreadsheet'), type: 
'menu', menu: [
+                       {name: _UNO('.uno:EditMenu', 'spreadsheet'), id: 
'editmenu', type: 'menu', menu: [
                                {uno: '.uno:Undo'},
                                {uno: '.uno:Redo'},
                                {name: _('Repair'), id: 'repair',  type: 
'action'},
@@ -578,7 +578,7 @@ L.Control.Menubar = L.Control.extend({
                                {name: _UNO('.uno:Paste'), id: 
'warn-copy-paste',  type: 'action', mobileappuno: '.uno:Paste'},
                                {uno: '.uno:SelectAll'}
                        ]},
-                       {name: _UNO('.uno:SheetMenu', 'spreadsheet'), type: 
'menu', menu: [
+                       {name: _UNO('.uno:SheetMenu', 'spreadsheet'), id: 
'sheetmenu', type: 'menu', menu: [
                                {name: _UNO('.uno:InsertRowsMenu', 
'spreadsheet'), type: 'menu', menu: [
                                        {uno: '.uno:InsertRowsBefore'},
                                        {uno: '.uno:InsertRowsAfter'}]},
@@ -595,7 +595,7 @@ L.Control.Menubar = L.Control.extend({
                                        {uno: '.uno:DeleteRowbreak'},
                                        {uno: '.uno:DeleteColumnbreak'}]}
                        ]},
-                       {name: _UNO('.uno:DataMenu', 'spreadsheet'), type: 
'menu', menu: [
+                       {name: _UNO('.uno:DataMenu', 'spreadsheet'), id: 
'datamenu', type: 'menu', menu: [
                                {uno: '.uno:DataSort'},
                                {uno: '.uno:SortAscending'},
                                {uno: '.uno:SortDescending'},
commit 367c6f958821bd65363a91e96b1493ef73975fa6
Author:     Pedro Pinto Silva <pedro.si...@collabora.com>
AuthorDate: Wed Feb 26 12:31:46 2020 +0100
Commit:     Pedro Pinto da Silva <pedro.si...@collabora.com>
CommitDate: Wed Feb 26 12:34:59 2020 +0100

    mobileWizard: ui-header-left: remove hard width and replace it with 
min-width
    
    Change-Id: Ib10f93b66ab2f3f5f50e8ae520ec8755361ae0cf
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89534
    Tested-by: Pedro Pinto da Silva <pedro.si...@collabora.com>
    Reviewed-by: Pedro Pinto da Silva <pedro.si...@collabora.com>

diff --git a/loleaflet/css/mobilewizard.css b/loleaflet/css/mobilewizard.css
index f5c7c6c5f..452e351b5 100644
--- a/loleaflet/css/mobilewizard.css
+++ b/loleaflet/css/mobilewizard.css
@@ -413,7 +413,7 @@
        }
        .ui-header-left {
                margin-left: 2%;
-               width: 42% !important;
+               min-width: 42% !important;
        }
        .ui-header.level-1.mobile-wizard.ui-widget .ui-header-left 
span.menu-entry-with-icon {
                vertical-align: middle;
commit 51c840249e8a7a094ae9594ab2aea13668c5d66b
Author:     nienzu <tommy...@ossii.com.tw>
AuthorDate: Wed Feb 26 13:47:21 2020 +0800
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Wed Feb 26 10:53:25 2020 +0100

    tdf#130798 admin: Use original data to create network traffic  graph
    
    Instead of using the data of rolling average, using original data would
    reflect the real network traffic.
    
    Change-Id: I3f5a277b6ee8e7d760f5623eb4aae9f6c999e10f
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89494
    Tested-by: Michael Meeks <michael.me...@collabora.com>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>

diff --git a/loleaflet/admin/adminAnalytics.html 
b/loleaflet/admin/adminAnalytics.html
index 7f52c080f..7667c67df 100644
--- a/loleaflet/admin/adminAnalytics.html
+++ b/loleaflet/admin/adminAnalytics.html
@@ -30,7 +30,7 @@
            host = 'ws://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/'
         }
 
-        Admin.Analytics(host)
+        var socketAnalytics = Admin.Analytics(host);
     </script>
 
     <nav class="navbar navbar-inverse navbar-fixed-top">
diff --git a/loleaflet/admin/src/AdminSocketAnalytics.js 
b/loleaflet/admin/src/AdminSocketAnalytics.js
index fcc86d5d5..e965fc62e 100644
--- a/loleaflet/admin/src/AdminSocketAnalytics.js
+++ b/loleaflet/admin/src/AdminSocketAnalytics.js
@@ -13,9 +13,7 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
        _memStatsData: [],
        _cpuStatsData: [],
        _sentStatsData: [],
-       _sentAvgStats: [],
        _recvStatsData: [],
-       _recvAvgStats: [],
 
        _memStatsSize: 0,
        _memStatsInterval: 0,
@@ -23,7 +21,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
        _cpuStatsSize: 0,
        _cpuStatsInterval: 0,
 
-       _netAvgSize: 10,
        _netStatsSize: 0,
        _netStatsInterval: 0,
 
@@ -48,10 +45,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                        this._sentStatsData = actualData;
                else if (option === 'recv')
                        this._recvStatsData = actualData;
-               else if (option === 'sent_avg')
-                       this._sentAvgStats = actualData;
-               else if (option === 'recv_avg')
-                       this._recvAvgStats = actualData;
        },
 
        onSocketOpen: function() {
@@ -102,7 +95,7 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                else if (option === 'cpu')
                        data = this._cpuStatsData;
                else if (option === 'net')
-                       data = this._sentAvgStats.concat(this._recvAvgStats);
+                       data = this._sentStatsData.concat(this._recvStatsData);
 
                xScale = d3.scale.linear().range([this._graphMargins.left, 
this._graphWidth - this._graphMargins.right]).domain([d3.min(data, function(d) {
                        return d.time;
@@ -142,7 +135,7 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                        .y(function(d) {
                                return yScale(d.value);
                        })
-                       .interpolate('basis');
+                       .interpolate('monotone');
 
                if (option === 'mem') {
                        this._xMemScale = xScale;
@@ -264,14 +257,14 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                else if (option === 'net') {
 
                        vis.append('svg:path')
-                               .attr('d', 
this._d3NetSentLine(this._sentAvgStats))
+                               .attr('d', 
this._d3NetSentLine(this._sentStatsData))
                                .attr('class', 'lineSent')
                                .attr('stroke', 'red')
                                .attr('stroke-width', 1)
                                .attr('fill', 'none');
 
                        vis.append('svg:path')
-                               .attr('d', 
this._d3NetRecvLine(this._recvAvgStats))
+                               .attr('d', 
this._d3NetRecvLine(this._recvStatsData))
                                .attr('class', 'lineRecv')
                                .attr('stroke', 'green')
                                .attr('stroke-width', 1)
@@ -294,16 +287,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                        graphName = '#CpuVisualisation';
                        line = 'line';
                }
-               else if (option === 'sent_avg') {
-                       size = this._netStatsSize - this._netAvgSize + 1;
-                       graphName = '#NetVisualisation';
-                       line = 'lineSent';
-               }
-               else if (option === 'recv_avg') {
-                       size = this._netStatsSize - this._netAvgSize + 1;
-                       graphName = '#NetVisualisation';
-                       line = 'lineRecv';
-               }
                else if (option === 'sent' || option === 'recv')
                        size = this._netStatsSize;
 
@@ -370,9 +353,9 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                this._setUpAxis('net');
 
                svg.select('.lineSent')
-               .attr('d', this._d3NetSentLine(this._sentAvgStats));
+               .attr('d', this._d3NetSentLine(this._sentStatsData));
                svg.select('.lineRecv')
-               .attr('d', this._d3NetRecvLine(this._recvAvgStats));
+               .attr('d', this._d3NetRecvLine(this._recvStatsData));
 
                svg.select('.x-axis')
                .call(this._d3NetXAxis);
@@ -383,34 +366,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                .call(this._d3NetYAxis);
        },
 
-       _updateAverage: function(option, reset) {
-               var data, res, tempSum;
-               if (option === 'sent') {
-                       data = this._sentStatsData;
-                       res = this._sentAvgStats;
-               }
-               else if (option === 'recv') {
-                       data = this._recvStatsData;
-                       res = this._recvAvgStats;
-               }
-
-               if (reset) {
-                       for (var i = 0; i <= this._netStatsSize - 
this._netAvgSize; i++) {
-                               tempSum = 0;
-                               for (var j = 0; j < this._netAvgSize; j++) {
-                                       tempSum += data[i + j].value;
-                               }
-                               tempSum /= this._netAvgSize;
-                               res[i].value = tempSum;
-                       }
-               }
-               else {
-                       tempSum = res[res.length - 1].value + (data[data.length 
- 1].value - data[data.length - 1 - this._netAvgSize].value) / this._netAvgSize;
-
-                       this._addNewData(res, tempSum, 'sent_avg');
-               }
-       },
-
        onSocketMessage: function(e) {
                var textMsg;
                if (typeof e.data === 'string') {
@@ -488,8 +443,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
 
                        this._initStatsData('sent', this._netStatsSize, 
this._netStatsInterval, true);
                        this._initStatsData('recv', this._netStatsSize, 
this._netStatsInterval, true);
-                       this._initStatsData('sent_avg', this._netStatsSize - 
this._netAvgSize + 1, this._netStatsInterval, true);
-                       this._initStatsData('recv_avg', this._netStatsSize - 
this._netAvgSize + 1, this._netStatsInterval, true);
 
                }
                else if (textMsg.startsWith('mem_stats')) {
@@ -538,7 +491,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                                for (i = this._sentStatsData.length - 1, j = 
data.length - 1; i >= 0 && j >= 0; i--, j--) {
                                        this._sentStatsData[i].value = 
parseInt(data[j]);
                                }
-                               this._updateAverage('sent', true);
 
                                if ($('#NetVisualisation').html() === '')
                                        this._createGraph('net');
@@ -547,7 +499,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                                // this is a notification data; append to 
_sentStatsData
                                data = textMsg.trim();
                                this._addNewData(this._sentStatsData, 
parseInt(data), 'sent');
-                               this._updateAverage('sent', false);
                                this._updateNetGraph();
                        }
                }
@@ -560,7 +511,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                                for (i = this._recvStatsData.length - 1, j = 
data.length - 1; i >= 0 && j >= 0; i--, j--) {
                                        this._recvStatsData[i].value = 
parseInt(data[j]);
                                }
-                               this._updateAverage('recv', true);
 
                                if ($('#NetVisualisation').html() === '')
                                        this._createGraph('net');
@@ -569,7 +519,6 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                                // this is a notification data; append to 
_recvStatsData
                                data = textMsg.trim();
                                this._addNewData(this._recvStatsData, 
parseInt(data), 'recv');
-                               this._updateAverage('recv', false);
                                this._updateNetGraph();
                        }
                }
diff --git a/loleaflet/admin/src/Util.js b/loleaflet/admin/src/Util.js
index 9d8e2b179..6671ed458 100644
--- a/loleaflet/admin/src/Util.js
+++ b/loleaflet/admin/src/Util.js
@@ -16,7 +16,7 @@ var Util = Base.extend({
                        kbytes /= unit;
                }
 
-               return kbytes.toFixed(1) + ' ' + units[i];
+               return kbytes + ' ' + units[i];
        },
 
        humanizeSecs: function(secs) {
diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp
index c4c48dfeb..db74b1535 100644
--- a/wsd/Admin.cpp
+++ b/wsd/Admin.cpp
@@ -45,7 +45,7 @@ using Poco::Net::HTTPResponse;
 using Poco::Util::Application;
 
 const int Admin::MinStatsIntervalMs = 50;
-const int Admin::DefStatsIntervalMs = 2500;
+const int Admin::DefStatsIntervalMs = 1000;
 
 /// Process incoming websocket messages
 void AdminSocketHandler::handleMessage(bool /* fin */, WSOpCode /* code */,
diff --git a/wsd/AdminModel.hpp b/wsd/AdminModel.hpp
index a3fb12fcc..f683cd45c 100644
--- a/wsd/AdminModel.hpp
+++ b/wsd/AdminModel.hpp
@@ -350,10 +350,10 @@ private:
     unsigned _cpuStatsSize = 100;
 
     std::list<unsigned> _sentStats;
-    unsigned _sentStatsSize = 100;
+    unsigned _sentStatsSize = 200;
 
     std::list<unsigned> _recvStats;
-    unsigned _recvStatsSize = 100;
+    unsigned _recvStatsSize = 200;
 
     uint64_t _sentBytesTotal;
     uint64_t _recvBytesTotal;
commit 23f484813116a9e130e697708dbb4621da163712
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Tue Feb 25 20:51:58 2020 -0500
Commit:     Ashod Nakashian <ashnak...@gmail.com>
CommitDate: Wed Feb 26 02:57:33 2020 +0100

    leaflet: don't hide the keyboard when changing selection
    
    We now don't change the keyboard state when the user
    drags the selection markers.
    
    Change-Id: Ic3dec8011808df8d1028e1925190854a50588e1c
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89492
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 6f7c924eb..c38e132d0 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -2623,7 +2623,6 @@ L.TileLayer = L.GridLayer.extend({
                }
                if (e.type === 'dragend') {
                        e.target.isDragged = false;
-                       this._map.focus();
                        this._map.fire('scrollvelocity', {vx: 0, vy: 0});
                }
 
commit 16f1c624ea7070748d1ef05acd8f448b9af14419
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Tue Feb 25 19:27:14 2020 -0500
Commit:     Ashod Nakashian <ashnak...@gmail.com>
CommitDate: Wed Feb 26 01:35:30 2020 +0100

    leaflet: don't lose focus when the dialog cursor is hiden
    
    The cursor visibility can change rapidly, and the formula-bar
    seems to do this when typing into it. The result is that
    because of losing the input focus we lose some of the input.
    
    Instead, we only use the dialog cursor update to show the keyboard
    rather than to hide it. For hiding, other messages will do it.
    
    Change-Id: I0e8674170aa9d05b6ddc15de8d35792377b6725b
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89490
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/loleaflet/src/control/Control.LokDialog.js 
b/loleaflet/src/control/Control.LokDialog.js
index 2a8d5688a..d106b1504 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -414,8 +414,11 @@ L.Control.LokDialog = L.Control.extend({
                L.DomUtil.setStyle(this._dialogs[dlgId].cursor, 'left', x + 
'px');
                L.DomUtil.setStyle(this._dialogs[dlgId].cursor, 'top', y + 
'px');
 
-               // Make sure the keyboard is visible if the user can type.
-               this._map.focus(cursorVisible);
+               // Make sure the keyboard is visible if there is a cursor.
+               // But don't hide the keyboard otherwise.
+               // At least the formula-input hides the cursor after each key 
input.
+               if (cursorVisible)
+                       this._map.focus(true);
        },
 
        _createDialogCursor: function(dialogId) {
commit 8ad7c4790c4a34d3e6a5ebfe5810b6cb00354acc
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Tue Feb 11 08:34:04 2020 -0500
Commit:     Ashod Nakashian <ashnak...@gmail.com>
CommitDate: Wed Feb 26 01:33:30 2020 +0100

    leaflet: fix searching in document functionality
    
    This makes searching work again, but typing 'r'
    still triggers F3, which simply matches the next
    hit (on desktop, on mobile it works fine).
    
    So (on desktop) typing 'your' will match the first 'you'
    and the 'r' will move the search results to the
    second 'you' (assuming there are at least two 'you'
    entries in the document and one 'your').
    
    Change-Id: Iab425afdfb3848ecff97f5599ceb7cae160b097d
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89357
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/loleaflet/src/control/Control.Toolbar.js 
b/loleaflet/src/control/Control.Toolbar.js
index 6c47153f2..95c36dedd 100644
--- a/loleaflet/src/control/Control.Toolbar.js
+++ b/loleaflet/src/control/Control.Toolbar.js
@@ -1372,8 +1372,9 @@ function onSearchKeyPress(e) {
 }
 
 function onSearchFocus() {
-       // hide the caret in the main document
-       map._onLostFocus();
+       // Start searching.
+       map.fire('searchstart');
+
        updateSearchButtons();
 }
 
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 3ff3e8a58..6f7c924eb 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -2159,6 +2159,7 @@ L.TileLayer = L.GridLayer.extend({
                if (this._map._permission === 'edit'
                && this._map._isCursorVisible   // only when LOK has told us it 
is ok
                && this._map.editorHasFocus()   // not when document is not 
focused
+               && !this._map.isSearching()     // not when searching within 
the doc
                && !this._isZooming             // not when zooming
 //             && !this.isGraphicVisible()     // not when sizing / 
positioning graphics
                && !this._isEmptyRectangle(this._visibleCursor)) {
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index cd2c8aad1..4aa7fd7c7 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -120,6 +120,8 @@ L.Map = L.Evented.extend({
                this._winId = 0;
                // The object of the dialog, if any (must have .focus callable).
                this._activeDialog = null;
+               // True only when searching within the doc, as we need to use 
winId==0.
+               this._isSearching = false;
 
 
                vex.dialogID = -1;
@@ -248,6 +250,8 @@ L.Map = L.Evented.extend({
                // Fired to signal that the input focus is being changed.
                this.on('changefocuswidget', this._onChangeFocusWidget, this);
 
+               this.on('searchstart', this._onSearchStart, this);
+
                // View info (user names and view ids)
                this._viewInfo = {};
                this._viewInfoByUserName = {};
@@ -947,6 +951,10 @@ L.Map = L.Evented.extend({
                this.fire('hyperlinkclicked', {url: helpURL});
        },
 
+       isSearching: function() {
+               return this._isSearching;
+       },
+
        _fireInitComplete: function (condition) {
                if (this.initComplete) {
                        return;
@@ -1358,6 +1366,7 @@ L.Map = L.Evented.extend({
 
                this._winId = winId;
                this._activeDialog = dialog;
+               this._isSearching = false;
 
                var doclayer = this._docLayer;
                if (doclayer)
@@ -1402,6 +1411,10 @@ L.Map = L.Evented.extend({
                }
        },
 
+       _onSearchStart: function () {
+               this._isSearching = true;
+       },
+
        _onUpdateProgress: function (e) {
                if (e.statusType === 'start') {
                        if (this._socket.socket.readyState === 1) {
commit af58e1975028d1f35171b94b1a1393814607d023
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Wed Feb 19 09:47:56 2020 -0500
Commit:     Ashod Nakashian <ashnak...@gmail.com>
CommitDate: Wed Feb 26 01:32:38 2020 +0100

    leaflet: remove redundant check
    
    Map.editorHasFocus() implies map.getWinId === 0.
    
    Change-Id: I522a377df095683453d2499a87485465437f9abb
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89356
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index a0fff8280..3ff3e8a58 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1135,7 +1135,7 @@ L.TileLayer = L.GridLayer.extend({
                                .openOn(this._map);
                }
 
-               if (!this._map.editorHasFocus() && (modifierViewId === 
this._viewId) && (this._map.getWinId === 0) && (this._map._permission === 
'edit')) {
+               if (!this._map.editorHasFocus() && (modifierViewId === 
this._viewId) && (this._map._permission === 'edit')) {
                        // Regain cursor if we had been out of focus and now 
have input.
                        // (only if it is our own cursor and the input is 
actually not
                        // going into a dialog)
@@ -2108,8 +2108,7 @@ L.TileLayer = L.GridLayer.extend({
                var updated = true;
                if (!this._cursorMarker) {
                        this._cursorMarker = L.cursor(cursorPos, 
pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())), 
{blink: true});
-               }
-               else {
+               } else {
                        var oldLatLng = this._cursorMarker.getLatLng();
                        this._cursorMarker.setLatLng(cursorPos, 
pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())));
                        var newLatLng = this._cursorMarker.getLatLng();
commit 0326037cbfcea000daaa52dcf2da1b571144cdd0
Author:     Marco Marinello <marine...@libreoffice.org>
AuthorDate: Tue Feb 25 21:40:30 2020 +0100
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Tue Feb 25 22:45:43 2020 +0100

    Add a README for docker directory
    
    Signed-off-by: Marco Marinello <marine...@libreoffice.org>
    Change-Id: I0cc9da9945763c48afd01ea231d9dfb5bb384d71
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89482
    Tested-by: Michael Meeks <michael.me...@collabora.com>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>

diff --git a/docker/README b/docker/README
new file mode 100644
index 000000000..36dbb7180
--- /dev/null
+++ b/docker/README
@@ -0,0 +1,10 @@
+LibreOffice Online docker
+
+This directory contains everything needed to compile a
+working docker container with LOOL.
+
+The provided l10n-docker-nightly.sh provides an automatic
+way to compile it with nightly translations.
+
+Further docs:
+https://wiki.documentfoundation.org/Development/BuildingOnline
commit 3de577d2c20d83be0079be4066196b476c46fa8d
Author:     Tor Lillqvist <t...@collabora.com>
AuthorDate: Tue Feb 25 17:29:09 2020 +0200
Commit:     Tor Lillqvist <t...@collabora.com>
CommitDate: Tue Feb 25 21:40:03 2020 +0100

    Use the loolkitconfig-mobile.xcu on iOS, too
    
    We can't rename a file in the Xcode project, so copy it to
    ios/Mobile/loolkitconfig.xcu in the configure script, and use from
    there.
    
    Change-Id: I1e50235c06f528dd24d0d968aaccc994418b57d8
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89466
    Tested-by: Tor Lillqvist <t...@collabora.com>
    Reviewed-by: Tor Lillqvist <t...@collabora.com>

diff --git a/configure.ac b/configure.ac
index 398d303e3..1a038efaf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -983,6 +983,7 @@ AS_IF([test "$ENABLE_IOSAPP" = "true"],
               # iOS app.
               touch ios/Mobile/Branding/branding.css
           fi
+          cp loolkitconfig-mobile.xcu ios/Mobile/loolkitconfig.xcu
        fi
       ])
 AC_SUBST(IOSAPP_FONTS)
diff --git a/ios/Mobile.xcodeproj/project.pbxproj 
b/ios/Mobile.xcodeproj/project.pbxproj
index 9fab320d2..e20f49084 100644
--- a/ios/Mobile.xcodeproj/project.pbxproj
+++ b/ios/Mobile.xcodeproj/project.pbxproj
@@ -598,7 +598,7 @@
                BE7D6A6523FA9C2700C2E605 /* defaultprovider.hxx */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = 
defaultprovider.hxx; path = 
"../../ios-device/configmgr/source/defaultprovider.hxx"; sourceTree = 
"<group>"; };
                BE7D6A6623FA9C2700C2E605 /* parser.hxx */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = parser.hxx; path 
= "../../ios-device/configmgr/source/parser.hxx"; sourceTree = "<group>"; };
                BE7D6A6723FA9C2700C2E605 /* rootnode.cxx */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rootnode.cxx; 
path = "../../ios-device/configmgr/source/rootnode.cxx"; sourceTree = 
"<group>"; };
-               BE7D6A6A23FAA8B500C2E605 /* loolkitconfig.xcu */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = 
loolkitconfig.xcu; path = ../../../loolkitconfig.xcu; sourceTree = "<group>"; };
+               BE7D6A6A23FAA8B500C2E605 /* loolkitconfig.xcu */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = 
loolkitconfig.xcu; path = ../loolkitconfig.xcu; sourceTree = "<group>"; };
                BE7E5B7623AD07BE00F9462A /* SvxPresetListBox.cxx */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = 
SvxPresetListBox.cxx; path = 
"../../ios-device/svx/source/tbxctrls/SvxPresetListBox.cxx"; sourceTree = 
"<group>"; };
                BE7E5B7723AD07BE00F9462A /* tbxcolor.cxx */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tbxcolor.cxx; 
path = "../../ios-device/svx/source/tbxctrls/tbxcolor.cxx"; sourceTree = 
"<group>"; };
                BE7E5B7823AD07BE00F9462A /* tbxdrctl.cxx */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tbxdrctl.cxx; 
path = "../../ios-device/svx/source/tbxctrls/tbxdrctl.cxx"; sourceTree = 
"<group>"; };
commit 6f3f52304f122036e1bc405a8882d9a6ef1a90d1
Author:     Jan Holesovsky <ke...@collabora.com>
AuthorDate: Mon Feb 24 21:49:27 2020 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Feb 25 21:03:37 2020 +0100

    Don't bind the slideshow downloading to the richdocuments...
    
    ... decide based on the DownloadAsPostMessage wopi value instead.
    
    The idea is that the Nextcloud app actually sets the DownloadAsPostMessage
    wopi value to true, which means that all the downloading (including
    slideshow) is passed as Download_As postMessage anyway.
    
    So deciding here based on the existence of the Nextcloud app is
    not necessary, because there might be others who set the
    DownloadAsPostMessage and rely on the Download_As postMessage,
    but would get a non-functional iframe over the top of the editing
    window.
    
    Change-Id: I4a5c1d9ef6276908a1b3910a4269091955cdc490
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89382
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/loleaflet/src/map/handler/Map.SlideShow.js 
b/loleaflet/src/map/handler/Map.SlideShow.js
index 4f268df24..0a1987707 100644
--- a/loleaflet/src/map/handler/Map.SlideShow.js
+++ b/loleaflet/src/map/handler/Map.SlideShow.js
@@ -29,7 +29,7 @@ L.Map.SlideShow = L.Handler.extend({
                        return;
                }
 
-               if (!window.RichDocumentsMobileInterface) {
+               if (!this._map['wopi'].DownloadAsPostMessage) {
                        this._slideShow = L.DomUtil.create('iframe', 
'leaflet-slideshow', this._map._container);
                        if (this._slideShow.requestFullscreen) {
                                this._slideShow.requestFullscreen();
@@ -53,7 +53,7 @@ L.Map.SlideShow = L.Handler.extend({
        },
 
        _onFullScreenChange: function () {
-               if (window.RichDocumentsMobileInterface) {
+               if (this._map['wopi'].DownloadAsPostMessage) {
                        return;
                }
 
@@ -67,12 +67,8 @@ L.Map.SlideShow = L.Handler.extend({
        },
 
        _onSlideDownloadReady: function (e) {
-               if (window.RichDocumentsMobileInterface) {
-                       window.RichDocumentsMobileInterface.slideShow(e.url);
-               } else {
-                       this._slideShow.src = e.url;
-                       this._slideShow.contentWindow.focus();
-               }
+               this._slideShow.src = e.url;
+               this._slideShow.contentWindow.focus();
        }
 });
 
commit 4ca5089d56369d335a39c13e428d2e932c0ac8a3
Author:     Tamás Zolnai <tamas.zol...@collabora.com>
AuthorDate: Tue Feb 25 12:10:53 2020 +0100
Commit:     Tamás Zolnai <tamas.zol...@collabora.com>
CommitDate: Tue Feb 25 12:15:23 2020 +0100

    mobile: fix-up non-breaking space insertion.
    
    Make it to have the icon, but also trigger the right
    uno command.
    
    Change-Id: Ic762fee0eee0f1a6bc793edc98ed2217075364f7

diff --git a/loleaflet/src/control/Control.Menubar.js 
b/loleaflet/src/control/Control.Menubar.js
index 8517f8c0d..a4b876536 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -648,7 +648,7 @@ L.Control.Menubar = L.Control.extend({
                                        {name: _UNO('.uno:HyperlinkDialog'), 
id: 'inserthyperlink', type: 'action'},
                                        {name: _UNO('.uno:ShapesMenu'), id: 
'insertshape', type: 'action'},
                                        {name: _UNO('.uno:FormattingMarkMenu', 
'text'), id: 'formattingmark', type: 'menu', menu: [
-                                               {name: 
_UNO('.uno:InsertNonBreakingSpace'), id: 'insertnonbreakingspace'},
+                                               {uno: 
'.uno:InsertNonBreakingSpace'},
                                                {uno: '.uno:InsertHardHyphen'},
                                                {uno: '.uno:InsertSoftHyphen'},
                                                {uno: '.uno:InsertZWSP'},
diff --git a/loleaflet/src/core/LOUtil.js b/loleaflet/src/core/LOUtil.js
index f540e6da2..7ff1a5272 100644
--- a/loleaflet/src/core/LOUtil.js
+++ b/loleaflet/src/core/LOUtil.js
@@ -92,7 +92,6 @@ L.LOUtil = {
        commandWithoutIcon: [
                'InsertPageHeader',
                'InsertPageFooter',
-               'InsertNonBreakingSpace',
                'InsertHardHyphen',
                'InsertSoftHyphen',
                'InsertZWSP',
commit f3b8455aaa8123e24e4e29a8cd79fa363a009d7f
Author:     Pedro Pinto Silva <pedro.si...@collabora.com>
AuthorDate: Mon Feb 24 11:10:19 2020 +0100
Commit:     Tamás Zolnai <tamas.zol...@collabora.com>
CommitDate: Tue Feb 25 12:06:31 2020 +0100

    Mobile: Insert: Add missing icons, add missing ids, create missing icons, 
also add sub level icns for footerandheader and formattingmark (fixing cypress)
    
    Change-Id: Id3ca33095b5eae7d13129f4b9629e2c0faf302fb
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89371
    Tested-by: Tamás Zolnai <tamas.zol...@collabora.com>
    Reviewed-by: Tamás Zolnai <tamas.zol...@collabora.com>

diff --git a/cypress_test/integration_tests/mobile/writer/focus_spec.js 
b/cypress_test/integration_tests/mobile/writer/focus_spec.js
index 3874c6710..dce4cd646 100644
--- a/cypress_test/integration_tests/mobile/writer/focus_spec.js
+++ b/cypress_test/integration_tests/mobile/writer/focus_spec.js
@@ -135,7 +135,7 @@ describe('Focus tests', function() {
                        .should('not.be.empty');
 
                // Select More Fields
-               cy.get('.ui-header.level-0.mobile-wizard.ui-widget 
.sub-menu-title')
+               cy.get('.ui-header.level-0.mobile-wizard.ui-widget')
                        .contains('More Fields...')
                        .parent().click();
 
diff --git a/cypress_test/integration_tests/mobile/writer/insert_field_spec.js 
b/cypress_test/integration_tests/mobile/writer/insert_field_spec.js
index 7f849dd25..5e9b14b89 100644
--- a/cypress_test/integration_tests/mobile/writer/insert_field_spec.js
+++ b/cypress_test/integration_tests/mobile/writer/insert_field_spec.js
@@ -15,7 +15,7 @@ describe('Insert fields via insertion wizard.', function() {
                        .click();
 
                // Open fields submenu
-               cy.get('.sub-menu-title')
+               cy.get('.menu-entry-with-icon.flex-fullwidth')
                        .contains('More Fields...')
                        .click();
 
diff --git 
a/cypress_test/integration_tests/mobile/writer/insert_formatting_mark_spec.js 
b/cypress_test/integration_tests/mobile/writer/insert_formatting_mark_spec.js
index 90b6b0d9e..3f83e2a1f 100644
--- 
a/cypress_test/integration_tests/mobile/writer/insert_formatting_mark_spec.js
+++ 
b/cypress_test/integration_tests/mobile/writer/insert_formatting_mark_spec.js
@@ -15,7 +15,7 @@ describe('Insert formatting mark via insertion wizard.', 
function() {
                        .click();
 
                // Open formatting marks
-               cy.get('.sub-menu-title')
+               cy.get('.menu-entry-with-icon.flex-fullwidth')
                        .contains('Formatting Mark')
                        .click();
 
@@ -29,7 +29,7 @@ describe('Insert formatting mark via insertion wizard.', 
function() {
        });
 
        it('Insert non-breaking space.', function() {
-               cy.get('.menu-entry-no-icon')
+               cy.get('.menu-entry-with-icon')
                        .contains('Non-breaking space')
                        .click();
 
diff --git a/cypress_test/integration_tests/mobile/writer/insert_object_spec.js 
b/cypress_test/integration_tests/mobile/writer/insert_object_spec.js
index 70d13c570..ab58331ef 100644
--- a/cypress_test/integration_tests/mobile/writer/insert_object_spec.js
+++ b/cypress_test/integration_tests/mobile/writer/insert_object_spec.js
@@ -53,7 +53,7 @@ describe('Insert objects via insertion wizard.', function() {
                        .click();
 
                // Open Table submenu
-               cy.get('.menu-entry-with-icon.flex-fullwidth')
+               cy.get('.ui-header.level-0.mobile-wizard.ui-widget')
                        .contains('Table')
                        .click();
                cy.get('.mobile-wizard.ui-text')
@@ -88,7 +88,7 @@ describe('Insert objects via insertion wizard.', function() {
                        .click();
 
                // Open Table submenu
-               cy.get('.menu-entry-with-icon.flex-fullwidth')
+               cy.get('.ui-header.level-0.mobile-wizard.ui-widget')
                        .contains('Table')
                        .click();
                cy.get('.mobile-wizard.ui-text')
@@ -135,14 +135,14 @@ describe('Insert objects via insertion wizard.', 
function() {
                        .click();
 
                // Open header/footer submenu
-               cy.get('.sub-menu-title')
+               cy.get('.menu-entry-with-icon')
                        .contains('Header and Footer')
                        .click();
                cy.get('.ui-header.level-1.mobile-wizard.ui-widget')
                        .should('be.visible');
 
                // Open header submenu
-               cy.get('.ui-header.level-1.mobile-wizard.ui-widget 
.sub-menu-title')
+               cy.get('.ui-header.level-1.mobile-wizard.ui-widget')
                        .contains('Header')
                        .click();
 
@@ -176,14 +176,14 @@ describe('Insert objects via insertion wizard.', 
function() {
                        .click();
 
                // Open header/footer submenu
-               cy.get('.sub-menu-title')
+               cy.get('.menu-entry-with-icon')
                        .contains('Header and Footer')
                        .click();
                cy.get('.ui-header.level-1.mobile-wizard.ui-widget')
                        .should('be.visible');
 
                // Open footer submenu
-               cy.get('.ui-header.level-1.mobile-wizard.ui-widget 
.sub-menu-title')
+               cy.get('.ui-header.level-1.mobile-wizard.ui-widget')
                        .contains('Footer')
                        .click();
 
diff --git a/loleaflet/images/lc_formattingmark.svg 
b/loleaflet/images/lc_formattingmark.svg
new file mode 100644
index 000000000..2c8bbb6da
--- /dev/null
+++ b/loleaflet/images/lc_formattingmark.svg
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg";>
+ <path d="m2 9.5h3v4h14v-4h2.9998" fill="none" stroke="#4d82b8" 
stroke-width="2"/>
+</svg>
diff --git a/loleaflet/images/lc_insertfield.svg 
b/loleaflet/images/lc_insertfield.svg
new file mode 100644
index 000000000..a2d6d0003
--- /dev/null
+++ b/loleaflet/images/lc_insertfield.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg";><path d="m5 
4v17h6.283203c-.175464-.296519-.283203-.636031-.283203-1 0-1.090703.909297-2 
2-2v-1c-1.090703 0-2-.909297-2-2s.909297-2 2-2c0-1.090703.909297-2 2-2s2 
.909297 2 2h1c0-.726734.407943-1.366449 1-1.716797v-3.5546874l-4-3.7285156zm12 
13v1h1v-1z" fill="#fff"/><path d="m5 3c-.554 0-1 .446-1 1v17c0 .554.446 1 1 
1h8c-.726734 0-1.366449-.407943-1.716797-1h-6.283203v-17h9v4c0 .554.446 1 1 
1h4v2.283203c.296519-.175464.636031-.283203 
1-.283203v-2.75-.2089844c0-.4506799.098038-.4254121-.605469-1.0664062l-3.30664-3.2382813c-.709525-.7368575-.710169-.7363281-1.09375-.7363281h-.332032-.662109z"
 fill="#808080"/><path d="m15 8h4l-4-4z" fill="#fff" fill-rule="evenodd"/><path 
d="m15 12c-.554 0-1 .446-1 1v1h-1c-.554 0-1 .446-1 1s.446 1 1 1h1v3h-1c-.554 
0-1 .446-1 1s.446 1 1 1h1v1c0 .554.446 1 1 1s1-.446 1-1v-1h3v1c0 .554.446 1 1 
1s1-.446 1-1v-1h1c.554 0 1-.446 1-1s-.446-1-1-1h-1v-3h1c.554 0 1-.446 
1-1s-.446-1-1-1h-1v-1c0-.554-.446-1-
 1-1s-1 .446-1 1v1h-3v-1c0-.554-.446-1-1-1zm1 4h3v3h-3z" fill="#4d82b8"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertheaderfooter.svg 
b/loleaflet/images/lc_insertheaderfooter.svg
new file mode 100644
index 000000000..4c03f51d4
--- /dev/null
+++ b/loleaflet/images/lc_insertheaderfooter.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg";><path d="m5 
3v18h14v-14.2705905l-4-3.7294095z" fill="#fff"/><path d="m5 2c-.554 0-1 .446-1 
1v18c0 .554.446 1 1 1h14c.554 0 1-.446 
1-1v-10.109375-3.6412209-.2079239c0-.4506799.09887-.4265951-.604637-1.0675892l-3.307389-3.2370335c-.709525-.7368575-.711223-.7368575-1.094804-.7368575h-.331557-.661613zm0
 1h9v4c0 .554.446 1 1 1h4v13h-14z" fill="#808080"/><path d="m15 7h4l-4-4z" 
fill="#fff" fill-rule="evenodd"/><g fill="#eac282"><path d="m6 
4h7v3h-7z"/><path d="m6 17h11v3h-11z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertnonbreakingspace.svg 
b/loleaflet/images/lc_insertnonbreakingspace.svg
new file mode 100644
index 000000000..2c8bbb6da
--- /dev/null
+++ b/loleaflet/images/lc_insertnonbreakingspace.svg
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg";>
+ <path d="m2 9.5h3v4h14v-4h2.9998" fill="none" stroke="#4d82b8" 
stroke-width="2"/>
+</svg>
diff --git a/loleaflet/images/lc_insertpagefooter.svg 
b/loleaflet/images/lc_insertpagefooter.svg
new file mode 100644
index 000000000..7e49b478e
--- /dev/null
+++ b/loleaflet/images/lc_insertpagefooter.svg
@@ -0,0 +1,8 @@
+<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg";>
+ <path d="m5 3v18h14v-14.271l-4-3.7294z" fill="#fff"/>
+ <path d="m5 2c-0.554 0-1 0.446-1 1v18c0 0.554 0.446 1 1 1h14c0.554 0 1-0.446 
1-1v-13.959c0-0.45068 
0.09887-0.4266-0.60464-1.0676l-3.3074-3.237c-0.70952-0.73686-0.71122-0.73686-1.0948-0.73686h-0.99317zm0
 1h9v4c0 0.554 0.446 1 1 1h4v13h-14z" fill="#808080"/>
+ <path d="m15 7h4l-4-4z" fill="#fff" fill-rule="evenodd"/>
+ <g fill="#eac282">
+  <path d="m6 17h11v3h-11z"/>
+ </g>
+</svg>
diff --git a/loleaflet/images/lc_insertpageheader.svg 
b/loleaflet/images/lc_insertpageheader.svg
new file mode 100644
index 000000000..bd6820b27
--- /dev/null
+++ b/loleaflet/images/lc_insertpageheader.svg
@@ -0,0 +1,8 @@
+<svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg";>
+ <path d="m5 3v18h14v-14.271l-4-3.7294z" fill="#fff"/>
+ <path d="m5 2c-0.554 0-1 0.446-1 1v18c0 0.554 0.446 1 1 1h14c0.554 0 1-0.446 
1-1v-13.959c0-0.45068 
0.09887-0.4266-0.60464-1.0676l-3.3074-3.237c-0.70952-0.73686-0.71122-0.73686-1.0948-0.73686h-0.99317zm0
 1h9v4c0 0.554 0.446 1 1 1h4v13h-14z" fill="#808080"/>
+ <path d="m15 7h4l-4-4z" fill="#fff" fill-rule="evenodd"/>
+ <g fill="#eac282">
+  <path d="m6 4h7v3h-7z"/>
+ </g>
+</svg>
diff --git a/loleaflet/src/control/Control.Menubar.js 
b/loleaflet/src/control/Control.Menubar.js
index 8f2d230ad..8517f8c0d 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -624,7 +624,7 @@ L.Control.Menubar = L.Control.extend({
                                        {name: _UNO('.uno:InsertAnnotation', 
'text'), id: 'insertcomment', type: 'action'},
                                        {name: _UNO('.uno:TableMenu'), id: 
'inserttable', type: 'action'},
                                        {type: 'separator'},
-                                       {name: _UNO('.uno:InsertField', 
'text'), type: 'menu', menu: [
+                                       {name: _UNO('.uno:InsertField', 
'text'), id: 'insertfield', type: 'menu', menu: [
                                                {uno: 
'.uno:InsertPageNumberField'},
                                                {uno: 
'.uno:InsertPageCountField'},
                                                {uno: '.uno:InsertDateField'},
@@ -633,10 +633,10 @@ L.Control.Menubar = L.Control.extend({
                                                {uno: '.uno:InsertAuthorField'},
                                                {uno: '.uno:InsertTopicField'}
                                        ]},
-                                       {name: 
_UNO('.uno:InsertHeaderFooterMenu', 'text'), type: 'menu', menu: [
-                                               {name: 
_UNO('.uno:InsertPageHeader', 'text'), type: 'menu', menu: [
+                                       {name: 
_UNO('.uno:InsertHeaderFooterMenu', 'text'), id: 'insertheaderfooter', type: 
'menu', menu: [
+                                               {name: 
_UNO('.uno:InsertPageHeader', 'text'), id: 'insertpageheader', type: 'menu', 
menu: [
                                                        {name: _('All'), 
disabled: true, id: 'insertheader', tag: '_ALL_', uno: 
'.uno:InsertPageHeader?On:bool=true'}]},
-                                               {name: 
_UNO('.uno:InsertPageFooter', 'text'), type: 'menu', menu: [
+                                               {name: 
_UNO('.uno:InsertPageFooter', 'text'), id: 'insertpagefooter', type: 'menu', 
menu: [
                                                        {name: _('All'), 
disabled: true, id: 'insertfooter', tag: '_ALL_', uno: 
'.uno:InsertPageFooter?On:bool=true'}]}
                                        ]},
                                        {uno: '.uno:InsertFootnote'},
@@ -647,8 +647,8 @@ L.Control.Menubar = L.Control.extend({
                                        {type: 'separator'},
                                        {name: _UNO('.uno:HyperlinkDialog'), 
id: 'inserthyperlink', type: 'action'},
                                        {name: _UNO('.uno:ShapesMenu'), id: 
'insertshape', type: 'action'},
-                                       {name: _UNO('.uno:FormattingMarkMenu', 
'text'), type: 'menu', menu: [
-                                               {uno: 
'.uno:InsertNonBreakingSpace'},
+                                       {name: _UNO('.uno:FormattingMarkMenu', 
'text'), id: 'formattingmark', type: 'menu', menu: [
+                                               {name: 
_UNO('.uno:InsertNonBreakingSpace'), id: 'insertnonbreakingspace'},
                                                {uno: '.uno:InsertHardHyphen'},
                                                {uno: '.uno:InsertSoftHyphen'},
                                                {uno: '.uno:InsertZWSP'},
@@ -679,7 +679,7 @@ L.Control.Menubar = L.Control.extend({
                                        {name: _UNO('.uno:HyperlinkDialog'), 
id: 'inserthyperlink', type: 'action'},
                                        {name: _UNO('.uno:ShapesMenu'), id: 
'insertshape', type: 'action'},
                                        {uno: '.uno:Text'},
-                                       {name: _UNO('.uno:InsertField', 
'text'), type: 'menu', menu: [
+                                       {name: _UNO('.uno:InsertField', 
'text'), id: 'insertfield', type: 'menu', menu: [
                                                {uno: 
'.uno:InsertDateFieldFix'},
                                                {uno: 
'.uno:InsertDateFieldVar'},
                                                {uno: 
'.uno:InsertTimeFieldFix'},
commit 6f7229802647b6b2b8001e4232e2720dba03a14e
Author:     Weblate <nore...@documentfoundation.org>
AuthorDate: Sun Feb 23 19:15:54 2020 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Feb 25 11:21:10 2020 +0100

    update translations
    
    LibreOffice Online/android-app (Czech)
    Currently translated at 100.0% (99 of 99 strings)
    
    Change-Id: Ic104628d67d59f73041eb106ac50d50848cbde6e
    
    update translations
    
    LibreOffice Online/android-app (Lower Sorbian)
    Currently translated at 100.0% (99 of 99 strings)
    
    Change-Id: I143fa07f1cbfeb73d3b1833f16dc26550db7e43e
    
    update translations
    
    LibreOffice Online/android-app (Basque)
    Currently translated at 100.0% (99 of 99 strings)
    
    Change-Id: I1887ef80e1f1cd243ab870e44adb174b15a88368
    
    update translations
    
    LibreOffice Online/android-app (Upper Sorbian)
    Currently translated at 100.0% (99 of 99 strings)
    
    Change-Id: Idaeda0a44b3143cf10459b80225bd2d49b888f40
    
    update translations
    
    LibreOffice Online/android-app (Portuguese)
    Currently translated at 100.0% (99 of 99 strings)
    
    Change-Id: I1468acbb78f393081eba42fc385732f4c31712f6
    
    update translations
    
    LibreOffice Online/android-app (Hungarian)
    Currently translated at 100.0% (99 of 99 strings)
    
    Change-Id: Ida536ad1b0a194eb37bddaae056f335f3d7e8a65
    
    update translations
    
    LibreOffice Online/android-lib (Hungarian)
    Currently translated at 100.0% (8 of 8 strings)
    
    Change-Id: I2bc806914e12e3fce7cfb5840448b544bc70c315
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Chinese (Traditional))
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I2c396e85bfbac4ebc48d75738082f9522a40b487
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Ukrainian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I705356ab54afae9aaee238e078ea432c3410bbcd
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Turkish)
    Currently translated at 97.2% (280 of 288 strings)
    
    Change-Id: Ida18a8145a8e2bb718f7ca87e35427b21a74f11c
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Slovenian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Ib583b1efe8aefe154eb286e5cfda350c0438654e
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Russian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I9f1b78c644f3f15a25e218b84eefb0f0e3ce4548
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Portuguese (Brazil))
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I7e8026c4fb0c0a24186681f5ea3ebf19a7edcebe
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Portuguese)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I7034f98bddbd0d6839907d68d2852feb7cd6852f
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Polish)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Ic6b8e91bc6857b2135fa8fee7e6b5a576f39a5f9
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Dutch)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Ie74c18a72f44c778be4e02ca4b9a42f76efc7e38
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Italian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Ibc5496109cccb4c004de4f2590edb85faeef2318
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Icelandic)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Ieb4fe8939e8289540d085c6e2ebabde79ca20b04
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Hungarian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: If0bdc8119f683ea4141048dc51c33cdf314a8cb7
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Upper Sorbian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I48723bfd30552592327a352c1f3e8ceb12a9d54f
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Galician)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I613b95666c292573016ad03b0d1c83681cb2fa63
    
    update translations
    
    LibreOffice Online/loleaflet-ui (French)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I6cff25e2bc5518ad1f0db7443a3d8b7a55658947
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Basque)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I797ed20d4bf8c8171db1c513a3b89614248eb26a
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Spanish)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Iff004d986a01a23a5cc697f6ccfa8a4c76920d64
    
    update translations
    
    LibreOffice Online/loleaflet-ui (English (United Kingdom))
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I9db41be6c2bb1f6199c10f97c9ddf06cc1f08a03
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Greek)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I9268cfde7471fbcce2cbfbb537002d8510946c9e
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Lower Sorbian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I1344fee7081904e557e8d0c0ad74f02f4d31f351
    
    update translations
    
    LibreOffice Online/loleaflet-ui (German)
    Currently translated at 92.4% (266 of 288 strings)
    
    Change-Id: I86358814a0cfe996770c26f9a38f0c99cc77045e
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Welsh)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I09fbc1a9426da78b16cc12eea4dddc67d29dc4a7
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Czech)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Ia7a0a3e3f33db47a41b40e1113caaf8870ed28ba
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Catalan)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: Iff5450e53315781614b73545cc6f6386b98f8b08
    
    update translations
    
    LibreOffice Online/loleaflet-ui (Bulgarian)
    Currently translated at 100.0% (288 of 288 strings)
    
    Change-Id: I4196eb780fa8be4ac9ce23c8210074897bd18b6c
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89306
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/android/app/src/main/res/values-cs/strings.xml 
b/android/app/src/main/res/values-cs/strings.xml
index ae7ffb9e1..b30af9077 100644
--- a/android/app/src/main/res/values-cs/strings.xml
+++ b/android/app/src/main/res/values-cs/strings.xml
@@ -92,7 +92,7 @@
     <string name="file_exists_warning">Soubor s tímto názvem již existuje a 
bude přepsán.</string>
     <string name="temp_file_saving_disabled">Soubor je pouze pro čtení, 
ukládání je zakázáno.</string>
     <string name="no_items">Žádné položky</string>
-    <string name="no_recent_items">Žádné nedávné položky</string>
+    <string name="no_recent_items">Otevřete soubor klepnutím na ikonu složky v 
nástrojové liště.</string>
     <string name="app_vendor">Toto vydání bylo dodáno společností 
$VENDOR.</string>
     <string name="app_description">$APP_NAME je moderní, snadno použitelný, 
open source kancelářský balík pro zpracování textu, tabulky, prezentace a 
další.</string>
     <string name="app_version">Verze: %1$s, ID sestavení: %2$s</string>
diff --git a/android/app/src/main/res/values-dsb/strings.xml 
b/android/app/src/main/res/values-dsb/strings.xml
index e65348a51..c1ec7324d 100644
--- a/android/app/src/main/res/values-dsb/strings.xml
+++ b/android/app/src/main/res/values-dsb/strings.xml
@@ -92,7 +92,7 @@
     <string name="file_exists_warning">Dataja z toś tym mjenim južo 
eksistěrujo a se pśepišo.</string>
     <string name="temp_file_saving_disabled">Toś ta dataja dajo se janož 
cytaś, składowanje jo znjemóžnjone.</string>
     <string name="no_items">Žedne zapiski</string>
-    <string name="no_recent_items">Žedne aktualne zapiski</string>
+    <string name="no_recent_items">Pšosym wócyńśo dataju z pomocu 
zarědnikowego symbola w symbolowej rědce.</string>
     <string name="app_vendor">"Toś to wózjawjenje jo se  wót $VENDOR k 
dispoziciji stajiło."</string>
     <string name="app_description">$APP_NAME jo moderny, lažko wužywajobny 
běrowy paket wótwórjonego žrědła za pśeźěłowanje tekstow, tabelow, 
prezentacijow a wěcej.</string>
     <string name="app_version">Wersija: %1$s, Build ID: %2$s</string>
diff --git a/android/app/src/main/res/values-eu/strings.xml 
b/android/app/src/main/res/values-eu/strings.xml
index 1852999bc..fe896e08e 100644
--- a/android/app/src/main/res/values-eu/strings.xml
+++ b/android/app/src/main/res/values-eu/strings.xml
@@ -93,7 +93,7 @@
     <string name="file_exists_warning">Badago izen hori duen fitxategi bat, 
eta gainidatzi egingo da.</string>
     <string name="temp_file_saving_disabled">Fitxategia irakurtzeko soilik da, 
gordetzea desgaituta dago.</string>
     <string name="no_items">Ez dago elementurik</string>
-    <string name="no_recent_items">Ez dago azken aldiko elementurik</string>
+    <string name="no_recent_items">Ireki fitxategi bat tresna-barrako 
karpeta-ikonoa erabilita.</string>
     <string name="app_vendor">Bertsio honen hornitzailea $VENDOR da.</string>
     <string name="app_version">Bertsioa: %1$s, eraikuntza IDa: %2$s</string>
     <string name="app_name_settings">Ezarpenak</string>
diff --git a/android/app/src/main/res/values-hsb/strings.xml 
b/android/app/src/main/res/values-hsb/strings.xml
index 306ea0918..34bab2aa9 100644
--- a/android/app/src/main/res/values-hsb/strings.xml
+++ b/android/app/src/main/res/values-hsb/strings.xml
@@ -93,7 +93,7 @@
     <string name="file_exists_warning">Dataja z tutym mjenom hižo eksistuje a 
so přepisa.</string>
     <string name="temp_file_saving_disabled">Tuta dataja da so jenož čitać, 
składowanje je znjemóžnjene.</string>
     <string name="no_items">Žane zapiski</string>
-    <string name="no_recent_items">Žane aktualne zapiski</string>
+    <string name="no_recent_items">Prošu wočińće dataju z pomocu rjadowakoweho 
symbola w symbolowej lajsće.</string>
     <string name="app_vendor">Tute wozjewjenje je so wot $VENDOR k dispoziciji 
stajiło.</string>
     <string name="app_version">Wersija: %1$s, Build ID: %2$s</string>
     <string name="app_name_settings">Nastajenja</string>
diff --git a/android/app/src/main/res/values-hu/strings.xml 
b/android/app/src/main/res/values-hu/strings.xml
index d690bd3b4..d18f6bd2b 100644
--- a/android/app/src/main/res/values-hu/strings.xml
+++ b/android/app/src/main/res/values-hu/strings.xml
@@ -91,7 +91,7 @@
     <string name="file_exists_warning">Már létezik ilyen nevű fájl, felül lesz 
írva.</string>
     <string name="temp_file_saving_disabled">Ez a fájl írásvédett, a mentés le 
van tiltva.</string>
     <string name="no_items">Nincsenek elemek</string>
-    <string name="no_recent_items">Nincsenek előzmények</string>
+    <string name="no_recent_items">A fájlok megnyitásához használja az 
eszköztáron levő mappa ikont.</string>
     <string name="app_vendor">Ezt a kiadást a $VENDOR adta ki.</string>
     <string name="app_description">A $APP_NAME egy modern, könnyen 
használható, nyílt forrású programcsomag szövegszerkesztéshez, 
táblázatkezeléshez és bemutatókészítéshez.</string>
     <string name="app_version">Verzió: %1$s, Build ID: %2$s</string>
diff --git a/android/app/src/main/res/values-pt/strings.xml 
b/android/app/src/main/res/values-pt/strings.xml
index 8f4045b4d..f0af41b9d 100644
--- a/android/app/src/main/res/values-pt/strings.xml
+++ b/android/app/src/main/res/values-pt/strings.xml
@@ -51,7 +51,7 @@
     <string name="file_exists_warning">Já existe um ficheiro com este nome e, 
se continuar, será substituído.</string>
     <string name="temp_file_saving_disabled">Este ficheiro é apenas de leitura 
e não pode ser guardado.</string>
     <string name="no_items">Não há itens</string>
-    <string name="no_recent_items">Não há itens recentes</string>
+    <string name="no_recent_items">Por favor abra um ficheiro através do ícone 
existente na barra de ferramentas.</string>
     <string name="app_vendor">Esta versão foi disponibilizada por 
$VENDOR.</string>
     <string name="app_version">Versão: %1$s, ID de compilação: %2$s</string>
     <string name="app_name_settings">Definições</string>
diff --git a/android/lib/src/main/res/values-hu/strings.xml 
b/android/lib/src/main/res/values-hu/strings.xml
index 9ff4c57d3..8749b1a2f 100644
--- a/android/lib/src/main/res/values-hu/strings.xml
+++ b/android/lib/src/main/res/values-hu/strings.xml
@@ -6,4 +6,6 @@
     <string name="failed_to_load_file">Nem sikerült meghatározni a betöltendő 
fájlt</string>
     <string name="storage_permission_required">Jogosultság szükséges a 
tárolóhelyhez való hozzáféréshez</string>
     <string name="temp_file_saving_disabled">Ez a fájl írásvédett, a mentés le 
van tiltva.</string>
+    <string name="preparing_for_the_first_start_after_an_update">Előkészülés a 
frissítés utáni első indításhoz.</string>
+    <string name="saving">Mentés...</string>
 </resources>
\ No newline at end of file
diff --git a/loleaflet/po/ui-bg.po b/loleaflet/po/ui-bg.po
index 2340a1407..3e2f7fdcb 100644
--- a/loleaflet/po/ui-bg.po
+++ b/loleaflet/po/ui-bg.po
@@ -8,15 +8,15 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 12:26+0000\n"
-"Last-Translator: Mihail Balabanov <m.balaba...@gmail.com>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Bulgarian 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/bg/>\n"
 "Language: bg\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /bg/libo_online/loleaflet-ui-bg.po\n"
 "X-Pootle-Revision: 3937663\n"
 
@@ -396,7 +396,7 @@ msgstr "Вмъкване на таблица"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Стил за линии:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-ca.po b/loleaflet/po/ui-ca.po
index b9e9e6d6e..73f8371a1 100644
--- a/loleaflet/po/ui-ca.po
+++ b/loleaflet/po/ui-ca.po
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-17 04:11+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <f...@libreoffice.org>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Catalan 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/ca/>\n"
 "Language: ca\n"
 "MIME-Version: 1.0\n"
@@ -396,7 +396,7 @@ msgstr "Insereix una taula"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Estil de línia:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-cs.po b/loleaflet/po/ui-cs.po
index 4a0a2b59a..068f62720 100644
--- a/loleaflet/po/ui-cs.po
+++ b/loleaflet/po/ui-cs.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-15 20:07+0000\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
 "Last-Translator: Stanislav Horáček <stanislav.hora...@gmail.com>\n"
 "Language-Team: Czech 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/cs/>\n"
 "Language: cs\n"
@@ -396,7 +396,7 @@ msgstr "Vložit tabulku"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Styl čáry:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-cy.po b/loleaflet/po/ui-cy.po
index 46b17808a..e1728b022 100644
--- a/loleaflet/po/ui-cy.po
+++ b/loleaflet/po/ui-cy.po
@@ -8,15 +8,15 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 12:26+0000\n"
-"Last-Translator: Rhoslyn Prys <rp...@yahoo.com>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Welsh 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/cy/>\n"
 "Language: cy\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=(n==0) ? 0 : (n==1) ? 1 : (n==2) ? 2 : 
(n==3) ? 3 :(n==6) ? 4 : 5;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /cy/libo_online/loleaflet-ui-cy.po\n"
 "X-Pootle-Revision: 3938471\n"
 
@@ -396,7 +396,7 @@ msgstr "Mewnosod tudalen"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Llinell:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-de.po b/loleaflet/po/ui-de.po
index ff3df2db6..4ac61e8f6 100644
--- a/loleaflet/po/ui-de.po
+++ b/loleaflet/po/ui-de.po
@@ -7,7 +7,7 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 12:26+0000\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
 "Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: German 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/de/>\n"
 "Language: de\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /de/libo_online/loleaflet-ui-de.po\n"
 "X-Pootle-Revision: 3937733\n"
 
@@ -341,7 +341,7 @@ msgstr "Rechteckig"
 
 #: src/control/Control.JSDialogBuilder.js:170
 msgid "Fixed size"
-msgstr ""
+msgstr "Festen Größe"
 
 #: src/control/Control.JSDialogBuilder.js:766
 #: src/control/Control.Toolbar.js:1648
@@ -395,7 +395,7 @@ msgstr "Tabelle einfügen"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Linienstil:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
@@ -1153,7 +1153,7 @@ msgstr "Entfernen"
 
 #: src/layer/tile/TileLayer.js:254
 msgid "Resolve"
-msgstr ""
+msgstr "Auflösen"
 
 #: src/map/Clipboard.js:133
 msgid "To paste outside %productName, please first click the 'download' button"
diff --git a/loleaflet/po/ui-dsb.po b/loleaflet/po/ui-dsb.po
index 14e1c6fd9..30f8a8df3 100644
--- a/loleaflet/po/ui-dsb.po
+++ b/loleaflet/po/ui-dsb.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 12:29+0000\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
 "Last-Translator: Michael Wolf <mil...@sorbzilla.de>\n"
 "Language-Team: Lower Sorbian 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/dsb/>\n"
 "Language: dsb\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : 
((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /dsb/libo_online/loleaflet-ui-dsb.po\n"
 "X-Pootle-Revision: 3938370\n"
 
@@ -396,7 +396,7 @@ msgstr "Tabelu zasajźiś"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Linijowy stil:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-el.po b/loleaflet/po/ui-el.po
index de6164729..947e0747b 100644
--- a/loleaflet/po/ui-el.po
+++ b/loleaflet/po/ui-el.po
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-22 08:15+0000\n"
-"Last-Translator: Dimitris Spingos <dmtr...@gmail.com>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Greek 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/el/>\n"
 "Language: el\n"
 "MIME-Version: 1.0\n"
@@ -396,7 +396,7 @@ msgstr "Εισαγωγή πίνακα"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Τεχνοτροπία γραμμής:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-en_GB.po b/loleaflet/po/ui-en_GB.po
index 4c1ae8af2..0216c4a9e 100644
--- a/loleaflet/po/ui-en_GB.po
+++ b/loleaflet/po/ui-en_GB.po
@@ -8,15 +8,15 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 14:09+0000\n"
-"Last-Translator: Stuart Swales <stuart.swales.croftnu...@gmail.com>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: English (United Kingdom) 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/en_GB/>\n"
 "Language: en_GB\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /en_GB/libo_online/loleaflet-ui-en_GB.po\n"
 "X-Pootle-Revision: 3940057\n"
 
@@ -396,7 +396,7 @@ msgstr "Insert table"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Line style:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-es.po b/loleaflet/po/ui-es.po
index aa3eea78e..7ff31dcf1 100644
--- a/loleaflet/po/ui-es.po
+++ b/loleaflet/po/ui-es.po
@@ -7,15 +7,15 @@ msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 12:26+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <f...@libreoffice.org>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Spanish 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/es/>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /es/libo_online/loleaflet-ui-es.po\n"
 "X-Pootle-Revision: 3939976\n"
 
@@ -395,7 +395,7 @@ msgstr "Insertar tabla"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Estilo de línea:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-eu.po b/loleaflet/po/ui-eu.po
index 846623a41..232c14587 100644
--- a/loleaflet/po/ui-eu.po
+++ b/loleaflet/po/ui-eu.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 12:26+0000\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
 "Last-Translator: Asier Sarasua Garmendia <asier...@yahoo.com>\n"
 "Language-Team: Basque 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/eu/>\n"
 "Language: eu\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /eu/libo_online/loleaflet-ui-eu.po\n"
 "X-Pootle-Revision: 3939192\n"
 
@@ -396,7 +396,7 @@ msgstr "Txertatu taula"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Marra-estiloa:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-fr.po b/loleaflet/po/ui-fr.po
index 9a117040f..0fc3d7055 100644
--- a/loleaflet/po/ui-fr.po
+++ b/loleaflet/po/ui-fr.po
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-19 23:15+0000\n"
-"Last-Translator: Jean-Baptiste Faure <jbfa...@libreoffice.org>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: French 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/fr/>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
@@ -396,7 +396,7 @@ msgstr "Insérer un tableau"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Style de ligne:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-gl.po b/loleaflet/po/ui-gl.po
index fb5d0a450..fea46fb83 100644
--- a/loleaflet/po/ui-gl.po
+++ b/loleaflet/po/ui-gl.po
@@ -8,15 +8,15 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 19:04+0000\n"
-"Last-Translator: Xosé <xoseca...@gmail.com>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Galician 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/gl/>\n"
 "Language: gl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /gl/libo_online/loleaflet-ui-gl.po\n"
 "X-Pootle-Revision: 3938392\n"
 
@@ -396,7 +396,7 @@ msgstr "Inserir táboa"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Estilo de liña:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-hsb.po b/loleaflet/po/ui-hsb.po
index bbfa68cb3..57eccc1e5 100644
--- a/loleaflet/po/ui-hsb.po
+++ b/loleaflet/po/ui-hsb.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 12:29+0000\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
 "Last-Translator: Michael Wolf <mil...@sorbzilla.de>\n"
 "Language-Team: Upper Sorbian 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/hsb/>\n"
 "Language: hsb\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : 
((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /hsb/libo_online/loleaflet-ui-hsb.po\n"
 "X-Pootle-Revision: 3938371\n"
 
@@ -396,7 +396,7 @@ msgstr "Tabelu zasadźić"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Linijowy stil:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-hu.po b/loleaflet/po/ui-hu.po
index 257c289b9..bbdd3750b 100644
--- a/loleaflet/po/ui-hu.po
+++ b/loleaflet/po/ui-hu.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-12 10:25+0000\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
 "Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Hungarian 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/hu/>\n"
 "Language: hu\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /hu/libo_online/loleaflet-ui-hu.po\n"
 "X-Pootle-Revision: 3939165\n"
 
@@ -396,7 +396,7 @@ msgstr "Táblázat beszúrása"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Vonalstílus:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
@@ -1198,7 +1198,7 @@ msgstr "Inaktív dokumentum – kattintson a szerkesztés 
folytatásához"
 #: src/map/handler/Map.FileInserter.js:96
 #, javascript-format
 msgid "The file of type: %0 cannot be uploaded to server since the file has no 
name"
-msgstr "A fajltípus (%0) nem tölthető fel a kiszolgálóra, mert a fájlnak nincs 
neve."
+msgstr "A fájltípus (%0) nem tölthető fel a kiszolgálóra, mert a fájlnak nincs 
neve."
 
 #: src/map/handler/Map.FileInserter.js:98
 #, javascript-format
diff --git a/loleaflet/po/ui-is.po b/loleaflet/po/ui-is.po
index e170ba473..f6053224a 100644
--- a/loleaflet/po/ui-is.po
+++ b/loleaflet/po/ui-is.po
@@ -8,15 +8,15 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-05 12:45+0000\n"
-"Last-Translator: Adolfo Jayme Barrientos <f...@libreoffice.org>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Icelandic 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/is/>\n"
 "Language: is\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n"
-"X-Generator: Weblate 3.9.1\n"
+"X-Generator: Weblate 3.10.3\n"
 "X-Pootle-Path: /is/libo_online/loleaflet-ui-is.po\n"
 "X-Pootle-Revision: 3937885\n"
 
@@ -258,7 +258,7 @@ msgstr "Þjónninn rakst á %0 villu við að þátta %1 
skipunina."
 
 #: src/control/Control.ContextMenu.js:171
 msgid "Delete"
-msgstr ""
+msgstr "Eyða"
 
 #: src/control/Control.ContextMenu.js:255
 msgid "Paste Special"
@@ -396,7 +396,7 @@ msgstr "Setja inn töflu"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Línustíll:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
@@ -547,15 +547,15 @@ msgstr "Flytja út sem"
 
 #: src/control/Control.Menubar.js:499
 msgid "Page Setup"
-msgstr ""
+msgstr "Uppsetning síðu"
 
 #: src/control/Control.Menubar.js:500
 msgid "Portrait"
-msgstr ""
+msgstr "Lóðrétt"
 
 #: src/control/Control.Menubar.js:501
 msgid "Landscape"
-msgstr ""
+msgstr "Lárétt"
 
 #: src/control/Control.Menubar.js:762 src/control/Control.Toolbar.js:2058
 msgid "Reset to Default Language"
@@ -618,10 +618,8 @@ msgid "Insert shapes"
 msgstr "Setja inn form"
 
 #: src/control/Control.Toolbar.js:1061
-#, fuzzy
-#| msgid "Function"
 msgid "Function Wizard"
-msgstr "Fall"
+msgstr "Fallagerðarpúki"
 
 #: src/control/Control.Toolbar.js:1105
 msgid "First sheet"
diff --git a/loleaflet/po/ui-it.po b/loleaflet/po/ui-it.po
index 2c8ea0530..5fb8130bc 100644
--- a/loleaflet/po/ui-it.po
+++ b/loleaflet/po/ui-it.po
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-14 22:35+0000\n"
-"Last-Translator: Valter Mura <valterm...@gmail.com>\n"
+"PO-Revision-Date: 2020-02-23 18:15+0000\n"
+"Last-Translator: Andras Timar <tima...@gmail.com>\n"
 "Language-Team: Italian 
<https://weblate.documentfoundation.org/projects/libo_online/loleaflet-ui/it/>\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
@@ -396,7 +396,7 @@ msgstr "Inserisci tabella"
 
 #: src/control/Control.JSDialogBuilder.js:1583
 msgid "Line style:"
-msgstr ""
+msgstr "Stile linea:"
 
 #: src/control/Control.LanguageDialog.js:69 src/control/Control.Menubar.js:227
 #: src/control/Control.Menubar.js:229 src/control/Control.Menubar.js:231
diff --git a/loleaflet/po/ui-nl.po b/loleaflet/po/ui-nl.po
index 96c8b28af..4c373bb6e 100644
--- a/loleaflet/po/ui-nl.po
+++ b/loleaflet/po/ui-nl.po
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-02-21 14:50+0100\n"
-"PO-Revision-Date: 2020-02-17 04:11+0000\n"

... etc. - the rest is truncated
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to