loleaflet/Makefile.am                                      |    2 
 loleaflet/admin/admin.html                                 |  226 ++++-------
 loleaflet/admin/admin.strings.js                           |    5 
 loleaflet/admin/adminAnalytics.html                        |  155 ++-----
 loleaflet/admin/adminHistory.html                          |   87 ----
 loleaflet/admin/adminLog.html                              |  139 +------
 loleaflet/admin/adminSettings.html                         |  252 ++++++-------
 loleaflet/admin/admintemplate.html                         |  105 +++++
 loleaflet/admin/bootstrap/LICENSE                          |   21 -
 loleaflet/admin/bootstrap/dashboard.css                    |  160 --------
 loleaflet/admin/bootstrap/holder.min.js                    |   13 
 loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.css |   13 
 loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.js  |   24 -
 loleaflet/admin/css/bulma.min.css                          |    1 
 loleaflet/admin/dashboard.css                              |  115 -----
 loleaflet/admin/debug/admin.html                           |  129 ------
 loleaflet/admin/debug/adminAnalytics.html                  |  100 -----
 loleaflet/admin/debug/adminSettings.html                   |  107 -----
 loleaflet/admin/fonts/Montserrat-Regular.ttf               |binary
 loleaflet/admin/fonts/OFL.txt                              |   93 ++++
 loleaflet/admin/main-admin.js                              |    8 
 loleaflet/admin/src/AdminSocketLog.js                      |   17 
 loleaflet/package.json                                     |    1 
 wsd/FileServer.cpp                                         |   22 -
 24 files changed, 546 insertions(+), 1249 deletions(-)

New commits:
commit 5f07429b6b8a61e97b9056027a1ab95be2c5eb7d
Author:     gokaysatir <gokaysa...@collabora.com>
AuthorDate: Thu Jun 4 01:36:46 2020 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Jun 4 12:56:16 2020 +0200

    leaflet: Update admin console & drop bootstrap package.
    
    Change-Id: I9243393693c2464f2e9a4d24cccf9c5f3415e2ef
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/95468
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Tested-by: Jenkins
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am
index 329a96357..b411a4f7c 100644
--- a/loleaflet/Makefile.am
+++ b/loleaflet/Makefile.am
@@ -54,7 +54,7 @@ LOLEAFLET_HTML_DST = $(patsubst 
$(srcdir)/html/%.html,$(DIST_FOLDER)/%.html,$(LO
 LOLEAFLET_WELCOME_SRC = $(shell find $(srcdir)/welcome -name '*.html')
 LOLEAFLET_WELCOME_DST = $(patsubst 
$(srcdir)/welcome/%.html,$(DIST_FOLDER)/welcome/%.html,$(LOLEAFLET_WELCOME_SRC))
 
-LOLEAFLET_ADMIN_SRC = $(shell find $(srcdir)/admin -name '*.html')
+LOLEAFLET_ADMIN_SRC = $(shell find $(srcdir)/admin -name '*.html' -or -name 
'*.css' -or -name '*.ttf' -or -name 'OFL.txt')
 LOLEAFLET_ADMIN_ALL = $(shell find $(srcdir)/admin -name '*')
 LOLEAFLET_ADMIN_DST = $(patsubst 
$(srcdir)/admin/%,$(DIST_FOLDER)/admin/%,$(LOLEAFLET_ADMIN_SRC))
 
diff --git a/loleaflet/admin/admin.html b/loleaflet/admin/admin.html
index 2b60f767b..9f5fc6886 100644
--- a/loleaflet/admin/admin.html
+++ b/loleaflet/admin/admin.html
@@ -1,151 +1,101 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8"/>
-    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1"/>
-    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
-    <meta name="description" content=""/>
-    <meta name="author" content=""/>
+<main>
+  <div class="container">
+    <script>Admin.Overview(host);</script>
 
-    <title>LibreOffice Online - Admin console</title>
+    <h3 class="title 
is-3"><script>document.write(l10nstrings.strDashboard)</script></h3>
 
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
-    <!--[if lt IE 9]>
-      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js";></script>
-      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
-    <![endif]-->
-    <link rel="localizations" 
href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" 
type="application/vnd.oftn.l10n+json"/>
-  </head>
-  <body>
-    <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script>
-    <!--%BRANDING_JS%-->
-    <script>if (typeof brandProductName !== 'undefined') 
{l10nstrings.strProductName = brandProductName}</script>
-    <script>document.title = l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole</script>
-    <script>
-      if (window.location.protocol == "https:") {
-          var host = 'wss://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/';
-      }
-      else {
-          host = 'ws://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/';
-      }
-
-      Admin.Overview(host);
-    </script>
-
-    <nav class="navbar navbar-inverse navbar-fixed-top">
-      <div class="container-fluid">
-        <div class="navbar-header">
-          <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar">
-            <span class="sr-only"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-          </button>
-          <a class="navbar-brand" 
href="#"><script>document.write(l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole)</script></a>
+    <div class="tile is-ancestor has-text-centered">
+      <div class="tile is-parent">
+        <div class="tile is-child has-text-centered">
+          <p 
class="heading"><script>document.write(l10nstrings.strUsersOnline)</script></p>
+          <p class="title" id="active_users_count">0</p>
         </div>
-        <div id="navbar" class="navbar-collapse collapse">
-          <ul class="nav navbar-nav navbar-right">
-            <li><a 
href="adminSettings.html"><script>document.write(l10nstrings.strSettings)</script></a></li>
-          </ul>
+      </div>
+      <div class="tile is-parent">
+        <div class="tile is-child has-text-centered">
+          <p 
class="heading"><script>document.write(l10nstrings.strDocumentsOpened)</script></p>
+          <p class="title" id="active_docs_count">0</p>
         </div>
       </div>
-    </nav>
-
-    <div class="container-fluid">
-      <div class="row">
-        <div class="col-sm-3 col-md-2 sidebar">
-          <ul class="nav nav-sidebar">
-            <li class="active"><a 
href="#"><script>document.write(l10nstrings.strOverview)</script> <span 
class="sr-only"><script>document.write(l10nstrings.strCurrent)</script></span></a></li>
-            <li><a 
href="adminAnalytics.html"><script>document.write(l10nstrings.strAnalytics)</script></a></li>
-            <li><a 
href="adminHistory.html"><script>document.write(l10nstrings.strHistory)</script></a></li>
-            <li><a 
href="adminLog.html"><script>document.write(l10nstrings.strLog)</script></a></li>
-          </ul>
+      <div class="tile is-parent">
+        <div class="tile is-child has-text-centered">
+          <p 
class="heading"><script>document.write(l10nstrings.strMemoryConsumed)</script></p>
+          <p class="title" id="mem_consumed">0</p>
         </div>
-        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
-          <h1 
class="page-header"><script>document.write(l10nstrings.strDashboard)</script></h1>
-
-         <div class="row placeholders">
-           <div class="col-xs-6 col-sm-4 col-md-2 placeholder">
-             <div class="main-data" id="active_users_count">0</div>
-             
<h4><script>document.write(l10nstrings.strUsersOnline)</script></h4>
-           </div>
-           <div class="col-xs-6 col-sm-4 col-md-2 placeholder">
-             <div class="main-data" id="active_docs_count">0</div>
-             
<h4><script>document.write(l10nstrings.strDocumentsOpened)</script></h4>
-           </div>
-           <div class="col-xs-6 col-sm-4 col-md-2 placeholder">
-             <div class="main-data" id="mem_consumed">0</div>
-             
<h4><script>document.write(l10nstrings.strMemoryConsumed)</script></h4>
-           </div>
-           <div class="col-xs-6 col-sm-4 col-md-2 placeholder">
-             <div class="main-data" id="sent_bytes">0</div>
-             <h4><script>document.write(l10nstrings.strSentBytes)</script></h4>
-           </div>
-           <div class="col-xs-6 col-sm-4 col-md-2 placeholder">
-             <div class="main-data" id="recv_bytes">0</div>
-             <h4><script>document.write(l10nstrings.strRecvBytes)</script></h4>
-           </div>
-           <div class="col-xs-6 col-sm-2 placeholder">
-             <div class="main-data" id="uptime">0</div>
-             
<h4><script>document.write(l10nstrings.strServerUptime)</script></h4>
-           </div>
-         </div>
-    <div class="container-fluid">
-      <ul class="nav nav-tabs">
-      <li class="active">
-        <a href="#view1" data-toggle="tab">
-          
<h4><script>document.write(l10nstrings.strDocumentsOpened)</script></h4>
-        </a>
-      </li>
-      <li>
-        <a href="#view2" data-toggle="tab">
-          <h4><script>document.write(l10nstrings.strUsersOnline)</script></h4>
-        </a>
-      </li>
-      </ul>
-
-      <div class="tab-content">
-        <div id="view1" class="active tab-pane table-responsive">
-           <table id="docview" class="table table-striped">
-             <thead>
-                       <tr>
-                         
<th><script>document.write(l10nstrings.strPid)</script></th>
-                         
<th><script>document.write(l10nstrings.strDocument)</script></th>
-                         
<th><script>document.write(l10nstrings.strNumberOfViews)</script></th>
-                         
<th><script>document.write(l10nstrings.strMemoryConsumed)</script></th>
-                         
<th><script>document.write(l10nstrings.strElapsedTime)</script></th>
-                         
<th><script>document.write(l10nstrings.strIdleTime)</script></th>
-                         
<th><script>document.write(l10nstrings.strModified)</script></th>
-                       </tr>
-             </thead>
-             <tbody id="doclist">
-             </tbody>
-           </table>
+      </div>
+      <div class="tile is-parent">
+        <div class="tile is-child has-text-centered">
+          <p 
class="heading"><script>document.write(l10nstrings.strSentBytes)</script></p>
+          <p class="title" id="sent_bytes">0</p>
         </div>
-
-        <div id="view2" class="tab-pane table-responsive">
-          <table id="userview" class="tab-pane table table-striped">
-            <thead>
-              <tr>
-                
<th><script>document.write(l10nstrings.strUserName)</script></th>
-                
<th><script>document.write(l10nstrings.strDocumentNumber)</script></th>
-              </tr>
-            </thead>
-            <tbody id="userlist">
-            </tbody>
-          </table>
+      </div>
+      <div class="tile is-parent">
+        <div class="tile is-child has-text-centered">
+          <p 
class="heading"><script>document.write(l10nstrings.strRecvBytes)</script></p>
+          <p class="title" id="recv_bytes">0</p>
+        </div>
+      </div>
+      <div class="tile is-parent">
+        <div class="tile is-child has-text-centered">
+          <p 
class="heading"><script>document.write(l10nstrings.strServerUptime)</script></p>
+          <p class="title" id="uptime">0</p>
         </div>
       </div>
     </div>
-  </div>
-</div>
 
-    <div id="rowContextMenu" class="dropdown clearfix">
-      <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" 
style="display:block;position:static;margin-bottom:5px;">
-        <li><a tabindex="-1" 
href="#"><script>document.write(l10nstrings.strKill)</script></a></li>
+    <div class="tabs">
+      <ul>
+        <li id="tab-documents-opened" 
class="is-active"><a><script>document.write(l10nstrings.strDocumentsOpened)</script></a></li>
+        <li 
id="tab-users-online"><a><script>document.write(l10nstrings.strUsersOnline)</script></a></li>
       </ul>
     </div>
-<!--%FOOTER%-->
-  </body>
-</html>
+
+    <div class="table-container is-fullwidth" 
id="tab-content-documents-opened" style="display:grid;">
+      <table id="docview" class="table is-fullwidth is-striped is-hoverable 
is-bordered">
+        <thead>
+          <tr>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strPid)</script></th>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strDocument)</script></th>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strNumberOfViews)</script></th>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strMemoryConsumed)</script></th>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strElapsedTime)</script></th>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strIdleTime)</script></th>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strModified)</script></th>
+          </tr>
+        </thead>
+        <tbody id="doclist"></tbody>
+      </table>
+    </div>
+
+    <div class="table-container is-fullwidth" id="tab-content-users-online" 
style="display:none;">
+      <table id="userview" class="table is-bordered is-hoverable is-striped 
is-fullwidth">
+        <thead>
+          <tr>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strUserName)</script></th>
+            <th 
class="has-text-centered"><script>document.write(l10nstrings.strDocumentNumber)</script></th>
+          </tr>
+        </thead>
+        <tbody id="userlist"></tbody>
+      </table>
+    </div>
+  </div>
+</main>
+
+<script>
+  document.getElementById('a-overwiew-mobile').classList.add('is-active');
+  document.getElementById('a-overwiew-tablet').classList.add('is-active');
+
+  document.getElementById('tab-documents-opened').onclick = function() {
+    document.getElementById('tab-documents-opened').className = 'is-active';
+    document.getElementById('tab-users-online').className = '';
+    document.getElementById('tab-content-documents-opened').style.display = 
'grid';
+    document.getElementById('tab-content-users-online').style.display = 'none';
+  }
+
+  document.getElementById('tab-users-online').onclick = function() {
+    document.getElementById('tab-users-online').className = 'is-active';
+    document.getElementById('tab-documents-opened').className = '';
+    document.getElementById('tab-content-users-online').style.display = 'grid';
+    document.getElementById('tab-content-documents-opened').style.display = 
'none';
+  }
+</script>
\ No newline at end of file
diff --git a/loleaflet/admin/admin.strings.js b/loleaflet/admin/admin.strings.js
index 91d90b4f1..492245421 100644
--- a/loleaflet/admin/admin.strings.js
+++ b/loleaflet/admin/admin.strings.js
@@ -42,6 +42,11 @@ l10nstrings.strExpired = _('Expired:');
 l10nstrings.strRefresh = _('Refresh');
 l10nstrings.strShutdown = _('Shutdown Server');
 l10nstrings.strServerUptime = _('Server uptime');
