Подтвердить что ты не робот

Javascript, текстовые аннотации и идеи

Мне очень любопытно услышать сообщения от других о проблеме, которую я рассматривал в течение некоторого времени.

По сути, я хотел бы представить пользователю текстовый документ и позволить ему сделать выбор текста и аннотировать его. Конкретно для аннотаций я хочу достичь следующего:

  • Разрешить пользователям делать выбор текста, аннотировать его, а затем сохранять выделение и аннотацию для ссылки позже
  • (UI) Поддержка представления перекрывающихся аннотаций. Например, если строка, где: "Это тестовое предложение для моего примера тестового предложения", user1 может иметь аннотацию на "это тестовое предложение для моего примера", а user2 может содержать аннотацию "для моего примера".
  • Учет для ситуаций, когда текст документа изменяется. Аннотации будут обновляться, если это возможно.

Как бы вы справились с этим с технической точки зрения?

Некоторые идеи, которые у меня были, следующие:

  • Используйте диапазоны javascript и сохраняйте аннотацию в виде пары целых чисел: (document_start_char, document_end_char). Сохраните эту пару в db.
  • В качестве альтернативы, используя JS, вы выбираете текст и фактически сохраняете полный текст в db. (не уверен, как бы я тогда перекрывал аннотации)
  • Представляйте перекрывающиеся аннотации, применяя стиль css, чтобы выделить текст, затем затемньте "стек" аннотаций, где они перекрываются. Наименьшая аннотация всегда должна быть на вершине "стека".

Каковы ваши мысли или области улучшения? Как я могу поддержать обновляемый текст документа, не нарушая все аннотации?

4b9b3361

Ответ 1

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

Получение выделенного текста очень просто. Хранение его (или его начальных/конечных точек) также является шуткой. Но как насчет вашей точки номер 3? Что делать, если текст изменяется?

Если текст изменяется, исходный текст и исходные координаты выбора, которые вы сохранили, не будут совпадать с текущим измененным текстом. Вы должны знать аннотации, присутствующие в текстовом документе, так что каждый раз, когда он изменяется, аннотации, ссылающиеся на этот фрагмент измененного текста, должны быть обновлены или удалены (возможно, после быстрого сравнения между текстом до и после: некоторые из них слова отсутствуют? или только некоторые слова были исправлены?), но это кажется действительно трудной задачей.

Я думаю, что хранить всю текстовую аннотацию в db необходимо, чтобы избежать ее изменения и аннотации потеряли. Таким образом, у вас будет полный текст, который вы аннотировали. Затем вы также должны использовать своего рода флаг, чтобы указать начальный символ аннотации, и если текст изменится, вы можете рассчитать разницу в символах из текста документа перед изменением и после него, и найти этот способ новая начальная точка оригинальной аннотации (при условии, что часть аннотации текста документа не изменилась).

Разделение текстового документа на максимально возможное количество абзацев также должно помочь, таким образом вы могли бы разделить разные части документа и работать один за другим.

Теперь я бы очень хотел, чтобы это было сделано!:)

Ответ 2

Я изучаю этот же вопрос, и лично я предпочитаю не вмешиваться в свою собственную, в пользу существующей библиотеки с открытым исходным кодом, например Annotator.