[Libreoffice-commits] online.git: 6 commits - loleaflet/dist loleaflet/src loolwsd/LOOLWSD.cpp loolwsd/test

Pranav Kant pranavk at collabora.co.uk
Thu Sep 29 19:32:48 UTC 2016


 loleaflet/dist/l10n/help-localizations.json   |  232 ++++++++++++-------------
 loleaflet/dist/l10n/localizations.json        |  232 ++++++++++++-------------
 loleaflet/dist/l10n/styles-localizations.json |  238 +++++++++++++-------------
 loleaflet/dist/l10n/uno-localizations.json    |  238 +++++++++++++-------------
 loleaflet/dist/selectionMarkers.css           |    4 
 loleaflet/dist/toolbar.css                    |  112 ++++++------
 loleaflet/src/core/Socket.js                  |    2 
 loleaflet/src/layer/tile/TileLayer.js         |   20 +-
 loleaflet/src/map/handler/Map.FileInserter.js |    3 
 loolwsd/LOOLWSD.cpp                           |   60 ++++--
 loolwsd/test/UnitAdmin.cpp                    |    9 
 loolwsd/test/helpers.hpp                      |    5 
 loolwsd/test/httpwstest.cpp                   |   12 -
 13 files changed, 595 insertions(+), 572 deletions(-)

New commits:
commit d5f8c5b2e62f279d52673f297515fadcd1a6915c
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Sep 29 22:50:52 2016 +0530

    Change main websocket url for consistency with other urls
    
    From
    /lool/ws/docurl
    to
    /lool/docurl/ws
    
    The main purpose behind changing this and other related urls is
    to help in load-balancing. The first two parts of the URL can now
    be used in a hash-based load-balancing algorithm which decides which
    slave gets to serve the requests. Requests such as insertfile,
    downloadas need to end up in the same slave in which document was opened.
    /lool/docurl/ i.e first two parts of the URL are constant for all
    the requests that should be served by a single slave.
    
    Change-Id: Ibc605ca1251957b8b32b376cf19b78f6178fadfa

diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 73c54fb..d66c578 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -12,7 +12,7 @@ L.Socket = L.Class.extend({
 			if (map.options.permission) {
 				map.options.docParams['permission'] = map.options.permission;
 			}
-			this.socket = new WebSocket(map.options.server + '/lool/ws/' + map.options.doc + '?' + $.param(map.options.docParams));
+			this.socket = new WebSocket(map.options.server + '/lool/' + encodeURIComponent(map.options.doc + '?' + $.param(map.options.docParams)) + '/ws');
 		} catch (e) {
 			this.fire('error', {msg: _('Oops, there is a problem connecting to LibreOffice Online : ' + e), cmd: 'socket', kind: 'failed', id: 3});
 			return null;
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 0b3051c..460a6c9 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -561,7 +561,7 @@ private:
     }
 
     /// Handle GET requests.
-    static void handleGetRequest(HTTPServerRequest& request, std::shared_ptr<WebSocket>& ws, const std::string& id)
+    static void handleGetRequest(const std::string& uri, std::shared_ptr<WebSocket>& ws, const std::string& id)
     {
         Log::info("Starting GET request handler for session [" + id + "].");
 
@@ -570,15 +570,6 @@ private:
         Log::trace("Sending to Client [" + status + "].");
         ws->sendFrame(status.data(), (int) status.size());
 
-        // Remove the leading '/' in the GET URL.
-        std::string uri = request.getURI();
-        if (uri.size() > 0 && uri[0] == '/')
-            uri.erase(0, 1);
-
-        // Remove leading 'lool/ws/' from GET URL
-        if (uri.size() > 0 && uri.compare(0, 8, "lool/ws/") == 0)
-            uri.erase(0, 8);
-
         const auto uriPublic = DocumentBroker::sanitizeURI(uri);
         const auto docKey = DocumentBroker::getDocKey(uriPublic);
         std::shared_ptr<DocumentBroker> docBroker;
@@ -912,8 +903,7 @@ public:
         Poco::URI requestUri(request.getURI());
         Log::debug("Handling GET: " + request.getURI());
 
-        std::vector<std::string> reqPathSegs;
-        requestUri.getPathSegments(reqPathSegs);
+        StringTokenizer reqPathTokens(request.getURI(), "/?", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
 
         Util::setThreadName("client_ws_" + id);
 
@@ -954,12 +944,12 @@ public:
                 responded = handleGetWOPIDiscovery(request, response);
             }
             else if (!(request.find("Upgrade") != request.end() && Poco::icompare(request["Upgrade"], "websocket") == 0) &&
-                     reqPathSegs.size() > 0 && reqPathSegs[0] == "lool")
+                     reqPathTokens.count() > 0 && reqPathTokens[0] == "lool")
             {
                 // All post requests have url prefix 'lool'.
                 responded = handlePostRequest(request, response, id);
             }
-            else if (reqPathSegs.size() > 2 && reqPathSegs[0] == "lool" && reqPathSegs[1] == "ws")
+            else if (reqPathTokens.count() > 2 && reqPathTokens[0] == "lool" && reqPathTokens[2] == "ws")
             {
                 auto ws = std::make_shared<WebSocket>(request, response);
                 responded = true; // After upgrading to WS we should not set HTTP response.
@@ -968,7 +958,9 @@ public:
                     // First, setup WS options.
                     ws->setBlocking(false);
                     ws->setSendTimeout(WS_SEND_TIMEOUT_MICROSECS);
-                    handleGetRequest(request, ws, id);
+                    std::string decodedUri;
+                    URI::decode(reqPathTokens[1], decodedUri);
+                    handleGetRequest(decodedUri, ws, id);
                 }
                 catch (const WebSocketErrorMessageException& exc)
                 {
diff --git a/loolwsd/test/UnitAdmin.cpp b/loolwsd/test/UnitAdmin.cpp
index 36bebfc..24fe35f 100644
--- a/loolwsd/test/UnitAdmin.cpp
+++ b/loolwsd/test/UnitAdmin.cpp
@@ -204,8 +204,9 @@ private:
         const std::string subscribeMessage = "subscribe adddoc";
         _adminWs->sendFrame(subscribeMessage.data(), subscribeMessage.size());
 
-        const std::string documentPath1 = Util::getTempFilePath(TDOC, "hello.odt");
-        const std::string documentURL1 = std::string("lool/ws/") + "file://" + Poco::Path(documentPath1).makeAbsolute().toString();
+
+        std::string documentPath1, documentURL1;
+        helpers::getDocumentPathAndURL("hello.odt", documentPath1, documentURL1);
         HTTPRequest request1(HTTPRequest::HTTP_GET, documentURL1);
         HTTPResponse response1;
         const Poco::URI docUri1(helpers::getTestServerURI());
@@ -268,8 +269,8 @@ private:
         }
 
         // Open another document (different)
-        const std::string documentPath2 = Util::getTempFilePath(TDOC, "insert-delete.odp");
-        const std::string documentURL2 = std::string("lool/ws/") + "file://" + Poco::Path(documentPath2).makeAbsolute().toString();
+        std::string documentPath2, documentURL2;
+        helpers::getDocumentPathAndURL("insert-delete.odp", documentPath2, documentURL2);
         HTTPRequest request2(HTTPRequest::HTTP_GET, documentURL2);
         HTTPResponse response2;
         const Poco::URI docUri2(helpers::getTestServerURI());
diff --git a/loolwsd/test/helpers.hpp b/loolwsd/test/helpers.hpp
index f73db3c..fd9c572 100644
--- a/loolwsd/test/helpers.hpp
+++ b/loolwsd/test/helpers.hpp
@@ -86,8 +86,9 @@ inline
 void getDocumentPathAndURL(const std::string& docFilename, std::string& documentPath, std::string& documentURL)
 {
     documentPath = Util::getTempFilePath(TDOC, docFilename);
-    documentURL = "lool/ws/file://" + Poco::Path(documentPath).makeAbsolute().toString();
-
+    std::string encodedUri;
+    Poco::URI::encode("file://" + Poco::Path(documentPath).makeAbsolute().toString(), ":/?", encodedUri);
+    documentURL = "lool/" + encodedUri + "/ws";
     std::cerr << "Test file: " << documentPath << std::endl;
 }
 
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index 03f4396..dcb9b42 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -212,8 +212,8 @@ void HTTPWSTest::testBadRequest()
 {
     try
     {
-        // Load a document and get its status.
-        const std::string documentURL = "lool/ws/file:///fake.doc";
+        // Try to load a fake document and get its status.
+        const std::string documentURL = "/lool/file%3A%2F%2F%2Ffake.doc/ws";
 
         Poco::Net::HTTPResponse response;
         Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
@@ -827,8 +827,8 @@ void HTTPWSTest::testPasswordProtectedDocumentWithCorrectPassword()
 {
     try
     {
-        const std::string documentPath = Util::getTempFilePath(TDOC, "password-protected.ods");
-        const std::string documentURL = "lool/ws/file://" + Poco::Path(documentPath).makeAbsolute().toString();
+        std::string documentPath, documentURL;
+        getDocumentPathAndURL("password-protected.ods", documentPath, documentURL);
 
         Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
         Poco::Net::WebSocket socket = *connectLOKit(_uri, request, _response);
commit 085a07b3e223c48e103ba3fae07728088d68af65
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Sep 29 22:44:08 2016 +0530

    loleaflet: Ignore view messages before 'viewinfo' message
    
    Change-Id: If0f759976f13a76c54c068a18bab5e07818cb86e

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 3307450..b2b1790 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -500,8 +500,8 @@ L.TileLayer = L.GridLayer.extend({
 		var obj = JSON.parse(textMsg);
 		var viewId = parseInt(obj.viewId);
 
-		// Ignore yourself
-		if (viewId === this._viewId) {
+		// Ignore if viewid is ours or not in our db
+		if (viewId === this._viewId || !this._map._viewInfo[viewId]) {
 			return;
 		}
 
@@ -606,8 +606,8 @@ L.TileLayer = L.GridLayer.extend({
 		var obj = JSON.parse(textMsg);
 		var viewId = parseInt(obj.viewId);
 
-		// Ignore if viewid is same as ours
-		if (viewId === this._viewId) {
+		// Ignore if viewid is same as ours or not in our db
+		if (viewId === this._viewId || !this._map._viewInfo[viewId]) {
 			return;
 		}
 
@@ -686,8 +686,8 @@ L.TileLayer = L.GridLayer.extend({
 		var obj = JSON.parse(textMsg);
 		var viewId = parseInt(obj.viewId);
 
-		// Ignore if viewid is same as ours
-		if (viewId === this._viewId) {
+		// Ignore if viewid is same as ours or not in our db
+		if (viewId === this._viewId || !this._map._viewInfo[viewId]) {
 			return;
 		}
 
@@ -929,8 +929,8 @@ L.TileLayer = L.GridLayer.extend({
 		var viewId = parseInt(obj.viewId);
 		var viewPart = parseInt(obj.part);
 
-		// Ignore if viewid is same as ours
-		if (viewId === this._viewId) {
+		// Ignore if viewid is same as ours or not in our db
+		if (viewId === this._viewId || !this._map._viewInfo[viewId]) {
 			return;
 		}
 
commit 8330341a8a6c66353f787b2136ccc44287f85dbc
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Sep 29 21:52:45 2016 +0530

    Include docurl in document download requests
    
    From
    /lool/jailid/randomdir/filename
    to
    /lool/docurl/jailid/randomdir/filename
    
    Change-Id: I4d58e733768c62f2951ecfdcfcb604d99772862d

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index d74d0c4..3307450 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -430,7 +430,7 @@ L.TileLayer = L.GridLayer.extend({
 		var parser = document.createElement('a');
 		parser.href = this._map.options.server;
 		var url = this._map.options.webserver + '/' + this._map.options.urlPrefix + '/' +
-			command.jail + '/' + command.dir + '/' + command.name;
+		    encodeURIComponent(this._map.options.doc) + '/' + command.jail + '/' + command.dir + '/' + command.name;
 
 		this._map.hideBusy();
 		if (command.id === 'print') {
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index dd05168..0b3051c 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -515,18 +515,30 @@ private:
                 }
             }
         }
-        else if (tokens.count() >= 5)
+        else if (tokens.count() >= 6)
         {
             Log::info("File download request.");
-            // The user might request a file to download
             //TODO: Check that the user in question has access to this file!
-            const std::string dirPath = LOOLWSD::ChildRoot + tokens[2]
-                                      + JAILED_DOCUMENT_ROOT + tokens[3];
+            const std::string dirPath = LOOLWSD::ChildRoot + tokens[3]
+                                      + JAILED_DOCUMENT_ROOT + tokens[4];
             std::string fileName;
-            URI::decode(tokens[4], fileName);
+            URI::decode(tokens[5], fileName);
             const std::string filePath = dirPath + "/" + fileName;
             Log::info("HTTP request for: " + filePath);
             File file(filePath);
+
+            // Validate the dockey
+            std::string decodedUri;
+            URI::decode(tokens[2], decodedUri);
+            const auto docKey = DocumentBroker::getDocKey(DocumentBroker::sanitizeURI(decodedUri));
+            std::unique_lock<std::mutex> docBrokersLock(docBrokersMutex);
+            auto docBrokerIt = docBrokers.find(docKey);
+            if (docBrokerIt == docBrokers.end())
+            {
+                throw BadRequestException("DocKey [" + docKey + "] is invalid.");
+            }
+            docBrokersLock.unlock();
+
             if (file.exists())
             {
                 response.set("Access-Control-Allow-Origin", "*");
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index 5d07755..03f4396 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -978,7 +978,9 @@ void HTTPWSTest::testSlideShow()
             CPPUNIT_ASSERT_EQUAL(static_cast<int>(_uri.getPort()), port);
             CPPUNIT_ASSERT_EQUAL(std::string("slideshow"), id);
 
-            const std::string path = "/lool/" + jail + "/" + dir + "/" + name + "?mime_type=image/svg%2Bxml";
+            std::string encodedDoc;
+            Poco::URI::encode(documentPath, ":/?", encodedDoc);
+            const std::string path = "/lool/" + encodedDoc + "/" + jail + "/" + dir + "/" + name + "?mime_type=image/svg%2Bxml";
             std::unique_ptr<Poco::Net::HTTPClientSession> session(helpers::createSession(_uri));
             Poco::Net::HTTPRequest requestSVG(Poco::Net::HTTPRequest::HTTP_GET, path);
             session->sendRequest(requestSVG);
commit 187abe0018e19d55ad041541089554b7dcb2aa23
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Sep 29 21:51:56 2016 +0530

    loleaflet: Remove unused fields
    
    Change-Id: Ide180430cb2d359fa089ded8061af764c4001bb2

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 552f408..d74d0c4 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -440,7 +440,7 @@ L.TileLayer = L.GridLayer.extend({
 				this._map.fire('print', {url: url});
 			}
 			else {
-				this._map.fire('filedownloadready', {url: url, name: name, id: command.id});
+				this._map.fire('filedownloadready', {url: url});
 			}
 		}
 		else if (command.id === 'slideshow') {
commit 8c61ee3c949cb654eb1d36393c7776290a28d26a
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Sep 29 21:12:50 2016 +0530

    Change insertfile URI to include doc key in it
    
    From
    /lool/insertfile
    to
    /lool/<docUrl>/insertfile
    
    Change-Id: I63864673bc1d92a737a95b484c2f440cb5ce6605

diff --git a/loleaflet/src/map/handler/Map.FileInserter.js b/loleaflet/src/map/handler/Map.FileInserter.js
index a8a98f0..f6388db 100644
--- a/loleaflet/src/map/handler/Map.FileInserter.js
+++ b/loleaflet/src/map/handler/Map.FileInserter.js
@@ -14,7 +14,8 @@ L.Map.FileInserter = L.Handler.extend({
 		this._toInsert = {};
 		var parser = document.createElement('a');
 		parser.href = map.options.server;
-		this._url = map.options.webserver + '/' + map.options.urlPrefix + '/insertfile';
+		this._url = map.options.webserver + '/' + map.options.urlPrefix +
+			'/' + encodeURIComponent(map.options.doc) + '/insertfile';
 	},
 
 	addHooks: function () {
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 57ad7f9..dd05168 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -472,7 +472,7 @@ private:
 
             return true;
         }
-        else if (tokens.count() >= 3 && tokens[2] == "insertfile")
+        else if (tokens.count() >= 4 && tokens[3] == "insertfile")
         {
             Log::info("Insert file request.");
             response.set("Access-Control-Allow-Origin", "*");
@@ -488,6 +488,20 @@ private:
                 const std::string formChildid(form.get("childid"));
                 const std::string formName(form.get("name"));
 
+                // Validate the docKey
+                std::unique_lock<std::mutex> docBrokersLock(docBrokersMutex);
+                std::string decodedUri;
+                URI::decode(tokens[2], decodedUri);
+                const auto docKey = DocumentBroker::getDocKey(DocumentBroker::sanitizeURI(decodedUri));
+                auto docBrokerIt = docBrokers.find(docKey);
+
+                // Maybe just free the client from sending childid in form ?
+                if (docBrokerIt == docBrokers.end() || docBrokerIt->second->getJailId() != formChildid)
+                {
+                    throw BadRequestException("DocKey [" + docKey + "] or childid [" + formChildid + "] is invalid.");
+                }
+                docBrokersLock.unlock();
+
                 // protect against attempts to inject something funny here
                 if (formChildid.find('/') == std::string::npos && formName.find('/') == std::string::npos)
                 {
commit 12dee85ef8c4c8a2d849f32b13c6ccc5053af84a
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Sep 29 08:22:01 2016 +0530

    Serve all assets (l10n, images etc.) versioned
    
    Rather than accessing them using '/dist/', access them using the
    version (git hash) in the url.
    
    Change-Id: I999bd99a13dbf92b26641e3bd5c9e0b7468bb654

diff --git a/loleaflet/dist/l10n/help-localizations.json b/loleaflet/dist/l10n/help-localizations.json
index 43b1bc4..8499ea7 100644
--- a/loleaflet/dist/l10n/help-localizations.json
+++ b/loleaflet/dist/l10n/help-localizations.json
@@ -1,119 +1,119 @@
 {
     "en": false,
-    "ab": "/loleaflet/dist/l10n/help-ab.json",
-    "af": "/loleaflet/dist/l10n/help-af.json",
-    "am": "/loleaflet/dist/l10n/help-am.json",
-    "an": "/loleaflet/dist/l10n/help-an.json",
-    "ar": "/loleaflet/dist/l10n/help-ar.json",
-    "as": "/loleaflet/dist/l10n/help-as.json",
-    "ast": "/loleaflet/dist/l10n/help-ast.json",
-    "az": "/loleaflet/dist/l10n/help-az.json",
-    "be": "/loleaflet/dist/l10n/help-be.json",
-    "bg": "/loleaflet/dist/l10n/help-bg.json",
-    "bn-in": "/loleaflet/dist/l10n/help-bn_IN.json",
-    "bn": "/loleaflet/dist/l10n/help-bn.json",
-    "bo": "/loleaflet/dist/l10n/help-bo.json",
-    "br": "/loleaflet/dist/l10n/help-br.json",
-    "brx": "/loleaflet/dist/l10n/help-brx.json",
-    "bs": "/loleaflet/dist/l10n/help-bs.json",
-    "ca": "/loleaflet/dist/l10n/help-ca.json",
-    "cs": "/loleaflet/dist/l10n/help-cs.json",
-    "cy": "/loleaflet/dist/l10n/help-cy.json",
-    "da": "/loleaflet/dist/l10n/help-da.json",
-    "de": "/loleaflet/dist/l10n/help-de.json",
-    "dgo": "/loleaflet/dist/l10n/help-dgo.json",
-    "dz": "/loleaflet/dist/l10n/help-dz.json",
-    "el": "/loleaflet/dist/l10n/help-el.json",
-    "en-gb": "/loleaflet/dist/l10n/help-en_GB.json",
-    "en-za": "/loleaflet/dist/l10n/help-en_ZA.json",
-    "eo": "/loleaflet/dist/l10n/help-eo.json",
-    "es": "/loleaflet/dist/l10n/help-es.json",
-    "et": "/loleaflet/dist/l10n/help-et.json",
-    "eu": "/loleaflet/dist/l10n/help-eu.json",
-    "fa": "/loleaflet/dist/l10n/help-fa.json",
-    "fi": "/loleaflet/dist/l10n/help-fi.json",
-    "fr": "/loleaflet/dist/l10n/help-fr.json",
-    "ga": "/loleaflet/dist/l10n/help-ga.json",
-    "gd": "/loleaflet/dist/l10n/help-gd.json",
-    "gl": "/loleaflet/dist/l10n/help-gl.json",
-    "gn": "/loleaflet/dist/l10n/help-gug.json",
-    "gu": "/loleaflet/dist/l10n/help-gu.json",
-    "he": "/loleaflet/dist/l10n/help-he.json",
-    "hi": "/loleaflet/dist/l10n/help-hi.json",
-    "hr": "/loleaflet/dist/l10n/help-hr.json",
-    "hu": "/loleaflet/dist/l10n/help-hu.json",
-    "id": "/loleaflet/dist/l10n/help-id.json",
-    "is": "/loleaflet/dist/l10n/help-is.json",
-    "it": "/loleaflet/dist/l10n/help-it.json",
-    "ja": "/loleaflet/dist/l10n/help-ja.json",
-    "jv": "/loleaflet/dist/l10n/help-jv.json",
-    "ka": "/loleaflet/dist/l10n/help-ka.json",
-    "kk": "/loleaflet/dist/l10n/help-kk.json",
-    "kl": "/loleaflet/dist/l10n/help-kl.json",
-    "km": "/loleaflet/dist/l10n/help-km.json",
-    "kn": "/loleaflet/dist/l10n/help-kn.json",
-    "kok": "/loleaflet/dist/l10n/help-kok.json",
-    "ko": "/loleaflet/dist/l10n/help-ko.json",
-    "ks": "/loleaflet/dist/l10n/help-ks.json",
-    "ky": "/loleaflet/dist/l10n/help-ky.json",
-    "lb": "/loleaflet/dist/l10n/help-lb.json",
-    "lo": "/loleaflet/dist/l10n/help-lo.json",
-    "lt": "/loleaflet/dist/l10n/help-lt.json",
-    "lv": "/loleaflet/dist/l10n/help-lv.json",
-    "mai": "/loleaflet/dist/l10n/help-mai.json",
-    "mk": "/loleaflet/dist/l10n/help-mk.json",
-    "ml": "/loleaflet/dist/l10n/help-ml.json",
-    "mni": "/loleaflet/dist/l10n/help-mni.json",
-    "mn": "/loleaflet/dist/l10n/help-mn.json",
-    "mr": "/loleaflet/dist/l10n/help-mr.json",
-    "my": "/loleaflet/dist/l10n/help-my.json",
-    "nb": "/loleaflet/dist/l10n/help-nb.json",
-    "ne": "/loleaflet/dist/l10n/help-ne.json",
-    "nl": "/loleaflet/dist/l10n/help-nl.json",
-    "nn": "/loleaflet/dist/l10n/help-nn.json",
-    "nr": "/loleaflet/dist/l10n/help-nr.json",
-    "nso": "/loleaflet/dist/l10n/help-nso.json",
-    "oc": "/loleaflet/dist/l10n/help-oc.json",
-    "om": "/loleaflet/dist/l10n/help-om.json",
-    "or": "/loleaflet/dist/l10n/help-or.json",
-    "pa-in": "/loleaflet/dist/l10n/help-pa_IN.json",
-    "pl": "/loleaflet/dist/l10n/help-pl.json",
-    "pt-br": "/loleaflet/dist/l10n/help-pt_BR.json",
-    "pt": "/loleaflet/dist/l10n/help-pt.json",
-    "ro": "/loleaflet/dist/l10n/help-ro.json",
-    "ru": "/loleaflet/dist/l10n/help-ru.json",
-    "rw": "/loleaflet/dist/l10n/help-rw.json",
-    "sah": "/loleaflet/dist/l10n/help-sah.json",
-    "sa": "/loleaflet/dist/l10n/help-sa_IN.json",
-    "sat": "/loleaflet/dist/l10n/help-sat.json",
-    "sd": "/loleaflet/dist/l10n/help-sd.json",
-    "sid": "/loleaflet/dist/l10n/help-sid.json",
-    "si": "/loleaflet/dist/l10n/help-si.json",
-    "sk": "/loleaflet/dist/l10n/help-sk.json",
-    "sl": "/loleaflet/dist/l10n/help-sl.json",
-    "sq": "/loleaflet/dist/l10n/help-sq.json",
-    "sr": "/loleaflet/dist/l10n/help-sr.json",
-    "ss": "/loleaflet/dist/l10n/help-ss.json",
-    "st": "/loleaflet/dist/l10n/help-st.json",
-    "sv": "/loleaflet/dist/l10n/help-sv.json",
-    "sw": "/loleaflet/dist/l10n/help-sw_TZ.json",
-    "ta": "/loleaflet/dist/l10n/help-ta.json",
-    "te": "/loleaflet/dist/l10n/help-te.json",
-    "tg": "/loleaflet/dist/l10n/help-tg.json",
-    "th": "/loleaflet/dist/l10n/help-th.json",
-    "ti": "/loleaflet/dist/l10n/help-ti.json",
-    "tn": "/loleaflet/dist/l10n/help-tn.json",
-    "tr": "/loleaflet/dist/l10n/help-tr.json",
-    "ts": "/loleaflet/dist/l10n/help-ts.json",
-    "tt": "/loleaflet/dist/l10n/help-tt.json",
-    "ug": "/loleaflet/dist/l10n/help-ug.json",
-    "uk": "/loleaflet/dist/l10n/help-uk.json",
-    "ur": "/loleaflet/dist/l10n/help-ur.json",
-    "uz": "/loleaflet/dist/l10n/help-uz.json",
-    "ve": "/loleaflet/dist/l10n/help-ve.json",
-    "vi": "/loleaflet/dist/l10n/help-vi.json",
-    "xh": "/loleaflet/dist/l10n/help-xh.json",
-    "zh-cn": "/loleaflet/dist/l10n/help-zh_CN.json",
-    "zh-tw": "/loleaflet/dist/l10n/help-zh_TW.json",
-    "zu": "/loleaflet/dist/l10n/help-zu.json"
+    "ab": "l10n/help-ab.json",
+    "af": "l10n/help-af.json",
+    "am": "l10n/help-am.json",
+    "an": "l10n/help-an.json",
+    "ar": "l10n/help-ar.json",
+    "as": "l10n/help-as.json",
+    "ast": "l10n/help-ast.json",
+    "az": "l10n/help-az.json",
+    "be": "l10n/help-be.json",
+    "bg": "l10n/help-bg.json",
+    "bn-in": "l10n/help-bn_IN.json",
+    "bn": "l10n/help-bn.json",
+    "bo": "l10n/help-bo.json",
+    "br": "l10n/help-br.json",
+    "brx": "l10n/help-brx.json",
+    "bs": "l10n/help-bs.json",
+    "ca": "l10n/help-ca.json",
+    "cs": "l10n/help-cs.json",
+    "cy": "l10n/help-cy.json",
+    "da": "l10n/help-da.json",
+    "de": "l10n/help-de.json",
+    "dgo": "l10n/help-dgo.json",
+    "dz": "l10n/help-dz.json",
+    "el": "l10n/help-el.json",
+    "en-gb": "l10n/help-en_GB.json",
+    "en-za": "l10n/help-en_ZA.json",
+    "eo": "l10n/help-eo.json",
+    "es": "l10n/help-es.json",
+    "et": "l10n/help-et.json",
+    "eu": "l10n/help-eu.json",
+    "fa": "l10n/help-fa.json",
+    "fi": "l10n/help-fi.json",
+    "fr": "l10n/help-fr.json",
+    "ga": "l10n/help-ga.json",
+    "gd": "l10n/help-gd.json",
+    "gl": "l10n/help-gl.json",
+    "gn": "l10n/help-gug.json",
+    "gu": "l10n/help-gu.json",
+    "he": "l10n/help-he.json",
+    "hi": "l10n/help-hi.json",
+    "hr": "l10n/help-hr.json",
+    "hu": "l10n/help-hu.json",
+    "id": "l10n/help-id.json",
+    "is": "l10n/help-is.json",
+    "it": "l10n/help-it.json",
+    "ja": "l10n/help-ja.json",
+    "jv": "l10n/help-jv.json",
+    "ka": "l10n/help-ka.json",
+    "kk": "l10n/help-kk.json",
+    "kl": "l10n/help-kl.json",
+    "km": "l10n/help-km.json",
+    "kn": "l10n/help-kn.json",
+    "kok": "l10n/help-kok.json",
+    "ko": "l10n/help-ko.json",
+    "ks": "l10n/help-ks.json",
+    "ky": "l10n/help-ky.json",
+    "lb": "l10n/help-lb.json",
+    "lo": "l10n/help-lo.json",
+    "lt": "l10n/help-lt.json",
+    "lv": "l10n/help-lv.json",
+    "mai": "l10n/help-mai.json",
+    "mk": "l10n/help-mk.json",
+    "ml": "l10n/help-ml.json",
+    "mni": "l10n/help-mni.json",
+    "mn": "l10n/help-mn.json",
+    "mr": "l10n/help-mr.json",
+    "my": "l10n/help-my.json",
+    "nb": "l10n/help-nb.json",
+    "ne": "l10n/help-ne.json",
+    "nl": "l10n/help-nl.json",
+    "nn": "l10n/help-nn.json",
+    "nr": "l10n/help-nr.json",
+    "nso": "l10n/help-nso.json",
+    "oc": "l10n/help-oc.json",
+    "om": "l10n/help-om.json",
+    "or": "l10n/help-or.json",
+    "pa-in": "l10n/help-pa_IN.json",
+    "pl": "l10n/help-pl.json",
+    "pt-br": "l10n/help-pt_BR.json",
+    "pt": "l10n/help-pt.json",
+    "ro": "l10n/help-ro.json",
+    "ru": "l10n/help-ru.json",
+    "rw": "l10n/help-rw.json",
+    "sah": "l10n/help-sah.json",
+    "sa": "l10n/help-sa_IN.json",
+    "sat": "l10n/help-sat.json",
+    "sd": "l10n/help-sd.json",
+    "sid": "l10n/help-sid.json",
+    "si": "l10n/help-si.json",
+    "sk": "l10n/help-sk.json",
+    "sl": "l10n/help-sl.json",
+    "sq": "l10n/help-sq.json",
+    "sr": "l10n/help-sr.json",
+    "ss": "l10n/help-ss.json",
+    "st": "l10n/help-st.json",
+    "sv": "l10n/help-sv.json",
+    "sw": "l10n/help-sw_TZ.json",
+    "ta": "l10n/help-ta.json",
+    "te": "l10n/help-te.json",
+    "tg": "l10n/help-tg.json",
+    "th": "l10n/help-th.json",
+    "ti": "l10n/help-ti.json",
+    "tn": "l10n/help-tn.json",
+    "tr": "l10n/help-tr.json",
+    "ts": "l10n/help-ts.json",
+    "tt": "l10n/help-tt.json",
+    "ug": "l10n/help-ug.json",
+    "uk": "l10n/help-uk.json",
+    "ur": "l10n/help-ur.json",
+    "uz": "l10n/help-uz.json",
+    "ve": "l10n/help-ve.json",
+    "vi": "l10n/help-vi.json",
+    "xh": "l10n/help-xh.json",
+    "zh-cn": "l10n/help-zh_CN.json",
+    "zh-tw": "l10n/help-zh_TW.json",
+    "zu": "l10n/help-zu.json"
 }
diff --git a/loleaflet/dist/l10n/localizations.json b/loleaflet/dist/l10n/localizations.json
index 836b344..c0964d4 100644
--- a/loleaflet/dist/l10n/localizations.json
+++ b/loleaflet/dist/l10n/localizations.json
@@ -1,119 +1,119 @@
 {
     "en": false,
-    "ab": "/loleaflet/dist/l10n/ui-ab.json",
-    "af": "/loleaflet/dist/l10n/ui-af.json",
-    "am": "/loleaflet/dist/l10n/ui-am.json",
-    "an": "/loleaflet/dist/l10n/ui-an.json",
-    "ar": "/loleaflet/dist/l10n/ui-ar.json",
-    "as": "/loleaflet/dist/l10n/ui-as.json",
-    "ast": "/loleaflet/dist/l10n/ui-ast.json",
-    "az": "/loleaflet/dist/l10n/ui-az.json",
-    "be": "/loleaflet/dist/l10n/ui-be.json",
-    "bg": "/loleaflet/dist/l10n/ui-bg.json",
-    "bn-in": "/loleaflet/dist/l10n/ui-bn_IN.json",
-    "bn": "/loleaflet/dist/l10n/ui-bn.json",
-    "bo": "/loleaflet/dist/l10n/ui-bo.json",
-    "br": "/loleaflet/dist/l10n/ui-br.json",
-    "brx": "/loleaflet/dist/l10n/ui-brx.json",
-    "bs": "/loleaflet/dist/l10n/ui-bs.json",
-    "ca": "/loleaflet/dist/l10n/ui-ca.json",
-    "cs": "/loleaflet/dist/l10n/ui-cs.json",
-    "cy": "/loleaflet/dist/l10n/ui-cy.json",
-    "da": "/loleaflet/dist/l10n/ui-da.json",
-    "de": "/loleaflet/dist/l10n/ui-de.json",
-    "dgo": "/loleaflet/dist/l10n/ui-dgo.json",
-    "dz": "/loleaflet/dist/l10n/ui-dz.json",
-    "el": "/loleaflet/dist/l10n/ui-el.json",
-    "en-gb": "/loleaflet/dist/l10n/ui-en_GB.json",
-    "en-za": "/loleaflet/dist/l10n/ui-en_ZA.json",
-    "eo": "/loleaflet/dist/l10n/ui-eo.json",
-    "es": "/loleaflet/dist/l10n/ui-es.json",
-    "et": "/loleaflet/dist/l10n/ui-et.json",
-    "eu": "/loleaflet/dist/l10n/ui-eu.json",
-    "fa": "/loleaflet/dist/l10n/ui-fa.json",
-    "fi": "/loleaflet/dist/l10n/ui-fi.json",
-    "fr": "/loleaflet/dist/l10n/ui-fr.json",
-    "ga": "/loleaflet/dist/l10n/ui-ga.json",
-    "gd": "/loleaflet/dist/l10n/ui-gd.json",
-    "gl": "/loleaflet/dist/l10n/ui-gl.json",
-    "gn": "/loleaflet/dist/l10n/ui-gug.json",
-    "gu": "/loleaflet/dist/l10n/ui-gu.json",
-    "he": "/loleaflet/dist/l10n/ui-he.json",
-    "hi": "/loleaflet/dist/l10n/ui-hi.json",
-    "hr": "/loleaflet/dist/l10n/ui-hr.json",
-    "hu": "/loleaflet/dist/l10n/ui-hu.json",
-    "id": "/loleaflet/dist/l10n/ui-id.json",
-    "is": "/loleaflet/dist/l10n/ui-is.json",
-    "it": "/loleaflet/dist/l10n/ui-it.json",
-    "ja": "/loleaflet/dist/l10n/ui-ja.json",
-    "jv": "/loleaflet/dist/l10n/ui-jv.json",
-    "ka": "/loleaflet/dist/l10n/ui-ka.json",
-    "kk": "/loleaflet/dist/l10n/ui-kk.json",
-    "kl": "/loleaflet/dist/l10n/ui-kl.json",
-    "km": "/loleaflet/dist/l10n/ui-km.json",
-    "kn": "/loleaflet/dist/l10n/ui-kn.json",
-    "kok": "/loleaflet/dist/l10n/ui-kok.json",
-    "ko": "/loleaflet/dist/l10n/ui-ko.json",
-    "ks": "/loleaflet/dist/l10n/ui-ks.json",
-    "ky": "/loleaflet/dist/l10n/ui-ky.json",
-    "lb": "/loleaflet/dist/l10n/ui-lb.json",
-    "lo": "/loleaflet/dist/l10n/ui-lo.json",
-    "lt": "/loleaflet/dist/l10n/ui-lt.json",
-    "lv": "/loleaflet/dist/l10n/ui-lv.json",
-    "mai": "/loleaflet/dist/l10n/ui-mai.json",
-    "mk": "/loleaflet/dist/l10n/ui-mk.json",
-    "ml": "/loleaflet/dist/l10n/ui-ml.json",
-    "mni": "/loleaflet/dist/l10n/ui-mni.json",
-    "mn": "/loleaflet/dist/l10n/ui-mn.json",
-    "mr": "/loleaflet/dist/l10n/ui-mr.json",
-    "my": "/loleaflet/dist/l10n/ui-my.json",
-    "nb": "/loleaflet/dist/l10n/ui-nb.json",
-    "ne": "/loleaflet/dist/l10n/ui-ne.json",
-    "nl": "/loleaflet/dist/l10n/ui-nl.json",
-    "nn": "/loleaflet/dist/l10n/ui-nn.json",
-    "nr": "/loleaflet/dist/l10n/ui-nr.json",
-    "nso": "/loleaflet/dist/l10n/ui-nso.json",
-    "oc": "/loleaflet/dist/l10n/ui-oc.json",
-    "om": "/loleaflet/dist/l10n/ui-om.json",
-    "or": "/loleaflet/dist/l10n/ui-or.json",
-    "pa-in": "/loleaflet/dist/l10n/ui-pa_IN.json",
-    "pl": "/loleaflet/dist/l10n/ui-pl.json",
-    "pt-br": "/loleaflet/dist/l10n/ui-pt_BR.json",
-    "pt": "/loleaflet/dist/l10n/ui-pt.json",
-    "ro": "/loleaflet/dist/l10n/ui-ro.json",
-    "ru": "/loleaflet/dist/l10n/ui-ru.json",
-    "rw": "/loleaflet/dist/l10n/ui-rw.json",
-    "sah": "/loleaflet/dist/l10n/ui-sah.json",
-    "sa": "/loleaflet/dist/l10n/ui-sa_IN.json",
-    "sat": "/loleaflet/dist/l10n/ui-sat.json",
-    "sd": "/loleaflet/dist/l10n/ui-sd.json",
-    "sid": "/loleaflet/dist/l10n/ui-sid.json",
-    "si": "/loleaflet/dist/l10n/ui-si.json",
-    "sk": "/loleaflet/dist/l10n/ui-sk.json",
-    "sl": "/loleaflet/dist/l10n/ui-sl.json",
-    "sq": "/loleaflet/dist/l10n/ui-sq.json",
-    "sr": "/loleaflet/dist/l10n/ui-sr.json",
-    "ss": "/loleaflet/dist/l10n/ui-ss.json",
-    "st": "/loleaflet/dist/l10n/ui-st.json",
-    "sv": "/loleaflet/dist/l10n/ui-sv.json",
-    "sw": "/loleaflet/dist/l10n/ui-sw_TZ.json",
-    "ta": "/loleaflet/dist/l10n/ui-ta.json",
-    "te": "/loleaflet/dist/l10n/ui-te.json",
-    "tg": "/loleaflet/dist/l10n/ui-tg.json",
-    "th": "/loleaflet/dist/l10n/ui-th.json",
-    "ti": "/loleaflet/dist/l10n/ui-ti.json",
-    "tn": "/loleaflet/dist/l10n/ui-tn.json",
-    "tr": "/loleaflet/dist/l10n/ui-tr.json",
-    "ts": "/loleaflet/dist/l10n/ui-ts.json",
-    "tt": "/loleaflet/dist/l10n/ui-tt.json",
-    "ug": "/loleaflet/dist/l10n/ui-ug.json",
-    "uk": "/loleaflet/dist/l10n/ui-uk.json",
-    "ur": "/loleaflet/dist/l10n/ui-ur.json",
-    "uz": "/loleaflet/dist/l10n/ui-uz.json",
-    "ve": "/loleaflet/dist/l10n/ui-ve.json",
-    "vi": "/loleaflet/dist/l10n/ui-vi.json",
-    "xh": "/loleaflet/dist/l10n/ui-xh.json",
-    "zh-cn": "/loleaflet/dist/l10n/ui-zh_CN.json",
-    "zh-tw": "/loleaflet/dist/l10n/ui-zh_TW.json",
-    "zu": "/loleaflet/dist/l10n/ui-zu.json"
+    "ab": "l10n/ui-ab.json",
+    "af": "l10n/ui-af.json",
+    "am": "l10n/ui-am.json",
+    "an": "l10n/ui-an.json",
+    "ar": "l10n/ui-ar.json",
+    "as": "l10n/ui-as.json",
+    "ast": "l10n/ui-ast.json",
+    "az": "l10n/ui-az.json",
+    "be": "l10n/ui-be.json",
+    "bg": "l10n/ui-bg.json",
+    "bn-in": "l10n/ui-bn_IN.json",
+    "bn": "l10n/ui-bn.json",
+    "bo": "l10n/ui-bo.json",
+    "br": "l10n/ui-br.json",
+    "brx": "l10n/ui-brx.json",
+    "bs": "l10n/ui-bs.json",
+    "ca": "l10n/ui-ca.json",
+    "cs": "l10n/ui-cs.json",
+    "cy": "l10n/ui-cy.json",
+    "da": "l10n/ui-da.json",
+    "de": "l10n/ui-de.json",
+    "dgo": "l10n/ui-dgo.json",
+    "dz": "l10n/ui-dz.json",
+    "el": "l10n/ui-el.json",
+    "en-gb": "l10n/ui-en_GB.json",
+    "en-za": "l10n/ui-en_ZA.json",
+    "eo": "l10n/ui-eo.json",
+    "es": "l10n/ui-es.json",
+    "et": "l10n/ui-et.json",
+    "eu": "l10n/ui-eu.json",
+    "fa": "l10n/ui-fa.json",
+    "fi": "l10n/ui-fi.json",
+    "fr": "l10n/ui-fr.json",
+    "ga": "l10n/ui-ga.json",
+    "gd": "l10n/ui-gd.json",
+    "gl": "l10n/ui-gl.json",
+    "gn": "l10n/ui-gug.json",
+    "gu": "l10n/ui-gu.json",
+    "he": "l10n/ui-he.json",
+    "hi": "l10n/ui-hi.json",
+    "hr": "l10n/ui-hr.json",
+    "hu": "l10n/ui-hu.json",
+    "id": "l10n/ui-id.json",
+    "is": "l10n/ui-is.json",
+    "it": "l10n/ui-it.json",
+    "ja": "l10n/ui-ja.json",
+    "jv": "l10n/ui-jv.json",
+    "ka": "l10n/ui-ka.json",
+    "kk": "l10n/ui-kk.json",
+    "kl": "l10n/ui-kl.json",
+    "km": "l10n/ui-km.json",
+    "kn": "l10n/ui-kn.json",
+    "kok": "l10n/ui-kok.json",
+    "ko": "l10n/ui-ko.json",
+    "ks": "l10n/ui-ks.json",
+    "ky": "l10n/ui-ky.json",
+    "lb": "l10n/ui-lb.json",
+    "lo": "l10n/ui-lo.json",
+    "lt": "l10n/ui-lt.json",
+    "lv": "l10n/ui-lv.json",
+    "mai": "l10n/ui-mai.json",
+    "mk": "l10n/ui-mk.json",
+    "ml": "l10n/ui-ml.json",
+    "mni": "l10n/ui-mni.json",
+    "mn": "l10n/ui-mn.json",
+    "mr": "l10n/ui-mr.json",
+    "my": "l10n/ui-my.json",
+    "nb": "l10n/ui-nb.json",
+    "ne": "l10n/ui-ne.json",
+    "nl": "l10n/ui-nl.json",
+    "nn": "l10n/ui-nn.json",
+    "nr": "l10n/ui-nr.json",
+    "nso": "l10n/ui-nso.json",
+    "oc": "l10n/ui-oc.json",
+    "om": "l10n/ui-om.json",
+    "or": "l10n/ui-or.json",
+    "pa-in": "l10n/ui-pa_IN.json",
+    "pl": "l10n/ui-pl.json",
+    "pt-br": "l10n/ui-pt_BR.json",
+    "pt": "l10n/ui-pt.json",
+    "ro": "l10n/ui-ro.json",
+    "ru": "l10n/ui-ru.json",
+    "rw": "l10n/ui-rw.json",
+    "sah": "l10n/ui-sah.json",
+    "sa": "l10n/ui-sa_IN.json",
+    "sat": "l10n/ui-sat.json",
+    "sd": "l10n/ui-sd.json",
+    "sid": "l10n/ui-sid.json",
+    "si": "l10n/ui-si.json",
+    "sk": "l10n/ui-sk.json",
+    "sl": "l10n/ui-sl.json",
+    "sq": "l10n/ui-sq.json",
+    "sr": "l10n/ui-sr.json",
+    "ss": "l10n/ui-ss.json",
+    "st": "l10n/ui-st.json",
+    "sv": "l10n/ui-sv.json",
+    "sw": "l10n/ui-sw_TZ.json",
+    "ta": "l10n/ui-ta.json",
+    "te": "l10n/ui-te.json",
+    "tg": "l10n/ui-tg.json",
+    "th": "l10n/ui-th.json",
+    "ti": "l10n/ui-ti.json",
+    "tn": "l10n/ui-tn.json",
+    "tr": "l10n/ui-tr.json",
+    "ts": "l10n/ui-ts.json",
+    "tt": "l10n/ui-tt.json",
+    "ug": "l10n/ui-ug.json",
+    "uk": "l10n/ui-uk.json",
+    "ur": "l10n/ui-ur.json",
+    "uz": "l10n/ui-uz.json",
+    "ve": "l10n/ui-ve.json",
+    "vi": "l10n/ui-vi.json",
+    "xh": "l10n/ui-xh.json",
+    "zh-cn": "l10n/ui-zh_CN.json",
+    "zh-tw": "l10n/ui-zh_TW.json",
+    "zu": "l10n/ui-zu.json"
 }
diff --git a/loleaflet/dist/l10n/styles-localizations.json b/loleaflet/dist/l10n/styles-localizations.json
index c706d58..355255d 100644
--- a/loleaflet/dist/l10n/styles-localizations.json
+++ b/loleaflet/dist/l10n/styles-localizations.json
@@ -1,122 +1,122 @@
 {
     "en": false,
-    "ab": "/loleaflet/dist/l10n/styles/ab.json",
-    "af": "/loleaflet/dist/l10n/styles/af.json",
-    "am": "/loleaflet/dist/l10n/styles/am.json",
-    "an": "/loleaflet/dist/l10n/styles/an.json",
-    "ar": "/loleaflet/dist/l10n/styles/ar.json",
-    "as": "/loleaflet/dist/l10n/styles/as.json",
-    "ast": "/loleaflet/dist/l10n/styles/ast.json",
-    "az": "/loleaflet/dist/l10n/styles/az.json",
-    "be": "/loleaflet/dist/l10n/styles/be.json",
-    "bg": "/loleaflet/dist/l10n/styles/bg.json",
-    "bn-in": "/loleaflet/dist/l10n/styles/bn-IN.json",
-    "bn": "/loleaflet/dist/l10n/styles/bn.json",
-    "bo": "/loleaflet/dist/l10n/styles/bo.json",
-    "br": "/loleaflet/dist/l10n/styles/br.json",
-    "brx": "/loleaflet/dist/l10n/styles/brx.json",
-    "bs": "/loleaflet/dist/l10n/styles/bs.json",
-    "ca": "/loleaflet/dist/l10n/styles/ca.json",
-    "ca-valencia": "/loleaflet/dist/l10n/styles/ca-valencia.json",
-    "cs": "/loleaflet/dist/l10n/styles/cs.json",
-    "cy": "/loleaflet/dist/l10n/styles/cy.json",
-    "da": "/loleaflet/dist/l10n/styles/da.json",
-    "de": "/loleaflet/dist/l10n/styles/de.json",
-    "dgo": "/loleaflet/dist/l10n/styles/dgo.json",
-    "dz": "/loleaflet/dist/l10n/styles/dz.json",
-    "el": "/loleaflet/dist/l10n/styles/el.json",
-    "en-gb": "/loleaflet/dist/l10n/styles/en-GB.json",
-    "en-za": "/loleaflet/dist/l10n/styles/en-ZA.json",
-    "eo": "/loleaflet/dist/l10n/styles/eo.json",
-    "es": "/loleaflet/dist/l10n/styles/es.json",
-    "et": "/loleaflet/dist/l10n/styles/et.json",
-    "eu": "/loleaflet/dist/l10n/styles/eu.json",
-    "fa": "/loleaflet/dist/l10n/styles/fa.json",
-    "fi": "/loleaflet/dist/l10n/styles/fi.json",
-    "fr": "/loleaflet/dist/l10n/styles/fr.json",
-    "ga": "/loleaflet/dist/l10n/styles/ga.json",
-    "gd": "/loleaflet/dist/l10n/styles/gd.json",
-    "gl": "/loleaflet/dist/l10n/styles/gl.json",
-    "gn": "/loleaflet/dist/l10n/styles/gug.json",
-    "gu": "/loleaflet/dist/l10n/styles/gu.json",
-    "he": "/loleaflet/dist/l10n/styles/he.json",
-    "hi": "/loleaflet/dist/l10n/styles/hi.json",
-    "hr": "/loleaflet/dist/l10n/styles/hr.json",
-    "hu": "/loleaflet/dist/l10n/styles/hu.json",
-    "id": "/loleaflet/dist/l10n/styles/id.json",
-    "is": "/loleaflet/dist/l10n/styles/is.json",
-    "it": "/loleaflet/dist/l10n/styles/it.json",
-    "ja": "/loleaflet/dist/l10n/styles/ja.json",
-    "jv": "/loleaflet/dist/l10n/styles/jv.json",
-    "ka": "/loleaflet/dist/l10n/styles/ka.json",
-    "kk": "/loleaflet/dist/l10n/styles/kk.json",
-    "kl": "/loleaflet/dist/l10n/styles/kl.json",
-    "km": "/loleaflet/dist/l10n/styles/km.json",
-    "kmr-Latn": "/loleaflet/dist/l10n/styles/kmr-Latn.json",
-    "kn": "/loleaflet/dist/l10n/styles/kn.json",
-    "kok": "/loleaflet/dist/l10n/styles/kok.json",
-    "ko": "/loleaflet/dist/l10n/styles/ko.json",
-    "ks": "/loleaflet/dist/l10n/styles/ks.json",
-    "ky": "/loleaflet/dist/l10n/styles/ky.json",
-    "lb": "/loleaflet/dist/l10n/styles/lb.json",
-    "lo": "/loleaflet/dist/l10n/styles/lo.json",
-    "lt": "/loleaflet/dist/l10n/styles/lt.json",
-    "lv": "/loleaflet/dist/l10n/styles/lv.json",
-    "mai": "/loleaflet/dist/l10n/styles/mai.json",
-    "mk": "/loleaflet/dist/l10n/styles/mk.json",
-    "ml": "/loleaflet/dist/l10n/styles/ml.json",
-    "mni": "/loleaflet/dist/l10n/styles/mni.json",
-    "mn": "/loleaflet/dist/l10n/styles/mn.json",
-    "mr": "/loleaflet/dist/l10n/styles/mr.json",
-    "my": "/loleaflet/dist/l10n/styles/my.json",
-    "nb": "/loleaflet/dist/l10n/styles/nb.json",
-    "ne": "/loleaflet/dist/l10n/styles/ne.json",
-    "nl": "/loleaflet/dist/l10n/styles/nl.json",
-    "nn": "/loleaflet/dist/l10n/styles/nn.json",
-    "nr": "/loleaflet/dist/l10n/styles/nr.json",
-    "nso": "/loleaflet/dist/l10n/styles/nso.json",
-    "oc": "/loleaflet/dist/l10n/styles/oc.json",
-    "om": "/loleaflet/dist/l10n/styles/om.json",
-    "or": "/loleaflet/dist/l10n/styles/or.json",
-    "pa-in": "/loleaflet/dist/l10n/styles/pa-IN.json",
-    "pl": "/loleaflet/dist/l10n/styles/pl.json",
-    "pt-br": "/loleaflet/dist/l10n/styles/pt-BR.json",
-    "pt": "/loleaflet/dist/l10n/styles/pt.json",
-    "ro": "/loleaflet/dist/l10n/styles/ro.json",
-    "ru": "/loleaflet/dist/l10n/styles/ru.json",
-    "rw": "/loleaflet/dist/l10n/styles/rw.json",
-    "sah": "/loleaflet/dist/l10n/styles/sah.json",
-    "sa": "/loleaflet/dist/l10n/styles/sa-IN.json",
-    "sat": "/loleaflet/dist/l10n/styles/sat.json",
-    "sd": "/loleaflet/dist/l10n/styles/sd.json",
-    "sid": "/loleaflet/dist/l10n/styles/sid.json",
-    "si": "/loleaflet/dist/l10n/styles/si.json",
-    "sk": "/loleaflet/dist/l10n/styles/sk.json",
-    "sl": "/loleaflet/dist/l10n/styles/sl.json",
-    "sq": "/loleaflet/dist/l10n/styles/sq.json",
-    "sr-Latn": "/loleaflet/dist/l10n/styles/sr-Latn.json",
-    "sr": "/loleaflet/dist/l10n/styles/sr.json",
-    "ss": "/loleaflet/dist/l10n/styles/ss.json",
-    "st": "/loleaflet/dist/l10n/styles/st.json",
-    "sv": "/loleaflet/dist/l10n/styles/sv.json",
-    "sw": "/loleaflet/dist/l10n/styles/sw-TZ.json",
-    "ta": "/loleaflet/dist/l10n/styles/ta.json",
-    "te": "/loleaflet/dist/l10n/styles/te.json",
-    "tg": "/loleaflet/dist/l10n/styles/tg.json",
-    "th": "/loleaflet/dist/l10n/styles/th.json",
-    "ti": "/loleaflet/dist/l10n/styles/ti.json",
-    "tn": "/loleaflet/dist/l10n/styles/tn.json",
-    "tr": "/loleaflet/dist/l10n/styles/tr.json",
-    "ts": "/loleaflet/dist/l10n/styles/ts.json",
-    "tt": "/loleaflet/dist/l10n/styles/tt.json",
-    "ug": "/loleaflet/dist/l10n/styles/ug.json",
-    "uk": "/loleaflet/dist/l10n/styles/uk.json",
-    "ur": "/loleaflet/dist/l10n/styles/ur.json",
-    "uz": "/loleaflet/dist/l10n/styles/uz.json",
-    "ve": "/loleaflet/dist/l10n/styles/ve.json",
-    "vi": "/loleaflet/dist/l10n/styles/vi.json",
-    "xh": "/loleaflet/dist/l10n/styles/xh.json",
-    "zh-cn": "/loleaflet/dist/l10n/styles/zh-CN.json",
-    "zh-tw": "/loleaflet/dist/l10n/styles/zh-TW.json",
-    "zu": "/loleaflet/dist/l10n/styles/zu.json"
+    "ab": "l10n/styles/ab.json",
+    "af": "l10n/styles/af.json",
+    "am": "l10n/styles/am.json",
+    "an": "l10n/styles/an.json",
+    "ar": "l10n/styles/ar.json",
+    "as": "l10n/styles/as.json",
+    "ast": "l10n/styles/ast.json",
+    "az": "l10n/styles/az.json",
+    "be": "l10n/styles/be.json",
+    "bg": "l10n/styles/bg.json",
+    "bn-in": "l10n/styles/bn-IN.json",
+    "bn": "l10n/styles/bn.json",
+    "bo": "l10n/styles/bo.json",
+    "br": "l10n/styles/br.json",
+    "brx": "l10n/styles/brx.json",
+    "bs": "l10n/styles/bs.json",
+    "ca": "l10n/styles/ca.json",
+    "ca-valencia": "l10n/styles/ca-valencia.json",
+    "cs": "l10n/styles/cs.json",
+    "cy": "l10n/styles/cy.json",
+    "da": "l10n/styles/da.json",
+    "de": "l10n/styles/de.json",
+    "dgo": "l10n/styles/dgo.json",
+    "dz": "l10n/styles/dz.json",
+    "el": "l10n/styles/el.json",
+    "en-gb": "l10n/styles/en-GB.json",
+    "en-za": "l10n/styles/en-ZA.json",
+    "eo": "l10n/styles/eo.json",
+    "es": "l10n/styles/es.json",
+    "et": "l10n/styles/et.json",
+    "eu": "l10n/styles/eu.json",
+    "fa": "l10n/styles/fa.json",
+    "fi": "l10n/styles/fi.json",
+    "fr": "l10n/styles/fr.json",
+    "ga": "l10n/styles/ga.json",
+    "gd": "l10n/styles/gd.json",
+    "gl": "l10n/styles/gl.json",
+    "gn": "l10n/styles/gug.json",
+    "gu": "l10n/styles/gu.json",
+    "he": "l10n/styles/he.json",
+    "hi": "l10n/styles/hi.json",
+    "hr": "l10n/styles/hr.json",
+    "hu": "l10n/styles/hu.json",
+    "id": "l10n/styles/id.json",
+    "is": "l10n/styles/is.json",
+    "it": "l10n/styles/it.json",
+    "ja": "l10n/styles/ja.json",
+    "jv": "l10n/styles/jv.json",
+    "ka": "l10n/styles/ka.json",
+    "kk": "l10n/styles/kk.json",
+    "kl": "l10n/styles/kl.json",
+    "km": "l10n/styles/km.json",
+    "kmr-Latn": "l10n/styles/kmr-Latn.json",
+    "kn": "l10n/styles/kn.json",
+    "kok": "l10n/styles/kok.json",
+    "ko": "l10n/styles/ko.json",
+    "ks": "l10n/styles/ks.json",
+    "ky": "l10n/styles/ky.json",
+    "lb": "l10n/styles/lb.json",
+    "lo": "l10n/styles/lo.json",
+    "lt": "l10n/styles/lt.json",
+    "lv": "l10n/styles/lv.json",
+    "mai": "l10n/styles/mai.json",
+    "mk": "l10n/styles/mk.json",
+    "ml": "l10n/styles/ml.json",
+    "mni": "l10n/styles/mni.json",
+    "mn": "l10n/styles/mn.json",
+    "mr": "l10n/styles/mr.json",
+    "my": "l10n/styles/my.json",
+    "nb": "l10n/styles/nb.json",
+    "ne": "l10n/styles/ne.json",
+    "nl": "l10n/styles/nl.json",
+    "nn": "l10n/styles/nn.json",
+    "nr": "l10n/styles/nr.json",
+    "nso": "l10n/styles/nso.json",
+    "oc": "l10n/styles/oc.json",
+    "om": "l10n/styles/om.json",
+    "or": "l10n/styles/or.json",
+    "pa-in": "l10n/styles/pa-IN.json",
+    "pl": "l10n/styles/pl.json",
+    "pt-br": "l10n/styles/pt-BR.json",
+    "pt": "l10n/styles/pt.json",
+    "ro": "l10n/styles/ro.json",
+    "ru": "l10n/styles/ru.json",
+    "rw": "l10n/styles/rw.json",
+    "sah": "l10n/styles/sah.json",
+    "sa": "l10n/styles/sa-IN.json",
+    "sat": "l10n/styles/sat.json",
+    "sd": "l10n/styles/sd.json",
+    "sid": "l10n/styles/sid.json",
+    "si": "l10n/styles/si.json",
+    "sk": "l10n/styles/sk.json",
+    "sl": "l10n/styles/sl.json",
+    "sq": "l10n/styles/sq.json",
+    "sr-Latn": "l10n/styles/sr-Latn.json",
+    "sr": "l10n/styles/sr.json",
+    "ss": "l10n/styles/ss.json",
+    "st": "l10n/styles/st.json",
+    "sv": "l10n/styles/sv.json",
+    "sw": "l10n/styles/sw-TZ.json",
+    "ta": "l10n/styles/ta.json",
+    "te": "l10n/styles/te.json",
+    "tg": "l10n/styles/tg.json",
+    "th": "l10n/styles/th.json",
+    "ti": "l10n/styles/ti.json",
+    "tn": "l10n/styles/tn.json",
+    "tr": "l10n/styles/tr.json",
+    "ts": "l10n/styles/ts.json",
+    "tt": "l10n/styles/tt.json",
+    "ug": "l10n/styles/ug.json",
+    "uk": "l10n/styles/uk.json",
+    "ur": "l10n/styles/ur.json",
+    "uz": "l10n/styles/uz.json",
+    "ve": "l10n/styles/ve.json",
+    "vi": "l10n/styles/vi.json",
+    "xh": "l10n/styles/xh.json",
+    "zh-cn": "l10n/styles/zh-CN.json",
+    "zh-tw": "l10n/styles/zh-TW.json",
+    "zu": "l10n/styles/zu.json"
 }
diff --git a/loleaflet/dist/l10n/uno-localizations.json b/loleaflet/dist/l10n/uno-localizations.json
index 179cecc..ca9d80c 100644
--- a/loleaflet/dist/l10n/uno-localizations.json
+++ b/loleaflet/dist/l10n/uno-localizations.json
@@ -1,122 +1,122 @@
 {
     "en": false,
-    "ab": "/loleaflet/dist/l10n/uno/ab.json",
-    "af": "/loleaflet/dist/l10n/uno/af.json",
-    "am": "/loleaflet/dist/l10n/uno/am.json",
-    "an": "/loleaflet/dist/l10n/uno/an.json",
-    "ar": "/loleaflet/dist/l10n/uno/ar.json",
-    "as": "/loleaflet/dist/l10n/uno/as.json",
-    "ast": "/loleaflet/dist/l10n/uno/ast.json",
-    "az": "/loleaflet/dist/l10n/uno/az.json",
-    "be": "/loleaflet/dist/l10n/uno/be.json",
-    "bg": "/loleaflet/dist/l10n/uno/bg.json",
-    "bn-in": "/loleaflet/dist/l10n/uno/bn-IN.json",
-    "bn": "/loleaflet/dist/l10n/uno/bn.json",
-    "bo": "/loleaflet/dist/l10n/uno/bo.json",
-    "br": "/loleaflet/dist/l10n/uno/br.json",
-    "brx": "/loleaflet/dist/l10n/uno/brx.json",
-    "bs": "/loleaflet/dist/l10n/uno/bs.json",
-    "ca": "/loleaflet/dist/l10n/uno/ca.json",
-    "ca-valencia": "/loleaflet/dist/l10n/uno/ca-valencia.json",
-    "cs": "/loleaflet/dist/l10n/uno/cs.json",
-    "cy": "/loleaflet/dist/l10n/uno/cy.json",
-    "da": "/loleaflet/dist/l10n/uno/da.json",
-    "de": "/loleaflet/dist/l10n/uno/de.json",
-    "dgo": "/loleaflet/dist/l10n/uno/dgo.json",
-    "dz": "/loleaflet/dist/l10n/uno/dz.json",
-    "el": "/loleaflet/dist/l10n/uno/el.json",
-    "en-gb": "/loleaflet/dist/l10n/uno/en-GB.json",
-    "en-za": "/loleaflet/dist/l10n/uno/en-ZA.json",
-    "eo": "/loleaflet/dist/l10n/uno/eo.json",
-    "es": "/loleaflet/dist/l10n/uno/es.json",
-    "et": "/loleaflet/dist/l10n/uno/et.json",
-    "eu": "/loleaflet/dist/l10n/uno/eu.json",
-    "fa": "/loleaflet/dist/l10n/uno/fa.json",
-    "fi": "/loleaflet/dist/l10n/uno/fi.json",
-    "fr": "/loleaflet/dist/l10n/uno/fr.json",
-    "ga": "/loleaflet/dist/l10n/uno/ga.json",
-    "gd": "/loleaflet/dist/l10n/uno/gd.json",
-    "gl": "/loleaflet/dist/l10n/uno/gl.json",
-    "gn": "/loleaflet/dist/l10n/uno/gug.json",
-    "gu": "/loleaflet/dist/l10n/uno/gu.json",
-    "he": "/loleaflet/dist/l10n/uno/he.json",
-    "hi": "/loleaflet/dist/l10n/uno/hi.json",
-    "hr": "/loleaflet/dist/l10n/uno/hr.json",
-    "hu": "/loleaflet/dist/l10n/uno/hu.json",
-    "id": "/loleaflet/dist/l10n/uno/id.json",
-    "is": "/loleaflet/dist/l10n/uno/is.json",
-    "it": "/loleaflet/dist/l10n/uno/it.json",
-    "ja": "/loleaflet/dist/l10n/uno/ja.json",
-    "jv": "/loleaflet/dist/l10n/uno/jv.json",
-    "ka": "/loleaflet/dist/l10n/uno/ka.json",
-    "kk": "/loleaflet/dist/l10n/uno/kk.json",
-    "kl": "/loleaflet/dist/l10n/uno/kl.json",
-    "km": "/loleaflet/dist/l10n/uno/km.json",
-    "kmr-Latn": "/loleaflet/dist/l10n/uno/kmr-Latn.json",
-    "kn": "/loleaflet/dist/l10n/uno/kn.json",
-    "kok": "/loleaflet/dist/l10n/uno/kok.json",
-    "ko": "/loleaflet/dist/l10n/uno/ko.json",
-    "ks": "/loleaflet/dist/l10n/uno/ks.json",
-    "ky": "/loleaflet/dist/l10n/uno/ky.json",
-    "lb": "/loleaflet/dist/l10n/uno/lb.json",
-    "lo": "/loleaflet/dist/l10n/uno/lo.json",
-    "lt": "/loleaflet/dist/l10n/uno/lt.json",
-    "lv": "/loleaflet/dist/l10n/uno/lv.json",
-    "mai": "/loleaflet/dist/l10n/uno/mai.json",
-    "mk": "/loleaflet/dist/l10n/uno/mk.json",
-    "ml": "/loleaflet/dist/l10n/uno/ml.json",
-    "mni": "/loleaflet/dist/l10n/uno/mni.json",
-    "mn": "/loleaflet/dist/l10n/uno/mn.json",
-    "mr": "/loleaflet/dist/l10n/uno/mr.json",
-    "my": "/loleaflet/dist/l10n/uno/my.json",
-    "nb": "/loleaflet/dist/l10n/uno/nb.json",
-    "ne": "/loleaflet/dist/l10n/uno/ne.json",
-    "nl": "/loleaflet/dist/l10n/uno/nl.json",
-    "nn": "/loleaflet/dist/l10n/uno/nn.json",
-    "nr": "/loleaflet/dist/l10n/uno/nr.json",
-    "nso": "/loleaflet/dist/l10n/uno/nso.json",
-    "oc": "/loleaflet/dist/l10n/uno/oc.json",
-    "om": "/loleaflet/dist/l10n/uno/om.json",
-    "or": "/loleaflet/dist/l10n/uno/or.json",
-    "pa-in": "/loleaflet/dist/l10n/uno/pa-IN.json",
-    "pl": "/loleaflet/dist/l10n/uno/pl.json",
-    "pt-br": "/loleaflet/dist/l10n/uno/pt-BR.json",
-    "pt": "/loleaflet/dist/l10n/uno/pt.json",
-    "ro": "/loleaflet/dist/l10n/uno/ro.json",
-    "ru": "/loleaflet/dist/l10n/uno/ru.json",
-    "rw": "/loleaflet/dist/l10n/uno/rw.json",
-    "sah": "/loleaflet/dist/l10n/uno/sah.json",
-    "sa": "/loleaflet/dist/l10n/uno/sa-IN.json",
-    "sat": "/loleaflet/dist/l10n/uno/sat.json",
-    "sd": "/loleaflet/dist/l10n/uno/sd.json",
-    "sid": "/loleaflet/dist/l10n/uno/sid.json",
-    "si": "/loleaflet/dist/l10n/uno/si.json",
-    "sk": "/loleaflet/dist/l10n/uno/sk.json",
-    "sl": "/loleaflet/dist/l10n/uno/sl.json",
-    "sq": "/loleaflet/dist/l10n/uno/sq.json",
-    "sr-Latn": "/loleaflet/dist/l10n/uno/sr-Latn.json",
-    "sr": "/loleaflet/dist/l10n/uno/sr.json",
-    "ss": "/loleaflet/dist/l10n/uno/ss.json",
-    "st": "/loleaflet/dist/l10n/uno/st.json",
-    "sv": "/loleaflet/dist/l10n/uno/sv.json",
-    "sw": "/loleaflet/dist/l10n/uno/sw-TZ.json",
-    "ta": "/loleaflet/dist/l10n/uno/ta.json",
-    "te": "/loleaflet/dist/l10n/uno/te.json",
-    "tg": "/loleaflet/dist/l10n/uno/tg.json",
-    "th": "/loleaflet/dist/l10n/uno/th.json",
-    "ti": "/loleaflet/dist/l10n/uno/ti.json",
-    "tn": "/loleaflet/dist/l10n/uno/tn.json",
-    "tr": "/loleaflet/dist/l10n/uno/tr.json",
-    "ts": "/loleaflet/dist/l10n/uno/ts.json",
-    "tt": "/loleaflet/dist/l10n/uno/tt.json",
-    "ug": "/loleaflet/dist/l10n/uno/ug.json",
-    "uk": "/loleaflet/dist/l10n/uno/uk.json",
-    "ur": "/loleaflet/dist/l10n/uno/ur.json",
-    "uz": "/loleaflet/dist/l10n/uno/uz.json",
-    "ve": "/loleaflet/dist/l10n/uno/ve.json",
-    "vi": "/loleaflet/dist/l10n/uno/vi.json",
-    "xh": "/loleaflet/dist/l10n/uno/xh.json",
-    "zh-cn": "/loleaflet/dist/l10n/uno/zh-CN.json",
-    "zh-tw": "/loleaflet/dist/l10n/uno/zh-TW.json",
-    "zu": "/loleaflet/dist/l10n/uno/zu.json"
+    "ab": "l10n/uno/ab.json",
+    "af": "l10n/uno/af.json",
+    "am": "l10n/uno/am.json",
+    "an": "l10n/uno/an.json",
+    "ar": "l10n/uno/ar.json",
+    "as": "l10n/uno/as.json",
+    "ast": "l10n/uno/ast.json",
+    "az": "l10n/uno/az.json",
+    "be": "l10n/uno/be.json",
+    "bg": "l10n/uno/bg.json",
+    "bn-in": "l10n/uno/bn-IN.json",
+    "bn": "l10n/uno/bn.json",
+    "bo": "l10n/uno/bo.json",
+    "br": "l10n/uno/br.json",
+    "brx": "l10n/uno/brx.json",
+    "bs": "l10n/uno/bs.json",
+    "ca": "l10n/uno/ca.json",
+    "ca-valencia": "l10n/uno/ca-valencia.json",
+    "cs": "l10n/uno/cs.json",
+    "cy": "l10n/uno/cy.json",
+    "da": "l10n/uno/da.json",
+    "de": "l10n/uno/de.json",
+    "dgo": "l10n/uno/dgo.json",
+    "dz": "l10n/uno/dz.json",
+    "el": "l10n/uno/el.json",
+    "en-gb": "l10n/uno/en-GB.json",
+    "en-za": "l10n/uno/en-ZA.json",
+    "eo": "l10n/uno/eo.json",
+    "es": "l10n/uno/es.json",
+    "et": "l10n/uno/et.json",
+    "eu": "l10n/uno/eu.json",
+    "fa": "l10n/uno/fa.json",
+    "fi": "l10n/uno/fi.json",
+    "fr": "l10n/uno/fr.json",
+    "ga": "l10n/uno/ga.json",
+    "gd": "l10n/uno/gd.json",
+    "gl": "l10n/uno/gl.json",
+    "gn": "l10n/uno/gug.json",
+    "gu": "l10n/uno/gu.json",
+    "he": "l10n/uno/he.json",
+    "hi": "l10n/uno/hi.json",
+    "hr": "l10n/uno/hr.json",
+    "hu": "l10n/uno/hu.json",
+    "id": "l10n/uno/id.json",
+    "is": "l10n/uno/is.json",
+    "it": "l10n/uno/it.json",
+    "ja": "l10n/uno/ja.json",
+    "jv": "l10n/uno/jv.json",
+    "ka": "l10n/uno/ka.json",
+    "kk": "l10n/uno/kk.json",
+    "kl": "l10n/uno/kl.json",
+    "km": "l10n/uno/km.json",
+    "kmr-Latn": "l10n/uno/kmr-Latn.json",
+    "kn": "l10n/uno/kn.json",
+    "kok": "l10n/uno/kok.json",
+    "ko": "l10n/uno/ko.json",
+    "ks": "l10n/uno/ks.json",
+    "ky": "l10n/uno/ky.json",
+    "lb": "l10n/uno/lb.json",
+    "lo": "l10n/uno/lo.json",
+    "lt": "l10n/uno/lt.json",
+    "lv": "l10n/uno/lv.json",
+    "mai": "l10n/uno/mai.json",
+    "mk": "l10n/uno/mk.json",
+    "ml": "l10n/uno/ml.json",
+    "mni": "l10n/uno/mni.json",
+    "mn": "l10n/uno/mn.json",
+    "mr": "l10n/uno/mr.json",
+    "my": "l10n/uno/my.json",
+    "nb": "l10n/uno/nb.json",
+    "ne": "l10n/uno/ne.json",
+    "nl": "l10n/uno/nl.json",
+    "nn": "l10n/uno/nn.json",
+    "nr": "l10n/uno/nr.json",
+    "nso": "l10n/uno/nso.json",
+    "oc": "l10n/uno/oc.json",
+    "om": "l10n/uno/om.json",
+    "or": "l10n/uno/or.json",
+    "pa-in": "l10n/uno/pa-IN.json",
+    "pl": "l10n/uno/pl.json",
+    "pt-br": "l10n/uno/pt-BR.json",
+    "pt": "l10n/uno/pt.json",
+    "ro": "l10n/uno/ro.json",
+    "ru": "l10n/uno/ru.json",
+    "rw": "l10n/uno/rw.json",
+    "sah": "l10n/uno/sah.json",
+    "sa": "l10n/uno/sa-IN.json",
+    "sat": "l10n/uno/sat.json",
+    "sd": "l10n/uno/sd.json",
+    "sid": "l10n/uno/sid.json",
+    "si": "l10n/uno/si.json",
+    "sk": "l10n/uno/sk.json",
+    "sl": "l10n/uno/sl.json",
+    "sq": "l10n/uno/sq.json",
+    "sr-Latn": "l10n/uno/sr-Latn.json",
+    "sr": "l10n/uno/sr.json",
+    "ss": "l10n/uno/ss.json",
+    "st": "l10n/uno/st.json",
+    "sv": "l10n/uno/sv.json",
+    "sw": "l10n/uno/sw-TZ.json",
+    "ta": "l10n/uno/ta.json",
+    "te": "l10n/uno/te.json",
+    "tg": "l10n/uno/tg.json",
+    "th": "l10n/uno/th.json",
+    "ti": "l10n/uno/ti.json",
+    "tn": "l10n/uno/tn.json",
+    "tr": "l10n/uno/tr.json",
+    "ts": "l10n/uno/ts.json",
+    "tt": "l10n/uno/tt.json",
+    "ug": "l10n/uno/ug.json",
+    "uk": "l10n/uno/uk.json",
+    "ur": "l10n/uno/ur.json",
+    "uz": "l10n/uno/uz.json",
+    "ve": "l10n/uno/ve.json",
+    "vi": "l10n/uno/vi.json",
+    "xh": "l10n/uno/xh.json",
+    "zh-cn": "l10n/uno/zh-CN.json",
+    "zh-tw": "l10n/uno/zh-TW.json",
+    "zu": "l10n/uno/zu.json"
 }
diff --git a/loleaflet/dist/selectionMarkers.css b/loleaflet/dist/selectionMarkers.css
index 6473f0b..8957efd 100644
--- a/loleaflet/dist/selectionMarkers.css
+++ b/loleaflet/dist/selectionMarkers.css
@@ -2,12 +2,12 @@
 	margin-left: -28px;
 	width: 30px;
 	height: 44px;
-	background-image: url(/loleaflet/dist/images/handle_start.png);
+	background-image: url('../images/handle_start.png');
 	}
 
 .leaflet-selection-marker-end {
 	margin-left: -2px;
 	width: 30px;
 	height: 44px;
-	background-image: url(/loleaflet/dist/images/handle_end.png);
+	background-image: url('../images/handle_end.png');
 	}
diff --git a/loleaflet/dist/toolbar.css b/loleaflet/dist/toolbar.css
index d607b39..2713eec 100644
--- a/loleaflet/dist/toolbar.css
+++ b/loleaflet/dist/toolbar.css
@@ -213,62 +213,62 @@ button.leaflet-control-search-next
     border-style: solid;
 }
 
-.w2ui-icon.accepttrackedchanges{ background: url('/loleaflet/dist/images/lc_accepttrackedchanges.png') no-repeat center !important; }
-.w2ui-icon.alignblock{ background: url('/loleaflet/dist/images/lc_alignblock.png') no-repeat center !important; }
-.w2ui-icon.alignhorizontal{ background: url('/loleaflet/dist/images/lc_alignhorizontalcenter.png') no-repeat center !important; }
-.w2ui-icon.alignleft{ background: url('/loleaflet/dist/images/lc_alignleft.png') no-repeat center !important; }
-.w2ui-icon.alignright{ background: url('/loleaflet/dist/images/lc_alignright.png') no-repeat center !important; }
-.w2ui-icon.autosum{ background: url('/loleaflet/dist/images/lc_autosum.png') no-repeat center !important; }
-.w2ui-icon.backcolor{ background: url('/loleaflet/dist/images/lc_backcolor.png') no-repeat center !important; }
-.w2ui-icon.bold{ background: url('/loleaflet/dist/images/lc_bold.png') no-repeat center !important; }
-.w2ui-icon.annotation{ background: url('/loleaflet/dist/images/lc_showannotations.png') no-repeat center !important; }
-.w2ui-icon.bullet{ background: url('/loleaflet/dist/images/lc_defaultbullet.png') no-repeat center !important; }
-.w2ui-icon.cancel{ background: url('/loleaflet/dist/images/lc_cancel.png') no-repeat center !important; }
-.w2ui-icon.color{ background: url('/loleaflet/dist/images/lc_color.png') no-repeat center !important; }
-.w2ui-icon.closedoc{ background: url('/loleaflet/dist/images/lc_closedoc.png') no-repeat center !important; }
-.w2ui-icon.decrementindent{ background: url('/loleaflet/dist/images/lc_decrementindent.png') no-repeat center !important; }
-.w2ui-icon.deletepage{ background: url('/loleaflet/dist/images/lc_deletepage.png') no-repeat center !important; }
-.w2ui-icon.duplicatepage{ background: url('/loleaflet/dist/images/lc_duplicatepage.png') no-repeat center !important; }
-.w2ui-icon.edit{ background: url('/loleaflet/dist/images/lc_editdoc.png') no-repeat center !important; }
-.w2ui-icon.equal{ background: url('/loleaflet/dist/images/lc26049.png') no-repeat center !important; }
-.w2ui-icon.help{ background: url('/loleaflet/dist/images/lc_helpindex.png') no-repeat center !important; }
-.w2ui-icon.incrementindent{ background: url('/loleaflet/dist/images/lc_decrementlevel.png') no-repeat center !important; }
-.w2ui-icon.insertpage{ background: url('/loleaflet/dist/images/lc_insertpage.png') no-repeat center !important; }
-.w2ui-icon.italic{ background: url('/loleaflet/dist/images/lc_italic.png') no-repeat center !important; }
-.w2ui-icon.insertgraphic{ background: url('/loleaflet/dist/images/lc_gallery.png') no-repeat center !important; }
-.w2ui-icon.inserttable{ background: url('/loleaflet/dist/images/lc_inserttable.png') no-repeat center !important; }
-.w2ui-icon.next{ background: url('/loleaflet/dist/images/lc_downsearch.png') no-repeat center !important; }
-.w2ui-icon.numbering{ background: url('/loleaflet/dist/images/lc_defaultnumbering.png') no-repeat center !important; }
-.w2ui-icon.presentation{ background: url('/loleaflet/dist/images/lc_dia.png') no-repeat center !important; }
-.w2ui-icon.prev{ background: url('/loleaflet/dist/images/lc_upsearch.png') no-repeat center !important; }
-.w2ui-icon.print{ background: url('/loleaflet/dist/images/lc_print.png') no-repeat center !important; }
-.w2ui-icon.redo{ background: url('/loleaflet/dist/images/lc_redo.png') no-repeat center !important; }
-.w2ui-icon.save{ background: url('/loleaflet/dist/images/lc_save.png') no-repeat center !important; }
-.w2ui-icon.saveas{ background: url('/loleaflet/dist/images/lc_saveas.png') no-repeat center !important; }
-.w2ui-icon.strikeout{ background: url('/loleaflet/dist/images/lc_strikeout.png') no-repeat center !important; }
-.w2ui-icon.insertfootnote{ background: url('/loleaflet/dist/images/lc_insertfootnote.png') no-repeat center !important; }
-.w2ui-icon.underline{ background: url('/loleaflet/dist/images/lc_underline.png') no-repeat center !important; }
-.w2ui-icon.undo{ background: url('/loleaflet/dist/images/lc_undo.png') no-repeat center !important; }
-.w2ui-icon.zoomin{ background: url('/loleaflet/dist/images/plus.png') no-repeat center !important; }
-.w2ui-icon.zoomout{ background: url('/loleaflet/dist/images/minus.png') no-repeat center !important; }
-.w2ui-icon.zoomreset{ background: url('/loleaflet/dist/images/lc_view100.png') no-repeat center !important; }
-.w2ui-icon.more{ background: url('/loleaflet/dist/images/lc_downsearch.png') no-repeat center !important; }
-.w2ui-icon.firstrecord{ background: url('/loleaflet/dist/images/lc_firstrecord.png') no-repeat center !important; }
-.w2ui-icon.nextrecord{ background: url('/loleaflet/dist/images/lc_nextrecord.png') no-repeat center !important; }
-.w2ui-icon.prevrecord{ background: url('/loleaflet/dist/images/lc_prevrecord.png') no-repeat center !important; }
-.w2ui-icon.lastrecord{ background: url('/loleaflet/dist/images/lc_lastrecord.png') no-repeat center !important; }
-.w2ui-icon.wraptext{ background: url('/loleaflet/dist/images/lc_wraptext.png') no-repeat center !important; }
-.w2ui-icon.togglemergecells{ background: url('/loleaflet/dist/images/lc_togglemergecells.png') no-repeat center !important; }
-.w2ui-icon.numberformatcurrency{ background: url('/loleaflet/dist/images/lc_currencyfield.png') no-repeat center !important; }
-.w2ui-icon.numberformatpercent{ background: url('/loleaflet/dist/images/lc_numberformatpercent.png') no-repeat center !important; }
-.w2ui-icon.numberformatdecimal{ background: url('/loleaflet/dist/images/lc_numberformatdecimal.png') no-repeat center !important; }
-.w2ui-icon.numberformatdate{ background: url('/loleaflet/dist/images/lc_datefield.png') no-repeat center !important; }
-.w2ui-icon.numberformatincdecimals{ background: url('/loleaflet/dist/images/lc_numberformatincdecimals.png') no-repeat center !important; }
-.w2ui-icon.numberformatdecdecimals{ background: url('/loleaflet/dist/images/lc_numberformatdecdecimals.png') no-repeat center !important; }
-.w2ui-icon.sortascending{ background: url('/loleaflet/dist/images/lc_sortascending.png') no-repeat center !important; }
-.w2ui-icon.sortdescending{ background: url('/loleaflet/dist/images/lc_sortdescending.png') no-repeat center !important; }
-.w2ui-icon.selected{ background: url('/loleaflet/dist/images/lc_ok.png') no-repeat center !important; }
-.w2ui-icon.repair{ background: url('/loleaflet/dist/images/lc_backward.png') no-repeat center !important; }
+.w2ui-icon.accepttrackedchanges{ background: url('../images/lc_accepttrackedchanges.png') no-repeat center !important; }
+.w2ui-icon.alignblock{ background: url('../images/lc_alignblock.png') no-repeat center !important; }
+.w2ui-icon.alignhorizontal{ background: url('../images/lc_alignhorizontalcenter.png') no-repeat center !important; }
+.w2ui-icon.alignleft{ background: url('../images/lc_alignleft.png') no-repeat center !important; }
+.w2ui-icon.alignright{ background: url('../images/lc_alignright.png') no-repeat center !important; }
+.w2ui-icon.autosum{ background: url('../images/lc_autosum.png') no-repeat center !important; }
+.w2ui-icon.backcolor{ background: url('../images/lc_backcolor.png') no-repeat center !important; }
+.w2ui-icon.bold{ background: url('../images/lc_bold.png') no-repeat center !important; }
+.w2ui-icon.annotation{ background: url('../images/lc_showannotations.png') no-repeat center !important; }
+.w2ui-icon.bullet{ background: url('../images/lc_defaultbullet.png') no-repeat center !important; }
+.w2ui-icon.cancel{ background: url('../images/lc_cancel.png') no-repeat center !important; }
+.w2ui-icon.color{ background: url('../images/lc_color.png') no-repeat center !important; }
+.w2ui-icon.closedoc{ background: url('../images/lc_closedoc.png') no-repeat center !important; }
+.w2ui-icon.decrementindent{ background: url('../images/lc_decrementindent.png') no-repeat center !important; }
+.w2ui-icon.deletepage{ background: url('../images/lc_deletepage.png') no-repeat center !important; }
+.w2ui-icon.duplicatepage{ background: url('../images/lc_duplicatepage.png') no-repeat center !important; }
+.w2ui-icon.edit{ background: url('../images/lc_editdoc.png') no-repeat center !important; }
+.w2ui-icon.equal{ background: url('../images/lc26049.png') no-repeat center !important; }
+.w2ui-icon.help{ background: url('../images/lc_helpindex.png') no-repeat center !important; }
+.w2ui-icon.incrementindent{ background: url('../images/lc_decrementlevel.png') no-repeat center !important; }
+.w2ui-icon.insertpage{ background: url('../images/lc_insertpage.png') no-repeat center !important; }
+.w2ui-icon.italic{ background: url('../images/lc_italic.png') no-repeat center !important; }
+.w2ui-icon.insertgraphic{ background: url('../images/lc_gallery.png') no-repeat center !important; }
+.w2ui-icon.inserttable{ background: url('../images/lc_inserttable.png') no-repeat center !important; }
+.w2ui-icon.next{ background: url('../images/lc_downsearch.png') no-repeat center !important; }
+.w2ui-icon.numbering{ background: url('../images/lc_defaultnumbering.png') no-repeat center !important; }
+.w2ui-icon.presentation{ background: url('../images/lc_dia.png') no-repeat center !important; }
+.w2ui-icon.prev{ background: url('../images/lc_upsearch.png') no-repeat center !important; }
+.w2ui-icon.print{ background: url('../images/lc_print.png') no-repeat center !important; }
+.w2ui-icon.redo{ background: url('../images/lc_redo.png') no-repeat center !important; }
+.w2ui-icon.save{ background: url('../images/lc_save.png') no-repeat center !important; }
+.w2ui-icon.saveas{ background: url('../images/lc_saveas.png') no-repeat center !important; }
+.w2ui-icon.strikeout{ background: url('../images/lc_strikeout.png') no-repeat center !important; }
+.w2ui-icon.insertfootnote{ background: url('../images/lc_insertfootnote.png') no-repeat center !important; }
+.w2ui-icon.underline{ background: url('../images/lc_underline.png') no-repeat center !important; }
+.w2ui-icon.undo{ background: url('../images/lc_undo.png') no-repeat center !important; }
+.w2ui-icon.zoomin{ background: url('../images/plus.png') no-repeat center !important; }
+.w2ui-icon.zoomout{ background: url('../images/minus.png') no-repeat center !important; }
+.w2ui-icon.zoomreset{ background: url('../images/lc_view100.png') no-repeat center !important; }
+.w2ui-icon.more{ background: url('../images/lc_downsearch.png') no-repeat center !important; }
+.w2ui-icon.firstrecord{ background: url('../images/lc_firstrecord.png') no-repeat center !important; }
+.w2ui-icon.nextrecord{ background: url('../images/lc_nextrecord.png') no-repeat center !important; }
+.w2ui-icon.prevrecord{ background: url('../images/lc_prevrecord.png') no-repeat center !important; }
+.w2ui-icon.lastrecord{ background: url('../images/lc_lastrecord.png') no-repeat center !important; }
+.w2ui-icon.wraptext{ background: url('../images/lc_wraptext.png') no-repeat center !important; }
+.w2ui-icon.togglemergecells{ background: url('../images/lc_togglemergecells.png') no-repeat center !important; }
+.w2ui-icon.numberformatcurrency{ background: url('../images/lc_currencyfield.png') no-repeat center !important; }
+.w2ui-icon.numberformatpercent{ background: url('../images/lc_numberformatpercent.png') no-repeat center !important; }
+.w2ui-icon.numberformatdecimal{ background: url('../images/lc_numberformatdecimal.png') no-repeat center !important; }
+.w2ui-icon.numberformatdate{ background: url('../images/lc_datefield.png') no-repeat center !important; }
+.w2ui-icon.numberformatincdecimals{ background: url('../images/lc_numberformatincdecimals.png') no-repeat center !important; }
+.w2ui-icon.numberformatdecdecimals{ background: url('../images/lc_numberformatdecdecimals.png') no-repeat center !important; }
+.w2ui-icon.sortascending{ background: url('../images/lc_sortascending.png') no-repeat center !important; }
+.w2ui-icon.sortdescending{ background: url('../images/lc_sortdescending.png') no-repeat center !important; }
+.w2ui-icon.selected{ background: url('../images/lc_ok.png') no-repeat center !important; }
+.w2ui-icon.repair{ background: url('../images/lc_backward.png') no-repeat center !important; }
 
 .inserttable-pop {
     z-index: 100000;


More information about the Libreoffice-commits mailing list