+l10nstrings.strRefreshLog = _('Refresh Log');
+l10nstrings.strSetLogLevels = _('Set Log Levels');
+l10nstrings.strLogLevels = _('Log Levels');
+l10nstrings.strCloseModal = _('Close');
+l10nstrings.strUpdateLogLevels = _('Update Log Levels');
 
 if (module) {
        module.exports = l10nstrings;
diff --git a/loleaflet/admin/adminAnalytics.html 
b/loleaflet/admin/adminAnalytics.html
index af3b6eb31..b03c38777 100644
--- a/loleaflet/admin/adminAnalytics.html
+++ b/loleaflet/admin/adminAnalytics.html
@@ -1,111 +1,64 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
-    <meta name="description" content="">
-    <meta name="author" content="">
+<main>
+  <div class="container">
+    <script>Admin.Analytics(host);</script>
 
-    <title>LibreOffice Online - Admin console</title>
+    <h3 class="title 
is-3"><script>document.write(l10nstrings.strAnalytics)</script></h3>
 
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
-    <!--[if lt IE 9]>
-      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js";></script>
-      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
-    <![endif]-->
-    <link rel="localizations" 
href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" 
type="application/vnd.oftn.l10n+json"/>
-  </head>
-  <body>
-    <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script>
-    <!--%BRANDING_JS%-->
-    <script>if (typeof brandProductName !== 'undefined') 
{l10nstrings.strProductName = brandProductName}</script>
-    <script>document.title = l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole</script>
-    <script>
-        if (window.location.protocol == "https:") {
-           host = 'wss://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/'
-        }
-        else {
-           host = 'ws://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/'
-        }
-
-        var socketAnalytics = Admin.Analytics(host);
-    </script>
+    <div class="tabs">
+      <ul>
+        <li id="tab-documents-opened" class="is-active"><a id="button-memview" 
href="#memview"><script>document.write(l10nstrings.strMemoryGraph)</script></a></li>
+        <li id="tab-users-online"><a id="button-cpuview" 
href="#cpuview"><script>document.write(l10nstrings.strCpuGraph)</script></a></li>
+        <li id="tab-users-online"><a id="button-networkview" 
href="#networkview"><script>document.write(l10nstrings.strNetGraph)</script></a></li>
+      </ul>
+    </div>
 
-    <nav class="navbar navbar-inverse navbar-fixed-top">
-      <div class="container-fluid">
-        <div class="navbar-header">
-          <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar">
-            <span class="sr-only"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-          </button>
-          <a class="navbar-brand" 
href="#"><script>document.write(l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole)</script></a>
-        </div>
-        <div id="navbar" class="navbar-collapse collapse">
-          <ul class="nav navbar-nav navbar-right">
-            <li><a 
href="adminSettings.html"><script>document.write(l10nstrings.strSettings)</script></a></li>
-          </ul>
+    <div id="memview" class="mtabs">
+      <div class="graph-container">
+        <div>
+          <svg id="MemVisualisation" width="1010" height="510"></svg>
         </div>
       </div>
-    </nav>
+    </div>
 
-    <div class="container-fluid">
-      <div class="row">
-        <div class="col-sm-3 col-md-2 sidebar">
-          <ul class="nav nav-sidebar">
-            <li><a 
href="admin.html"><script>document.write(l10nstrings.strOverview)</script></a></li>
-            <li class="active"><a 
href="adminAnalytics.html"><script>document.write(l10nstrings.strAnalytics)</script>
 <span 
class="sr-only"><script>document.write(l10nstrings.strCurrent)</script></span></a></li>
-            <li><a 
href="adminHistory.html"><script>document.write(l10nstrings.strHistory)</script></a></li>
-            <li><a 
href="adminLog.html"><script>document.write(l10nstrings.strLog)</script></a></li>
-          </ul>
+    <div id="cpuview" class="mtabs">
+      <div class="graph-container">
+        <div>
+          <svg id="CpuVisualisation" width="1010" height="510"></svg>
         </div>
-        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
-          <ul class="nav nav-tabs">
-            <li class="active">
-              <a href="#memview" data-toggle="tab">
-                
<h4><script>document.write(l10nstrings.strMemoryGraph)</script></h3>
-              </a>
-            </li>
-            <li>
-              <a href="#cpuview" data-toggle="tab">
-                
<h4><script>document.write(l10nstrings.strCpuGraph)</script></h3>
-              </a>
-            </li>
-            <li>
-              <a href="#networkview" data-toggle="tab">
-                
<h4><script>document.write(l10nstrings.strNetGraph)</script></h3>
-              </a>
-            </li>
-          </ul>
-          <div class="tab-content graph-content">
-            <div id="memview" class="active tab-pane">
-              <div class="graph-container">
-                <div>
-                  <svg id="MemVisualisation" width="1010" height="510"></svg>
-                </div>
-              </div>
-            </div>
-            <div id="cpuview" class="tab-pane">
-              <div class="graph-container">
-                <div>
-                  <svg id="CpuVisualisation" width="1010" height="510"></svg>
-                </div>
-              </div>
-            </div>
-            <div id="networkview" class="tab-pane">
-              <div class="graph-container">
-                <div>
-                  <svg id="NetVisualisation" width="1010" height="510"></svg>
-                </div>
-              </div>
-            </div>
-          </div>
+      </div>
+    </div>
+
+    <div id="networkview" class="mtabs">
+      <div class="graph-container">
+        <div>
+          <svg id="NetVisualisation" width="1010" height="510"></svg>
         </div>
       </div>
     </div>
-<!--%FOOTER%-->
-  </body>
-</html>
+
+  </div>
+</main>
+
+<script>
+  document.getElementById('a-analytics-mobile').classList.add('is-active');
+  document.getElementById('a-analytics-tablet').classList.add('is-active');
+
+  // Switching tabs is done by css rules. We will set "is-active" classes here.
+  document.getElementById('button-memview').onclick = function() {
+    document.getElementById('button-memview').parentNode.className = 
'is-active';
+    document.getElementById('button-cpuview').parentNode.className = '';
+    document.getElementById('button-networkview').parentNode.className = '';
+  }
+
+  document.getElementById('button-cpuview').onclick = function() {
+    document.getElementById('button-memview').parentNode.className = '';
+    document.getElementById('button-cpuview').parentNode.className = 
'is-active';
+    document.getElementById('button-networkview').parentNode.className = '';
+  }
+
+  document.getElementById('button-networkview').onclick = function() {
+    document.getElementById('button-memview').parentNode.className = '';
+    document.getElementById('button-cpuview').parentNode.className = '';
+    document.getElementById('button-networkview').parentNode.className = 
'is-active';
+  }
+</script>
\ No newline at end of file
diff --git a/loleaflet/admin/adminHistory.html 
b/loleaflet/admin/adminHistory.html
index ec652011e..f596503b5 100644
--- a/loleaflet/admin/adminHistory.html
+++ b/loleaflet/admin/adminHistory.html
@@ -1,77 +1,20 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
-    <meta name="description" content="">
-    <meta name="author" content="">
+<main>
+  <div class="container">
+    <script>Admin.History(host);</script>
 
-    <title>LibreOffice Online - Admin console</title>
+    <h3 class="title 
is-3"><script>document.write(l10nstrings.strHistory)</script></h3>
 
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
-    <!--[if lt IE 9]>
-      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js";></script>
-      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
-    <![endif]-->
-    <link rel="localizations" 
href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" 
type="application/vnd.oftn.l10n+json"/>
-
-  </head>
-  <body>
-    <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script>
-    <!--%BRANDING_JS%-->
-    <script>if (typeof brandProductName !== 'undefined') 
{l10nstrings.strProductName = brandProductName}</script>
-    <script>document.title = l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole</script>
-    <script>
-        if (window.location.protocol == "https:") {
-           host = 'wss://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/'
-        }
-        else {
-           host = 'ws://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/'
-        }
+    <div class="buttons is-fullwidth is-right">
+      <button class="button is-info" id="refreshHistory" 
style="width:120px;"><script>document.write(l10nstrings.strRefresh)</script></button>
+    </div>
 
-        Admin.History(host)
-    </script>
+    <pre 
id="json-doc"><script>document.write(l10nstrings.strDocuments)</script><br/><textarea
 rows="10" style="width: 100%;resize: vertical;"></textarea></pre>
+    <pre 
id="json-ex-doc"><script>document.write(l10nstrings.strExpired)</script><br/><textarea
 rows="10" style="width: 100%;resize: vertical;"></textarea></pre>
 
-<nav class="navbar navbar-inverse navbar-fixed-top">
-      <div class="container-fluid">
-        <div class="navbar-header">
-          <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar">
-            <span class="sr-only"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-          </button>
-          <a class="navbar-brand" 
href="#"><script>document.write(l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole)</script></a>
-        </div>
-        <div id="navbar" class="navbar-collapse collapse">
-          <ul class="nav navbar-nav navbar-right">
-            <li><a 
href="adminSettings.html"><script>document.write(l10nstrings.strSettings)</script></a></li>
-          </ul>
-        </div>
-      </div>
-    </nav>
-    <div class="container-fluid">
-      <div class="row">
-        <div class="col-sm-3 col-md-2 sidebar">
-          <ul class="nav nav-sidebar">
-            <li><a 
href="admin.html"><script>document.write(l10nstrings.strOverview)</script></a></li>
-            <li><a 
href="adminAnalytics.html"><script>document.write(l10nstrings.strAnalytics)</script></a></li>
-            <li class="active"><a 
href="adminHistory.html"><script>document.write(l10nstrings.strHistory)</script>
 <span 
class="sr-only"><script>document.write(l10nstrings.strCurrent)</script></span></a></li>
-            <li><a 
href="adminLog.html"><script>document.write(l10nstrings.strLog)</script></a></li>
-          </ul>
-        </div>
+  </div>
+</main>
 
-        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
-          <h1 
class="page-header"><script>document.write(l10nstrings.strHistory)</script>
-              <button class="pull-right" 
id="refreshHistory"><script>document.write(l10nstrings.strRefresh)</script></button>
-          </h1>
-            <pre 
id="json-doc"><script>document.write(l10nstrings.strDocuments)</script><br/><textarea
 rows="10" cols="100"></textarea></pre>
-            <pre 
id="json-ex-doc"><script>document.write(l10nstrings.strExpired)</script><br/><textarea
 rows="10" cols="100"></textarea></pre>
-        </div>
-      </div>
-    </div>
-<!--%FOOTER%-->
-  </body>
-</html>
+<script>
+  document.getElementById('a-history-mobile').classList.add('is-active');
+  document.getElementById('a-history-tablet').classList.add('is-active');
+</script>
\ No newline at end of file
diff --git a/loleaflet/admin/adminLog.html b/loleaflet/admin/adminLog.html
index 73036828e..98b884ce4 100644
--- a/loleaflet/admin/adminLog.html
+++ b/loleaflet/admin/adminLog.html
@@ -1,105 +1,42 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8"/>
-    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1"/>
-    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
-    <meta name="description" content=""/>
-    <meta name="author" content=""/>
+<main>
+  <div class="container">
+    <script>Admin.Log(host);</script>
 
-    <title>LibreOffice Online - Admin console</title>
+    <h3 class="title 
is-3"><script>document.write(l10nstrings.strLog)</script></h3>
 
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
-    <!--[if lt IE 9]>
-      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js";></script>
-      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
-    <![endif]-->
-    <link rel="localizations" 
href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" 
type="application/vnd.oftn.l10n+json"/>
-  </head>
-  <body>
-    <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script>
-    <!--%BRANDING_JS%-->
-    <script>if (typeof brandProductName !== 'undefined') 
{l10nstrings.strProductName = brandProductName}</script>
-    <script>document.title = l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole</script>
-    <script>
-      if (window.location.protocol == "https:") {
-          var host = 'wss://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/';
-      }
-      else {
-          host = 'ws://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/';
-      }
-
-      Admin.Log(host)
-    </script>
-
-    <nav class="navbar navbar-inverse navbar-fixed-top">
-      <div class="container-fluid">
-        <div class="navbar-header">
-          <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar">
-            <span class="sr-only"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-          </button>
-          <a class="navbar-brand" 
href="#"><script>document.write(l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole)</script></a>
-        </div>
-        <div id="navbar" class="navbar-collapse collapse">
-          <ul class="nav navbar-nav navbar-right">
-            <li><a 
href="adminSettings.html"><script>document.write(l10nstrings.strSettings)</script></a></li>
-          </ul>
-        </div>
-      </div>
-    </nav>
-
-    <div class="container-fluid">
-      <div class="row">
-        <div class="col-sm-3 col-md-2 sidebar">
-          <ul class="nav nav-sidebar">
-            <li><a 
href="admin.html"><script>document.write(l10nstrings.strOverview)</script> 
<span 
class="sr-only"><script>document.write(l10nstrings.strCurrent)</script></span></a></li>
-            <li><a 
href="adminAnalytics.html"><script>document.write(l10nstrings.strAnalytics)</script></a></li>
-            <li><a 
href="adminHistory.html"><script>document.write(l10nstrings.strHistory)</script></a></li>
-            <li class="active"><a 
href="adminLog.html"><script>document.write(l10nstrings.strLog)</script></a></li>
-          </ul>
-        </div>
-        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
-          <h1 
class="page-header"><script>document.write(l10nstrings.strLog)</script></h1>
-          <div class="form-group text-right" style="width:100%">
-            <button type="button" class="btn btn-primary float-right" 
id="refresh-log" style="width:120px;">Refresh Log</button>
-            <button type="button" id="button-open-log-list-modal" class="btn 
btn-primary float-right" data-toggle="modal" style="width:120px;" 
data-target="#channel-list-modal">Set Log Levels</button>
-          </div>
-          <div class="form-group">
-            <textarea id="log-lines" style="width:100%;height:100%;min-height: 
calc(100vh - 250px);resize:vertical;" readonly="true"></textarea>
-          </div>
-        </div>
-      </div>
+    <div class="buttons is-fullwidth is-right">
+      <button type="button" class="button is-info" id="refresh-log" 
style="width:120px;"><script>document.write(l10nstrings.strRefreshLog)</script></button>
+      <button type="button" id="button-open-log-list-modal" class="button 
is-info" style="width:120px;">
+        <script>document.write(l10nstrings.strSetLogLevels)</script>
+      </button>
     </div>
 
-    <!-- Modal -->
-    <div class="modal fade" id="channel-list-modal" tabindex="-1" 
role="dialog" aria-labelledby="log-level-list-label" aria-hidden="true">
-      <div class="modal-dialog" role="document">
-        <div class="modal-content">
-          <div class="modal-header">
-            <h5 class="modal-title" id="log-level-list-label">
-              <i class="fa fa-spinner fa-spin"></i>
-              Log Levels
-            </h5>
-            <button type="button" class="close" data-dismiss="modal" 
aria-label="Close">
-              <span aria-hidden="true">&times;</span>
-            </button>
-          </div>
-          <div class="modal-body">
-            <form class="form-horizontal" id="form-channel-list" ></form>
-          </div>
-          <div class="modal-footer">
-            <button type="button" class="btn btn-secondary" 
data-dismiss="modal">Close</button>
-            <button type="button" form="form-channel-list" 
id="update-log-levels" class="btn btn-primary">Update Log Levels</button>
-          </div>
-        </div>
-      </div>
-    </div>
-
-
-<!--%FOOTER%-->
-  </body>
-</html>
+    <textarea id="log-lines" style="width:100%;height:100%;min-height: 
calc(100vh - 250px);resize:vertical;" readonly="true"></textarea>
+
+  </div>
+</main>
+
+<div class="modal" id="channel-list-modal">
+  <div class="modal-background" 
onclick="document.getElementById('channel-list-modal').classList.remove('is-active');"></div>
+  <div class="modal-card">
+    <header class="modal-card-head">
+      <p 
class="modal-card-title"><script>document.write(l10nstrings.strLogLevels)</script></p>
+      <button class="delete" 
onclick="document.getElementById('channel-list-modal').classList.remove('is-active');"></button>
+    </header>
+    <section class="modal-card-body">
+      <form class="form-horizontal" id="form-channel-list"></form>
+    </section>
+    <footer class="modal-card-foot is-fullwidth has-text-right">
+        <button type="button" 
onclick="document.getElementById('channel-list-modal').classList.remove('is-active');"
 class="button" style="width:120px;" 
data-dismiss="modal"><script>document.write(l10nstrings.strCloseModal)</script></button>
+        <button type="button" form="form-channel-list" id="update-log-levels" 
class="button is-primary" 
style="width:140px;"><script>document.write(l10nstrings.strUpdateLogLevels)</script></button>
+    </footer>
+  </div>
+</div>
+
+<script>
+  document.getElementById('a-log-mobile').classList.add('is-active');
+  document.getElementById('a-log-tablet').classList.add('is-active');
+  document.getElementById('button-open-log-list-modal').onclick = function() {
+    document.getElementById('channel-list-modal').classList.add('is-active');
+  };
+</script>
\ No newline at end of file
diff --git a/loleaflet/admin/adminSettings.html 
b/loleaflet/admin/adminSettings.html
index 00fb85c53..6d7e4c433 100644
--- a/loleaflet/admin/adminSettings.html
+++ b/loleaflet/admin/adminSettings.html
@@ -1,156 +1,144 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
-    <meta name="description" content="">
-    <meta name="author" content="">
+<main>
+  <div class="container">
+    <script>Admin.Settings(host);</script>
 
-    <title>LibreOffice Online - Admin console</title>
+    <h3 class="title 
is-3"><script>document.write(l10nstrings.strSettings)</script></h3>
 
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
-    <!--[if lt IE 9]>
-      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js";></script>
-      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
-    <![endif]-->
-    <link rel="localizations" 
href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" 
type="application/vnd.oftn.l10n+json"/>
-  </head>
-  <body>
-    <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script>
-    <!--%BRANDING_JS%-->
-    <script>if (typeof brandProductName !== 'undefined') 
{l10nstrings.strProductName = brandProductName}</script>
-    <script>document.title = l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole</script>
-    <script>
-        if (window.location.protocol == "https:") {
-           host = 'wss://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/'
-        }
-        else {
-           host = 'ws://' + window.location.host + 
'%SERVICE_ROOT%/lool/adminws/'
-        }
-
-        Admin.Settings(host);
-    </script>
-
-    <nav class="navbar navbar-inverse navbar-fixed-top">
-      <div class="container-fluid">
-        <div class="navbar-header">
-          <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar">
-            <span class="sr-only"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-          </button>
-          <a class="navbar-brand" 
href="#"><script>document.write(l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole)</script></a>
-        </div>
-        <div id="navbar" class="navbar-collapse collapse">
-          <ul class="nav navbar-nav navbar-right">
-            <li><a 
href="adminSettings.html"><script>document.write(l10nstrings.strSettings)</script></a></li>
-          </ul>
+    <form id="admin_settings">
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strMemoryStatsCachesize)</script></label>
+        </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="mem_stats_size" class="input" 
name="Memory Stats Size" style="max-width:200px;">
+            </div>
+          </div>
         </div>
       </div>
