loleaflet/.eslintignore |    1 
 loleaflet/Makefile.am   |   31 ++++-
 loleaflet/README        |    3 
 loleaflet/js/l10n.js    |  284 ++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 314 insertions(+), 5 deletions(-)

New commits:
commit 8ce1846e5e4e2f663f390ff7e0e21ab24df5c843
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Wed Feb 19 10:17:31 2020 -0400
Commit:     Henry Castro <hcas...@collabora.com>
CommitDate: Wed Feb 19 17:32:10 2020 +0100

    loleaflet: import l10n.js library
    
    The file was imported from node_modules/l10n-for-node/l10n.js,
    the main reason is to analyze the source code, debug and patch
    if necessary
    
    To obtain the source code from npm repository
    
    make libs
    
    Change-Id: I7bd4d400c504f57a94566e187c6d26361aed8bd0
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89043
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Henry Castro <hcas...@collabora.com>

diff --git a/loleaflet/.eslintignore b/loleaflet/.eslintignore
index 6f11545b6..4d6c90ac9 100644
--- a/loleaflet/.eslintignore
+++ b/loleaflet/.eslintignore
@@ -1,4 +1,5 @@
 # We only directly edit toolbar.js in dist/
+**/js/l10n.js
 **/js/w2ui-1.5.rc1.js
 **/src/unocommands.js
 **/src/viamapi-client.js
diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am
index edc6551aa..e52c2288a 100644
--- a/loleaflet/Makefile.am
+++ b/loleaflet/Makefile.am
@@ -60,6 +60,20 @@ $(foreach file,$(1),$(call file_target,\
        $(file)))
 endef
 
+define npm_source
+       for package in $(1); do \
+               npm pack $${package}; \
+               fname=$$(ls *.tgz); \
+               pdir=$${fname%%.tgz}; \
+               mkdir -p $${pdir}; \
+               tar -xzf $${fname} -C $${pdir} --strip-components=1; \
+               rm $${fname}; \
+       done
+endef
+
+NODE_MODULES_SRC =\
+       l10n-for-node@0.0.1
+
 LOLEAFLET_CSS =\
        $(builddir)/node_modules/select2/dist/css/select2.css \
        $(srcdir)/css/w2ui-1.5.rc1.css \
@@ -111,15 +125,17 @@ NODE_MODULES_JS =\
        node_modules/vex-js/dist/js/vex.combined.js \
        node_modules/@braintree/sanitize-url/dist.js
 
-LOLEAFLET_LIBS_JS =\
-       jquery.mCustomScrollbar.js \
-       w2ui-1.5.rc1.js
+LOLEAFLET_LIBS_JS =
 
 if !ENABLE_MOBILEAPP
-NODE_MODULES_JS +=\
-       node_modules/l10n-for-node/l10n.js
+LOLEAFLET_LIBS_JS +=\
+       l10n.js
 endif
 
+LOLEAFLET_LIBS_JS +=\
+       jquery.mCustomScrollbar.js \
+       w2ui-1.5.rc1.js
+
 NODE_MODULES_JS_SRC = $(patsubst %.js,$(builddir)/%.js,$(NODE_MODULES_JS))
 NODE_MODULES_JS_DST = $(patsubst %.js,$(builddir)/dist/%.js,$(NODE_MODULES_JS))
 
@@ -331,6 +347,11 @@ install-data-hook:
        mkdir -p $(DESTDIR)$(pkgdatadir)/loleaflet; \
        cp -ar dist/ $(DESTDIR)$(pkgdatadir)/loleaflet/;
 
+libs:
+       @mkdir -p $(abs_srcdir)/libs
+       @cd $(abs_srcdir)/libs \
+       && $(call npm_source,$(NODE_MODULES_SRC))
+
 pot:
        xgettext --from-code=UTF-8 --keyword=_ 
--output=po/templates/loleaflet-ui.pot \
                admin/admin.strings.js \
diff --git a/loleaflet/README b/loleaflet/README
index d9faac10f..d9a3dbddc 100644
--- a/loleaflet/README
+++ b/loleaflet/README
@@ -38,6 +38,9 @@ To update any of the dependency, process often goes like this:
 If you have not installed `shrinkpack' globally using `npm install -g 
shrinkpack@next', it should be
 in node_modules/.bin/shrinkpack, so you can use the binary from there.
 
+If you need to get the sources:
+       make libs
+
 Building
 --------
 
