Javascript, adnotacje tekstowe i pomysły

Jestem bardzo ciekawy, aby usłyszeć opinie innych na temat problemu, nad którym rozważam od jakiegoś czasu.

Zasadniczo chciałbym przedstawić użytkownikowi dokument tekstowy i umożliwić mu / jej dokonywanie selekcji tekstu i dodawanie do niego adnotacji. Konkretnie do adnotacji dążę do osiągnięcia następujących:

  1. Zezwalaj użytkownikom na dokonywanie zaznaczenia tekstu, dodawanie adnotacji, a następnie zapisywanie zaznaczenia i adnotacji w celu późniejszego odniesienia
  2. (UI) Obsługa nakładających się adnotacji. Na przykład jeśli ciąg gdzie: "to jest zdanie testowe dla mojego przykładu zdanie testowe", user1 może mieć adnotację na "jest zdanie testowe dla mojego przykładu" i user2 może mieć adnotację na "dla mojego przykładu".
  3. uwzględnienie sytuacji, w której tekst dokumentu ulega zmianie. Adnotacje powinny zostać zaktualizowane, jeśli to możliwe.

Jak poradziłbyś sobie z tym z technicznego punktu widzenia?

Kilka pomysłów jakie miałem to:

  • Użyj zakresów javascript i zapisz adnotacja jako para liczb całkowitych coś w rodzaju: (document_start_char, document_end_char). Zapisz tę parę w db.
  • alternatywnie, używając JS uzyskaj zaznaczony tekst i faktycznie Zapisz pełny tekst w db. (nie jestem pewien, jak zrobiłbym wtedy nakładające się adnotacje)
  • reprezentuj na siebie adnotacje, stosując styl css do podświetlania tekstu, a następnie przyciemniaj "stos" adnotacji, w których nachodzą na siebie. Najmniejsza adnotacja zawsze musiałaby być na górze "stack"

Jakie są Twoje myśli lub obszary poprawy? W jaki sposób heck mogę poprzeć aktualizację tekstu dokumentu bez łamania wszystkich adnotacji?

Author: Moritz, 2011-07-01

2 answers

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

Uzyskanie zaznaczonego tekstu jest naprawdę proste. Przechowywanie go (lub jego punktów początkowych/końcowych) jest również żartem. Ale co z twoim punktem numer 3? Co jeśli tekst się zmieni?

Jeśli tekst ulegnie zmianie, zarówno oryginalny tekst, jak i zapisane współrzędne zaznaczenia nie będą równe bieżącym zmodyfikowany tekst. Należy pamiętać o adnotacjach obecnych w dokumencie tekstowym, aby za każdym razem, gdy się zmienia, adnotacje odnoszące się do tego konkretnego fragmentu zmienionego tekstu powinny być aktualizowane lub usuwane (może po szybkim porównaniu między tekstem przed i po: czy brakuje niektórych słów? czy tylko niektóre słowa zostały poprawione?), ale wydaje się to naprawdę trudnym zadaniem.

Myślę, że przechowywanie całej adnotacji tekstowej w db jest niezbędne, aby uniknąć jej zmiany i adnotacja utracona. W ten sposób nadal będziesz mieć pełny tekst, który dodałeś. Następnie powinieneś również użyć pewnego rodzaju flagi, aby wskazać początkowy znak adnotacji, a jeśli tekst się zmieni, możesz obliczyć różnicę w znakach z tekstu dokumentu przed zmianą i po nim, i znaleźć w ten sposób nowy punkt początkowy oryginalnej adnotacji(zakładając, że część adnotacji tekstu dokumentu nie uległa zmianie).

Dzielenie dokumentu tekstowego na tyle akapity, jak to możliwe, powinny również pomóc, w ten sposób można oddzielić różne fragmenty dokumentu i pracować nad jednym po drugim.

Teraz naprawdę chciałbym to zrobić! :)

 3
Author: Jose Faeti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-12 19:01:48

Badam to samo pytanie i osobiście wolę trzymać się z dala od zwijania własnej, na rzecz istniejącej biblioteki open source, takiej jak Annotator .

 5
Author: user3128838,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 20:16:04