-    </nav>
 
-    <div class="container-fluid">
-      <div class="row">
-        <div class="col-sm-3 col-md-2 sidebar">
-          <ul class="nav nav-sidebar">
-            <li><a 
href="admin.html"><script>document.write(l10nstrings.strOverview)</script> 
<span 
class="sr-only"><script>document.write(l10nstrings.strCurrent)</script></span></a></li>
-            <li><a 
href="adminAnalytics.html"><script>document.write(l10nstrings.strAnalytics)</script></a></li>
-            <li><a 
href="adminHistory.html"><script>document.write(l10nstrings.strHistory)</script></a></li>
-            <li><a 
href="adminLog.html"><script>document.write(l10nstrings.strLog)</script></a></li>
-          </ul>
-          <hr />
-          <div style="position:absolute; bottom:0px">
-            <h3>About</h3>
-            <p>
-              <h5><b>LOOLWSD</b></h5>
-              <div id="loolwsd-version"></div>
-            </p>
-            <p>
-              <h5><b>LOKit</b></h5>
-              <div id="lokit-version"></div>
-            </p>
-          </div>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strMemoryStatsInterval)</script></label>
         </div>
-        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
-          <h1 
class="page-header"><script>document.write(l10nstrings.strSettings)</script></h1>
-          <form id="admin_settings" class="form-horizontal">
-            <div class="form-group">
-              <label for="mem_stats_size" class="col-md-4 control-label">
-                
<script>document.write(l10nstrings.strMemoryStatsCachesize)</script>
-              </label>
-              <div class="col-md-2">
-                <input type="number" id="mem_stats_size" class="form-control" 
name="Memory Stats Size">
-              </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="mem_stats_interval" class="input" 
name="Memory Stats Interval" style="max-width:200px;">
             </div>
