UNPKG

locize

Version:

This package adds the incontext editor to your i18next setup.

121 lines (118 loc) 3.97 kB
import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray'; import '@babel/runtime/helpers/esm/typeof'; 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(_parseAttrFromKey, 2), usedKey = _parseAttrFromKey2[0], attr = _parseAttrFromKey2[1]; allKeys[attr] = usedKey; } } } else if (key) { var _parseAttrFromKey3 = parseAttrFromKey(key), _parseAttrFromKey4 = _slicedToArray(_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; export { debounce, getElementI18nKey, getElementNamespace, getI18nMetaFromNode, getQsParameterByName, isInIframe };