locize
Version:
This package adds the incontext editor to your i18next setup.
58 lines (55 loc) • 2.1 kB
JavaScript
import { store } from '../store.js';
import { uninstrumentedStore } from '../uninstrumentedStore.js';
import { isInViewport, mouseDistanceFromElement } from './utils.js';
import { debounce } from '../utils.js';
import { resetHighlight, highlight, highlightUninstrumented } from './highlightNode.js';
function isOccluded(node) {
var rect = node.getBoundingClientRect();
if (!rect.width || !rect.height) return true;
var x = rect.left + rect.width / 2;
var y = rect.top + rect.height / 2;
var topEl = document.elementFromPoint(x, y);
if (!topEl) return true;
if (topEl.dataset && topEl.dataset.i18nextEditorElement === 'true') return false;
return !node.contains(topEl) && !topEl.contains(node);
}
var debouncedUpdateDistance = debounce(function (e, observer) {
Object.values(store.data).forEach(function (item) {
if (!isInViewport(item.node)) return;
if (isOccluded(item.node)) {
resetHighlight(item, item.node, item.keys);
return;
}
var distance = mouseDistanceFromElement(e, item.node);
if (distance < 5) {
highlight(item, item.node, item.keys);
} else if (distance > 5) {
var boxDistance = item.ribbonBox ? mouseDistanceFromElement(e, item.ribbonBox) : 1000;
if (boxDistance > 10) resetHighlight(item, item.node, item.keys);
}
});
Object.values(uninstrumentedStore.data).forEach(function (item) {
if (!isInViewport(item.node)) return;
if (isOccluded(item.node)) {
resetHighlight(item, item.node, item.keys);
return;
}
var distance = mouseDistanceFromElement(e, item.node);
if (distance < 10) {
highlightUninstrumented(item, item.node, item.keys);
} else if (distance > 10) {
resetHighlight(item, item.node, item.keys);
}
});
}, 50);
var currentFC;
function startMouseTracking(observer) {
currentFC = function handle(e) {
debouncedUpdateDistance(e, observer);
};
document.addEventListener('mousemove', currentFC);
}
function stopMouseTracking() {
document.removeEventListener('mousemove', currentFC);
}
export { startMouseTracking, stopMouseTracking };