Tengo mucha curiosidad por escuchar opiniones de otros sobre un problema que he estado contemplando desde hace algún tiempo.Javascript, anotaciones de texto e ideas
Esencialmente, me gustaría presentarle a un usuario un documento de texto y permitirle hacer selecciones de texto y anotarlo. Específica a las anotaciones que tienen como objetivo alcanzar los siguientes objetivos:
- Permitir a los usuarios realizar una selección de texto, anotar que, a continuación, guardar la selección y anotación para su posterior consulta Soporte
- (IU) que representa las anotaciones solapadas. Por ejemplo, si la cadena donde: "Esta es la oración de prueba para mi oración de prueba de ejemplo", user1 podría tener una anotación en "es la oración de prueba para mi ejemplo" y user2 podría tener una anotación en "para mi ejemplo".
- Cuenta para situaciones donde el texto del documento cambia. Las anotaciones se actualizarían, si es posible.
¿Cómo abordaría esto desde una perspectiva técnica?
Algunas ideas que he tenido son:
- el uso de JavaScript oscila y almacenar una anotación como un par de números enteros algo como: (document_start_char, document_end_char). Guarde este par en el db.
- Alternativamente, usando JS, obtenga el texto seleccionado y realmente guarde el texto completo en la base de datos. (no estoy seguro de cómo haría las anotaciones superpuestas)
- Representar las anotaciones superpuestas aplicando un estilo css para resaltar el texto y luego oscurecer la "pila" de anotaciones donde se superponen. La anotación más pequeña siempre debería estar en la parte superior de la "pila".
¿Cuáles son sus pensamientos o áreas de mejora? ¿Cómo podría el heck apoyar el texto de un documento que se actualiza sin romper todas las anotaciones?
Tengo EXACTAMENTE el mismo requisito. Por favor manténganos actualizados sobre su progreso. SP – swami
Lo que estoy haciendo en este momento es rodear a cada personaje en un lapso con una identificación única. Uso Rangy (http://code.google.com/p/rangy/) para tomar selecciones y luego extraer los ID para saber exactamente qué caracteres se han seleccionado. Hacer esto me permite algo de libertad porque tengo opciones de superposición y puedo hacer algunas cosas sofisticadas entre bastidores, como calcular cuántas veces ha sido anotado un personaje en una SUITE de anotaciones y ajustar su color de fondo en consecuencia (para representar selecciones superpuestas). –
Oh, olvidé una cosa ... Todavía tengo que resolver cómo gestionar la actualización de todas las anotaciones cuando el documento está editado, pero ESTOY PENSANDO que una buena forma de hacerlo sería dividir el documento en único párrafos, o frases o algo así. Aislar el daño sería el objetivo en ese caso, pero no sería perfecto. –