[Libreoffice-commits] online.git: loleaflet/.eslintignore loleaflet/js loleaflet/Makefile.am loleaflet/README
Henry Castro (via logerrit)
logerrit at kemper.freedesktop.org
Wed Feb 19 16:32:31 UTC 2020
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 <hcastro at collabora.com>
AuthorDate: Wed Feb 19 10:17:31 2020 -0400
Commit: Henry Castro <hcastro at 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 <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Henry Castro <hcastro at 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 at 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 at 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);
+ }
+}
+
+}());
More information about the Libreoffice-commits
mailing list