[Libreoffice-commits] online.git: 10 commits - kit/ChildSession.cpp loleaflet/css loleaflet/images loleaflet/js loleaflet/src wsd/DocumentBroker.cpp wsd/protocol.txt wsd/Storage.cpp wsd/Storage.hpp

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Oct 31 17:16:34 UTC 2018


 kit/ChildSession.cpp                                    |   13 +
 loleaflet/css/toolbar.css                               |  106 +++++++++++++++-
 loleaflet/images/icon-set-bars-empty.svg                |    1 
 loleaflet/images/icon-set-bars-full.svg                 |    1 
 loleaflet/images/icon-set-bars-half.svg                 |    1 
 loleaflet/images/icon-set-bars-one-quarter.svg          |    1 
 loleaflet/images/icon-set-bars-three-quarters.svg       |    1 
 loleaflet/images/icon-set-circles1-gray.svg             |    1 
 loleaflet/images/icon-set-circles1-green.svg            |    1 
 loleaflet/images/icon-set-circles1-red.svg              |    1 
 loleaflet/images/icon-set-circles1-yellow.svg           |    1 
 loleaflet/images/icon-set-circles2-dark-gray.svg        |    1 
 loleaflet/images/icon-set-circles2-dark-red.svg         |    1 
 loleaflet/images/icon-set-circles2-light-gray.svg       |    1 
 loleaflet/images/icon-set-circles2-light-red.svg        |    1 
 loleaflet/images/icon-set-colorarrows-down.svg          |    1 
 loleaflet/images/icon-set-colorarrows-same.svg          |    1 
 loleaflet/images/icon-set-colorarrows-slightly-down.svg |    1 
 loleaflet/images/icon-set-colorarrows-slightly-up.svg   |    1 
 loleaflet/images/icon-set-colorarrows-up.svg            |    1 
 loleaflet/images/icon-set-flags-green.svg               |    1 
 loleaflet/images/icon-set-flags-red.svg                 |    1 
 loleaflet/images/icon-set-flags-yellow.svg              |    1 
 loleaflet/images/icon-set-grayarrows-down.svg           |    1 
 loleaflet/images/icon-set-grayarrows-same.svg           |    1 
 loleaflet/images/icon-set-grayarrows-slightly-down.svg  |    1 
 loleaflet/images/icon-set-grayarrows-slightly-up.svg    |    1 
 loleaflet/images/icon-set-grayarrows-up.svg             |    1 
 loleaflet/images/icon-set-negative-red-smilie.svg       |    1 
 loleaflet/images/icon-set-negative-yellow-smilie.svg    |    1 
 loleaflet/images/icon-set-neutral-yellow-smilie.svg     |    1 
 loleaflet/images/icon-set-pies-empty.svg                |    7 +
 loleaflet/images/icon-set-pies-full.svg                 |    7 +
 loleaflet/images/icon-set-pies-half.svg                 |    7 +
 loleaflet/images/icon-set-pies-one-quarter.svg          |    7 +
 loleaflet/images/icon-set-pies-three-quarters.svg       |    7 +
 loleaflet/images/icon-set-positive-green-smilie.svg     |    1 
 loleaflet/images/icon-set-positive-yellow-smilie.svg    |    1 
 loleaflet/images/icon-set-shapes-circle.svg             |    1 
 loleaflet/images/icon-set-shapes-diamond.svg            |    1 
 loleaflet/images/icon-set-shapes-triangle.svg           |    1 
 loleaflet/images/icon-set-squares-empty.svg             |    1 
 loleaflet/images/icon-set-squares-full.svg              |    1 
 loleaflet/images/icon-set-squares-half.svg              |    1 
 loleaflet/images/icon-set-squares-one-quarter.svg       |    1 
 loleaflet/images/icon-set-squares-three-quarters.svg    |    1 
 loleaflet/images/icon-set-stars-empty.svg               |    7 +
 loleaflet/images/icon-set-stars-full.svg                |    1 
 loleaflet/images/icon-set-stars-half.svg                |    7 +
 loleaflet/images/icon-set-symbols1-check.svg            |    7 +
 loleaflet/images/icon-set-symbols1-cross.svg            |    7 +
 loleaflet/images/icon-set-symbols1-exclamation-mark.svg |    7 +
 loleaflet/images/icon-set-trafficlights-green.svg       |    1 
 loleaflet/images/icon-set-trafficlights-red.svg         |    1 
 loleaflet/images/icon-set-trafficlights-yellow.svg      |    1 
 loleaflet/images/icon-set-triangles-down.svg            |    8 +
 loleaflet/images/icon-set-triangles-same.svg            |    8 +
 loleaflet/images/icon-set-triangles-up.svg              |    8 +
 loleaflet/images/lc_conditionalformatdialog.svg         |   10 +
 loleaflet/js/toolbar.js                                 |   47 ++++++-
 loleaflet/src/control/Control.Menubar.js                |   12 +
 loleaflet/src/control/Toolbar.js                        |    4 
 loleaflet/src/map/handler/Map.FileInserter.js           |   29 ++++
 loleaflet/src/map/handler/Map.WOPI.js                   |    9 +
 loleaflet/src/unocommands.js                            |    1 
 wsd/DocumentBroker.cpp                                  |    2 
 wsd/Storage.cpp                                         |    6 
 wsd/Storage.hpp                                         |    8 +
 wsd/protocol.txt                                        |    8 +
 69 files changed, 381 insertions(+), 11 deletions(-)

