Files
Nexus.Reader/src/NexusReader.UI.Shared/wwwroot/js/selectionHandler.js
T

42 lines
1.4 KiB
JavaScript

export function initSelectionListener(dotNetHelper, container) {
if (!container) return;
console.log("[SelectionHandler] Initializing...");
const handleSelection = () => {
const selection = window.getSelection();
const text = selection.toString().trim();
if (text.length > 3) {
const range = selection.getRangeAt(0);
// Look for the closest block-wrapper
let node = range.commonAncestorContainer;
if (node.nodeType !== 1) node = node.parentElement;
const blockNode = node.closest('[id]');
if (blockNode) {
const rect = range.getBoundingClientRect();
console.log("[SelectionHandler] Selection at screen coords:", rect.top, rect.left);
dotNetHelper.invokeMethodAsync('HandleTextSelected',
text,
blockNode.id,
{
Top: rect.top,
Left: rect.left,
Width: rect.width
});
}
} else {
dotNetHelper.invokeMethodAsync('HandleSelectionCleared');
}
};
// Use multiple triggers for maximum reliability
document.addEventListener('selectionchange', handleSelection);
container.addEventListener('mouseup', () => setTimeout(handleSelection, 10));
}