UNPKG

locize

Version:

This package adds the incontext editor to your i18next setup.

134 lines (127 loc) 4.43 kB
'use strict'; 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;