+          </div>
+        </div>
+      </div>
 
-            <div class="form-group">
-              <label for="mem_stats_interval" class="col-md-4 control-label">
-                
<script>document.write(l10nstrings.strMemoryStatsInterval)</script>
-              </label>
-              <div class="col-md-2">
-                <input type="number" id="mem_stats_interval" 
class="form-control" name="Memory Stats Interval">
-              </div>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strCpuStatsCachesize)</script></label>
+        </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="cpu_stats_size" class="input" name="Cpu 
Stats Size" style="max-width:200px;">
             </div>
+          </div>
+        </div>
+      </div>
 
-            <div class="form-group">
-              <label for="cpu_stats_size" class="col-md-4 control-label">
-                <script>document.write(l10nstrings.strCpuStatsSize)</script>
-              </label>
-              <div class="col-md-2">
-                <input type="number" id="cpu_stats_size" class="form-control" 
name="Cpu Stats Size">
-              </div>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strCpuStatsInterval)</script></label>
+        </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="cpu_stats_interval" class="input" 
name="Cpu Stats Interval" style="max-width:200px;">
             </div>
+          </div>
+        </div>
+      </div>
 
-            <div class="form-group">
-              <label for="cpu_stats_interval" class="col-md-4 control-label">
-                
<script>document.write(l10nstrings.strCpuStatsInterval)</script>
-              </label>
-              <div class="col-md-2">
-                <input type="number" id="cpu_stats_interval" 
class="form-control" name="Cpu Stats Size">
-              </div>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strLimitVirtMemMb)</script></label>
+        </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="limit_virt_mem_mb" class="input" 
name="Max Document Virtual Memory MB" style="max-width:200px;">
             </div>
+          </div>
+        </div>
+      </div>
 
-            <div class="form-group">
-              <label for="limit_virt_mem_mb" class="col-md-4 control-label">
-                <script>document.write(l10nstrings.strLimitVirtMemMb)</script>
-              </label>
-              <div class="col-md-2">
-                <input type="number" id="limit_virt_mem_mb" 
class="form-control" name="Max Document Virtual Memory MB">
-              </div>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strLimitStackMemKb)</script></label>
+        </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="limit_stack_mem_kb" class="input" 
name="Max Document Stack Memory Kb" style="max-width:200px;">
             </div>
+          </div>
+        </div>
+      </div>
 
-            <div class="form-group">
-              <label for="limit_stack_mem_kb" class="col-md-4 control-label">
-                <script>document.write(l10nstrings.strLimitStackMemKb)</script>
-              </label>
-              <div class="col-md-2">
-                <input type="number" id="limit_stack_mem_kb" 
class="form-control" name="Max Document Stack Memory Kb">
-              </div>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strLimitFileSizeMb)</script></label>
+        </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="limit_file_size_mb" class="input" 
name="Max File Write Size Mb" style="max-width:200px;">
             </div>
+          </div>
+        </div>
+      </div>
 
-            <div class="form-group">
-              <label for="limit_file_size_mb" class="col-md-4 control-label">
-                <script>document.write(l10nstrings.strLimitFileSizeMb)</script>
-              </label>
-              <div class="col-md-2">
-                <input type="number" id="limit_file_size_mb" 
class="form-control" name="Max File Write Size Mb">
-              </div>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label 
class="label"><script>document.write(l10nstrings.strMemoryStatsCachesize)</script></label>
+        </div>
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <input type="number" id="mem_stats_size" class="input" 
name="Memory Stats Size" style="max-width:200px;">
             </div>
+          </div>
+        </div>
+      </div>
 
-            <div class="form-group">
-              <div class="col-md-offset-4 col-md-8">
-                <button type="submit" class="btn 
btn-primary"><script>document.write(l10nstrings.strSave)</script></button>
-              </div>
+      <div class="field is-horizontal">
+        <div class="field-body">
+          <div class="field">
+            <div class="control">
+              <button type="submit" class="button is-primary" 
style="width:120px;"><script>document.write(l10nstrings.strSave)</script></button>
             </div>
-          </form>
-          <br />
-          <button id="btnShutdown" type="submit" class="btn 
btn-danger"><script>document.write(l10nstrings.strShutdown)</script></button>
+          </div>
         </div>
       </div>
+    </form>
+
+    <div class="section">
+      <h4>About</h4>
+      <p>
+        <h5><b>LOOLWSD</b></h5>
+        <div id="loolwsd-version"></div>
+      </p>
+      <p>
+        <h5><b>LOKit</b></h5>
+        <div id="lokit-version"></div>
+      </p>
     </div>
