42 lines
915 B
TypeScript
42 lines
915 B
TypeScript
// copy from https://github.com/sudodoki/toggle-selection
|
|
// refactor to esm
|
|
const deselectCurrent = (): (() => void) => {
|
|
const selection = document.getSelection();
|
|
if (!selection.rangeCount) {
|
|
return function () {};
|
|
}
|
|
let active = document.activeElement as any;
|
|
|
|
const ranges = [];
|
|
for (let i = 0; i < selection.rangeCount; i++) {
|
|
ranges.push(selection.getRangeAt(i));
|
|
}
|
|
|
|
switch (
|
|
active.tagName.toUpperCase() // .toUpperCase handles XHTML
|
|
) {
|
|
case 'INPUT':
|
|
case 'TEXTAREA':
|
|
active.blur();
|
|
break;
|
|
|
|
default:
|
|
active = null;
|
|
break;
|
|
}
|
|
|
|
selection.removeAllRanges();
|
|
return function () {
|
|
selection.type === 'Caret' && selection.removeAllRanges();
|
|
|
|
if (!selection.rangeCount) {
|
|
ranges.forEach(function (range) {
|
|
selection.addRange(range);
|
|
});
|
|
}
|
|
|
|
active && active.focus();
|
|
};
|
|
};
|
|
export default deselectCurrent;
|