loleaflet/css/loleaflet.css           |   14 +-
 loleaflet/css/spreadsheet.css         |   19 ++-
 loleaflet/css/toolbar.css             |    2 
 loleaflet/js/toolbar.js               |  173 +++++++++++++++++++++-------------
 loleaflet/src/control/Control.Tabs.js |   16 +--
 loleaflet/src/map/Map.js              |   21 +---
 loleaflet/src/map/handler/Map.WOPI.js |    3 
 test/httpwstest.cpp                   |    1 
 wsd/DocumentBroker.cpp                |    1 
 wsd/Storage.cpp                       |    4 
 wsd/Storage.hpp                       |   10 +
 11 files changed, 169 insertions(+), 95 deletions(-)

New commits:
commit 13b86d7b6439521b3a61f559699dd73e3988d7aa
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Dec 13 16:24:07 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Dec 15 15:07:22 2018 +0100

    Don't show 'null' in IE, Correct isArray test
    
    Change-Id: Ic1a34aebc989dd2bf7ab55097f2edf77189883e8
    (cherry picked from commit c5b98a7c896916fd23c963d5815441b2e9984aeb)

diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index 90588b535..9ed53ec2a 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -882,9 +882,9 @@ function initMobileToolbar(toolItems) {
 
                        var showUserList = map['wopi'].HideUserList !== null &&
                                                                
map['wopi'].HideUserList !== undefined &&
-                                                               
!$.inArray('true', map['wopi'].HideUserList) &&
-                                                               
((window.mode.isMobile() && !$.inArray('mobile', map['wopi'].HideUserList)) ||
-                                                               
(window.mode.isTablet() && !$.inArray('tablet', map['wopi'].HideUserList)));
+                                                               
$.inArray('true', map['wopi'].HideUserList) < 0 &&
+                                                               
((window.mode.isMobile() && $.inArray('mobile', map['wopi'].HideUserList) < 0) 
||
+                                                               
(window.mode.isTablet() && $.inArray('tablet', map['wopi'].HideUserList) < 0));
                        if (this.get('userlist').hidden == true && 
showUserList) {
                                this.show('userlist');
                                this.show('userlistbreak');
@@ -1256,8 +1256,8 @@ function initNormalToolbar(toolItems) {
 
                                var showInDesktop = map['wopi'].HideUserList 
!== null &&
                                                                        
map['wopi'].HideUserList !== undefined &&
-                                                                       
!$.inArray('true', map['wopi'].HideUserList) &&
-                                                                       
!$.inArray('desktop', map['wopi'].HideUserList);
+                                                                       
$.inArray('true', map['wopi'].HideUserList) < 0 &&
+                                                                       
$.inArray('desktop', map['wopi'].HideUserList) < 0;
                                if (this.get('userlist').hidden == true && 
showInDesktop) {
                                        this.show('userlist');
                                        this.show('userlistbreak');
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 25c2d7782..bad0ac53a 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -280,7 +280,7 @@ L.Map = L.Evented.extend({
                        this.updateModificationIndicator(this._lastmodtime);
 
                        // Replace menu button body with new content
-                       lastModButton.firstChild.innerHTML = null;
+                       lastModButton.firstChild.innerHTML = '';
                        lastModButton.firstChild.appendChild(mainSpan);
                }
        },
@@ -292,7 +292,7 @@ L.Map = L.Evented.extend({
                        var special = [ 'bn_IN', 'hi_IN', 'id_ID', 'nb_NO', 
'nn_NO', 'pt_BR', 'zh_CN', 'zh_TW'];
                        var locale = String.locale;
                        locale = locale.replace('-', '_');
-                       if (!$.inArray(locale, special)) {
+                       if ($.inArray(locale, special) < 0) {
                                if (locale.indexOf('_') > 0) {
                                        locale = locale.substring(0, 
locale.indexOf('_'));
                                }
commit 9b5a92cf6bb53ce99a13dc0e0f807ffcd77710e2
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Dec 13 16:11:31 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Dec 15 15:07:18 2018 +0100

    Replace 'includes' with 'jQuery.isArray'
    
    Change-Id: Idf5a0bc9cbb6850164b21c90bcf98876bc62db68
    (cherry picked from commit 45282b1d5944716f7b5733c99e87669900c4936a)

diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index 13188614f..90588b535 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -882,9 +882,9 @@ function initMobileToolbar(toolItems) {
 
                        var showUserList = map['wopi'].HideUserList !== null &&
                                                                
map['wopi'].HideUserList !== undefined &&
-                                                               
!map['wopi'].HideUserList.includes('true') &&
-                                                               
((window.mode.isMobile() && !map['wopi'].HideUserList.includes('mobile')) ||
-                                                               
(window.mode.isTablet() && !map['wopi'].HideUserList.includes('tablet')));
+                                                               
!$.inArray('true', map['wopi'].HideUserList) &&
+                                                               
((window.mode.isMobile() && !$.inArray('mobile', map['wopi'].HideUserList)) ||
+                                                               
(window.mode.isTablet() && !$.inArray('tablet', map['wopi'].HideUserList)));
                        if (this.get('userlist').hidden == true && 
showUserList) {
                                this.show('userlist');
                                this.show('userlistbreak');
@@ -1256,8 +1256,8 @@ function initNormalToolbar(toolItems) {
 
                                var showInDesktop = map['wopi'].HideUserList 
!== null &&
                                                                        
map['wopi'].HideUserList !== undefined &&
-                                                                       
!map['wopi'].HideUserList.includes('true') &&
-                                                                       
!map['wopi'].HideUserList.includes('desktop');
+                                                                       
!$.inArray('true', map['wopi'].HideUserList) &&
+                                                                       
!$.inArray('desktop', map['wopi'].HideUserList);
                                if (this.get('userlist').hidden == true && 
showInDesktop) {
                                        this.show('userlist');
                                        this.show('userlistbreak');
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index f6a3ee0ac..25c2d7782 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -292,7 +292,7 @@ L.Map = L.Evented.extend({
                        var special = [ 'bn_IN', 'hi_IN', 'id_ID', 'nb_NO', 
'nn_NO', 'pt_BR', 'zh_CN', 'zh_TW'];
                        var locale = String.locale;
                        locale = locale.replace('-', '_');
-                       if (!special.includes(locale)) {
+                       if (!$.inArray(locale, special)) {
                                if (locale.indexOf('_') > 0) {
                                        locale = locale.substring(0, 
locale.indexOf('_'));
                                }
commit 26f50e9b66556d513bf2662bf413b6710d09e7cc
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Dec 13 15:37:35 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Dec 15 15:07:15 2018 +0100

    Fix typo in the timeago.js languages
    
    Change-Id: I1776d749fc6a03f70279897285688deafbe71d59
    (cherry picked from commit 41413542ceda3b92fd13b72a93e98c7aa2f772e5)

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 0e6e4ec48..f6a3ee0ac 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -289,15 +289,14 @@ L.Map = L.Evented.extend({
                this._lastmodtime = newModificationTime;
                if (this.lastModIndicator !== null && this.lastModIndicator !== 
undefined) {
                        // Get locale
-                       var special = [ 'bn_IN', 'hi_IN', 'id_ID', 'nb_NO', 
'nn_NO', 'pt-BR', 'zh_CN', 'zh_TW'];
+                       var special = [ 'bn_IN', 'hi_IN', 'id_ID', 'nb_NO', 
'nn_NO', 'pt_BR', 'zh_CN', 'zh_TW'];
                        var locale = String.locale;
                        locale = locale.replace('-', '_');
                        if (!special.includes(locale)) {
                                if (locale.indexOf('_') > 0) {
-                                       locale = locale.substring(0, 
locale.indexOf('_') - 1);
+                                       locale = locale.substring(0, 
locale.indexOf('_'));
                                }
                        }
-
                        // Real-time auto update
                        this.lastModIndicator.setAttribute('datetime', 
newModificationTime);
                        timeago().render(this.lastModIndicator, locale);
commit a9cc01eb4c9016251729fc56e45e826119f86055
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Dec 12 14:51:37 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Dec 15 15:07:10 2018 +0100

    WOPI: Extend HideUserList property
    
    Added "mobile" | "tablet" | "desktop" values support.
    "," is used as a delimiter
    
    Change-Id: Idfa4670f229725dfedfb2d55b622263cbcfd6fc2
    (cherry picked from commit e2b464b2378e8c96523c81ed54e5de2a081d8836)

diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index 0b2918571..13188614f 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -879,6 +879,19 @@ function initMobileToolbar(toolItems) {
                                this.show('prev');
                                this.show('next');
                        }
+
+                       var showUserList = map['wopi'].HideUserList !== null &&
+                                                               
map['wopi'].HideUserList !== undefined &&
+                                                               
!map['wopi'].HideUserList.includes('true') &&
+                                                               
((window.mode.isMobile() && !map['wopi'].HideUserList.includes('mobile')) ||
+                                                               
(window.mode.isTablet() && !map['wopi'].HideUserList.includes('tablet')));
+                       if (this.get('userlist').hidden == true && 
showUserList) {
+                               this.show('userlist');
+                               this.show('userlistbreak');
+                               map.on('deselectuser', deselectUser);
+                               map.on('addview', onAddView);
+                               map.on('removeview', onRemoveView);
+                       }
                }
        });
        toolbar.bind('touchstart', function(e) {
@@ -1241,13 +1254,16 @@ function initNormalToolbar(toolItems) {
                                $('#search-input').off('input', 
onSearch).on('input', onSearch);
                                $('#search-input').off('keydown', 
onSearchKeyDown).on('keydown', onSearchKeyDown);
 
-                               if (this.get('userlist').hidden == true && 
map['wopi'].HideUserList === false) {
+                               var showInDesktop = map['wopi'].HideUserList 
!== null &&
+                                                                       
map['wopi'].HideUserList !== undefined &&
+                                                                       
!map['wopi'].HideUserList.includes('true') &&
+                                                                       
!map['wopi'].HideUserList.includes('desktop');
+                               if (this.get('userlist').hidden == true && 
showInDesktop) {
                                        this.show('userlist');
                                        this.show('userlistbreak');
-                               }
-                               else if (this.get('userlist').hidden == false 
&& map['wopi'].HideUserList === true) {
-                                       this.hide('userlist');
-                                       this.hide('userlistbreak');
+                                       map.on('deselectuser', deselectUser);
+                                       map.on('addview', onAddView);
+                                       map.on('removeview', onRemoveView);
                                }
                        }
                });
@@ -1262,12 +1278,6 @@ function initNormalToolbar(toolItems) {
        toolbar.bind('touchstart', function() {
                w2ui['actionbar'].touchStarted = true;
        });
-
-       if (map['wopi'].HideUserList === false) {
-               map.on('deselectuser', deselectUser);
-               map.on('addview', onAddView);
-               map.on('removeview', onRemoveView);
-       }
 }
 
 var userJoinedPopupMessage = '<div>' + _('%user has joined') + '</div>';
diff --git a/loleaflet/src/map/handler/Map.WOPI.js 
b/loleaflet/src/map/handler/Map.WOPI.js
index 088cea644..b0d5a7750 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -22,7 +22,7 @@ L.Map.WOPI = L.Handler.extend({
        UserCanNotWriteRelative: true,
        EnableInsertRemoteImage: false,
        EnableShare: false,
-       HideUserList: false,
+       HideUserList: null,
        CallPythonScriptSource: null,
 
        _appLoadedConditions: {
@@ -80,7 +80,8 @@ L.Map.WOPI = L.Handler.extend({
                this.UserCanNotWriteRelative = 
!!wopiInfo['UserCanNotWriteRelative'];
                this.EnableInsertRemoteImage = 
!!wopiInfo['EnableInsertRemoteImage'];
                this.EnableShare = !!wopiInfo['EnableShare'];
-               this.HideUserList = !!wopiInfo['HideUserList'];
+               if (wopiInfo['HideUserList'])
+                       this.HideUserList = wopiInfo['HideUserList'].split(',');
 
                this._map.fire('postMessage', {
                        msgId: 'App_LoadingStatus',
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index ef5c11d4b..ebb5acd42 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -498,7 +498,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> 
WopiStorage::getWOPIFileInfo(const Au
     bool userCanNotWriteRelative = true;
     bool enableInsertRemoteImage = false;
     bool enableShare = false;
-    bool hideUserList = false;
+    std::string hideUserList("false");
     WOPIFileInfo::TriState disableChangeTrackingRecord = 
WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState disableChangeTrackingShow = 
WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState hideChangeTrackingControls = 
WOPIFileInfo::TriState::Unset;
diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp
index 2b926eb97..fd70515c4 100644
--- a/wsd/Storage.hpp
+++ b/wsd/Storage.hpp
@@ -324,7 +324,7 @@ public:
                      const bool userCanNotWriteRelative,
                      const bool enableInsertRemoteImage,
                      const bool enableShare,
-                     const bool hideUserList,
+                     const std::string& hideUserList,
                      const TriState disableChangeTrackingShow,
                      const TriState disableChangeTrackingRecord,
                      const TriState hideChangeTrackingControls,
@@ -438,8 +438,10 @@ public:
         bool _enableInsertRemoteImage;
         /// If set to true, users can access the file share functionality
         bool _enableShare;
-        /// If set to true, user list on the status bar will be hidden
-        bool _hideUserList;
+        /// If set to "true", user list on the status bar will be hidden
+        /// If set to "mobile" | "tablet" | "desktop", will be hidden on a 
specified device
+        /// (may be joint, delimited by commas eg. "mobile,tablet")
+        std::string _hideUserList;
         /// 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 069ec7495e4ccee952547b4f3a773a8c4a9ed9b0
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Dec 12 11:05:31 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Dec 15 15:07:06 2018 +0100

    WOPI: Added HideUserList to CheckFileInfo
    
    Change-Id: Id0f9597d52fb339162a9ce4f622aa39694d1a25e
    (cherry picked from commit f6266188822ffc2c300932cdbf2f4681f6cb4321)

diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index f1d8c611f..0b2918571 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -1196,8 +1196,8 @@ function initNormalToolbar(toolItems) {
                                {type: 'html',  id: 'left'},
                                {type: 'html',  id: 'right'},
                                {type: 'html',    id: 'modifiedstatuslabel', 
html: '<div id="modifiedstatuslabel" class="loleaflet-font"></div>', 
mobile:false},
-                               {type: 'break', id: 'modifiedstatuslabelbreak', 
mobile:false},
-                               {type: 'drop', id: 'userlist', hidden: true, 
text: _('No users'), html: '<div id="userlist_container"><table 
id="userlist_table"><tbody></tbody></table>' +
+                               {type: 'break', id: 'modifiedstatuslabelbreak', 
mobile: false},
+                               {type: 'drop', id: 'userlist', img: 'users', 
hidden: true, html: '<div id="userlist_container"><table 
id="userlist_table"><tbody></tbody></table>' +
                                        '<hr><table class="loleaflet-font" 
id="editor-btn">' +
                                        '<tr>' +
                                        '<td><input type="checkbox" 
name="alwaysFollow" id="follow-checkbox" onclick="editorUpdate(event)"></td>' +
@@ -1207,7 +1207,7 @@ function initNormalToolbar(toolItems) {
                                        '<p id="currently-msg">' + _('Current') 
+ ' - <b><span id="current-editor"></span></b></p>' +
                                        '</div>'
                                },
-                               {type: 'break', id: 'userlistbreak'},
+                               {type: 'break', id: 'userlistbreak', hidden: 
true, mobile: false },
                                {type: 'button',  id: 'prev', img: 'prev', 
hint: _UNO('.uno:PageUp', 'text')},
                                {type: 'button',  id: 'next', img: 'next', 
hint: _UNO('.uno:PageDown', 'text')},
                                {type: 'break', id: 'prevnextbreak'},
@@ -1240,6 +1240,15 @@ function initNormalToolbar(toolItems) {
                                $('#tb_actionbar_item_userlist 
.w2ui-tb-caption').addClass('loleaflet-font');
                                $('#search-input').off('input', 
onSearch).on('input', onSearch);
                                $('#search-input').off('keydown', 
onSearchKeyDown).on('keydown', onSearchKeyDown);
+
+                               if (this.get('userlist').hidden == true && 
map['wopi'].HideUserList === false) {
+                                       this.show('userlist');
+                                       this.show('userlistbreak');
+                               }
+                               else if (this.get('userlist').hidden == false 
&& map['wopi'].HideUserList === true) {
+                                       this.hide('userlist');
+                                       this.hide('userlistbreak');
+                               }
                        }
                });
        }
@@ -1253,6 +1262,12 @@ function initNormalToolbar(toolItems) {
        toolbar.bind('touchstart', function() {
                w2ui['actionbar'].touchStarted = true;
        });
+
+       if (map['wopi'].HideUserList === false) {
+               map.on('deselectuser', deselectUser);
+               map.on('addview', onAddView);
+               map.on('removeview', onRemoveView);
+       }
 }
 
 var userJoinedPopupMessage = '<div>' + _('%user has joined') + '</div>';
@@ -1587,34 +1602,49 @@ function onDocLayerInit() {
 
                if (!_inMobileMode()) {
                        statusbar.insert('left', [
-                               {type: 'break', id:'break1'},
-                               {type: 'html',  id: 'StatusDocPos',
-                                       html: '<div id="StatusDocPos" 
class="loleaflet-font" title="'+_('Number of Sheets')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break2'},
-                               {type: 'html',  id: 'RowColSelCount',
-                                       html: '<div id="RowColSelCount" 
class="loleaflet-font" title="'+_('Selected range of cells')+ '" 
style="padding: 5px 5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break3'},
-                               {type: 'html',  id: 'InsertMode', mobile: false,
-                                       html: '<div id="InsertMode" 
class="loleaflet-font" title="'+_('Entering text mode')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break4'},
-                               {type: 'html',  id: 'LanguageStatus', mobile: 
false,
-                                       html: '<div id="LanguageStatus" 
class="loleaflet-font" title="'+_('Text Language')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break5'},
-                               {type: 'html',  id: 'StatusSelectionMode', 
mobile: false,
-                                       html: '<div id="StatusSelectionMode" 
class="loleaflet-font" title="'+_('Selection Mode')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break8', mobile: false},
-                               {type: 'html',  id: 'StateTableCell', 
mobile:false,
-                                html: '<div id="StateTableCell" 
class="loleaflet-font" title="'+_('Choice of functions')+ '" style="padding: 
5px 5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'menu-check', id: 'StateTableCellMenu', 
caption: '', selected: ['2', '512'], items: [
-                                       { id: '2', text: _('Average')},
-                                       { id: '8', text: _('CountA')},
-                                       { id: '4', text: _('Count')},
-                                       { id: '16', text: _('Maximum')},
-                                       { id: '32', text: _('Minimum')},
-                                       { id: '512', text: _('Sum')},
-                                       { id: '8192', text: _('Selection 
count')},
-                                       { id: '1', text: _('None')}
-                               ]}
+                               {type: 'break', id: 'break1'},
+                               {
+                                       type: 'html', id: 'StatusDocPos',
+                                       html: '<div id="StatusDocPos" 
class="loleaflet-font" title="' + _('Number of Sheets') + '" style="padding: 
5px 5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break2'},
+                               {
+                                       type: 'html', id: 'RowColSelCount',
+                                       html: '<div id="RowColSelCount" 
class="loleaflet-font" title="' + _('Selected range of cells') + '" 
style="padding: 5px 5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break3'},
+                               {
+                                       type: 'html', id: 'InsertMode', mobile: 
false,
+                                       html: '<div id="InsertMode" 
class="loleaflet-font" title="' + _('Entering text mode') + '" style="padding: 
5px 5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break4'},
+                               {
+                                       type: 'html', id: 'LanguageStatus', 
mobile: false,
+                                       html: '<div id="LanguageStatus" 
class="loleaflet-font" title="' + _('Text Language') + '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break5'},
+                               {
+                                       type: 'html', id: 
'StatusSelectionMode', mobile: false,
+                                       html: '<div id="StatusSelectionMode" 
class="loleaflet-font" title="' + _('Selection Mode') + '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break8', mobile: false},
+                               {
+                                       type: 'html', id: 'StateTableCell', 
mobile: false,
+                                       html: '<div id="StateTableCell" 
class="loleaflet-font" title="' + _('Choice of functions') + '" style="padding: 
5px 5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {
+                                       type: 'menu-check', id: 
'StateTableCellMenu', caption: '', selected: ['2', '512'], items: [
+                                               {id: '2', text: _('Average')},
+                                               {id: '8', text: _('CountA')},
+                                               {id: '4', text: _('Count')},
+                                               {id: '16', text: _('Maximum')},
+                                               {id: '32', text: _('Minimum')},
+                                               {id: '512', text: _('Sum')},
+                                               {id: '8192', text: _('Selection 
count')},
+                                               {id: '1', text: _('None')}
+                                       ]
+                               },
+                               {type: 'break', id: 'break8', mobile: false}
                        ]);
 
                        $('#spreadsheet-toolbar').show();
@@ -1630,20 +1660,31 @@ function onDocLayerInit() {
                if (!_inMobileMode()) {
                        statusbar.insert('left', [
                                {type: 'break', id: 'break1'},
-                               {type: 'html',  id: 'StatePageNumber',
-                                       html: '<div id="StatePageNumber" 
class="loleaflet-font" title="'+_('Number of Pages')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break2'},
-                               {type: 'html',  id: 'StateWordCount', mobile: 
false,
-                                       html: '<div id="StateWordCount" 
class="loleaflet-font" title="'+_('Word Counter')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break5', mobile: false},
-                               {type: 'html',  id: 'InsertMode', mobile: false,
-                                       html: '<div id="InsertMode" 
class="loleaflet-font" title="'+_('Entering text mode')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break6', mobile:false},
-                               {type: 'html',  id: 'StatusSelectionMode', 
mobile: false,
-                                       html: '<div id="StatusSelectionMode" 
class="loleaflet-font" title="'+_('Selection Mode')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' },
-                               {type: 'break', id:'break7', mobile:false},
-                               {type: 'html',  id: 'LanguageStatus', mobile: 
false,
-                                       html: '<div id="LanguageStatus" 
class="loleaflet-font" title="'+_('Text Language')+ '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>' }
+                               {
+                                       type: 'html', id: 'StatePageNumber',
+                                       html: '<div id="StatePageNumber" 
class="loleaflet-font" title="' + _('Number of Pages') + '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break2'},
+                               {
+                                       type: 'html', id: 'StateWordCount', 
mobile: false,
+                                       html: '<div id="StateWordCount" 
class="loleaflet-font" title="' + _('Word Counter') + '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break5', mobile: false},
+                               {
+                                       type: 'html', id: 'InsertMode', mobile: 
false,
+                                       html: '<div id="InsertMode" 
class="loleaflet-font" title="' + _('Entering text mode') + '" style="padding: 
5px 5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break6', mobile: false},
+                               {
+                                       type: 'html', id: 
'StatusSelectionMode', mobile: false,
+                                       html: '<div id="StatusSelectionMode" 
class="loleaflet-font" title="' + _('Selection Mode') + '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break7', mobile: false},
+                               {
+                                       type: 'html', id: 'LanguageStatus', 
mobile: false,
+                                       html: '<div id="LanguageStatus" 
class="loleaflet-font" title="' + _('Text Language') + '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
+                               },
+                               {type: 'break', id: 'break8', mobile: false}
                        ]);
                }
 
@@ -1664,7 +1705,8 @@ function onDocLayerInit() {
                                {
                                        type: 'html', id: 'LanguageStatus', 
mobile: false,
                                        html: '<div id="LanguageStatus" 
class="loleaflet-font" title="' + _('Text Language') + '" style="padding: 5px 
5px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>'
-                               }
+                               },
+                               {type: 'break', id: 'break8', mobile: false}
                        ]);
                }
                // FALLTHROUGH intended
diff --git a/loleaflet/src/map/handler/Map.WOPI.js 
b/loleaflet/src/map/handler/Map.WOPI.js
index 7120977d3..088cea644 100644
--- a/loleaflet/src/map/handler/Map.WOPI.js
+++ b/loleaflet/src/map/handler/Map.WOPI.js
@@ -22,6 +22,7 @@ L.Map.WOPI = L.Handler.extend({
        UserCanNotWriteRelative: true,
        EnableInsertRemoteImage: false,
        EnableShare: false,
+       HideUserList: false,
        CallPythonScriptSource: null,
 
        _appLoadedConditions: {
@@ -79,6 +80,7 @@ L.Map.WOPI = L.Handler.extend({
                this.UserCanNotWriteRelative = 
!!wopiInfo['UserCanNotWriteRelative'];
                this.EnableInsertRemoteImage = 
!!wopiInfo['EnableInsertRemoteImage'];
                this.EnableShare = !!wopiInfo['EnableShare'];
+               this.HideUserList = !!wopiInfo['HideUserList'];
 
                this._map.fire('postMessage', {
                        msgId: 'App_LoadingStatus',
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 531cf9e74..2ea017bc2 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -552,6 +552,7 @@ bool DocumentBroker::load(const 
std::shared_ptr<ClientSession>& session, const s
         wopiInfo->set("UserCanNotWriteRelative", 
wopifileinfo->getUserCanNotWriteRelative());
         wopiInfo->set("EnableInsertRemoteImage", 
wopifileinfo->getEnableInsertRemoteImage());
         wopiInfo->set("EnableShare", wopifileinfo->getEnableShare());
+        wopiInfo->set("HideUserList", wopifileinfo->_hideUserList);
         if (wopifileinfo->getHideChangeTrackingControls() != 
WopiStorage::WOPIFileInfo::TriState::Unset)
             wopiInfo->set("HideChangeTrackingControls", 
wopifileinfo->getHideChangeTrackingControls() == 
WopiStorage::WOPIFileInfo::TriState::True);
 
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 11c658b65..ef5c11d4b 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -498,6 +498,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> 
WopiStorage::getWOPIFileInfo(const Au
     bool userCanNotWriteRelative = true;
     bool enableInsertRemoteImage = false;
     bool enableShare = false;
+    bool hideUserList = false;
     WOPIFileInfo::TriState disableChangeTrackingRecord = 
WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState disableChangeTrackingShow = 
WOPIFileInfo::TriState::Unset;
     WOPIFileInfo::TriState hideChangeTrackingControls = 
WOPIFileInfo::TriState::Unset;
@@ -578,6 +579,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> 
WopiStorage::getWOPIFileInfo(const Au
         JsonUtil::findJSONValue(object, "UserCanNotWriteRelative", 
userCanNotWriteRelative);
         JsonUtil::findJSONValue(object, "EnableInsertRemoteImage", 
enableInsertRemoteImage);
         JsonUtil::findJSONValue(object, "EnableShare", enableShare);
+        JsonUtil::findJSONValue(object, "HideUserList", hideUserList);
         bool booleanFlag = false;
         if (JsonUtil::findJSONValue(object, "DisableChangeTrackingRecord", 
booleanFlag))
             disableChangeTrackingRecord = (booleanFlag ? 
WOPIFileInfo::TriState::True : WOPIFileInfo::TriState::False);
@@ -606,7 +608,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> 
WopiStorage::getWOPIFileInfo(const Au
          postMessageOrigin, hidePrintOption, hideSaveOption, hideExportOption,
          enableOwnerTermination, disablePrint, disableExport, disableCopy,
          disableInactiveMessages, userCanNotWriteRelative, 
enableInsertRemoteImage, enableShare,
-         disableChangeTrackingShow, disableChangeTrackingRecord,
+         hideUserList, disableChangeTrackingShow, disableChangeTrackingRecord,
          hideChangeTrackingControls, callDuration}));
 }
 
diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp
index 77a2f675b..2b926eb97 100644
--- a/wsd/Storage.hpp
+++ b/wsd/Storage.hpp
@@ -324,6 +324,7 @@ public:
                      const bool userCanNotWriteRelative,
                      const bool enableInsertRemoteImage,
                      const bool enableShare,
+                     const bool hideUserList,
                      const TriState disableChangeTrackingShow,
                      const TriState disableChangeTrackingRecord,
                      const TriState hideChangeTrackingControls,
@@ -345,6 +346,7 @@ public:
               _userCanNotWriteRelative(userCanNotWriteRelative),
               _enableInsertRemoteImage(enableInsertRemoteImage),
               _enableShare(enableShare),
+              _hideUserList(hideUserList),
               _disableChangeTrackingShow(disableChangeTrackingShow),
               _disableChangeTrackingRecord(disableChangeTrackingRecord),
               _hideChangeTrackingControls(hideChangeTrackingControls),
@@ -432,10 +434,12 @@ 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
+        /// 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
+        /// If set to true, users can access the file share functionality
         bool _enableShare;
+        /// If set to true, user list on the status bar will be hidden
+        bool _hideUserList;
         /// 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 6b0f703e7b55c4c03cbd0eaae142cd46e55a35b3
Author:     Tamás Zolnai <tamas.zol...@collabora.com>
AuthorDate: Fri Dec 14 17:59:00 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Dec 15 15:06:58 2018 +0100

    Handle Special character toolbar item state correctly
    
    The toolbar item should have the same names as the UNO command in lower 
case.
    
    Change-Id: I68264e7d58cca829084965fb5ea9686a85ccd9cd
    (cherry picked from commit 209e1cd7eef466a75b3360b819078112720a47e6)

diff --git a/loleaflet/css/toolbar.css b/loleaflet/css/toolbar.css
index 53d5b7490..59aa34953 100644
--- a/loleaflet/css/toolbar.css
+++ b/loleaflet/css/toolbar.css
@@ -562,7 +562,7 @@ button.leaflet-control-search-next
 .w2ui-icon.inserttable{ background: url('images/lc_inserttable.svg') no-repeat 
center !important; }
 .w2ui-icon.insertgraphic{ background: url('images/lc_gallery.svg') no-repeat 
center !important; }
 .w2ui-icon.link{ background: url('images/lc_inserthyperlink.svg') no-repeat 
center !important; }
-.w2ui-icon.specialcharacter{ background: url('images/lc_insertsymbol.svg') 
no-repeat center !important; }
+.w2ui-icon.insertsymbol{ background: url('images/lc_insertsymbol.svg') 
no-repeat center !important; }
 .w2ui-icon.edit{ background: url('images/lc_editdoc.svg') no-repeat center 
!important; }
 .w2ui-icon.fold{ background: url('images/fold.svg') no-repeat center 
!important; }
 .w2ui-icon.unfold{ background: url('images/unfold.svg') no-repeat center 
!important; }
diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index 2895ea858..f1d8c611f 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -829,7 +829,7 @@ function createToolbar() {
                        html: '<div id="insertshape-wrapper"><div 
id="insertshape-popup" class="insertshape-pop ui-widget ui-corner-all"><div 
class="insertshape-grid"></div></div></div>'},
 
                {type: 'button',  id: 'link',  img: 'link', hint: 
_UNO('.uno:HyperlinkDialog'), uno: 'HyperlinkDialog', disabled: true},
-               {type: 'button',  id: 'specialcharacter', img: 
'specialcharacter', hint: _UNO('.uno:InsertSymbol', '', true), uno: 
'.uno:InsertSymbol'},
+               {type: 'button',  id: 'insertsymbol', img: 'insertsymbol', 
hint: _UNO('.uno:InsertSymbol', '', true), uno: 'InsertSymbol'},
                {type: 'spacer'},
                {type: 'button',  id: 'edit',  img: 'edit'},
                {type: 'button',  id: 'fold',  img: 'fold', mobile: false},
diff --git a/test/httpwstest.cpp b/test/httpwstest.cpp
index d3427d2bd..e86bec22c 100644
--- a/test/httpwstest.cpp
+++ b/test/httpwstest.cpp
@@ -2152,6 +2152,7 @@ void HTTPWSTest::testStateUnoCommandImpress()
         ".uno:PageStatus=",
         ".uno:LayoutStatus=",
         ".uno:Context=",
+        ".uno:InsertSymbol=",
     };
 
     try
commit 7f14283d96f747f382a63a258a5e9e3e5d686a5f
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Tue Dec 11 00:26:17 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Dec 15 15:05:43 2018 +0100

    Fix toolbars position
    
    Change-Id: Ib48bc53ebb5230f198de27d80ecffd3e0c4eec2f
    (cherry picked from commit 30c06fab3332fc19a0348b27bb9f5aa7bab9b570)

diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css
index bda949c39..fefaab466 100644
--- a/loleaflet/css/loleaflet.css
+++ b/loleaflet/css/loleaflet.css
@@ -8,8 +8,12 @@
        left: 0px;
 }
 
+#document-container.tablet {
+       top: 41px;
+}
+
 #document-container.readonly {
-    top: 36px;
+    top: 41px;
 }
 
 #toolbar-wrapper.readonly {
@@ -61,7 +65,7 @@ body {
 }
 
 #presentation-controls-wrapper.readonly {
-    top: 36px;
+    top: 41px;
 }
 
 #toolbar-wrapper {
@@ -113,16 +117,16 @@ body {
        top: 103px !important;
     }
     #document-container.spreadsheet-document.readonly {
-       top: 56px !important;
+       top: 61px !important;
     }
     #document-container {
-       top: 40px;
+       top: 41px;
     }
     #spreadsheet-row-column-frame {
        top: 83px !important;
     }
     #spreadsheet-row-column-frame.readonly {
-       top: 36px !important;
+       top: 41px !important;
     }
     #toolbar-hamburger {
        width: 41px;
diff --git a/loleaflet/css/spreadsheet.css b/loleaflet/css/spreadsheet.css
index e445069e7..8d39c9690 100644
--- a/loleaflet/css/spreadsheet.css
+++ b/loleaflet/css/spreadsheet.css
@@ -1,12 +1,19 @@
 #document-container.spreadsheet-document {
         border-top: 1px solid #B6B6B6;
-        top: 136px;
+        top: 137px;
         left: 50px;
         bottom: 68px;
 }
 
 #document-container.spreadsheet-document.readonly {
-        top: 56px;
+       top: 61px;
+}
+
+#document-container.spreadsheet-document.tablet {
+       border-top: 1px solid #B6B6B6;
+       top: 100px;
+       left: 50px;
+       bottom: 68px;
 }
 
 .spreadsheet-tabs-container {
@@ -62,12 +69,16 @@
        position: absolute;
        left: 0;
        right: 0;
-       top: 116px;
+       top: 117px;
        bottom: 65px;
 }
 
 #spreadsheet-row-column-frame.readonly {
-        top: 36px;
+        top: 41px;
+}
+
+#spreadsheet-row-column-frame.tablet {
+       top: 80px;
 }
 
 #spreadsheet-header-corner-container {
diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js
index a25a87b0a..2895ea858 100644
--- a/loleaflet/js/toolbar.js
+++ b/loleaflet/js/toolbar.js
@@ -1702,24 +1702,17 @@ function onDocLayerInit() {
        statusbar.refresh();
 
        if (window.mode.isTablet()) {
-               // calc tablet version needs one more row before folding the 
menu
-               if (window.mode.isTablet() && map._docLayer._docType == 
'spreadsheet') {
-                       var content = $('#document-container');
-                       if (content) {
-                               var diff = 59;
-                               var prevTop = content.css('top');
-                               if (prevTop) {
-                                       prevTop = parseInt(prevTop.slice(0, 
-2)) + diff;
-                               }
-                               else {
-                                       prevTop = 0 + diff;
-                               }
-                               content.css({'top': String(prevTop) + 'px'});
-                       }
-               }
-
                // Fold menubar by default
-               map.toggleMenubar();
+               // FIXME: reuse toogleMenubar / use css
+               $('.main-nav').css({'display': 'none'});
+               $('#closebuttonwrapper').css({'display': 'none'});
+               var obj = $('.fold');
+               obj.removeClass('w2ui-icon fold');
+               obj.addClass('w2ui-icon unfold');
+               $('#document-container').addClass('tablet');
+               $('#spreadsheet-row-column-frame').addClass('tablet');
+               $('#presentation-controls-wrapper').css({'top': '41px'});
+
                $('#tb_editbar_item_fonts').css({'display': 'none'});
                $('#tb_editbar_item_fontsizes').css({'display': 'none'});
        }
diff --git a/loleaflet/src/control/Control.Tabs.js 
b/loleaflet/src/control/Control.Tabs.js
index 6c9b8ae73..494d523c8 100644
--- a/loleaflet/src/control/Control.Tabs.js
+++ b/loleaflet/src/control/Control.Tabs.js
@@ -22,13 +22,15 @@ L.Control.Tabs = L.Control.extend({
                        $('.spreadsheet-tab').contextMenu(e.perm === 'edit');
                }, 1000);
 
-               if (e.perm === 'edit') {
-                       $('.spreadsheet-tabs-container').css('bottom', '33px');
-                       $('#spreadsheet-toolbar').css('bottom', '33px');
-               }
-               else {
-                       $('.spreadsheet-tabs-container').css('bottom', '0px');
-                       $('#spreadsheet-toolbar').css('bottom', '0px');
+               if (window.mode.isMobile() == true) {
+                       if (e.perm === 'edit') {
+                               $('.spreadsheet-tabs-container').css('bottom', 
'33px');
+                               $('#spreadsheet-toolbar').css('bottom', '33px');
+                       }
+                       else {
+                               $('.spreadsheet-tabs-container').css('bottom', 
'0px');
+                               $('#spreadsheet-toolbar').css('bottom', '0px');
+                       }
                }
        },
 
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 4e198e381..0e6e4ec48 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -1416,9 +1416,9 @@ L.Map = L.Evented.extend({
                        obj.removeClass('w2ui-icon unfold');
                        obj.addClass('w2ui-icon fold');
 
-                       
moveObjectVertically($('#spreadsheet-row-column-frame'), 35);
-                       moveObjectVertically($('#document-container'), 35);
-                       
moveObjectVertically($('#presentation-controls-wrapper'), 35);
+                       
moveObjectVertically($('#spreadsheet-row-column-frame'), 36);
+                       moveObjectVertically($('#document-container'), 36);
+                       
moveObjectVertically($('#presentation-controls-wrapper'), 36);
                }
                else {
                        $('.main-nav').css({'display': 'none'});
@@ -1428,9 +1428,9 @@ L.Map = L.Evented.extend({
                        obj.removeClass('w2ui-icon fold');
                        obj.addClass('w2ui-icon unfold');
 
-                       
moveObjectVertically($('#spreadsheet-row-column-frame'), -35);
-                       moveObjectVertically($('#document-container'), -35);
-                       
moveObjectVertically($('#presentation-controls-wrapper'), -35);
+                       
moveObjectVertically($('#spreadsheet-row-column-frame'), -36);
+                       moveObjectVertically($('#document-container'), -36);
+                       
moveObjectVertically($('#presentation-controls-wrapper'), -36);
                }
        }
 });
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to