42 lines
1.4 KiB
JavaScript
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));
|
|
}
|