toggle-selection.js 882 B

12345678910111213141516171819202122232425262728293031323334
  1. // copy from https://github.com/sudodoki/toggle-selection
  2. // refactor to esm
  3. const deselectCurrent = () => {
  4. const selection = document.getSelection();
  5. if (!selection.rangeCount) {
  6. return function () {};
  7. }
  8. let active = document.activeElement;
  9. const ranges = [];
  10. for (let i = 0; i < selection.rangeCount; i++) {
  11. ranges.push(selection.getRangeAt(i));
  12. }
  13. switch (active.tagName.toUpperCase() // .toUpperCase handles XHTML
  14. ) {
  15. case 'INPUT':
  16. case 'TEXTAREA':
  17. active.blur();
  18. break;
  19. default:
  20. active = null;
  21. break;
  22. }
  23. selection.removeAllRanges();
  24. return function () {
  25. selection.type === 'Caret' && selection.removeAllRanges();
  26. if (!selection.rangeCount) {
  27. ranges.forEach(function (range) {
  28. selection.addRange(range);
  29. });
  30. }
  31. active && active.focus();
  32. };
  33. };
  34. export default deselectCurrent;