New commits:
commit db60111676801dcdf4bd91ea5ec5cb93dd000fad
Author:     Aron Budea <aron.budea at collabora.com>
AuthorDate: Wed Oct 31 17:30:01 2018 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    Force width for font size dropdown.
    
    Change-Id: Ied2392c814dcda75cfcc0aa27c588e9255d3f960
    Reviewed-on: https://gerrit.libreoffice.org/62702
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/loleaflet/css/toolbar.css b/loleaflet/css/toolbar.css
index 954672a5e..5e3cf0c7c 100644
--- a/loleaflet/css/toolbar.css
+++ b/loleaflet/css/toolbar.css
@@ -235,7 +235,7 @@ button.leaflet-control-search-next
     width: 150px;
 }
 .fontsizes-select {
-    width: 70px;
+    width: 70px !important;
 }
 .evo-cp-wrap {
     /* hide the color pick div */
commit 2c265a05c02031cf439aa181a652b42b97848ab4
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Sat Aug 18 20:37:51 2018 -0400
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    loleaflet: wopi: add EnableShare
    
    Change-Id: I1a2a86e671f97891855cc2bd8d8047829e819508

diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js
index c44e1dd14..740d91378 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -18,6 +18,7 @@ L.Control.Menubar = L.Control.extend({
 			{name: _UNO('.uno:PickList', 'text'), id: 'file', type: 'menu', menu: [
 				{name: _UNO('.uno:Save', 'text'), id: 'save', type: 'action'},
 				{name: _UNO('.uno:SaveAs', 'text'), id: 'saveas', type: 'action'},
+				{name: _('Share...'), id:'shareas', type: 'action'},
 				{name: _UNO('.uno:Print', 'text'), id: 'print', type: 'action'},
 				{name: _('See revision history'), id: 'rev-history', type: 'action'},
 				{name: _('Download as'), id: 'downloadas', type: 'menu', menu: [
@@ -677,6 +678,8 @@ L.Control.Menubar = L.Control.extend({
 			this._map.save(true, true);
 		} else if (id === 'saveas') {
 			this._map.fire('postMessage', {msgId: 'UI_SaveAs'});
+		} else if (id === 'shareas') {
+			this._map.fire('postMessage', {msgId: 'UI_Share'});
 		} else if (id === 'print') {
 			this._map.print();
 		} else if (id.startsWith('downloadas-')) {
@@ -820,6 +823,9 @@ L.Control.Menubar = L.Control.extend({
 			if (menu[i].id === 'saveas' && this._map['wopi'].UserCanNotWriteRelative)
 				continue;
 
+			if (menu[i].id === 'shareas' && !this._map['wopi'].EnableShare)
+				continue;
+
 			if (menu[i].id === 'insertgraphicremote' && !this._map['wopi'].EnableInsertRemoteImage)
 				continue;
 
diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js
index 4c66483a0..1b7806f59 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -21,6 +21,7 @@ L.Map.WOPI = L.Handler.extend({
 	DisableInactiveMessages: false,
 	UserCanNotWriteRelative: true,
 	EnableInsertRemoteImage: false,
+	EnableShare: false,
 	CallPythonScriptSource: null,
 
 	_appLoadedConditions: {
@@ -77,6 +78,7 @@ L.Map.WOPI = L.Handler.extend({
 		this.DisableInactiveMessages = !!wopiInfo['DisableInactiveMessages'];
 		this.UserCanNotWriteRelative = !!wopiInfo['UserCanNotWriteRelative'];
 		this.EnableInsertRemoteImage = !!wopiInfo['EnableInsertRemoteImage'];
+		this.EnableShare = !!wopiInfo['EnableShare'];
 
 		this._map.fire('postMessage', {
 			msgId: 'App_LoadingStatus',
commit 665863b50a72ea415a575733ad8b24549ecded6f
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Sat Aug 18 20:17:25 2018 -0400
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    wsd: wopi: introduce a "EnableShare" entry in the CheckFileInfo
    
    Change-Id: Ia47d7e8f5c8cd8ae1eb314467c664b27b50e7fd3

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 1b7bae40f..dcef3df3e 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -524,6 +524,7 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s
         wopiInfo->set("DisableInactiveMessages", wopifileinfo->_disableInactiveMessages);
         wopiInfo->set("UserCanNotWriteRelative", wopifileinfo->_userCanNotWriteRelative);
         wopiInfo->set("EnableInsertRemoteImage", wopifileinfo->_enableInsertRemoteImage);
+        wopiInfo->set("EnableShare", wopifileinfo->_enableShare);
         if (wopifileinfo->_hideChangeTrackingControls != WopiStorage::WOPIFileInfo::TriState::Unset)
             wopiInfo->set("HideChangeTrackingControls", wopifileinfo->_hideChangeTrackingControls == WopiStorage::WOPIFileInfo::TriState::True);
 
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 830f60049..3abcc12fa 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -497,6 +497,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
     std::string lastModifiedTime;
     bool userCanNotWriteRelative = true;
     bool enableInsertRemoteImage = false;
+    bool enableShare = false;
     WOPIFileInfo::TriState disableChangeTrackingRecord = WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState disableChangeTrackingShow = WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState hideChangeTrackingControls = WOPIFileInfo::TriState::Unset;
@@ -576,6 +577,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
         JsonUtil::findJSONValue(object, "LastModifiedTime", lastModifiedTime);
         JsonUtil::findJSONValue(object, "UserCanNotWriteRelative", userCanNotWriteRelative);
         JsonUtil::findJSONValue(object, "EnableInsertRemoteImage", enableInsertRemoteImage);
+        JsonUtil::findJSONValue(object, "EnableShare", enableShare);
         bool booleanFlag = false;
         if (JsonUtil::findJSONValue(object, "DisableChangeTrackingRecord", booleanFlag))
             disableChangeTrackingRecord = (booleanFlag ? WOPIFileInfo::TriState::True : WOPIFileInfo::TriState::False);
@@ -603,7 +605,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
         {userId, obfuscatedUserId, userName, userExtraInfo, watermarkText, canWrite,
          postMessageOrigin, hidePrintOption, hideSaveOption, hideExportOption,
          enableOwnerTermination, disablePrint, disableExport, disableCopy,
-         disableInactiveMessages, userCanNotWriteRelative, enableInsertRemoteImage,
+         disableInactiveMessages, userCanNotWriteRelative, enableInsertRemoteImage, enableShare,
          disableChangeTrackingShow, disableChangeTrackingRecord,
          hideChangeTrackingControls, callDuration}));
 }
diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp
index 0049d678c..cbb6f9c42 100644
--- a/wsd/Storage.hpp
+++ b/wsd/Storage.hpp
@@ -287,6 +287,7 @@ public:
                      const bool disableInactiveMessages,
                      const bool userCanNotWriteRelative,
                      const bool enableInsertRemoteImage,
+                     const bool enableShare,
                      const TriState disableChangeTrackingShow,
                      const TriState disableChangeTrackingRecord,
                      const TriState hideChangeTrackingControls,
@@ -307,6 +308,7 @@ public:
               _disableInactiveMessages(disableInactiveMessages),
               _userCanNotWriteRelative(userCanNotWriteRelative),
               _enableInsertRemoteImage(enableInsertRemoteImage),
+              _enableShare(enableShare),
               _disableChangeTrackingShow(disableChangeTrackingShow),
               _disableChangeTrackingRecord(disableChangeTrackingRecord),
               _hideChangeTrackingControls(hideChangeTrackingControls),
@@ -349,6 +351,8 @@ public:
         bool _userCanNotWriteRelative;
         /// if set to true, users can access the insert remote image functionality
         bool _enableInsertRemoteImage;
+        /// if set to true, users can access the file share functionality
+        bool _enableShare;
         /// If we should disable change-tracking visibility by default (meaningful at loading).
         TriState _disableChangeTrackingShow;
         /// If we should disable change-tracking ability by default (meaningful at loading).
commit f9a660e3ccd0eac18272c9347f85c267ebf79fbf
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Sat Aug 18 11:44:07 2018 -0400
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    loleaflet: wopi: add EnableInsertRemoteImage
    
    Change-Id: I806c3a79813e77cba85e837aa188453a5b63cacc

diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index 9e5b004b3..a1ebdea05 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -167,9 +167,12 @@ function onClick(e, id, item, subItem) {
 		var wrapType = id.substring('menu-wrap:wrap-'.length);
 		map.toggleCommandState(wrapType);
 	}
-	else if (id === 'insertgraphic') {
+	else if (id === 'insertgraphic' || item.id === 'localgraphic') {
 		L.DomUtil.get('insertgraphic').click();
 	}
+	else if (item.id === 'remotegraphic') {
+		map.fire('postMessage', {msgId: 'UI_InsertGraphic'});
+	}
 	else if (id === 'fontcolor' && typeof e.color !== 'undefined') {
 		onColorPick(id, e.color);
 	}
@@ -674,6 +677,11 @@ function createToolbar() {
 			{type: 'button',  id: 'insertobjectchart',  img: 'insertobjectchart', hint: _UNO('.uno:InsertObjectChart', '', true), uno: 'InsertObjectChart'},
 			{type: 'button',  id: 'insertannotation', img: 'annotation', hint: _UNO('.uno:InsertAnnotation', '', true)},
 			{type: 'button',  id: 'insertgraphic',  img: 'insertgraphic', hint: _UNO('.uno:InsertGraphic', '', true)},
+			{type: 'menu', id: 'menugraphic', img: 'insertgraphic', hint: _UNO('.uno:InsertGraphic', '', true), hidden: true,
+				items: [
+					{id: 'localgraphic', text: _UNO('.uno:InsertGraphic', '', true), icon: 'insertgraphic'},
+					{id: 'remotegraphic', text: _('Remote Image...'), icon: 'insertgraphic'}
+				]},
 			{type: 'button',  id: 'specialcharacter', img: 'specialcharacter', hint: _UNO('.uno:InsertSymbol', '', true), uno: '.uno:InsertSymbol'}
 		],
 		onClick: function (e) {
@@ -1158,6 +1166,10 @@ function onWopiProps(e) {
 		$('#document-name-input').removeClass('editable');
 		$('#document-name-input').off('keypress', onDocumentNameKeyPress);
 	}
+	if (e.EnableInsertRemoteImage === true) {
+		w2ui['toolbar-up'].hide('insertgraphic');
+		w2ui['toolbar-up'].show('menugraphic');
+	}
 }
 
 function onDocLayerInit() {
diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js
index 28d17c40e..c44e1dd14 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -820,6 +820,9 @@ L.Control.Menubar = L.Control.extend({
 			if (menu[i].id === 'saveas' && this._map['wopi'].UserCanNotWriteRelative)
 				continue;
 
+			if (menu[i].id === 'insertgraphicremote' && !this._map['wopi'].EnableInsertRemoteImage)
+				continue;
+
 			if (menu[i].id && menu[i].id.startsWith('fullscreen-presentation') && this._map['wopi'].HideExportOption)
 				continue;
 
diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js
index 984840de0..4c66483a0 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -20,6 +20,7 @@ L.Map.WOPI = L.Handler.extend({
 	DisableCopy: false,
 	DisableInactiveMessages: false,
 	UserCanNotWriteRelative: true,
+	EnableInsertRemoteImage: false,
 	CallPythonScriptSource: null,
 
 	_appLoadedConditions: {
@@ -75,6 +76,7 @@ L.Map.WOPI = L.Handler.extend({
 		this.DisableCopy = !!wopiInfo['DisableCopy'];
 		this.DisableInactiveMessages = !!wopiInfo['DisableInactiveMessages'];
 		this.UserCanNotWriteRelative = !!wopiInfo['UserCanNotWriteRelative'];
+		this.EnableInsertRemoteImage = !!wopiInfo['EnableInsertRemoteImage'];
 
 		this._map.fire('postMessage', {
 			msgId: 'App_LoadingStatus',
commit 8643128180242132b143d1e22f505b1d8f9df552
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Fri Aug 17 17:33:15 2018 -0400
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    wsd: wopi: introduce a "EnableInsertRemoteImage" entry in the CheckFileInfo
    
    Change-Id: I66e5f12fbd49509ce8e82ea07ae7a2cc75ddc665

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 2aa4edda8..1b7bae40f 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -523,6 +523,7 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s
         wopiInfo->set("DisableCopy", wopifileinfo->_disableCopy);
         wopiInfo->set("DisableInactiveMessages", wopifileinfo->_disableInactiveMessages);
         wopiInfo->set("UserCanNotWriteRelative", wopifileinfo->_userCanNotWriteRelative);
+        wopiInfo->set("EnableInsertRemoteImage", wopifileinfo->_enableInsertRemoteImage);
         if (wopifileinfo->_hideChangeTrackingControls != WopiStorage::WOPIFileInfo::TriState::Unset)
             wopiInfo->set("HideChangeTrackingControls", wopifileinfo->_hideChangeTrackingControls == WopiStorage::WOPIFileInfo::TriState::True);
 
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 8e46dc333..830f60049 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -496,6 +496,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
     bool disableInactiveMessages = false;
     std::string lastModifiedTime;
     bool userCanNotWriteRelative = true;
+    bool enableInsertRemoteImage = false;
     WOPIFileInfo::TriState disableChangeTrackingRecord = WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState disableChangeTrackingShow = WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState hideChangeTrackingControls = WOPIFileInfo::TriState::Unset;
@@ -574,6 +575,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
         JsonUtil::findJSONValue(object, "DisableInactiveMessages", disableInactiveMessages);
         JsonUtil::findJSONValue(object, "LastModifiedTime", lastModifiedTime);
         JsonUtil::findJSONValue(object, "UserCanNotWriteRelative", userCanNotWriteRelative);
+        JsonUtil::findJSONValue(object, "EnableInsertRemoteImage", enableInsertRemoteImage);
         bool booleanFlag = false;
         if (JsonUtil::findJSONValue(object, "DisableChangeTrackingRecord", booleanFlag))
             disableChangeTrackingRecord = (booleanFlag ? WOPIFileInfo::TriState::True : WOPIFileInfo::TriState::False);
@@ -601,7 +603,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
         {userId, obfuscatedUserId, userName, userExtraInfo, watermarkText, canWrite,
          postMessageOrigin, hidePrintOption, hideSaveOption, hideExportOption,
          enableOwnerTermination, disablePrint, disableExport, disableCopy,
-         disableInactiveMessages, userCanNotWriteRelative,
+         disableInactiveMessages, userCanNotWriteRelative, enableInsertRemoteImage,
          disableChangeTrackingShow, disableChangeTrackingRecord,
          hideChangeTrackingControls, callDuration}));
 }
diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp
index 0fb906c77..0049d678c 100644
--- a/wsd/Storage.hpp
+++ b/wsd/Storage.hpp
@@ -286,6 +286,7 @@ public:
                      const bool disableCopy,
                      const bool disableInactiveMessages,
                      const bool userCanNotWriteRelative,
+                     const bool enableInsertRemoteImage,
                      const TriState disableChangeTrackingShow,
                      const TriState disableChangeTrackingRecord,
                      const TriState hideChangeTrackingControls,
@@ -305,6 +306,7 @@ public:
               _disableCopy(disableCopy),
               _disableInactiveMessages(disableInactiveMessages),
               _userCanNotWriteRelative(userCanNotWriteRelative),
+              _enableInsertRemoteImage(enableInsertRemoteImage),
               _disableChangeTrackingShow(disableChangeTrackingShow),
               _disableChangeTrackingRecord(disableChangeTrackingRecord),
               _hideChangeTrackingControls(hideChangeTrackingControls),
@@ -345,6 +347,8 @@ public:
         bool _disableInactiveMessages;
         /// If set to false, users can access the save-as functionality
         bool _userCanNotWriteRelative;
+        /// if set to true, users can access the insert remote image functionality
+        bool _enableInsertRemoteImage;
         /// If we should disable change-tracking visibility by default (meaningful at loading).
         TriState _disableChangeTrackingShow;
         /// If we should disable change-tracking ability by default (meaningful at loading).
commit 8c9e126a233549e06f3540783f339c10e99d4258
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Fri Aug 3 05:15:19 2018 +0200
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    Insert graphic: Pass the remote url to the core for download & insertion.
    
    Change-Id: I871de173c255dcb7b184582e486328d7f66a2fae

diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index dbdc2f250..af56584d5 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -768,20 +768,27 @@ bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, const std:
         return false;
     }
 
-    if (type == "graphic")
+    if (type == "graphic" || type == "graphicurl")
     {
-        std::string fileName = "file://" + std::string(JAILED_DOCUMENT_ROOT) + "insertfile/" + name;
+        std::string url;
+        if (type == "graphic")
+            url = "file://" + std::string(JAILED_DOCUMENT_ROOT) + "insertfile/" + name;
+        else if (type == "graphicurl")
+            URI::decode(name, url);
+
         std::string command = ".uno:InsertGraphic";
         std::string arguments = "{"
             "\"FileName\":{"
                 "\"type\":\"string\","
-                "\"value\":\"" + fileName + "\""
+                "\"value\":\"" + url + "\""
             "}}";
 
         std::unique_lock<std::mutex> lock(_docManager.getDocumentMutex());
 
         getLOKitDocument()->setView(_viewId);
 
+        LOG_TRC("Inserting graphic: '" << arguments.c_str() << "', '");
+
         getLOKitDocument()->postUnoCommand(command.c_str(), arguments.c_str(), false);
     }
 
diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index c6c8b4587..debc090d6 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -156,6 +156,10 @@ L.Map.include({
 		this.fire('insertfile', {file: file});
 	},
 
+	insertURL: function (url) {
+		this.fire('inserturl', {url: url});
+	},
+
 	cellEnterString: function (string) {
 		var command = {
 			'StringName': {
diff --git a/loleaflet/src/map/handler/Map.FileInserter.js b/loleaflet/src/map/handler/Map.FileInserter.js
index 7a2f1fffa..ce1e62146 100644
--- a/loleaflet/src/map/handler/Map.FileInserter.js
+++ b/loleaflet/src/map/handler/Map.FileInserter.js
@@ -15,6 +15,7 @@ L.Map.FileInserter = L.Handler.extend({
 		this._map = map;
 		this._childId = null;
 		this._toInsert = {};
+		this._toInsertURL = {};
 		var parser = document.createElement('a');
 		parser.href = map.options.server;
 		var wopiSrc = '';
@@ -27,11 +28,13 @@ L.Map.FileInserter = L.Handler.extend({
 
 	addHooks: function () {
 		this._map.on('insertfile', this._onInsertFile, this);
+		this._map.on('inserturl', this._onInsertURL, this);
 		this._map.on('childid', this._onChildIdMsg, this);
 	},
 
 	removeHooks: function () {
 		this._map.off('insertfile', this._onInsertFile, this);
+		this._map.off('inserturl', this._onInsertURL, this);
 		this._map.off('childid', this._onChildIdMsg, this);
 	},
 
@@ -45,12 +48,27 @@ L.Map.FileInserter = L.Handler.extend({
 		}
 	},
 
+	_onInsertURL: function (e) {
+		if (!this._childId) {
+			this._map._socket.sendMessage('getchildid');
+			this._toInsertURL[Date.now()] = e.url;
+		}
+		else {
+			this._sendURL(Date.now(), e.url);
+		}
+	},
+
 	_onChildIdMsg: function (e) {
 		this._childId = e.id;
 		for (var name in this._toInsert) {
 			this._sendFile(name, this._toInsert[name]);
 		}
 		this._toInsert = {};
+
+		for (name in this._toInsertURL) {
+			this._sendURL(name, this._toInsertURL[name]);
+		}
+		this._toInsertURL = {};
 	},
 
 	_sendFile: function (name, file) {
@@ -76,6 +94,10 @@ L.Map.FileInserter = L.Handler.extend({
 			formData.append('file', file);
 		}
 		xmlHttp.send(formData);
+	},
+
+	_sendURL: function (name, url) {
+		this._map._socket.sendMessage('insertfile name=' + encodeURIComponent(url) + ' type=graphicurl');
 	}
 });
 
diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js
index efdf61d10..984840de0 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -218,7 +218,7 @@ L.Map.WOPI = L.Handler.extend({
 		}
 		else if (msg.MessageId == 'Action_InsertGraphic') {
 			if (msg.Values) {
-				this._map.insertFile(msg.Values);
+				this._map.insertURL(msg.Values.url);
 			}
 		}
 		else if (msg.MessageId === 'Action_ShowBusy') {
diff --git a/wsd/protocol.txt b/wsd/protocol.txt
index 7c8d7e6a2..8bd29e638 100644
--- a/wsd/protocol.txt
+++ b/wsd/protocol.txt
@@ -60,7 +60,13 @@ paste mimetype=<mimeType>
 
 insertfile name=<name> type=<type>
 
-    Inserts the file with the name <name> into the document, we currently support type = 'graphic'
+    Inserts the file with the name <name> into the document, we currently
+    support:
+
+        type = 'graphic': The file has been previously uploaded using insertfile POST
+
+        type = 'graphicurl': The file is supposed to be downloaded by the core
+	                     itself; it does so from the URL provided in 'name'
 
 key type=<type> char=<charcode> key=<keycode>
 
commit 984a6df15611b9db7d8e4128f4cb635d4a1321fb
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Sat Jul 14 12:43:45 2018 -0400
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    loleaflet: add action to insert graphic
    
    Change-Id: If3ab2de89625f44c4178da1146ca3834702a62ec

diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js
index 9f0b8514c..28d17c40e 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -65,6 +65,7 @@ L.Control.Menubar = L.Control.extend({
 			},
 			{name: _UNO('.uno:InsertMenu', 'text'), type: 'menu', menu: [
 				{name: _UNO('.uno:InsertGraphic', 'text'), id: 'insertgraphic', type: 'action'},
+				{name: _('Remote Image...'), id: 'insertgraphicremote', type: 'action'},
 				{name: _UNO('.uno:InsertAnnotation', 'text'), id: 'insertcomment', type: 'action'},
 				{uno: '.uno:InsertObjectChart'},
 				{type: 'separator'},
@@ -688,6 +689,8 @@ L.Control.Menubar = L.Control.extend({
 			this._map.insertComment();
 		} else if (id === 'insertgraphic') {
 			L.DomUtil.get('insertgraphic').click();
+		} else if (id === 'insertgraphicremote') {
+			this._map.fire('postMessage', {msgId: 'UI_InsertGraphic'});
 		} else if (id === 'zoomin' && this._map.getZoom() < this._map.getMaxZoom()) {
 			this._map.zoomIn(1);
 		} else if (id === 'zoomout' && this._map.getZoom() > this._map.getMinZoom()) {
diff --git a/loleaflet/src/map/handler/Map.FileInserter.js b/loleaflet/src/map/handler/Map.FileInserter.js
index 028ea4649..7a2f1fffa 100644
--- a/loleaflet/src/map/handler/Map.FileInserter.js
+++ b/loleaflet/src/map/handler/Map.FileInserter.js
@@ -69,7 +69,12 @@ L.Map.FileInserter = L.Handler.extend({
 		var formData = new FormData();
 		formData.append('name', name);
 		formData.append('childid', this._childId);
-		formData.append('file', file);
+		if (file.filename && file.url) {
+			formData.append('url', file.url);
+			formData.append('filename', file.filename);
+		} else {
+			formData.append('file', file);
+		}
 		xmlHttp.send(formData);
 	}
 });
diff --git a/loleaflet/src/map/handler/Map.WOPI.js b/loleaflet/src/map/handler/Map.WOPI.js
index 10a866c82..efdf61d10 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -216,6 +216,11 @@ L.Map.WOPI = L.Handler.extend({
 				this._map.downloadAs(fileName + '.' + format, format);
 			}
 		}
+		else if (msg.MessageId == 'Action_InsertGraphic') {
+			if (msg.Values) {
+				this._map.insertFile(msg.Values);
+			}
+		}
 		else if (msg.MessageId === 'Action_ShowBusy') {
 			if (msg.Values && msg.Values.Label) {
 				this._map.fire('showbusy', {label: msg.Values.Label});
commit 05a183319ece170cafc3a7dd8c36fe46e7d12799
Author:     Andras Timar <andras.timar at collabora.com>
AuthorDate: Wed Jun 27 14:51:24 2018 +0200
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    loleaflet: hide 'Conditional Formatting Menu' for Writer, Impress and Draw
    
    Change-Id: I31d9f7b2b974213ea27af8aee6a752c61eb911cf
    Reviewed-on: https://gerrit.libreoffice.org/56527
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index 403d13154..9e5b004b3 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -1205,7 +1205,7 @@ function onDocLayerInit() {
 
 		break;
 	case 'text':
-		toolbarUp.remove('wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformatmenu');
+		toolbarUp.remove('wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformaticonset');
 		statusbar.insert('left', [
 			{type: 'break', id: 'break1'},
 			{type: 'html',  id: 'StatePageNumber',
@@ -1236,7 +1236,7 @@ function onDocLayerInit() {
 		if (!map['wopi'].HideExportOption) {
 			presentationToolbar.show('presentation', 'presentationbreak');
 		}
-		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformatmenu');
+		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformaticonset');
 		statusbar.insert('left', [
 			{type: 'break', id:'break1'},
 			{type: 'html',  id: 'PageStatus',
@@ -1252,7 +1252,7 @@ function onDocLayerInit() {
 
 		break;
 	case 'drawing':
-		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformatmenu');
+		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformaticonset');
 
 		// Remove irrelevant toolbars
 		$('#formulabar').hide();
commit 548a02dce1d7e19a85ce8d057b8c736d0501cdfa
Author:     Andras Timar <andras.timar at collabora.com>
AuthorDate: Wed Jun 27 14:48:06 2018 +0200
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    loleaflet: l10n of 'Conditional Formatting Menu' tooltip
    
    Change-Id: I6f5060b3932221df382d77e9e68536788ed8df6e
    Reviewed-on: https://gerrit.libreoffice.org/56526
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index d90d14ae2..403d13154 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -659,7 +659,7 @@ function createToolbar() {
 				      '<td class="w2ui-tb-image w2ui-icon frame12" onclick="setBorderStyle(12)"></td></tr><tr>' +
 				      '<td colspan="4" class="w2ui-tb-image w2ui-icon frame13" onclick="setBorderStyle(0)"><div id="div-frame13">' + _('More...') + '</div></td></tr></table>'
 			},
-			{type: 'drop', id: 'conditionalformaticonset',  img: 'conditionalformatdialog', hint: _UNO('.uno:ConditionalFormatMenu'),
+			{type: 'drop', id: 'conditionalformaticonset',  img: 'conditionalformatdialog', hint: _UNO('.uno:ConditionalFormatMenu', 'spreadsheet', true),
 				html: '<table id="conditionalformatmenu-grid"><tr>' +
 					  '<td class="w2ui-tb-image w2ui-icon iconset00" onclick="setConditionalFormatIconSet(0)"/><td class="w2ui-tb-image w2ui-icon iconset01" onclick="setConditionalFormatIconSet(1)"/><td class="w2ui-tb-image w2ui-icon iconset02" onclick="setConditionalFormatIconSet(2)"/></tr><tr>' +
 					  '<td class="w2ui-tb-image w2ui-icon iconset03" onclick="setConditionalFormatIconSet(3)"/><td class="w2ui-tb-image w2ui-icon iconset04" onclick="setConditionalFormatIconSet(4)"/><td class="w2ui-tb-image w2ui-icon iconset05" onclick="setConditionalFormatIconSet(5)"/></tr><tr>' +
commit aa20e6c956c751947efa129f8c5560082f318b6e
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Wed Jun 27 00:29:58 2018 +0200
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Wed Oct 31 18:12:07 2018 +0100

    Conditional formatting: Add toolbar button for the icon sets.
    
    Change-Id: Ifa07f357d490de8b92e50d34d4124f90b1d9e304
    Reviewed-on: https://gerrit.libreoffice.org/56505
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/loleaflet/css/toolbar.css b/loleaflet/css/toolbar.css
index da451d918..954672a5e 100644
--- a/loleaflet/css/toolbar.css
+++ b/loleaflet/css/toolbar.css
@@ -270,6 +270,19 @@ button.leaflet-control-search-next
     border: 1px solid #888;
 }
 
+#conditionalformatmenu-grid tr td {
+    box-sizing: border-box;
+    background: rgba(255, 255, 255, 0.5);
+    position: relative;
+    padding: 2px;
+    border: 1px solid #ccc;
+    overflow: auto; /* child margins otherwise don't expand *this* element (parent) */
+}
+
+#conditionalformatmenu-grid td:hover {
+    border: 1px solid #888;
+}
+
 .w2ui-icon.basicshapes_rectangle { background: url('images/lc_rect.svg') no-repeat center !important; }
 .w2ui-icon.basicshapes_round-rectangle { background: url('images/lc_rect_rounded.svg') no-repeat center !important; }
 .w2ui-icon.basicshapes_quadrat { background: url('images/lc_square.svg') no-repeat center !important; }
@@ -413,6 +426,96 @@ button.leaflet-control-search-next
 .w2ui-icon.frame13 { width: 108px !important; }
 #div-frame13 { width: 102px; height: 18px; text-align: center; display: table-cell; vertical-align: middle; cursor: default; }
 
+.w2ui-icon.iconset00 { background: url('images/icon-set-colorarrows-down.svg') no-repeat, url('images/icon-set-colorarrows-same.svg') no-repeat, url('images/icon-set-colorarrows-up.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset01 { background: url('images/icon-set-grayarrows-down.svg') no-repeat, url('images/icon-set-grayarrows-same.svg') no-repeat, url('images/icon-set-grayarrows-up.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset02 { background: url('images/icon-set-flags-red.svg') no-repeat, url('images/icon-set-flags-yellow.svg') no-repeat, url('images/icon-set-flags-green.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset03 { background: url('images/icon-set-circles1-red.svg') no-repeat, url('images/icon-set-circles1-yellow.svg') no-repeat, url('images/icon-set-circles1-green.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset04 { background: url('images/icon-set-trafficlights-red.svg') no-repeat, url('images/icon-set-trafficlights-yellow.svg') no-repeat, url('images/icon-set-trafficlights-green.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset05 { background: url('images/icon-set-shapes-diamond.svg') no-repeat, url('images/icon-set-shapes-triangle.svg') no-repeat, url('images/icon-set-shapes-circle.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset06 { background: url('images/icon-set-symbols1-cross.svg') no-repeat, url('images/icon-set-symbols1-exclamation-mark.svg') no-repeat, url('images/icon-set-symbols1-check.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+/* Avoid the iconset07, the core renders it the same as iconset06, no need to support it in the online.
+.w2ui-icon.iconset07 { background: url('images/icon-set-symbols1-cross.svg') no-repeat, url('images/icon-set-symbols1-exclamation-mark.svg') no-repeat, url('images/icon-set-symbols1-check.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }*/
+.w2ui-icon.iconset08 { background: url('images/icon-set-positive-yellow-smilie.svg') no-repeat, url('images/icon-set-neutral-yellow-smilie.svg') no-repeat, url('images/icon-set-negative-yellow-smilie.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset09 { background: url('images/icon-set-stars-empty.svg') no-repeat, url('images/icon-set-stars-half.svg') no-repeat, url('images/icon-set-stars-full.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset10 { background: url('images/icon-set-triangles-down.svg') no-repeat, url('images/icon-set-triangles-same.svg') no-repeat, url('images/icon-set-triangles-up.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset11 { background: url('images/icon-set-positive-green-smilie.svg') no-repeat, url('images/icon-set-neutral-yellow-smilie.svg') no-repeat, url('images/icon-set-negative-red-smilie.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset12 { background: url('images/icon-set-colorarrows-down.svg') no-repeat, url('images/icon-set-colorarrows-slightly-down.svg') no-repeat, url('images/icon-set-colorarrows-slightly-up.svg') no-repeat, url('images/icon-set-colorarrows-up.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset13 { background: url('images/icon-set-grayarrows-down.svg') no-repeat, url('images/icon-set-grayarrows-slightly-down.svg') no-repeat, url('images/icon-set-grayarrows-slightly-up.svg') no-repeat, url('images/icon-set-grayarrows-up.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset14 { background: url('images/icon-set-circles2-dark-gray.svg') no-repeat, url('images/icon-set-circles2-light-gray.svg') no-repeat, url('images/icon-set-circles2-light-red.svg') no-repeat, url('images/icon-set-circles2-dark-red.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset15 { background: url('images/icon-set-bars-one-quarter.svg') no-repeat, url('images/icon-set-bars-half.svg') no-repeat, url('images/icon-set-bars-three-quarters.svg') no-repeat, url('images/icon-set-bars-full.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset16 { background: url('images/icon-set-circles1-gray.svg') no-repeat, url('images/icon-set-circles1-red.svg') no-repeat, url('images/icon-set-circles1-yellow.svg') no-repeat, url('images/icon-set-circles1-green.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset17 { background: url('images/icon-set-colorarrows-down.svg') no-repeat, url('images/icon-set-colorarrows-slightly-down.svg') no-repeat, url('images/icon-set-colorarrows-same.svg') no-repeat, url('images/icon-set-colorarrows-slightly-up.svg') no-repeat, url('images/icon-set-colorarrows-up.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center, 74px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset18 { background: url('images/icon-set-grayarrows-down.svg') no-repeat, url('images/icon-set-grayarrows-slightly-down.svg') no-repeat, url('images/icon-set-grayarrows-same.svg') no-repeat, url('images/icon-set-grayarrows-slightly-up.svg') no-repeat, url('images/icon-set-grayarrows-up.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center, 74px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset19 { background: url('images/icon-set-bars-empty.svg') no-repeat, url('images/icon-set-bars-one-quarter.svg') no-repeat, url('images/icon-set-bars-half.svg') no-repeat, url('images/icon-set-bars-three-quarters.svg') no-repeat, url('images/icon-set-bars-full.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center, 74px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset20 { background: url('images/icon-set-pies-empty.svg') no-repeat, url('images/icon-set-pies-one-quarter.svg') no-repeat, url('images/icon-set-pies-half.svg') no-repeat, url('images/icon-set-pies-three-quarters.svg') no-repeat, url('images/icon-set-pies-full.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center, 74px center !important;
+                                      width: 94px !important; }
+.w2ui-icon.iconset21 { background: url('images/icon-set-squares-empty.svg') no-repeat, url('images/icon-set-squares-one-quarter.svg') no-repeat, url('images/icon-set-squares-half.svg') no-repeat, url('images/icon-set-squares-three-quarters.svg') no-repeat, url('images/icon-set-squares-full.svg') no-repeat !important;
+                       background-size: 16px 16px, 16px 16px, 16px 16px, 16px 16px, 16px 16px !important;
+                       background-position: 2px center, 20px center, 38px center, 56px center, 74px center !important;
+                                      width: 94px !important; }
+
 .w2ui-icon.accepttrackedchanges{ background: url('images/lc_accepttrackedchanges.svg') no-repeat center !important; }
 .w2ui-icon.alignblock{ background: url('images/lc_alignblock.svg') no-repeat center !important; }
 .w2ui-icon.alignhorizontal{ background: url('images/lc_alignhorizontalcenter.svg') no-repeat center !important; }
@@ -438,6 +541,7 @@ button.leaflet-control-search-next
 .w2ui-icon.insertgraphic{ background: url('images/lc_gallery.svg') no-repeat center !important; }
 .w2ui-icon.inserttable{ background: url('images/lc_inserttable.svg') no-repeat center !important; }
 .w2ui-icon.setborderstyle{ background: url('images/lc_setborderstyle.svg') no-repeat center !important; }
+.w2ui-icon.conditionalformatdialog{ background: url('images/lc_conditionalformatdialog.svg') no-repeat center !important; }
 .w2ui-icon.next{ background: url('images/lc_downsearch.svg') no-repeat center !important; }
 .w2ui-icon.numbering{ background: url('images/lc_defaultnumbering.svg') no-repeat center !important; }
 .w2ui-icon.presentation{ background: url('images/lc_dia.svg') no-repeat center !important; }
diff --git a/loleaflet/images/icon-set-bars-empty.svg b/loleaflet/images/icon-set-bars-empty.svg
new file mode 100644
index 000000000..edccacb2a
--- /dev/null
+++ b/loleaflet/images/icon-set-bars-empty.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#808080"><path d="m1 10c-.554 0-1 .446-1 1v4c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-4c0-.554-.446-1-1-1zm0 1h1v4h-1z"/><path d="m1 11h1v4h-1z" opacity=".5"/><path d="m5 7c-.554 0-1 .446-1 1v7c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-7c0-.554-.446-1-1-1zm0 1h1v7h-1z"/><path d="m5 8h1v7h-1z" opacity=".5"/><path d="m9 3c-.554 0-1 .446-1 1v11c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-11c0-.554-.446-1-1-1zm0 1h1v11h-1z"/><path d="m9 4h1v11h-1z" opacity=".5"/><path d="m13 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-14c0-.554-.446-1-1-1zm0 1h1v14h-1z"/><path d="m13 1h1v14h-1z" opacity=".5"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-bars-full.svg b/loleaflet/images/icon-set-bars-full.svg
new file mode 100644
index 000000000..1cf2c3032
--- /dev/null
+++ b/loleaflet/images/icon-set-bars-full.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#4d82b8"><path d="m1 10c-.554 0-1 .446-1 1v4c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-4c0-.554-.446-1-1-1zm0 1h1v4h-1z"/><path d="m1 11h1v4h-1z" opacity=".5"/><path d="m5 7c-.554 0-1 .446-1 1v7c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-7c0-.554-.446-1-1-1zm0 1h1v7h-1z"/><path d="m5 8h1v7h-1z" opacity=".5"/><path d="m9 3c-.554 0-1 .446-1 1v11c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-11c0-.554-.446-1-1-1zm0 1h1v11h-1z"/><path d="m9 4h1v11h-1z" opacity=".5"/><path d="m13 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-14c0-.554-.446-1-1-1zm0 1h1v14h-1z"/><path d="m13 1h1v14h-1z" opacity=".5"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-bars-half.svg b/loleaflet/images/icon-set-bars-half.svg
new file mode 100644
index 000000000..e6d2f9287
--- /dev/null
+++ b/loleaflet/images/icon-set-bars-half.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#808080"><path d="m1 10c-.554 0-1 .446-1 1v4c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-4c0-.554-.446-1-1-1zm0 1h1v4h-1z"/><path d="m1 11h1v4h-1z" opacity=".5"/><path d="m5 7c-.554 0-1 .446-1 1v7c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-7c0-.554-.446-1-1-1zm0 1h1v7h-1z"/><path d="m5 8h1v7h-1z" opacity=".5"/></g><g fill="#4d82b8"><path d="m9 3c-.554 0-1 .446-1 1v11c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-11c0-.554-.446-1-1-1zm0 1h1v11h-1z"/><path d="m9 4h1v11h-1z" opacity=".5"/><path d="m13 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-14c0-.554-.446-1-1-1zm0 1h1v14h-1z"/><path d="m13 1h1v14h-1z" opacity=".5"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-bars-one-quarter.svg b/loleaflet/images/icon-set-bars-one-quarter.svg
new file mode 100644
index 000000000..5d0a325de
--- /dev/null
+++ b/loleaflet/images/icon-set-bars-one-quarter.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#808080"><path d="m1 10c-.554 0-1 .446-1 1v4c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-4c0-.554-.446-1-1-1zm0 1h1v4h-1z"/><path d="m1 11h1v4h-1z" opacity=".5"/><path d="m5 7c-.554 0-1 .446-1 1v7c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-7c0-.554-.446-1-1-1zm0 1h1v7h-1z"/><path d="m5 8h1v7h-1z" opacity=".5"/><path d="m9 3c-.554 0-1 .446-1 1v11c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-11c0-.554-.446-1-1-1zm0 1h1v11h-1z"/><path d="m9 4h1v11h-1z" opacity=".5"/></g><path d="m13 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-14c0-.554-.446-1-1-1zm0 1h1v14h-1z" fill="#4d82b8"/><path d="m13 1h1v14h-1z" fill="#4d82b8" opacity=".5"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-bars-three-quarters.svg b/loleaflet/images/icon-set-bars-three-quarters.svg
new file mode 100644
index 000000000..c0ac9caf2
--- /dev/null
+++ b/loleaflet/images/icon-set-bars-three-quarters.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#4d82b8"><path d="m1 10c-.554 0-1 .446-1 1v4c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-4c0-.554-.446-1-1-1zm0 1h1v4h-1z"/><path d="m1 11h1v4h-1z" opacity=".5"/><path d="m5 7c-.554 0-1 .446-1 1v7c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-7c0-.554-.446-1-1-1zm0 1h1v7h-1z"/><path d="m5 8h1v7h-1z" opacity=".5"/><path d="m9 3c-.554 0-1 .446-1 1v11c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-11c0-.554-.446-1-1-1zm0 1h1v11h-1z"/><path d="m9 4h1v11h-1z" opacity=".5"/></g><path d="m13 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1h1c .554 0 1-.446 1-1v-14c0-.554-.446-1-1-1zm0 1h1v14h-1z" fill="#808080"/><path d="m13 1h1v14h-1z" fill="#808080" opacity=".5"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles1-gray.svg b/loleaflet/images/icon-set-circles1-gray.svg
new file mode 100644
index 000000000..c511757bb
--- /dev/null
+++ b/loleaflet/images/icon-set-circles1-gray.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#808080" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#585858"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles1-green.svg b/loleaflet/images/icon-set-circles1-green.svg
new file mode 100644
index 000000000..489ca6d2f
--- /dev/null
+++ b/loleaflet/images/icon-set-circles1-green.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#76a797" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#507c6e"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles1-red.svg b/loleaflet/images/icon-set-circles1-red.svg
new file mode 100644
index 000000000..8448ddd9f
--- /dev/null
+++ b/loleaflet/images/icon-set-circles1-red.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#d86344" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#a93f23"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles1-yellow.svg b/loleaflet/images/icon-set-circles1-yellow.svg
new file mode 100644
index 000000000..b1e9477cd
--- /dev/null
+++ b/loleaflet/images/icon-set-circles1-yellow.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#eac282" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#dea13e"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles2-dark-gray.svg b/loleaflet/images/icon-set-circles2-dark-gray.svg
new file mode 100644
index 000000000..3eabe1836
--- /dev/null
+++ b/loleaflet/images/icon-set-circles2-dark-gray.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#585858" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#303030"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles2-dark-red.svg b/loleaflet/images/icon-set-circles2-dark-red.svg
new file mode 100644
index 000000000..10e2fd40d
--- /dev/null
+++ b/loleaflet/images/icon-set-circles2-dark-red.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#d65532" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#99391f"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles2-light-gray.svg b/loleaflet/images/icon-set-circles2-light-gray.svg
new file mode 100644
index 000000000..9255dca2d
--- /dev/null
+++ b/loleaflet/images/icon-set-circles2-light-gray.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#a8a8a8" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#808080"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-circles2-light-red.svg b/loleaflet/images/icon-set-circles2-light-red.svg
new file mode 100644
index 000000000..67ae439d8
--- /dev/null
+++ b/loleaflet/images/icon-set-circles2-light-red.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#f0c3b8" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#e38c75"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-colorarrows-down.svg b/loleaflet/images/icon-set-colorarrows-down.svg
new file mode 100644
index 000000000..f25092cbc
--- /dev/null
+++ b/loleaflet/images/icon-set-colorarrows-down.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m8 15.5 7.5-7h-4v-8h-7v8h-4z" fill="#e38c75" fill-rule="evenodd" stroke="#d65532" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-colorarrows-same.svg b/loleaflet/images/icon-set-colorarrows-same.svg
new file mode 100644
index 000000000..a0037a3ba
--- /dev/null
+++ b/loleaflet/images/icon-set-colorarrows-same.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m15.5 7.9999818-6.9999998 7.5000002v-4h-8.00000039v-7.0000002h8.00000039v-3.99999999z" fill="#eac282" fill-rule="evenodd" stroke="#dea13e" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-colorarrows-slightly-down.svg b/loleaflet/images/icon-set-colorarrows-slightly-down.svg
new file mode 100644
index 000000000..d5bd069c5
--- /dev/null
+++ b/loleaflet/images/icon-set-colorarrows-slightly-down.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m15.5 15.499998h-11.1715943l3.1715943-3-7-5.8999807 5.9497252-6.10001904 6.0502748 5.99999974 3-2.6065977z" fill="#eac282" fill-rule="evenodd" stroke="#dea13e" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-colorarrows-slightly-up.svg b/loleaflet/images/icon-set-colorarrows-slightly-up.svg
new file mode 100644
index 000000000..e252e16c1
--- /dev/null
+++ b/loleaflet/images/icon-set-colorarrows-slightly-up.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m15.5.50001926h-11.1715943l3.1715943 3.00000004-7 5.8999807 5.9497252 6.100019 6.0502748-5.9999997 3 2.6065977z" fill="#eac282" fill-rule="evenodd" stroke="#dea13e" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-colorarrows-up.svg b/loleaflet/images/icon-set-colorarrows-up.svg
new file mode 100644
index 000000000..926a22741
--- /dev/null
+++ b/loleaflet/images/icon-set-colorarrows-up.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m8 .49998161 7.5 6.99999999h-4v8.0000004h-7v-8.0000004h-4z" fill="#76a797" fill-rule="evenodd" stroke="#507c6e" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-flags-green.svg b/loleaflet/images/icon-set-flags-green.svg
new file mode 100644
index 000000000..c7e24ef32
--- /dev/null
+++ b/loleaflet/images/icon-set-flags-green.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m5.5136411.0000351c-.2826966-.00348741-.5134911.2532544-.5136411.5712738v7.8572248c.0003644.3914471.3424145.6666763.6718345.5405141l8.9857805-3.4298459c.436841-.1695915.46197-.8538975.03906-1.0634501l-8.9838294-4.4273788c-.0628333-.0310838-.1305756-.0475313-.1992067-.0483413z" fill="#76a797"/><path d="m3 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1s1-.446 1-1v-14c0-.554-.446-1-1-1z" fill="#808080"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-flags-red.svg b/loleaflet/images/icon-set-flags-red.svg
new file mode 100644
index 000000000..914bc0f02
--- /dev/null
+++ b/loleaflet/images/icon-set-flags-red.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m5.5136411.0000351c-.2826966-.00348741-.5134911.2532544-.5136411.5712738v7.8572248c.0003644.3914471.3424145.6666763.6718345.5405141l8.9857805-3.4298459c.436841-.1695915.46197-.8538975.03906-1.0634501l-8.9838294-4.4273788c-.0628333-.0310838-.1305756-.0475313-.1992067-.0483413z" fill="#d86344"/><path d="m3 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1s1-.446 1-1v-14c0-.554-.446-1-1-1z" fill="#808080"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-flags-yellow.svg b/loleaflet/images/icon-set-flags-yellow.svg
new file mode 100644
index 000000000..c0e5ea26b
--- /dev/null
+++ b/loleaflet/images/icon-set-flags-yellow.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m5.5136411.0000351c-.2826966-.00348741-.5134911.2532544-.5136411.5712738v7.8572248c.0003644.3914471.3424145.6666763.6718345.5405141l8.9857805-3.4298459c.436841-.1695915.46197-.8538975.03906-1.0634501l-8.9838294-4.4273788c-.0628333-.0310838-.1305756-.0475313-.1992067-.0483413z" fill="#eac282"/><path d="m3 0c-.554 0-1 .446-1 1v14c0 .554.446 1 1 1s1-.446 1-1v-14c0-.554-.446-1-1-1z" fill="#808080"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-grayarrows-down.svg b/loleaflet/images/icon-set-grayarrows-down.svg
new file mode 100644
index 000000000..7a014410d
--- /dev/null
+++ b/loleaflet/images/icon-set-grayarrows-down.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m8 15.5 7.5-7h-4v-8h-7v8h-4z" fill="#808080" fill-rule="evenodd" stroke="#585858" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-grayarrows-same.svg b/loleaflet/images/icon-set-grayarrows-same.svg
new file mode 100644
index 000000000..3368f34f3
--- /dev/null
+++ b/loleaflet/images/icon-set-grayarrows-same.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m15.5 7.9999818-6.9999998 7.5000002v-4h-8.00000039v-7.0000002h8.00000039v-3.99999999z" fill="#808080" fill-rule="evenodd" stroke="#585858" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-grayarrows-slightly-down.svg b/loleaflet/images/icon-set-grayarrows-slightly-down.svg
new file mode 100644
index 000000000..ca60585fb
--- /dev/null
+++ b/loleaflet/images/icon-set-grayarrows-slightly-down.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m15.5 15.499998h-11.1715943l3.1715943-3-7-5.8999807 5.9497252-6.10001904 6.0502748 5.99999974 3-2.6065977z" fill="#808080" fill-rule="evenodd" stroke="#585858" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-grayarrows-slightly-up.svg b/loleaflet/images/icon-set-grayarrows-slightly-up.svg
new file mode 100644
index 000000000..68e879d3a
--- /dev/null
+++ b/loleaflet/images/icon-set-grayarrows-slightly-up.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m15.5.50001926h-11.1715943l3.1715943 3.00000004-7 5.8999807 5.9497252 6.100019 6.0502748-5.9999997 3 2.6065977z" fill="#808080" fill-rule="evenodd" stroke="#585858" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-grayarrows-up.svg b/loleaflet/images/icon-set-grayarrows-up.svg
new file mode 100644
index 000000000..62a076fb0
--- /dev/null
+++ b/loleaflet/images/icon-set-grayarrows-up.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m8 .49998161 7.5 6.99999999h-4v8.0000004h-7v-8.0000004h-4z" fill="#808080" fill-rule="evenodd" stroke="#585858" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-negative-red-smilie.svg b/loleaflet/images/icon-set-negative-red-smilie.svg
new file mode 100644
index 000000000..cb7a0a2d7
--- /dev/null
+++ b/loleaflet/images/icon-set-negative-red-smilie.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#f4d1c8" r="7"/><g fill="#d86344"><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z"/><path d="m5.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m10.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m3 12a5 4 0 0 1 5-4 5 4 0 0 1 5 4h-1a4 3 0 0 0 -4-3 4 3 0 0 0 -4 3z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-negative-yellow-smilie.svg b/loleaflet/images/icon-set-negative-yellow-smilie.svg
new file mode 100644
index 000000000..81c01f710
--- /dev/null
+++ b/loleaflet/images/icon-set-negative-yellow-smilie.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#fbf4e9" r="7"/><g fill="#eac282"><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z"/><path d="m5.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m10.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m3 12a5 4 0 0 1 5-4 5 4 0 0 1 5 4h-1a4 3 0 0 0 -4-3 4 3 0 0 0 -4 3z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-neutral-yellow-smilie.svg b/loleaflet/images/icon-set-neutral-yellow-smilie.svg
new file mode 100644
index 000000000..a2968bd0a
--- /dev/null
+++ b/loleaflet/images/icon-set-neutral-yellow-smilie.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#fbf4e9" r="7"/><g fill="#eac282"><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z"/><path d="m5.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m10.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m3 10v1h10v-1z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-pies-empty.svg b/loleaflet/images/icon-set-pies-empty.svg
new file mode 100644
index 000000000..3f8382c45
--- /dev/null
+++ b/loleaflet/images/icon-set-pies-empty.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <circle cx="8" cy="8" fill="#fff" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#585858"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-pies-full.svg b/loleaflet/images/icon-set-pies-full.svg
new file mode 100644
index 000000000..732e18bab
--- /dev/null
+++ b/loleaflet/images/icon-set-pies-full.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <circle cx="8" cy="8" fill="#808080" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#585858"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-pies-half.svg b/loleaflet/images/icon-set-pies-half.svg
new file mode 100644
index 000000000..7a05aa61d
--- /dev/null
+++ b/loleaflet/images/icon-set-pies-half.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7z" fill="#fff"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#585858"/><path d="m8 1v14a7 7 0 0 0 7-7 7 7 0 0 0 -7-7z" fill="#808080"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-pies-one-quarter.svg b/loleaflet/images/icon-set-pies-one-quarter.svg
new file mode 100644
index 000000000..a559066be
--- /dev/null
+++ b/loleaflet/images/icon-set-pies-one-quarter.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <circle cx="8" cy="8" fill="#fff" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#585858"/><circle cx="8" cy="8" fill="#fff" r="7"/><path d="m8 1v7h7a7 7 0 0 0 -7-7z" fill="#808080"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-pies-three-quarters.svg b/loleaflet/images/icon-set-pies-three-quarters.svg
new file mode 100644
index 000000000..1779ae34d
--- /dev/null
+++ b/loleaflet/images/icon-set-pies-three-quarters.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <circle cx="8" cy="8" fill="#fff" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#585858"/><path d="m8 1v7h-7a7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7z" fill="#808080"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-positive-green-smilie.svg b/loleaflet/images/icon-set-positive-green-smilie.svg
new file mode 100644
index 000000000..540ff70e8
--- /dev/null
+++ b/loleaflet/images/icon-set-positive-green-smilie.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#d7e5e1" r="7"/><g fill="#76a797"><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z"/><path d="m5.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m10.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m3 9a5 4 0 0 0 5 4 5 4 0 0 0 5-4h-1a4 3 0 0 1 -4 3 4 3 0 0 1 -4-3z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-positive-yellow-smilie.svg b/loleaflet/images/icon-set-positive-yellow-smilie.svg
new file mode 100644
index 000000000..2ce55d3bd
--- /dev/null
+++ b/loleaflet/images/icon-set-positive-yellow-smilie.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#fbf4e9" r="7"/><g fill="#eac282"><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z"/><path d="m5.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m10.5 4a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm0 1a .5.5 0 0 1  .5.5.5.5 0 0 1 -.5.5.5.5 0 0 1 -.5-.5.5.5 0 0 1  .5-.5z"/><path d="m3 9a5 4 0 0 0 5 4 5 4 0 0 0 5-4h-1a4 3 0 0 1 -4 3 4 3 0 0 1 -4-3z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-shapes-circle.svg b/loleaflet/images/icon-set-shapes-circle.svg
new file mode 100644
index 000000000..980fd3075
--- /dev/null
+++ b/loleaflet/images/icon-set-shapes-circle.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><circle cx="8" cy="8" fill="#76a797" r="6.5" stroke="#507c6e" stroke-linecap="square" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-shapes-diamond.svg b/loleaflet/images/icon-set-shapes-diamond.svg
new file mode 100644
index 000000000..1ba042536
--- /dev/null
+++ b/loleaflet/images/icon-set-shapes-diamond.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m8 0-8 8 8 8 8-8zm0 1.4140625 6.585938 6.5859375-6.585938 6.585938-6.5859375-6.585938z" fill="#a93f23" fill-rule="evenodd"/><path d="m8 1.4140625 6.585938 6.5859375-6.585938 6.585938-6.5859375-6.585938z" fill="#d86344" fill-rule="evenodd"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-shapes-triangle.svg b/loleaflet/images/icon-set-shapes-triangle.svg
new file mode 100644
index 000000000..706ce4dab
--- /dev/null
+++ b/loleaflet/images/icon-set-shapes-triangle.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m .5 15.5h15l-7.5-15z" fill="#eac282" fill-rule="evenodd" stroke="#dea13e" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-squares-empty.svg b/loleaflet/images/icon-set-squares-empty.svg
new file mode 100644
index 000000000..30e9a000e
--- /dev/null
+++ b/loleaflet/images/icon-set-squares-empty.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#808080"><path d="m1 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m1 10h5v5h-5z" opacity=".5"/><path d="m1 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m1 1h5v5h-5z" opacity=".5"/><path d="m10 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m10 10h5v5h-5z" opacity=".5"/><path d="m10 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m10 1h5v5h-5z" opacity=".5"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-squares-full.svg b/loleaflet/images/icon-set-squares-full.svg
new file mode 100644
index 000000000..e57355f0e
--- /dev/null
+++ b/loleaflet/images/icon-set-squares-full.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#4d82b8"><path d="m1 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m1 10h5v5h-5z" opacity=".5"/><path d="m1 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m1 1h5v5h-5z" opacity=".5"/><path d="m10 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m10 10h5v5h-5z" opacity=".5"/><path d="m10 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m10 1h5v5h-5z" opacity=".5"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-squares-half.svg b/loleaflet/images/icon-set-squares-half.svg
new file mode 100644
index 000000000..15bc1a7f8
--- /dev/null
+++ b/loleaflet/images/icon-set-squares-half.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m1 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z" fill="#4d82b8"/><path d="m1 10h5v5h-5z" fill="#4d82b8" opacity=".5"/><path d="m1 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z" fill="#808080"/><path d="m1 1h5v5h-5z" fill="#808080" opacity=".5"/><path d="m10 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z" fill="#4d82b8"/><path d="m10 10h5v5h-5z" fill="#4d82b8" opacity=".5"/><path d="m10 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z" fill="#808080"/><path d="m10 1h5v5h-5z" fill="#808080" opacity=".5"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-squares-one-quarter.svg b/loleaflet/images/icon-set-squares-one-quarter.svg
new file mode 100644
index 000000000..48dcc9a61
--- /dev/null
+++ b/loleaflet/images/icon-set-squares-one-quarter.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m1 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z" fill="#4d82b8"/><path d="m1 10h5v5h-5z" fill="#4d82b8" opacity=".5"/><g fill="#808080"><path d="m1 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m1 1h5v5h-5z" opacity=".5"/><path d="m10 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m10 10h5v5h-5z" opacity=".5"/><path d="m10 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m10 1h5v5h-5z" opacity=".5"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-squares-three-quarters.svg b/loleaflet/images/icon-set-squares-three-quarters.svg
new file mode 100644
index 000000000..6b154682b
--- /dev/null
+++ b/loleaflet/images/icon-set-squares-three-quarters.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><g fill="#4d82b8"><path d="m1 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m1 10h5v5h-5z" opacity=".5"/><path d="m1 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m1 1h5v5h-5z" opacity=".5"/><path d="m10 9c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z"/><path d="m10 10h5v5h-5z" opacity=".5"/></g><path d="m10 0c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h5c .554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm0 1h5v5h-5z" fill="#808080"/><path d="m10 1h5v5h-5z" fill="#808080" opacity=".5"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-stars-empty.svg b/loleaflet/images/icon-set-stars-empty.svg
new file mode 100644
index 000000000..2790941ef
--- /dev/null
+++ b/loleaflet/images/icon-set-stars-empty.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <path d="m7.9999293.50004856-2.8125 5.99995144h-4.68749998l4.00007068 3-1 6.000049 4.4999293-3.000049 4.5000707 3.000049-1-6.000049 3.999929-3h-4.6875z" fill="#808080" opacity=".5"/><path d="m7.9999293.50004822-2.8125 5.99995148h-4.68749998l4.00007068 3-1 6.0000493 4.4999293-3.000049 4.5000707 3.000049-1-6.0000493 3.999929-3h-4.6875z" fill="none" stroke="#808080" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-stars-full.svg b/loleaflet/images/icon-set-stars-full.svg
new file mode 100644
index 000000000..eceb26a15
--- /dev/null
+++ b/loleaflet/images/icon-set-stars-full.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><path d="m7.9999293.50004856-2.8125 5.99995144h-4.68749998l4.00007068 3-1 6.000049 4.4999293-3.000049 4.5000707 3.000049-1-6.000049 3.999929-3h-4.6875z" fill="#eac282" stroke="#dea13e" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-stars-half.svg b/loleaflet/images/icon-set-stars-half.svg
new file mode 100644
index 000000000..5bda75f08
--- /dev/null
+++ b/loleaflet/images/icon-set-stars-half.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <path d="m8 0v1.6796875l2.359375 5.0332031a.50005.50005 0 0 0  .453125.2871094h3.185547l-2.798828 2.0996094a.50005.50005 0 0 0 -.19336.4824218l.810547 4.8613278-3.5390622-2.359375a.50005.50005 0 0 0 -.2773438-.083984v1.101562l4.222656 2.814454a.50005.50005 0 0 0  .771485-.498047l-.951172-5.7011721 3.757812-2.8164063a.50005.50005 0 0 0 -.300781-.9003906h-4.369141l-2.677734-5.71289062a.50005.50005 0 0 0 -.4375-.28710938.50005.50005 0 0 0 -.015625 0z" fill="#808080"/><path d="m8 .5v12l4.5 3-1-6 4-3h-4.6875z" fill="#808080" opacity=".5"/><path d="m7.9999293.50004822-2.8125 5.99995148h-4.68749998l4.00007068 3-1 6.0000493 4.4999293-3.000049 4.5000707 3.000049-1-6.0000493 3.999929-3h-4.6875z" fill="none"/><path d="m8 .5-2.8125 6h-4.6875l4 3-1 6 4.5-3z" fill="#eac282"/><path d="m7.9648438 0a .50005.50005 0 0 0 -.4179688.28710938l-2.6777344 5.71289062h-4.3691406a.50005.50005 0 0 0 -.30078125.9003906l3.75781245 2.8164063-.9511718 5.7011721a.50005.50005 0 0 0  .7714844.498047l4.2226562-2.8144
 54v-1.101562a.50005.50005 0 0 0 -.2773438.083984l-3.5390624 2.359375.8105468-4.8613278a.50005.50005 0 0 0 -.1933594-.4824218l-2.7988281-2.0996094h3.1855469a.50005.50005 0 0 0  .453125-.2871094l2.359375-5.0332031v-1.6796875a.50005.50005 0 0 0 -.0351562 0z" fill="#dea13e"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-symbols1-check.svg b/loleaflet/images/icon-set-symbols1-check.svg
new file mode 100644
index 000000000..3123b166d
--- /dev/null
+++ b/loleaflet/images/icon-set-symbols1-check.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <circle cx="8" cy="8" fill="#76a797" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#507c6e"/><path d="m2.9743327 8.6823554 4.017513 3.3539126 8.0350293-10.061733" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.927546"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-symbols1-cross.svg b/loleaflet/images/icon-set-symbols1-cross.svg
new file mode 100644
index 000000000..48db8f397
--- /dev/null
+++ b/loleaflet/images/icon-set-symbols1-cross.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <circle cx="8" cy="8" fill="#d86344" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#a93f23"/><path d="m4 12 8-8" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path d="m12 12-8-7.9999998" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-symbols1-exclamation-mark.svg b/loleaflet/images/icon-set-symbols1-exclamation-mark.svg
new file mode 100644
index 000000000..160bc7620
--- /dev/null
+++ b/loleaflet/images/icon-set-symbols1-exclamation-mark.svg
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+     />
+ <circle cx="8" cy="8" fill="#eac282" r="7"/><path d="m8 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1 -7 7 7 7 0 0 1 -7-7 7 7 0 0 1 7-7z" fill="#dea13e"/><rect fill="#fff" height="9" ry="1" width="2" x="7" y="2"/><rect fill="#fff" height="2" ry="1" width="2" x="7" y="12"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-trafficlights-green.svg b/loleaflet/images/icon-set-trafficlights-green.svg
new file mode 100644
index 000000000..44a53b085
--- /dev/null
+++ b/loleaflet/images/icon-set-trafficlights-green.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><rect fill="#808080" height="16" ry="1" width="16"/><circle cx="8" cy="8" fill="#fff" r="7"/><circle cx="8" cy="8" fill="#76a797" r="6"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-trafficlights-red.svg b/loleaflet/images/icon-set-trafficlights-red.svg
new file mode 100644
index 000000000..aec54d0ba
--- /dev/null
+++ b/loleaflet/images/icon-set-trafficlights-red.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><rect fill="#808080" height="16" ry="1" width="16"/><circle cx="8" cy="8" fill="#fff" r="7"/><circle cx="8" cy="8" fill="#d86344" r="6"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-trafficlights-yellow.svg b/loleaflet/images/icon-set-trafficlights-yellow.svg
new file mode 100644
index 000000000..829478cbe
--- /dev/null
+++ b/loleaflet/images/icon-set-trafficlights-yellow.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">/><rect fill="#808080" height="16" ry="1" width="16"/><circle cx="8" cy="8" fill="#fff" r="7"/><circle cx="8" cy="8" fill="#eac282" r="6"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-triangles-down.svg b/loleaflet/images/icon-set-triangles-down.svg
new file mode 100644
index 000000000..49b1c7e94
--- /dev/null
+++ b/loleaflet/images/icon-set-triangles-down.svg
@@ -0,0 +1,8 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+
+     />
+ <path d="m15.499912 7.5000048h-14.99999958l7.50008758 7.0000132z" fill="#d86344" fill-rule="evenodd" stroke="#a93f23" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-triangles-same.svg b/loleaflet/images/icon-set-triangles-same.svg
new file mode 100644
index 000000000..5c5f6d7f7
--- /dev/null
+++ b/loleaflet/images/icon-set-triangles-same.svg
@@ -0,0 +1,8 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+
+     />
+ <rect fill="#eac282" height="3.000499" ry="1.000166" width="15.112699" x=".44365" y="6.499751"/><path d="m1.5 6c-.82244347 0-1.5.6775566-1.5 1.5v1c0 .8224434.67755653 1.5 1.5 1.5h13c .822443 0 1.5-.6775566 1.5-1.5v-1c0-.8224434-.677557-1.5-1.5-1.5zm0 1h13c .28574 0 .5.2142593.5.5v1c0 .2857407-.21426.5-.5.5h-13c-.2857407 0-.50000001-.2142593-.50000001-.5v-1c0-.2857407.21425931-.5.50000001-.5z" fill="#dea13e"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/icon-set-triangles-up.svg b/loleaflet/images/icon-set-triangles-up.svg
new file mode 100644
index 000000000..13d4a9270
--- /dev/null
+++ b/loleaflet/images/icon-set-triangles-up.svg
@@ -0,0 +1,8 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+
+
+
+
+
+     />
+ <path d="m15.499912 8.5h-14.99999958l7.50008758-7.0000136z" fill="#76a797" fill-rule="evenodd" stroke="#507c6e" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_conditionalformatdialog.svg b/loleaflet/images/lc_conditionalformatdialog.svg
new file mode 100644
index 000000000..421ff9da6
--- /dev/null
+++ b/loleaflet/images/lc_conditionalformatdialog.svg
@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path 
+     style="fill:#4d4d4d" 
+     d="M 8 4 C 6.9282 7.8182 4 10.072941 4 12.181641 C 4 14.290341 5.79086 16 8 16 C 10.20914 16 12 14.290341 12 12.181641 C 12 10.072941 9.0718 7.8182 8 4 z M 10.75 10.232422 A 3.4285713 3.2727273 0 0 1 11.427734 12.181641 A 3.4285713 3.2727273 0 0 1 8 15.455078 A 3.4285713 3.2727273 0 0 1 5.9628906 14.808594 A 3.9999998 3.8181818 0 0 0 6.8574219 14.908203 A 3.9999998 3.8181818 0 0 0 10.857422 11.091797 A 3.9999998 3.8181818 0 0 0 10.75 10.232422 z "
+     />
+ <path 
+     style="fill:#1d99f3" 
+     d="M 18.4375 13 L 17.283203 15 L 14 15 L 14 16 L 16.707031 16 L 16.128906 17 L 14 17 L 14 18 L 15.552734 18 L 14.6875 19.5 L 15.5625 20 L 16.716797 18 L 20 18 L 20 17 L 17.292969 17 L 17.871094 16 L 20 16 L 20 15 L 18.447266 15 L 19.3125 13.5 L 18.4375 13 z "
+     />
+ </svg>
diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index 258aad8cd..d90d14ae2 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -288,6 +288,23 @@ function setBorderStyle(num) {
 
 global.setBorderStyle = setBorderStyle;
 
+function setConditionalFormatIconSet(num) {
+	var params = {
+		IconSet: {
+			type : 'short',
+			value : num
+		}};
+	map.sendUnoCommand('.uno:IconSetFormatDialog', params);
+
+	// close the popup
+	if ($('#w2ui-overlay-toolbar-up').length > 0) {
+		$('#w2ui-overlay-toolbar-up').removeData('keepOpen')[0].hide();
+	}
+	map.focus();
+}
+
+global.setConditionalFormatIconSet = setConditionalFormatIconSet;
+
 function insertTable() {
 	var rows = 10;
 	var cols = 10;
@@ -642,6 +659,16 @@ function createToolbar() {
 				      '<td class="w2ui-tb-image w2ui-icon frame12" onclick="setBorderStyle(12)"></td></tr><tr>' +
 				      '<td colspan="4" class="w2ui-tb-image w2ui-icon frame13" onclick="setBorderStyle(0)"><div id="div-frame13">' + _('More...') + '</div></td></tr></table>'
 			},
+			{type: 'drop', id: 'conditionalformaticonset',  img: 'conditionalformatdialog', hint: _UNO('.uno:ConditionalFormatMenu'),
+				html: '<table id="conditionalformatmenu-grid"><tr>' +
+					  '<td class="w2ui-tb-image w2ui-icon iconset00" onclick="setConditionalFormatIconSet(0)"/><td class="w2ui-tb-image w2ui-icon iconset01" onclick="setConditionalFormatIconSet(1)"/><td class="w2ui-tb-image w2ui-icon iconset02" onclick="setConditionalFormatIconSet(2)"/></tr><tr>' +
+					  '<td class="w2ui-tb-image w2ui-icon iconset03" onclick="setConditionalFormatIconSet(3)"/><td class="w2ui-tb-image w2ui-icon iconset04" onclick="setConditionalFormatIconSet(4)"/><td class="w2ui-tb-image w2ui-icon iconset05" onclick="setConditionalFormatIconSet(5)"/></tr><tr>' +
+					  '<td class="w2ui-tb-image w2ui-icon iconset06" onclick="setConditionalFormatIconSet(6)"/><td class="w2ui-tb-image w2ui-icon iconset08" onclick="setConditionalFormatIconSet(8)"/><td class="w2ui-tb-image w2ui-icon iconset09" onclick="setConditionalFormatIconSet(9)"/></tr><tr>' + // iconset07 deliberately left out, see the .css for the reason
+					  '<td class="w2ui-tb-image w2ui-icon iconset10" onclick="setConditionalFormatIconSet(10)"/><td class="w2ui-tb-image w2ui-icon iconset11" onclick="setConditionalFormatIconSet(11)"/><td class="w2ui-tb-image w2ui-icon iconset12" onclick="setConditionalFormatIconSet(12)"/></tr><tr>' +
+					  '<td class="w2ui-tb-image w2ui-icon iconset13" onclick="setConditionalFormatIconSet(13)"/><td class="w2ui-tb-image w2ui-icon iconset14" onclick="setConditionalFormatIconSet(14)"/><td class="w2ui-tb-image w2ui-icon iconset15" onclick="setConditionalFormatIconSet(15)"/></tr><tr>' +
+					  '<td class="w2ui-tb-image w2ui-icon iconset16" onclick="setConditionalFormatIconSet(16)"/><td class="w2ui-tb-image w2ui-icon iconset17" onclick="setConditionalFormatIconSet(17)"/><td class="w2ui-tb-image w2ui-icon iconset18" onclick="setConditionalFormatIconSet(18)"/></tr><tr>' +
+					  '<td class="w2ui-tb-image w2ui-icon iconset19" onclick="setConditionalFormatIconSet(19)"/><td class="w2ui-tb-image w2ui-icon iconset20" onclick="setConditionalFormatIconSet(20)"/><td class="w2ui-tb-image w2ui-icon iconset21" onclick="setConditionalFormatIconSet(21)"/></tr></table>'
+			},
 			{type: 'drop',  id: 'insertshapes',  img: 'basicshapes_ellipse', hint: _('Insert shapes'), overlay: {onShow: insertShapes},
 			 html: '<div id="insertshape-wrapper"><div id="insertshape-popup" class="insertshape-pop ui-widget ui-widget-content ui-corner-all"><div class="insertshape-grid"></div></div></div>'},
 			{type: 'button',  id: 'insertobjectchart',  img: 'insertobjectchart', hint: _UNO('.uno:InsertObjectChart', '', true), uno: 'InsertObjectChart'},
@@ -1178,7 +1205,7 @@ function onDocLayerInit() {
 
 		break;
 	case 'text':
-		toolbarUp.remove('wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle');
+		toolbarUp.remove('wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformatmenu');
 		statusbar.insert('left', [
 			{type: 'break', id: 'break1'},
 			{type: 'html',  id: 'StatePageNumber',
@@ -1209,7 +1236,7 @@ function onDocLayerInit() {
 		if (!map['wopi'].HideExportOption) {
 			presentationToolbar.show('presentation', 'presentationbreak');
 		}
-		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle');
+		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformatmenu');
 		statusbar.insert('left', [
 			{type: 'break', id:'break1'},
 			{type: 'html',  id: 'PageStatus',
@@ -1225,7 +1252,7 @@ function onDocLayerInit() {
 
 		break;
 	case 'drawing':
-		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle');
+		toolbarUp.remove('insertannotation', 'wraptextseparator', 'wraptext', 'togglemergecells', 'break-toggle', 'numberformatcurrency', 'numberformatpercent', 'numberformatdecimal', 'numberformatdate', 'numberformatincdecimals', 'numberformatdecdecimals', 'break-number', 'sortascending', 'sortdescending', 'setborderstyle', 'conditionalformatmenu');
 
 		// Remove irrelevant toolbars
 		$('#formulabar').hide();
diff --git a/loleaflet/src/unocommands.js b/loleaflet/src/unocommands.js
index b0b83f249..60cd2cc88 100644
--- a/loleaflet/src/unocommands.js
+++ b/loleaflet/src/unocommands.js
@@ -27,6 +27,7 @@ var unoCommandsArray = {
 	CommonAlignRight:{global:{menu:_('Right'),},},
 	CommonAlignTop:{global:{menu:_('Top'),},},
 	CommonAlignVerticalCenter:{global:{menu:_('Center'),},},
+	ConditionalFormatMenu:{spreadsheet:{menu:_('C~onditional Formatting'),},},
 	ContinueNumbering:{text:{menu:_('Continue previous numbering'),},},
 	ControlCodes:{text:{menu:_('For~matting Marks'),},},
 	Copy:{global:{menu:_('Cop~y'),},},


More information about the Libreoffice-commits mailing list