Javascript, текстовые аннотации и идеи - PullRequest
12 голосов
/ 01 июля 2011

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

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

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

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

Вот некоторые идеи, которые у меня были:

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

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

Ответы [ 2 ]

5 голосов
/ 24 декабря 2013

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

3 голосов
/ 12 июля 2011

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? Что если текст изменится?

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...