EN · DE · RU · FR · ES

#2760: select.js

projectforge-webapp/src/utilities/select.js Utilidad DOM (exportación única) · projectforge-webapp/src/utilities/select.js 17 líneas · 14 código · 2 comentarios · 1 en blanco
Una utilidad de selección de texto compatible con múltiples navegadores que selecciona programáticamente todo el contenido de texto de un nodo DOM, permitiendo un comportamiento de copia con un solo clic para campos de texto de solo lectura. La función maneja dos eras de APIs de navegador: el enfoque heredado de Internet Explorer createTextRange y el enfoque moderno basado en estándares window.getSelection() / document.createRange(). Es invocada por el componente DynamicReadonlyField para que al hacer clic en un campo de solo lectura se seleccione su texto y sea fácil copiarlo y pegarlo.

Arquitectura

Ruta de código dual

La función se bifurca en document.body.createTextRange — esta propiedad solo existe en Internet Explorer (y versiones tempranas de Edge). Si está presente, usa el objeto TextRange propietario de IE, llamando a moveToElementText para delimitar el rango al contenido del nodo, y luego select() para resaltarlo. Si la propiedad está ausente (todos los navegadores modernos), usa la API de selección W3C: crea un objeto Range, llama a selectNodeContents en el nodo objetivo, limpia cualquier selección existente y agrega el nuevo rango.

Contexto de uso

Importado por los componentes de entrada DynamicLayout, específicamente DynamicReadonlyField. Cuando un usuario hace clic en un campo de solo lectura (por ejemplo, un número de centro de costo calculado o un identificador generado por el sistema), todo su contenido de texto se selecciona automáticamente, permitiendo copiar inmediatamente con Ctrl+C / Cmd+C sin necesidad de arrastrar y seleccionar manualmente. Referencia de fuente para el algoritmo: respuesta de Stack Overflow #987376.

Historial de Git

CommitQué cambió
21305e884Se agregaron dos comentarios: una atribución de fuente que enlaza a la respuesta de Stack Overflow de la cual se adaptó el algoritmo, y una etiqueta en línea // internet-explorer sobre la rama createTextRange para aclarar por qué se usan dos APIs de selección diferentes. Sin cambios funcionales.
117f7fe25Se creó el archivo con la función de selección de texto compatible con múltiples navegadores y su exportación por defecto. Esto fue parte de la implementación del comportamiento "clic para seleccionar" para campos de solo lectura en el diseño de formularios dinámicos de la aplicación web.