diff --git a/loleaflet/js/l10n.js b/loleaflet/js/l10n.js
new file mode 100644
index 000000000..4beab6e7a
--- /dev/null
+++ b/loleaflet/js/l10n.js
@@ -0,0 +1,284 @@
+/*
+ * l10n.js
+ * 2016-05-17
+ * 
+ * By Eli Grey, http://eligrey.com
+ * Licensed under the MIT License
+ *   See https://github.com/eligrey/l10n.js/blob/master/LICENSE.md
+ */
+
+/*global XMLHttpRequest, setTimeout, document, navigator, ActiveXObject*/
+
+/*! @source http://purl.eligrey.com/github/l10n.js/blob/master/l10n.js*/
+
+(function () {
+"use strict";
+
+var
+  undef_type = "undefined"
+, string_type = "string"
+, nav = {}
+, String_ctr = String
+, has_own_prop = Object.prototype.hasOwnProperty
+, load_queues = {}
+, localizations = {}
+, FALSE = !1
+, TRUE = !0
+, browserless = FALSE
+// the official format is application/vnd.oftn.l10n+json, though l10n.js will 
also
+// accept application/x-l10n+json and application/l10n+json
+, l10n_js_media_type = 
/^\s*application\/(?:vnd\.oftn\.|x-)?l10n\+json\s*(?:$|;)/i
+, XHR
+
+// property minification aids
+, $locale = "locale"
+, $default_locale = "defaultLocale"
+, $to_locale_string = "toLocaleString"
+, $to_lowercase = "toLowerCase"
+
+, array_index_of = Array.prototype.indexOf || function (item) {
+       var
+         len = this.length
+       , i   = 0
+       ;
+       
+       for (; i < len; i++) {
+               if (i in this && this[i] === item) {
+                       return i;
+               }
+       }
+       
+       return -1;
+}
+, request_JSON = function (uri) {
+    if(browserless)
+        return loadFromDisk(uri);
+    
+       var req  = new XHR(),
+               data = {};
+       
+       // sadly, this has to be blocking to allow for a graceful degrading API
+       req.open("GET", uri, FALSE);
+       req.send(null);
+       
+       // Status codes can be inconsistent across browsers so we simply try to 
parse
+       // the response text and catch any errors. This deals with failed 
requests as
+       // well as malformed json files.
+       try {
+               data = JSON.parse(req.responseText);
+       } catch(e) {
+               // warn about error without stopping execution
+               setTimeout(function () {
+                       // Error messages are not localized as not to cause an 
infinite loop
+                       var l10n_err = new Error("Unable to load localization 
data: " + uri);
+                       l10n_err.name = "Localization Error";
+                       throw l10n_err;
+               }, 0);
+       }
+
+       return data;
+}
+, load = String_ctr[$to_locale_string] = function (data) {
+       // don't handle function.toLocaleString(indentationAmount:Number)
+       if (arguments.length > 0 && typeof data !== "number") {
+               if (typeof data === string_type) {
+                       load(request_JSON(data));
+               } else if (data === FALSE) {
+                       // reset all localizations
+                       localizations = {};
+               } else {
+                       // Extend current localizations instead of completely 
overwriting them
+                       var locale, localization, message;
+                       for (locale in data) {
+                               if (has_own_prop.call(data, locale)) {
+                                       localization = data[locale];
+                                       locale = locale[$to_lowercase]();
+                                       
+                                       if (!(locale in localizations) || 
localization === FALSE) {
+                                               // reset locale if not existing 
or reset flag is specified
+                                               localizations[locale] = {};
+                                       }
+                                       
+                                       if (localization === FALSE) {
+                                               continue;
+                                       }
+                                       
+                                       // URL specified
+                                       if (typeof localization === 
string_type) {
+                                               if 
(String_ctr[$locale][$to_lowercase]().indexOf(locale) === 0) {
+                                                       localization = 
request_JSON(localization);
+                                               } else {
+                                                       // queue loading locale 
if not needed
+                                                       if (!(locale in 
load_queues)) {
+                                                               
load_queues[locale] = [];
+                                                       }
+                                                       
load_queues[locale].push(localization);
+                                                       continue;
+                                               }
+                                       }
+                                       
+                                       for (message in localization) {
+                                               if 
(has_own_prop.call(localization, message)) {
+                                                       
localizations[locale][message] = localization[message];
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+       // Return what function.toLocaleString() normally returns
+       return Function.prototype[$to_locale_string].apply(String_ctr, 
arguments);
+}
+, loadFromDisk = String_ctr[$to_locale_string] = function (uri) {
+        const fs = require('fs');
+        var read = fs.readFileSync(uri, 'utf8');
+        return JSON.parse(read);
+}
+, process_load_queue = function (locale) {
+       var
+         queue = load_queues[locale]
+       , i = 0
+       , len = queue.length
+       , localization
+       ;
+       
+       for (; i < len; i++) {
+               localization = {};
+               localization[locale] = request_JSON(queue[i]);
+               load(localization);
+       }
+       
+       delete load_queues[locale];
+}
+, use_default
+, localize = String_ctr.prototype[$to_locale_string] = function () {
+       var
+         using_default = use_default
+       , current_locale = String_ctr[using_default ? $default_locale : $locale]
+       , parts = current_locale[$to_lowercase]().split("-")
+       , i = parts.length
+       , this_val = this.valueOf()
+       , locale
+       ;
+
+       use_default = FALSE;
+       
+       // Iterate through locales starting at most-specific until a 
localization is found
+       do {
+               locale = parts.slice(0, i).join("-");
+               // load locale if not loaded
+               if (locale in load_queues) {
+                       process_load_queue(locale);
+               }
+               if (locale in localizations && this_val in 
localizations[locale]) {
+                       return localizations[locale][this_val];
+               }
+       }
+       while (i--);
+       
+       if (!using_default && String_ctr[$default_locale]) {
+               use_default = TRUE;
+               return localize.call(this_val);
+       }
+
+       return this_val;
+}
+;
+
+try 
+{
+    nav = self.navigator;
+}
+catch(selfNotFoundException)
+{
+   if(global.nav)
+   {
+        nav = global.nav;
+   }
+   else
+   {
+       var nodeError = "Problem setting nav in L10N. You are most likely 
running in a non-browser environment like Node." + 
+        "If this is the case, you can resolve this error by setting global.nav 
to an object which contains a \"language\"  field. ";
+       throw new Error(nodeError);
+   }
+   browserless = TRUE;
+}
+
+if (!browserless && typeof XMLHttpRequest === undef_type && typeof 
ActiveXObject !== undef_type) {
+       var AXO = ActiveXObject;
+       
+       XHR = function () {
+               try {
+                       return new AXO("Msxml2.XMLHTTP.6.0");
+               } catch (xhrEx1) {}
+               try {
+                       return new AXO("Msxml2.XMLHTTP.3.0");
+               } catch (xhrEx2) {}
+               try {
+                       return new AXO("Msxml2.XMLHTTP");
+               } catch (xhrEx3) {}
+       
+               throw new Error("XMLHttpRequest not supported by this 
browser.");
+       };
+} else {
+    try
+    {
+        XHR = XMLHttpRequest;
+    }
+    catch(xhrEx4)
+    {   
+        if(global.XMLHttpRequest) {
+            XHR = global.XMLHttpRequest;
+        }
+        else {
+           var nodeError = "Problem setting XHR in L10N. You are most likely 
running in a non-browser environment like Node." + 
+            "If this is the case, you can resolve this error by setting 
global.XMLHttpRequest to a function which produces XMLHttpRequests. " + 
+            "\nTip: if you are using node, you might want to use the XHR2 
package (usage: global.XMLHttpRequest = require('xhr2')";
+            throw new Error(nodeError); 
+        }
+    }
+}
+
+String_ctr[$default_locale] = String_ctr[$default_locale] || "";
+String_ctr[$locale] = nav && (nav.language || nav.userLanguage) || "";
+
+if (!browserless || typeof document !== undef_type) {
+       var
+         elts = document.getElementsByTagName("link")
+       , i = elts.length
+       , localization
+       ;
+       
+       while (i--) {
+               var
+                 elt = elts[i]
+               , rel = (elt.getAttribute("rel") || 
"")[$to_lowercase]().split(/\s+/)
+               ;
+               
+               if (l10n_js_media_type.test(elt.type)) {
+                       if (array_index_of.call(rel, "localizations") !== -1) {
+                               // multiple localizations
+                               load(elt.getAttribute("href"));
+                       } else if (array_index_of.call(rel, "localization") !== 
-1) {
+                               // single localization
+                               localization = {};
+                               localization[(elt.getAttribute("hreflang") || 
"")[$to_lowercase]()] =
+                                       elt.getAttribute("href");
+                               load(localization);
+                       }
+               }
+       }
+}
+else
+{
+    if(global.l10NLocalFilePath) {
+        load(global.l10NLocalFilePath);
+    }
+    else {
+        var nodeError = "Problem loading localization file. You are most 
likely running in a non-browser environment like Node." + 
+            "If this is the case, you can resolve this error by setting 
global.l10NLocalFilePath to the path of your localization file. ";
+        throw new Error(nodeError); 
+    }
+}
+
+}());
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to