select.jscreateTextRange и современный стандартный подход window.getSelection() / document.createRange(). Она вызывается компонентом DynamicReadonlyField, чтобы при клике на поле только для чтения его текст выделялся для удобного копирования.Функция ветвится на document.body.createTextRange — это свойство существует только в Internet Explorer (и ранних версиях Edge). Если оно присутствует, используется проприетарный объект TextRange от IE с вызовом moveToElementText для привязки диапазона к содержимому узла, затем select() для выделения. Если свойство отсутствует (все современные браузеры), используется W3C Selection API: создаётся объект Range, вызывается selectNodeContents на целевом узле, очищается текущее выделение и добавляется новый диапазон.
Импортируется компонентами ввода DynamicLayout, в частности DynamicReadonlyField. Когда пользователь кликает на поле только для чтения (например, расчётный номер центра затрат или системный идентификатор), всё его текстовое содержимое автоматически выделяется, что позволяет сразу скопировать его через Ctrl+C / Cmd+C без ручного выделения мышью. Ссылка на исходный алгоритм: ответ на Stack Overflow #987376.
| Коммит | Что изменилось |
|---|---|
21305e884 | Добавлены два комментария: указание источника со ссылкой на ответ Stack Overflow, откуда был адаптирован алгоритм, и встроенная метка // internet-explorer над веткой createTextRange для пояснения, почему используются два разных API выделения. Функциональных изменений нет. |
117f7fe25 | Создан файл с кросс-браузерной функцией выделения текста и её экспортом по умолчанию. Это было частью реализации поведения «клик для выделения» для полей только для чтения в динамической форме веб-приложения. |