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:
- Zezwalaj użytkownikom na dokonywanie zaznaczenia tekstu, dodawanie adnotacji, a następnie zapisywanie zaznaczenia i adnotacji w celu późniejszego odniesienia
- (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".
- 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?
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ć! :)
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 .
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