ThunderAI/js/mzta-i18n.js
2024-04-01 22:58:39 +02:00

67 lines
2 KiB
JavaScript

/*
* This file is provided by the addon-developer-support repository at
* https://github.com/thundernest/addon-developer-support
*
* For usage descriptions, please check:
* https://github.com/thundernest/addon-developer-support/tree/master/scripts/i18n
*
* Version 1.1
*
* Derived from:
* http://github.com/piroor/webextensions-lib-l10n
*
* Original license:
* The MIT License, Copyright (c) 2016-2019 YUKI "Piro" Hiroshi
*
*/
var i18n = {
updateString(string) {
let re = new RegExp(this.keyPrefix + "(.+?)__", "g");
return string.replace(re, (matched) => {
const key = matched.slice(this.keyPrefix.length, -2);
let rv = this.extension
? this.extension.localeData.localizeMessage(key)
: messenger.i18n.getMessage(key);
return rv || matched;
});
},
updateSubtree(node) {
const texts = document.evaluate(
'descendant::text()[contains(self::text(), "' + this.keyPrefix + '")]',
node,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0, maxi = texts.snapshotLength; i < maxi; i++) {
const text = texts.snapshotItem(i);
if (text.nodeValue.includes(this.keyPrefix))
text.nodeValue = this.updateString(text.nodeValue);
}
const attributes = document.evaluate(
'descendant::*/attribute::*[contains(., "' + this.keyPrefix + '")]',
node,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0, maxi = attributes.snapshotLength; i < maxi; i++) {
const attribute = attributes.snapshotItem(i);
if (attribute.value.includes(this.keyPrefix))
attribute.value = this.updateString(attribute.value);
}
},
updateDocument(options = {}) {
this.extension = null;
this.keyPrefix = "__MSG_";
if (options) {
if (options.extension) this.extension = options.extension;
if (options.keyPrefix) this.keyPrefix = options.keyPrefix;
}
this.updateSubtree(document);
},
};