TelegramPWA/src/util/getMessageIdsForSelectedText.ts
2022-02-25 22:52:48 +02:00

30 lines
1.1 KiB
TypeScript

const ELEMENT_NODE = 1;
export default function getMessageIdsForSelectedText() {
let selectedFragments = window.getSelection()?.getRangeAt(0).cloneContents();
if (!selectedFragments || selectedFragments.childElementCount === 0) {
return;
}
const messageIds = Array.from(selectedFragments.children)
.reduce((result, node) => {
if (node.nodeType === ELEMENT_NODE && node.classList.contains('message-date-group')) {
return Array.from(node.querySelectorAll('.Message'))
.reduce((acc, messageEl) => acc.concat(Number((messageEl as HTMLElement).dataset.messageId)), result);
} else if (node.nodeType === ELEMENT_NODE && node.classList.contains('Message')) {
return result.concat(Number((node as HTMLElement).dataset.messageId));
}
return result;
}, [] as number[]);
// Cleanup a document fragment because it is playing media content in the background
while (selectedFragments.firstChild) {
selectedFragments.removeChild(selectedFragments.firstChild);
}
selectedFragments = undefined;
return messageIds;
}