locize
Version:
This package adds the incontext editor to your i18next setup.
163 lines (156 loc) • 5.6 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var vars = require('../vars.js');
var store = require('../store.js');
var uninstrumentedStore = require('../uninstrumentedStore.js');
var utils = require('../utils.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var legacyEventMapping = {
committed: 'commitKeys'
};
function getMappedLegacyEvent(msg) {
if (legacyEventMapping[msg]) return legacyEventMapping[msg];
return msg;
}
function addLocizeSavedHandler(handler) {
api.locizeSavedHandler = handler;
}
function setEditorLng(lng) {
api.sendCurrentTargetLanguage(lng);
}
var pendingMsgs = [];
var allowedActionsBeforeInit = ['locizeIsEnabled', 'requestInitialize'];
function sendMessage(action, payload) {
if (!api.source) {
var _document$getElementB;
api.source = (_document$getElementB = document.getElementById('i18next-editor-iframe')) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.contentWindow;
}
if (!api.origin) api.origin = vars.getIframeUrl();
if (!api.source || !api.source.postMessage || !api.initialized && allowedActionsBeforeInit.indexOf(action) < 0) {
pendingMsgs.push({
action: action,
payload: payload
});
return;
}
if (api.legacy) {
api.source.postMessage(_objectSpread({
message: action
}, payload), api.origin);
} else {
api.source.postMessage({
sender: 'i18next-editor',
senderAPIVersion: 'v2',
action: action,
message: action,
payload: payload
}, api.origin);
}
var todo = pendingMsgs;
pendingMsgs = [];
todo.forEach(function (_ref) {
var action = _ref.action,
payload = _ref.payload;
sendMessage(action, payload);
});
}
var sendCurrentParsedContentDebounced = function sendCurrentParsedContentDebounced() {
sendMessage('sendCurrentParsedContent', {
content: Object.values(store.store.data).map(function (item) {
return {
id: item.id,
keys: item.keys
};
}),
uninstrumented: Object.values(uninstrumentedStore.uninstrumentedStore.data).map(function (item) {
return {
id: item.id,
keys: item.keys
};
})
});
};
var handlers = {};
var repeat = 5;
var api = {
init: function init(implementation, clickHandler) {
api.i18n = implementation;
api.clickHandler = clickHandler;
},
requestInitialize: function requestInitialize(payload) {
sendMessage('requestInitialize', payload);
if (api.initInterval) return;
api.initInterval = setInterval(function () {
repeat = repeat - 1;
api.requestInitialize(payload);
if (repeat < 0 && api.initInterval) {
clearInterval(api.initInterval);
delete api.initInterval;
}
}, 2000);
},
selectKey: function selectKey(meta) {
sendMessage('selectKey', meta);
},
confirmResourceBundle: function confirmResourceBundle(payload) {
sendMessage('confirmResourceBundle', payload);
},
sendCurrentParsedContent: utils.debounce(sendCurrentParsedContentDebounced, 500),
sendCurrentTargetLanguage: function sendCurrentTargetLanguage(lng) {
sendMessage('sendCurrentTargetLanguage', {
targetLng: lng || api.i18n && api.i18n.getLng && api.i18n.getLng()
});
},
sendHrefchanged: function sendHrefchanged(href) {
sendMessage('hrefChanged', {
href: href
});
},
addHandler: function addHandler(action, fc) {
if (!handlers[action]) handlers[action] = [];
handlers[action].push(fc);
},
sendLocizeIsEnabled: function sendLocizeIsEnabled(payload) {
sendMessage('locizeIsEnabled', _objectSpread(_objectSpread({}, payload), {}, {
enabled: true
}));
},
onAddedKey: function onAddedKey(lng, ns, key, value) {
var msg = {
lng: lng,
ns: ns,
key: key,
value: value
};
sendMessage('added', msg);
}
};
if (typeof window !== 'undefined') {
window.addEventListener('message', function (e) {
var _e$data = e.data,
sender = _e$data.sender,
action = _e$data.action,
message = _e$data.message,
payload = _e$data.payload;
if (message) {
var usedEventName = getMappedLegacyEvent(message);
if (handlers[usedEventName]) {
handlers[usedEventName].forEach(function (fc) {
fc(payload, e);
});
}
} else if (sender === 'i18next-editor-frame' && handlers[action]) {
handlers[action].forEach(function (fc) {
fc(payload, e);
});
}
});
}
exports.addLocizeSavedHandler = addLocizeSavedHandler;
exports.api = api;
exports.sendMessage = sendMessage;
exports.setEditorLng = setEditorLng;