-    <!--%FOOTER%-->
-  </body>
-</html>
+
+    <div class="section is-fullwidth has-text-right">
+      <button id="btnShutdown" type="submit" class="button is-danger" 
style="width:140px;"><script>document.write(l10nstrings.strShutdown)</script></button>
+    </div>
+
+  </div>
+</main>
+
+<script>
+  document.getElementById('a-settings-mobile').classList.add('is-active');
+</script>
\ No newline at end of file
diff --git a/loleaflet/admin/admintemplate.html 
b/loleaflet/admin/admintemplate.html
new file mode 100644
index 000000000..9d6225b87
--- /dev/null
+++ b/loleaflet/admin/admintemplate.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    <meta name="description" content=""/>
+    <meta name="author" content=""/>
+    <link rel="localizations" 
href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" 
type="application/vnd.oftn.l10n+json"/>
+
+    <title>LibreOffice Online - Admin console</title>
+    <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script>
+    <link rel=StyleSheet 
href="%SERVICE_ROOT%/loleaflet/%VERSION%/admin/css/bulma.min.css" 
type="text/css" />
+
+    <style>
+        @font-face {
+        font-family: "Montserrat";
+            src: 
url("%SERVICE_ROOT%/loleaflet/%VERSION%/admin/fonts/Montserrat-Regular.ttf") 
format("truetype");
+        }
+
+        html, body {
+            font-family: 'Montserrat', sans-serif;
+        }
+        div:target.mtabs {
+           display: block;
+        }
+        div.mtabs {
+            display: none
+        }
+    </style>
+</head>
+<body>
+    <!--%BRANDING_JS%-->
+    <script>
+        if (typeof brandProductName !== 'undefined') 
{l10nstrings.strProductName = brandProductName}
+        document.title = l10nstrings.strProductName + ' - ' + 
l10nstrings.strAdminConsole;
+        var host = (window.location.protocol === 'https:' ? 'wss://': 'ws://') 
+ window.location.host + '%SERVICE_ROOT%/lool/adminws/';
+    </script>
+
+    <div class="is-fullwidth has-text-white" 
style="height:62px;background-color:#17191E;line-height:50px;">
+        <a 
style="margin-left:12px;color:#9D998D;"><script>document.write(l10nstrings.strProductName
 + ' - ' + l10nstrings.strAdminConsole)</script></a>
