12

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:

  1. 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
  2. (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".
  3. 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?

+0

Tengo EXACTAMENTE el mismo requisito. Por favor manténganos actualizados sobre su progreso. SP – swami

+0

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). –

+0

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. –

Respuesta

3

http://mark.koli.ch/2009/09/use-javascript-and-jquery-to-get-user-selected-text.html

http://mark.koli.ch/2009/09/05/get-selected-text-javascript.html

Conseguir el texto seleccionado es muy fácil. Almacenarlo (o sus puntos de inicio/final) también es una broma. Pero, ¿qué hay de tu punto número 3? ¿Qué pasa si el texto cambia?

Si el texto cambia, tanto el texto original como las coordenadas de selección originales que almacenó no serán iguales al texto modificado actual. Debe tener en cuenta las anotaciones presentes en el documento de texto, de modo que cada vez que cambie, las anotaciones que hacen referencia a esa pieza determinada de texto modificado se actualicen o eliminen (quizás después de una comparación rápida entre el texto anterior y posterior: algunos ¿faltan palabras? o solo algunas palabras han sido corregidas?), pero esto parece realmente una tarea difícil.

Creo que es esencial almacenar toda la anotación de texto en una base de datos para evitar que se modifique y se pierda la anotación. De esta forma, todavía tendrá el texto completo que ha anotado. Luego, también debe usar un tipo de indicador para indicar el carácter de inicio de la anotación, y si el texto cambia, puede calcular la diferencia en caracteres del texto del documento antes del cambio, y el que está después, y encontrar de esta manera el nuevo punto de inicio de la anotación original (suponiendo que la parte de anotación del texto del documento no ha cambiado).

Dividir el documento de texto en tantos párrafos como sea posible también debería ayudar, de esta manera podría separar las diferentes partes del documento y trabajar una por una.

¡Ahora realmente me gustaría verlo! :)

+0

Pregunta de seguimiento: ¿nosql db sería una opción beneficiosa para almacenar el texto (una y otra vez)? –

5

Estoy investigando esta misma pregunta y, personalmente, estoy a favor de evitar la creación de una biblioteca existente de código abierto como Annotator.

+0

Esto es asombroso. ¡¡Gracias!! –