locize
Version:
This package adds the incontext editor to your i18next setup.
134 lines (127 loc) • 4.43 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
require('@babel/runtime/helpers/typeof');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
function debounce(func, wait, immediate) {
var timeout;
return function () {
var context = this;
var args = arguments;
var later = function later() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
function getAttribute(el, name) {
return el && el.getAttribute && el.getAttribute(name);
}
function getElementI18nKey(el) {
var key = getAttribute(el, 'data-i18n');
if (key) return key;
if (el.nodeType === window.Node.TEXT_NODE && el.parentElement) {
return getElementI18nKey(el.parentElement);
}
return undefined;
}
function parseAttrFromKey(key) {
var attr = 'text';
if (key.indexOf('[') === 0) {
var parts = key.split(']');
key = parts[1];
attr = parts[0].substr(1, parts[0].length - 1);
}
var newKey = key.indexOf(';') === key.length - 1 ? key.substr(0, key.length - 2) : key;
return [newKey, attr];
}
function getI18nMetaFromNode(el) {
var hasNamespacePrependToKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var key = getElementI18nKey(el);
var ns = getElementNamespace(el);
var allKeys = {};
if (key && key.indexOf(';') >= 0) {
var keys = key.split(';');
for (var ix = 0, lix = keys.length; ix < lix; ix++) {
if (keys[ix] != '') {
var _parseAttrFromKey = parseAttrFromKey(keys[ix]),
_parseAttrFromKey2 = _slicedToArray__default["default"](_parseAttrFromKey, 2),
usedKey = _parseAttrFromKey2[0],
attr = _parseAttrFromKey2[1];
allKeys[attr] = usedKey;
}
}
} else if (key) {
var _parseAttrFromKey3 = parseAttrFromKey(key),
_parseAttrFromKey4 = _slicedToArray__default["default"](_parseAttrFromKey3, 2),
_usedKey = _parseAttrFromKey4[0],
_attr = _parseAttrFromKey4[1];
allKeys[_attr] = _usedKey;
}
if (Object.keys(allKeys).length < 1) return null;
var res = Object.keys(allKeys).reduce(function (mem, attr) {
var key = allKeys[attr];
var usedNS = ns;
var usedKey = key;
if (hasNamespacePrependToKey && key.indexOf(':') > -1) {
var parts = key.split(':');
usedKey = parts[1];
usedNS = parts[0];
}
mem[attr] = {
key: usedKey,
ns: usedNS
};
return mem;
}, {});
return res;
}
function getElementNamespace(el) {
var found;
var find = function find(ele) {
var opts = getAttribute(ele, 'i18next-options');
if (!opts) opts = getAttribute(ele, 'data-i18next-options');
if (!opts) opts = getAttribute(ele, 'i18n-options');
if (!opts) opts = getAttribute(ele, 'data-i18n-options');
if (opts) {
var jsonData = {};
try {
jsonData = JSON.parse(opts);
} catch (e) {}
if (jsonData.ns) found = jsonData.ns;
}
if (!found) found = getAttribute(ele, 'i18next-ns');
if (!found) found = getAttribute(ele, 'data-i18next-ns');
if (!found) found = getAttribute(ele, 'i18n-ns');
if (!found) found = getAttribute(ele, 'data-i18n-ns');
if (!found && ele.parentElement) find(ele.parentElement);
};
find(el);
return found;
}
function getQsParameterByName(name, url) {
if (typeof window === 'undefined') return null;
if (!url) url = window.location.href.toLowerCase();
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');
var results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
var _isInIframe = typeof window !== 'undefined';
try {
_isInIframe = self !== top;
} catch (e) {}
var isInIframe = _isInIframe;
exports.debounce = debounce;
exports.getElementI18nKey = getElementI18nKey;
exports.getElementNamespace = getElementNamespace;
exports.getI18nMetaFromNode = getI18nMetaFromNode;
exports.getQsParameterByName = getQsParameterByName;
exports.isInIframe = isInIframe;