+        <a style="margin-right:12px;color:#9D998D;" id="a-settings-tablet" 
href="adminSettings.html" class="is-hidden-mobile 
is-pulled-right"><script>document.write(l10nstrings.strSettings)</script></a>
+        <div class="dropdown is-hoverable is-right is-pulled-right 
is-hidden-tablet" style="margin-right:12px;">
+            <div class="dropdown-trigger">
+                <button class="button has-text-white" aria-haspopup="true" 
aria-controls="dropdown-menu1" 
style="width:40px;background-color:#17191E;border:none;">
+                <span>&#9776;</span>
+                <span class="icon is-small">
+                    <i class="fas fa-angle-down" aria-hidden="true"></i>
+                </span>
+                </button>
+            </div>
+            <div class="dropdown-menu" id="dropdown-menu1" role="menu">
+                <div class="dropdown-content">
+                    <div class="dropdown-item">
+                        <div class="list is-hoverable" style="height:100%;">
+                            <a id="a-overwiew-mobile" class="list-item" 
href="admin.html"><script>document.write(l10nstrings.strOverview)</script></a>
+                            <a id="a-analytics-mobile" class="list-item" 
href="adminAnalytics.html#memview"><script>document.write(l10nstrings.strAnalytics)</script></a>
+                            <a id="a-history-mobile" class="list-item" 
href="adminHistory.html"><script>document.write(l10nstrings.strHistory)</script></a>
+                            <a id="a-log-mobile" class="list-item" 
href="adminLog.html"><script>document.write(l10nstrings.strLog)</script></a>
+                            <a id="a-settings-mobile" class="list-item" 
href="adminSettings.html"><script>document.write(l10nstrings.strSettings)</script></a>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="columns is-fullwidth" style="height:calc(100vh - 
70px);background-color: #F5F5F5;">
+        <nav class="column is-hidden-mobile is-narrow" id="column-admin-panel" 
style="width:225px;">
+            <div class="list is-hoverable" style="height:100%;">
+                <a class="list-item" id="button-admin-panel-collapse" 
href="#">&larr;</a>
+                <a id="a-overwiew-tablet" class="list-item" 
href="admin.html"><script>document.write(l10nstrings.strOverview)</script></a>
+                <a id="a-analytics-tablet" class="list-item" 
href="adminAnalytics.html#memview"><script>document.write(l10nstrings.strAnalytics)</script></a>
+                <a id="a-history-tablet" class="list-item" 
href="adminHistory.html"><script>document.write(l10nstrings.strHistory)</script></a>
+                <a id="a-log-tablet" class="list-item" 
href="adminLog.html"><script>document.write(l10nstrings.strLog)</script></a>
+            </div>
+        </nav>
+        <div class="column is-narrow is-hidden-mobile" 
id="column-admin-panel-expand" style="width:70px;display:none;">
+            <div class="list is-hoverable">
+                <a class="list-item" id="button-admin-panel-expand" 
href="#">&rarr;</a>
+            </div>
+        </div>
+        <div class="column">
+            <!--%MAIN_CONTENT%-->
+        </div>
+    </div>
+
+<script>
+    window.addEventListener('load', function() {
+        document.getElementById('button-admin-panel-expand').onclick = 
function() {
+            document.getElementById('column-admin-panel').style.display = 
'block';
+            document.getElementById('column-admin-panel-expand').style.display 
= 'none';
+        };
+
+        document.getElementById('button-admin-panel-collapse').onclick = 
function() {
+            document.getElementById('column-admin-panel').style.display = 
'none';
+            document.getElementById('column-admin-panel-expand').style.display 
= 'block';
+        };
+    });
+</script>
+
+    <!--%FOOTER%-->
+</body>
+</html>
\ No newline at end of file
diff --git a/loleaflet/admin/bootstrap/LICENSE 
b/loleaflet/admin/bootstrap/LICENSE
deleted file mode 100644
index f4c52d6a4..000000000
--- a/loleaflet/admin/bootstrap/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2011-2015 Twitter, Inc
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/loleaflet/admin/bootstrap/dashboard.css 
b/loleaflet/admin/bootstrap/dashboard.css
deleted file mode 100644
index 956de7f5d..000000000
--- a/loleaflet/admin/bootstrap/dashboard.css
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Base structure
- */
-
-/* Move down content because we have a fixed navbar that is 50px tall */
-body {
-  padding-top: 50px;
-}
-
-
-/*
- * Global add-ons
- */
-
-.sub-header {
-  padding-bottom: 10px;
-  border-bottom: 1px solid #eee;
-}
-
-/*
- * Top navigation
- * Hide default border to remove 1px line.
- */
-.navbar-fixed-top {
-  border: 0;
-}
-
-/*
- * Sidebar
- */
-
-/* Hide for mobile, show later */
-.sidebar {
-  display: none;
-}
-@media (min-width: 768px) {
-  .sidebar {
-    position: fixed;
-    top: 51px;
-    bottom: 0;
-    left: 0;
-    z-index: 1000;
-    display: block;
-    padding: 20px;
-    overflow-x: hidden;
-    overflow-y: auto; /* Scrollable contents if viewport is shorter than 
content. */
-    background-color: #f5f5f5;
-    border-right: 1px solid #eee;
-  }
-}
-
-/* Sidebar navigation */
-.nav-sidebar {
-  margin-right: -21px; /* 20px padding + 1px border */
-  margin-bottom: 20px;
-  margin-left: -20px;
-}
-.nav-sidebar > li > a {
-  padding-right: 20px;
-  padding-left: 20px;
-}
-.nav-sidebar > .active > a,
-.nav-sidebar > .active > a:hover,
-.nav-sidebar > .active > a:focus {
-  color: #fff;
-  background-color: #428bca;
-}
-
-
-/*
- * Main content
- */
-
-.main {
-  padding: 20px;
-}
-@media (min-width: 768px) {
-  .main {
-    padding-right: 40px;
-    padding-left: 40px;
-  }
-}
-.main .page-header {
-  margin-top: 0;
-}
-
-
-/*
- * Placeholder dashboard ideas
- */
-
-.placeholders {
-  margin-bottom: 30px;
-  text-align: center;
-}
-.placeholders h4 {
-  margin-bottom: 0;
-}
-.placeholder {
-  margin-bottom: 20px;
-}
-.placeholder .main-data {
-  display: inline-block;
-  border-radius: 50%;
-  font-size: 35px;
-  font-weight: bold;
-}
-
-/*
- * Custom
- */
-
-#rowContextMenu {
-  position: absolute;
-  display: none;
-}
-.userContainer, .docContainer{
-  position: absolute;
-}
-tr:hover .userContainer .dropdown-menu, td:hover .docContainer .dropdown-menu{
-  display: block;
-}
-
-/*
- * User list view
- */
-.view-opt-button{
-  border: 1px solid lightgrey;
-  border-radius: 5px;
-  padding: 4px 5px;
-  cursor: pointer;
-  transition: background-color .3s;
-}
-.view-opt-button:hover{
-  background-color: #f5f5f5;
-}
-.selected-view-opt{
-  background-color: #f5f5f5;
-}
-
-/*
- * Graph view buttons
- */
-.nav-tabs > li.active > a{
-  background-color: #f5f5f5;
-}
-.graph-content {
-  background-color: #f5f5f5;
-}
-
-.axis path, .axis line{
-  fill: none;
-  stroke: grey;
-  stroke-width: 1;
-  shape-rendering: crispEdges;
-}
-
-path {
-  stroke-width: 1;
-}
\ No newline at end of file
diff --git a/loleaflet/admin/bootstrap/holder.min.js 
b/loleaflet/admin/bootstrap/holder.min.js
deleted file mode 100644
index 0e79757a1..000000000
--- a/loleaflet/admin/bootstrap/holder.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/* -*- js-indent-level: 8 -*- */
-/*!
-
-Holder - client side image placeholders
-Version 2.6.0+51ebp
-© 2015 Ivan Malopinsky - http://imsky.co
-
-Site:     http://holderjs.com
-Issues:   https://github.com/imsky/holder/issues
-License:  http://opensource.org/licenses/MIT
-
-*/
-!function(a,b){"object"==typeof exports&&"object"==typeof 
module?module.exports=b():"function"==typeof 
define&&define.amd?define(b):"object"==typeof 
exports?exports.Holder=b():a.Holder=b()}(this,function(){return 
function(a){function b(d){if(c[d])return c[d].exports;var 
e=c[d]={exports:{},id:d,loaded:!1};return 
a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return 
b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){(function(b){function d(a,b,c,d){var 
g=e(c.substr(c.lastIndexOf(a.domain)),a);g&&f({mode:null,el:d,flags:g,engineSettings:b})}function
 e(a,b){for(var 
c={theme:y(K.settings.themes.gray,null),stylesheets:b.stylesheets,holderURL:[]},d=!1,e=String.fromCharCode(11),f=a.replace(/([^\\])\//g,"$1"+e).split(e),g=/%[0-9a-f]{2}/gi,h=f.length,i=0;h>i;i++){var
 j=f[i];if(j.match(g))try{j=decodeURIComponent(j)}catch(k){j=f[i]}var 
l=!1;if(K.flags.dimensions.match(j))d=!0,c.dimensions=K.flags.dimensions.output(j),l=!0;else
 if(K.flags.fluid.match(j))d=!0,c.dimensions=K.flags.fluid
 .output(j),c.fluid=!0,l=!0;else 
if(K.flags.textmode.match(j))c.textmode=K.flags.textmode.output(j),l=!0;else 
if(K.flags.colors.match(j)){var 
m=K.flags.colors.output(j);c.theme=y(c.theme,m),l=!0}else 
if(b.themes[j])b.themes.hasOwnProperty(j)&&(c.theme=y(b.themes[j],null)),l=!0;else
 if(K.flags.font.match(j))c.font=K.flags.font.output(j),l=!0;else 
if(K.flags.auto.match(j))c.auto=!0,l=!0;else 
if(K.flags.text.match(j))c.text=K.flags.text.output(j),l=!0;else 
if(K.flags.size.match(j))c.size=K.flags.size.output(j),l=!0;else 
if(K.flags.random.match(j)){null==K.vars.cache.themeKeys&&(K.vars.cache.themeKeys=Object.keys(b.themes));var
 
n=K.vars.cache.themeKeys[0|Math.random()*K.vars.cache.themeKeys.length];c.theme=y(b.themes[n],null),l=!0}l&&c.holderURL.push(j)}return
 
c.holderURL.unshift(b.domain),c.holderURL=c.holderURL.join("/"),d?c:!1}function 
f(a){var 
b=a.mode,c=a.el,d=a.flags,e=a.engineSettings,f=d.dimensions,h=d.theme,i=f.width+"x"+f.height;if(b=null==b?d.fluid?"fluid":"image":b,null!=d.te
 xt&&(h.text=d.text,"object"===c.nodeName.toLowerCase())){for(var 
l=h.text.split("\\n"),m=0;m<l.length;m++)l[m]=A(l[m]);h.text=l.join("\\n")}var 
n=d.holderURL,o=y(e,null);if(d.font&&(h.font=d.font,!o.noFontFallback&&"img"===c.nodeName.toLowerCase()&&K.setup.supportsCanvas&&"svg"===o.renderer&&(o=y(o,{renderer:"canvas"}))),d.font&&"canvas"==o.renderer&&(o.reRender=!0),"background"==b)null==c.getAttribute("data-background-src")&&p(c,{"data-background-src":n});else{var
 
q={};q[K.vars.dataAttr]=n,p(c,q)}d.theme=h,c.holderData={flags:d,engineSettings:o},("image"==b||"fluid"==b)&&p(c,{alt:h.text?h.text+"
 ["+i+"]":i});var 
r={mode:b,el:c,holderSettings:{dimensions:f,theme:h,flags:d},engineSettings:o};"image"==b?("html"!=o.renderer&&d.auto||(c.style.width=f.width+"px",c.style.height=f.height+"px"),"html"==o.renderer?c.style.backgroundColor=h.background:(g(r),"exact"==d.textmode&&(c.holderData.resizeUpdate=!0,K.vars.resizableImages.push(c),j(c)))):"background"==b&&"html"!=o.renderer?g(r):"fluid
 
"==b&&(c.holderData.resizeUpdate=!0,"%"==f.height.slice(-1)?c.style.height=f.height:null!=d.auto&&d.auto||(c.style.height=f.height+"px"),"%"==f.width.slice(-1)?c.style.width=f.width:null!=d.auto&&d.auto||(c.style.width=f.width+"px"),("inline"==c.style.display||""===c.style.display||"none"==c.style.display)&&(c.style.display="block"),k(c),"html"==o.renderer?c.style.backgroundColor=h.background:(K.vars.resizableImages.push(c),j(c)))}function
 g(a){function c(){var 
b=null;switch(i.renderer){case"canvas":b=M(k,a);break;case"svg":b=N(k,a);break;default:throw"Holder:
 invalid renderer: "+i.renderer}return b}var 
d=null,e=a.mode,f=a.holderSettings,g=a.el,i=a.engineSettings;switch(i.renderer){case"svg":if(!K.setup.supportsSVG)return;break;case"canvas":if(!K.setup.supportsCanvas)return;break;default:return}var
 
j={width:f.dimensions.width,height:f.dimensions.height,theme:f.theme,flags:f.flags},k=h(j);if(d=c(),null==d)throw"Holder:
 couldn't render placeholder";"background"==e?(g.style.backgroundI
 mage="url("+d+")",g.style.backgroundSize=j.width+"px 
"+j.height+"px"):("img"===g.nodeName.toLowerCase()?p(g,{src:d}):"object"===g.nodeName.toLowerCase()&&(p(g,{data:d}),p(g,{type:"image/svg+xml"})),i.reRender&&b.setTimeout(function(){var
 a=c();if(null==a)throw"Holder: couldn't render 
placeholder";"img"===g.nodeName.toLowerCase()?p(g,{src:a}):"object"===g.nodeName.toLowerCase()&&(p(g,{data:a}),p(g,{type:"image/svg+xml"}))},100)),p(g,{"data-holder-rendered":!0})}function
 h(a){function 
b(a,b,c,d){b.width=c,b.height=d,a.width=Math.max(a.width,b.width),a.height+=b.height,a.add(b)}var
 
c=K.defaults.size;switch(parseFloat(a.theme.size)?c=a.theme.size:parseFloat(a.flags.size)&&(c=a.flags.size),a.font={family:a.theme.font?a.theme.font:"Arial,
 Helvetica, Open Sans, 
sans-serif",size:i(a.width,a.height,c),units:a.theme.units?a.theme.units:K.defaults.units,weight:a.theme.fontweight?a.theme.fontweight:"bold"},a.text=a.theme.text?a.theme.text:Math.floor(a.width)+"x"+Math.floor(a.height),a.flags.tex
 
tmode){case"literal":a.text=a.flags.dimensions.width+"x"+a.flags.dimensions.height;break;case"exact":if(!a.flags.exactDimensions)break;a.text=Math.floor(a.flags.exactDimensions.width)+"x"+Math.floor(a.flags.exactDimensions.height)}var
 d=new w({width:a.width,height:a.height}),e=d.Shape,f=new 
e.Rect("holderBg",{fill:a.theme.background});f.resize(a.width,a.height),d.root.add(f);var
 g=new 
e.Group("holderTextGroup",{text:a.text,align:"center",font:a.font,fill:a.theme.foreground});g.moveTo(null,null,1),d.root.add(g);var
 h=g.textPositionData=L(d);if(!h)throw"Holder: staging fallback not supported 
yet.";g.properties.leading=h.boundingBox.height;var 
j=null,k=null;if(h.lineCount>1){var 
l=0,m=0,n=a.width*K.setup.lineWrapRatio,o=0;k=new e.Group("line"+o);for(var 
p=0;p<h.words.length;p++){var q=h.words[p];j=new e.Text(q.text);var 
r="\\n"==q.text;(l+q.width>=n||r===!0)&&(b(g,k,l,g.properties.leading),l=0,m+=g.properties.leading,o+=1,k=new
 e.Group("line"+o),k.y=m),r!==!0&&(j.moveTo(l,0),l+=h.space
 Width+q.width,k.add(j))}b(g,k,l,g.properties.leading);for(var s in 
g.children)k=g.children[s],k.moveTo((g.width-k.width)/2,null,null);g.moveTo((a.width-g.width)/2,(a.height-g.height)/2,null),(a.height-g.height)/2<0&&g.moveTo(null,0,null)}else
 j=new e.Text(a.text),k=new 
e.Group("line0"),k.add(j),g.add(k),g.moveTo((a.width-h.boundingBox.width)/2,(a.height-h.boundingBox.height)/2,null);return
 d}function i(a,b,c){var 
d=parseInt(a,10),e=parseInt(b,10),f=Math.max(d,e),g=Math.min(d,e),h=.8*Math.min(g,f*K.defaults.scale);return
 Math.round(Math.max(c,h))}function j(a){var 
b;b=null==a||null==a.nodeType?K.vars.resizableImages:[a];for(var 
c=0,d=b.length;d>c;c++){var e=b[c];if(e.holderData){var 
f=e.holderData.flags,h=E(e);if(h){if(!e.holderData.resizeUpdate)continue;if(f.fluid&&f.auto){var
 
i=e.holderData.fluidConfig;switch(i.mode){case"width":h.height=h.width/i.ratio;break;case"height":h.width=h.height*i.ratio}}var
 
j={mode:"image",holderSettings:{dimensions:h,theme:f.theme,flags:f},el:e,engineSe
 
ttings:e.holderData.engineSettings};"exact"==f.textmode&&(f.exactDimensions=h,j.holderSettings.dimensions=f.dimensions),g(j)}else
 n(e)}}}function k(a){if(a.holderData){var b=E(a);if(b){var 
c=a.holderData.flags,d={fluidHeight:"%"==c.dimensions.height.slice(-1),fluidWidth:"%"==c.dimensions.width.slice(-1),mode:null,initialDimensions:b};d.fluidWidth&&!d.fluidHeight?(d.mode="width",d.ratio=d.initialDimensions.width/parseFloat(c.dimensions.height)):!d.fluidWidth&&d.fluidHeight&&(d.mode="height",d.ratio=parseFloat(c.dimensions.width)/d.initialDimensions.height),a.holderData.fluidConfig=d}else
 n(a)}}function l(){for(var 
a,c=[],d=Object.keys(K.vars.invisibleImages),e=0,f=d.length;f>e;e++)a=K.vars.invisibleImages[d[e]],E(a)&&"img"==a.nodeName.toLowerCase()&&(c.push(a),delete
 
K.vars.invisibleImages[d[e]]);c.length&&J.run({images:c}),b.requestAnimationFrame(l)}function
 
m(){K.vars.visibilityCheckStarted||(b.requestAnimationFrame(l),K.vars.visibilityCheckStarted=!0)}function
 n(a){a.holderData.in
 
visibleId||(K.vars.invisibleId+=1,K.vars.invisibleImages["i"+K.vars.invisibleId]=a,a.holderData.invisibleId=K.vars.invisibleId)}function
 o(a,b){return 
null==b?document.createElement(a):document.createElementNS(b,a)}function 
p(a,b){for(var c in b)a.setAttribute(c,b[c])}function q(a,b,c){var 
d,e;null==a?(a=o("svg",F),d=o("defs",F),e=o("style",F),p(e,{type:"text/css"}),d.appendChild(e),a.appendChild(d)):e=a.querySelector("style"),a.webkitMatchesSelector&&a.setAttribute("xmlns",F);for(var
 
f=0;f<a.childNodes.length;f++)a.childNodes[f].nodeType===G&&a.removeChild(a.childNodes[f]);for(;e.childNodes.length;)e.removeChild(e.childNodes[0]);return
 p(a,{width:b,height:c,viewBox:"0 0 "+b+" 
"+c,preserveAspectRatio:"none"}),a}function r(a,c){if(b.XMLSerializer){var 
d=new XMLSerializer,e="",f=c.stylesheets;if(c.svgXMLStylesheet){for(var 
g=s(),h=f.length-1;h>=0;h--){var 
i=g.createProcessingInstruction("xml-stylesheet",'href="'+f[h]+'" 
rel="stylesheet"');g.insertBefore(i,g.firstChild)}var j=g.createP
 rocessingInstruction("xml",'version="1.0" encoding="UTF-8" 
standalone="yes"');g.insertBefore(j,g.firstChild),g.removeChild(g.documentElement),e=d.serializeToString(g)}var
 k=d.serializeToString(a);return 
k=k.replace(/\&amp;(\#[0-9]{2,}\;)/g,"&$1"),e+k}}function s(){return 
b.DOMParser?(new DOMParser).parseFromString("<xml />","application/xml"):void 
0}function 
t(a){K.vars.debounceTimer||a.call(this),K.vars.debounceTimer&&b.clearTimeout(K.vars.debounceTimer),K.vars.debounceTimer=b.setTimeout(function(){K.vars.debounceTimer=null,a.call(this)},K.setup.debounce)}function
 u(){t(function(){j(null)})}var 
v=c(1),w=c(2),x=c(3),y=x.extend,z=x.cssProps,A=x.encodeHtmlEntity,B=x.decodeHtmlEntity,C=x.imageExists,D=x.getNodeArray,E=x.dimensionCheck,F="http://www.w3.org/2000/svg",G=8,H="2.6.0",I="\nCreated
 with Holder.js "+H+".\nLearn more at http://holderjs.com\n(c) 2012-2015 Ivan 
Malopinsky - http://imsky.co\n",J={version:H,addTheme:function(a,b){return 
null!=a&&null!=b&&(K.settings.themes[a]=b),de
 lete K.vars.cache.themeKeys,this},addImage:function(a,b){var 
c=document.querySelectorAll(b);if(c.length)for(var d=0,e=c.length;e>d;d++){var 
f=o("img"),g={};g[K.vars.dataAttr]=a,p(f,g),c[d].appendChild(f)}return 
this},setResizeUpdate:function(a,b){a.holderData&&(a.holderData.resizeUpdate=!!b,a.holderData.resizeUpdate&&j(a))},run:function(a){a=a||{};var
 
c={},g=y(K.settings,a);K.vars.preempted=!0,K.vars.dataAttr=g.dataAttr||K.vars.dataAttr,c.renderer=g.renderer?g.renderer:K.setup.renderer,-1===K.setup.renderers.join(",").indexOf(c.renderer)&&(c.renderer=K.setup.supportsSVG?"svg":K.setup.supportsCanvas?"canvas":"html");var
 
h=D(g.images),i=D(g.bgnodes),j=D(g.stylenodes),k=D(g.objects);c.stylesheets=[],c.svgXMLStylesheet=!0,c.noFontFallback=g.noFontFallback?g.noFontFallback:!1;for(var
 l=0;l<j.length;l++){var 
m=j[l];if(m.attributes.rel&&m.attributes.href&&"stylesheet"==m.attributes.rel.value){var
 n=m.attributes.href.value,p=o("a");p.href=n;var 
q=p.protocol+"//"+p.host+p.pathname+p.search;c
 .stylesheets.push(q)}}for(l=0;l<i.length;l++)if(b.getComputedStyle){var 
r=b.getComputedStyle(i[l],null).getPropertyValue("background-image"),s=i[l].getAttribute("data-background-src"),t=null;t=null==s?r:s;var
 u=null,v="?"+g.domain+"/";if(0===t.indexOf(v))u=t.slice(1);else 
if(-1!=t.indexOf(v)){var 
w=t.substr(t.indexOf(v)).slice(1),x=w.match(/([^\"]*)"?\)/);null!=x&&(u=x[1])}if(null!=u){var
 
z=e(u,g);z&&f({mode:"background",el:i[l],flags:z,engineSettings:c})}}for(l=0;l<k.length;l++){var
 
A=k[l],B={};try{B.data=A.getAttribute("data"),B.dataSrc=A.getAttribute(K.vars.dataAttr)}catch(E){}var
 
F=null!=B.data&&0===B.data.indexOf(g.domain),G=null!=B.dataSrc&&0===B.dataSrc.indexOf(g.domain);F?d(g,c,B.data,A):G&&d(g,c,B.dataSrc,A)}for(l=0;l<h.length;l++){var
 
H=h[l],I={};try{I.src=H.getAttribute("src"),I.dataSrc=H.getAttribute(K.vars.dataAttr),I.rendered=H.getAttribute("data-holder-rendered")}catch(E){}var
 
J=null!=I.src,L=null!=I.dataSrc&&0===I.dataSrc.indexOf(g.domain),M=null!=I.rendered&&"true"=
 
=I.rendered;J?0===I.src.indexOf(g.domain)?d(g,c,I.src,H):L&&(M?d(g,c,I.dataSrc,H):!function(a,b,c,e,f){C(a,function(a){a||d(b,c,e,f)})}(I.src,g,c,I.dataSrc,H)):L&&d(g,c,I.dataSrc,H)}return
 
this}},K={settings:{domain:"holder.js",images:"img",objects:"object",bgnodes:"body
 .holderjs",stylenodes:"head 
link.holderjs",stylesheets:[],themes:{gray:{background:"#EEEEEE",foreground:"#AAAAAA"},social:{background:"#3a5a97",foreground:"#FFFFFF"},industrial:{background:"#434A52",foreground:"#C2F200"},sky:{background:"#0D8FDB",foreground:"#FFFFFF"},vine:{background:"#39DBAC",foreground:"#1E292C"},lava:{background:"#F8591A",foreground:"#1C2846"}}},defaults:{size:10,units:"pt",scale:1/16},flags:{dimensions:{regex:/^(\d+)x(\d+)$/,output:function(a){var
 
b=this.regex.exec(a);return{width:+b[1],height:+b[2]}}},fluid:{regex:/^([0-9]+%?)x([0-9]+%?)$/,output:function(a){var
 
b=this.regex.exec(a);return{width:b[1],height:b[2]}}},colors:{regex:/(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,output:function
 (a){var 
b=this.regex.exec(a);return{foreground:"#"+b[2],background:"#"+b[1]}}},text:{regex:/text\:(.*)/,output:function(a){return
 
this.regex.exec(a)[1].replace("\\/","/")}},font:{regex:/font\:(.*)/,output:function(a){return
 
this.regex.exec(a)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(a){return
 
this.regex.exec(a)[1]}},random:{regex:/^random$/},size:{regex:/size\:(\d+)/,output:function(a){return
 this.regex.exec(a)[1]}}}},L=function(){var a=null,b=null,c=null;return 
function(d){var e=d.root;if(K.setup.supportsSVG){var f=!1,g=function(a){return 
document.createTextNode(a)};(null==a||a.parentNode!==document.body)&&(f=!0),a=q(a,e.properties.width,e.properties.height),a.style.display="block",f&&(b=o("text",F),c=g(null),p(b,{x:0}),b.appendChild(c),a.appendChild(b),document.body.appendChild(a),a.style.visibility="hidden",a.style.position="absolute",a.style.top="-100%",a.style.left="-100%");var
 h=e.children.holderTextGroup,i=h.properties;p(b,{y:i.font.size,sty
 
le:z({"font-weight":i.font.weight,"font-size":i.font.size+i.font.units,"font-family":i.font.family})}),c.nodeValue=i.text;var
 
j=b.getBBox(),k=Math.ceil(j.width/(e.properties.width*K.setup.lineWrapRatio)),l=i.text.split("
 "),m=i.text.match(/\\n/g);k+=null==m?0:m.length,c.nodeValue=i.text.replace(/[ 
]+/g,"");var 
n=b.getComputedTextLength(),r=j.width-n,s=Math.round(r/Math.max(1,l.length-1)),t=[];if(k>1){c.nodeValue="";for(var
 u=0;u<l.length;u++)if(0!==l[u].length){c.nodeValue=B(l[u]);var 
v=b.getBBox();t.push({text:l[u],width:v.width})}}return 
a.style.display="none",{spaceWidth:s,lineCount:k,boundingBox:j,words:t}}return!1}}(),M=function(){var
 a=o("canvas"),b=null;return function(c){null==b&&(b=a.getContext("2d"));var 
d=c.root;a.width=K.dpr(d.properties.width),a.height=K.dpr(d.properties.height),b.textBaseline="middle",b.fillStyle=d.children.holderBg.properties.fill,b.fillRect(0,0,K.dpr(d.children.holderBg.width),K.dpr(d.children.holderBg.height));{var
 e=d.children.holderTextGroup;e.pro
 perties}b.font=e.properties.font.weight+" 
"+K.dpr(e.properties.font.size)+e.properties.font.units+" 
"+e.properties.font.family+", monospace",b.fillStyle=e.properties.fill;for(var 
f in e.children){var g=e.children[f];for(var h in g.children){var 
i=g.children[h],j=K.dpr(e.x+g.x+i.x),k=K.dpr(e.y+g.y+i.y+e.properties.leading/2);b.fillText(i.properties.text,j,k)}}return
 a.toDataURL("image/png")}}(),N=function(){if(b.XMLSerializer){var 
a=s(),c=q(null,0,0),d=o("rect",F);return c.appendChild(d),function(b,e){var 
f=b.root;q(c,f.properties.width,f.properties.height);for(var 
g=c.querySelectorAll("g"),h=0;h<g.length;h++)g[h].parentNode.removeChild(g[h]);var
 i=e.holderSettings.flags.holderURL,j="holder_"+(Number(new 
Date)+32768+(0|32768*Math.random())).toString(16),k=o("g",F),l=f.children.holderTextGroup,m=l.properties,n=o("g",F),s=l.textPositionData,t="#"+j+"
 text { 
"+z({fill:m.fill,"font-weight":m.font.weight,"font-family":m.font.family+", 
monospace","font-size":m.font.size+m.font.units})+" } 
 ",u=a.createComment("\nSource URL: 
"+i+I),v=a.createCDATASection(t),w=c.querySelector("style");p(k,{id:j}),c.insertBefore(u,c.firstChild),w.appendChild(v),k.appendChild(d),k.appendChild(n),c.appendChild(k),p(d,{width:f.children.holderBg.width,height:f.children.holderBg.height,fill:f.children.holderBg.properties.fill}),l.y+=.8*s.boundingBox.height;for(var
 x in l.children){var y=l.children[x];for(var A in y.children){var 
B=y.children[A],C=l.x+y.x+B.x,D=l.y+y.y+B.y,E=o("text",F),G=document.createTextNode(null);p(E,{x:C,y:D}),G.nodeValue=B.properties.text,E.appendChild(G),n.appendChild(E)}}var
 
H="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(r(c,e.engineSettings))));return
 H}}}();for(var O in 
K.flags)K.flags.hasOwnProperty(O)&&(K.flags[O].match=function(a){return 
a.match(this.regex)});K.setup={renderer:"html",debounce:100,ratio:1,supportsCanvas:!1,supportsSVG:!1,lineWrapRatio:.9,renderers:["html","canvas","svg"]},K.dpr=function(a){return
 a*K.setup.ratio},K.vars={preempted
 
:!1,resizableImages:[],invisibleImages:{},invisibleId:0,visibilityCheckStarted:!1,debounceTimer:null,cache:{},dataAttr:"data-src"},function(){var
 
a=1,c=1,d=o("canvas"),e=null;d.getContext&&-1!=d.toDataURL("image/png").indexOf("data:image/png")&&(K.setup.renderer="canvas",e=d.getContext("2d"),K.setup.supportsCanvas=!0),K.setup.supportsCanvas&&(a=b.devicePixelRatio||1,c=e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),K.setup.ratio=a/c,document.createElementNS&&document.createElementNS(F,"svg").createSVGRect&&(K.setup.renderer="svg",K.setup.supportsSVG=!0)}(),m(),v&&v(function(){K.vars.preempted||J.run(),b.addEventListener?(b.addEventListener("resize",u,!1),b.addEventListener("orientationchange",u,!1)):b.attachEvent("onresize",u),"object"==typeof
 
b.Turbolinks&&b.document.addEventListener("page:change",function(){J.run()})}),a.exports=J}).call(b,function(){return
 this}())},function(a){functi
 on b(a){function b(a){if(!v){if(!g.body)return 
e(b);for(v=!0;a=w.shift();)e(a)}}function 
c(a){(t||a.type===i||g[m]===l)&&(d(),b())}function 
d(){t?(g[s](q,c,j),a[s](i,c,j)):(g[o](r,c),a[o](k,c))}function 
e(a,b){setTimeout(a,+b>=0?b:1)}function 
f(a){v?e(a):w.push(a)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function
 
y(){document.removeEventListener("DOMContentLoaded",y,!1),document.readyState="complete"},!1),document.readyState="loading");var
 
g=a.document,h=g.documentElement,i="load",j=!1,k="on"+i,l="complete",m="readyState",n="attachEvent",o="detachEvent",p="addEventListener",q="DOMContentLoaded",r="onreadystatechange",s="removeEventListener",t=p
 in g,u=j,v=j,w=[];if(g[m]===l)e(b);else 
if(t)g[p](q,c,j),a[p](i,c,j);else{g[n](r,c),a[n](k,c);try{u=null==a.frameElement&&h}catch(x){}u&&u.doScroll&&!function
 z(){if(!v){try{u.doScroll("left")}catch(a){return e(z,50)}d(),b()}}()}return 
f.version="1.4.0",f.isReady=function(){return v},
 f}a.exports="undefined"!=typeof window&&b(window)},function(a,b,c){var 
d=c(4),e=function(a){function b(a,b){for(var c in b)a[c]=b[c];return a}var 
c=1,e=d.defclass({constructor:function(a){c++,this.parent=null,this.children={},this.id=c,this.name="n"+c,null!=a&&(this.name=a),this.x=0,this.y=0,this.z=0,this.width=0,this.height=0},resize:function(a,b){null!=a&&(this.width=a),null!=b&&(this.height=b)},moveTo:function(a,b,c){this.x=null!=a?a:this.x,this.y=null!=b?b:this.y,this.z=null!=c?c:this.z},add:function(a){var
 b=a.name;if(null!=this.children[b])throw"SceneGraph: child with that name 
already exists: 
"+b;this.children[b]=a,a.parent=this}}),f=d(e,function(b){this.constructor=function(){b.constructor.call(this,"root"),this.properties=a}}),g=d(e,function(a){function
 
c(c,d){if(a.constructor.call(this,c),this.properties={fill:"#000"},null!=d)b(this.properties,d);else
 if(null!=c&&"string"!=typeof c)throw"SceneGraph: invalid node 
name"}this.Group=d.extend(this,{constructor:c,type:"group"}),
 
this.Rect=d.extend(this,{constructor:c,type:"rect"}),this.Text=d.extend(this,{constructor:function(a){c.call(this),this.properties.text=a},type:"text"})}),h=new
 f;return 
this.Shape=g,this.root=h,this};a.exports=e},function(a,b){(function(a){b.extend=function(a,b){var
 c={};for(var d in a)a.hasOwnProperty(d)&&(c[d]=a[d]);if(null!=b)for(var e in 
b)b.hasOwnProperty(e)&&(c[e]=b[e]);return c},b.cssProps=function(a){var 
b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+":"+a[c]);return 
b.join(";")},b.encodeHtmlEntity=function(a){for(var 
b=[],c=0,d=a.length-1;d>=0;d--)c=a.charCodeAt(d),b.unshift(c>128?["&#",c,";"].join(""):a[d]);return
 b.join("")},b.getNodeArray=function(b){var c=null;return"string"==typeof 
b?c=document.querySelectorAll(b):a.NodeList&&b instanceof 
a.NodeList?c=b:a.Node&&b instanceof a.Node?c=[b]:a.HTMLCollection&&b instanceof 
a.HTMLCollection?c=b:b instanceof 
Array?c=b:null===b&&(c=[]),c},b.imageExists=function(a,b){var c=new 
Image;c.onerror=function(){b.call(this,!1)},c.on
 
load=function(){b.call(this,!0)},c.src=a},b.decodeHtmlEntity=function(a){return 
a.replace(/&#(\d+);/g,function(a,b){return 
String.fromCharCode(b)})},b.dimensionCheck=function(a){var 
b={height:a.clientHeight,width:a.clientWidth};return 
b.height&&b.width?b:!1}}).call(b,function(){return this}())},function(a){var 
b=function(){},c=Array.prototype.slice,d=function(a,d){var 
e=b.prototype="function"==typeof a?a.prototype:a,f=new 
b,g=d.apply(f,c.call(arguments,2).concat(e));if("object"==typeof g)for(var h in 
g)f[h]=g[h];if(!f.hasOwnProperty("constructor"))return f;var 
i=f.constructor;return i.prototype=f,i};d.defclass=function(a){var 
b=a.constructor;return b.prototype=a,b},d.extend=function(a,b){return 
d(a,function(a){return this.uber=a,b})},a.exports=d}])});
\ No newline at end of file
diff --git a/loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.css 
b/loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.css
deleted file mode 100644
index 4b9518e21..000000000
--- a/loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/*!
- * IE10 viewport hack for Surface/desktop Windows 8 bug
- * Copyright 2014-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*
- * See the Getting Started docs for more information:
- * http://getbootstrap.com/getting-started/#support-ie10-width
- */
-@-ms-viewport     { width: device-width; }
-@-o-viewport      { width: device-width; }
-@viewport         { width: device-width; }
diff --git a/loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.js 
b/loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.js
deleted file mode 100644
index bce8bd8e7..000000000
--- a/loleaflet/admin/bootstrap/ie10-viewport-bug-workaround.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -*- js-indent-level: 8 -*- */
-/*!
- * IE10 viewport hack for Surface/desktop Windows 8 bug
- * Copyright 2014-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-// See the Getting Started docs for more information:
-// http://getbootstrap.com/getting-started/#support-ie10-width
-
-(function () {
-  'use strict';
-
-  if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
-    var msViewportStyle = document.createElement('style')
-    msViewportStyle.appendChild(
-      document.createTextNode(
-        '@-ms-viewport{width:auto!important}'
-      )
-    )
-    document.querySelector('head').appendChild(msViewportStyle)
-  }
-
-})();
diff --git a/loleaflet/admin/css/bulma.min.css 
b/loleaflet/admin/css/bulma.min.css
new file mode 100644
index 000000000..74d8cf801
--- /dev/null
+++ b/loleaflet/admin/css/bulma.min.css
@@ -0,0 +1 @@

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

Reply via email to