2011-07-01 14 views
12

Jestem bardzo ciekawy, aby usłyszeć opinie innych na temat problemu, który rozważałem od jakiegoś czasu.JavaScript, adnotacje i pomysły tekstowe

Zasadniczo chciałbym przedstawić użytkownikowi dokument tekstowy i umożliwić mu wybieranie tekstu i dodawanie adnotacji do niego. Specyficzne dla adnotacji Dążę do osiągnięcia następujących celów:

  1. Zezwalaj użytkownikom dokonać wyboru tekstu, opisywanie go, a następnie zapisać wybór i adnotacji na wypadek użycia w przyszłości
  2. (UI) Wsparcie reprezentujący pokrywające adnotacje. Na przykład, jeśli ciąg znaków gdzie: "To jest zdanie testowe dla mojego przykładowego zdania testowego", użytkownik 1 może mieć adnotację "to zdanie testowe dla mojego przykładu", a użytkownik 2 może mieć adnotację "dla mojego przykładu".
  3. Opis sytuacji, w których zmienia się tekst dokumentu. Adnotacje powinny być aktualizowane, jeśli to możliwe.

Jak poradzić sobie z tym z technicznego punktu widzenia?

Niektóre pomysły jakie jadłem to:

  • użyć JavaScript zakresy i zapisać adnotację w postaci pary liczb całkowitych coś takiego: (document_start_char, document_end_char). Zapisz tę parę w db.
  • Alternatywnie, za pomocą JS otrzymasz zaznaczony tekst i faktycznie zapiszesz pełny tekst w db. (nie jestem pewien, w jaki sposób wykonuję nakładające się adnotacje).
  • Nakładaj na siebie adnotacje, nakładając styl css, aby podświetlić tekst, a następnie przyciemnij "stos" adnotacji, w którym się pokrywają. Najmniejsza adnotacja zawsze musi znajdować się na górze "stosu".

Jakie są twoje myśli lub obszary poprawy? W jaki sposób można aktualizować tekst dokumentu bez zrywania wszystkich adnotacji?

+0

Mam DOKŁADNIE to samo wymaganie. Pls informuje nas na bieżąco o postępach. SP – swami

+0

Co robię w tej chwili, to otaczanie każdego znaku w przestrzeni z unikalnym identyfikatorem. Używam Rangy (http://code.google.com/p/rangy/) do przechwytywania zaznaczeń, a następnie wyodrębnij identyfikatory, aby dokładnie określić, które znaki zostały wybrane. Dzięki temu mogę uzyskać trochę swobody, ponieważ mam możliwość wybrania opcji docierania, a za sceną można wykonać pewne fantazyjne czynności, np. Obliczyć, ile razy znak został przypisany w SUITE adnotacji i odpowiednio dostosować jego kolor tła (aby reprezentować zachodzące selekcje). –

+0

Och, zapomniałem o jednej rzeczy ... Jeszcze nie wiem, jak poradzić sobie z aktualizowaniem wszystkich adnotacji, gdy sam dokument jest edytowany, ale myślę, że dobrym sposobem na rozwiązanie tego problemu może być podzielenie dokumentu na wyjątkowe akapity, zdania lub coś w tym stylu. Wyizolowanie obrażeń byłoby celem w tym przypadku, ale nie byłoby idealne. –

Odpowiedz

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

Uzyskiwanie zaznaczony tekst jest naprawdę łatwe. Przechowywanie tego (lub punktów początkowych/końcowych) również jest żartem. Ale co z twoim punktem numer 3? Co się stanie, jeśli tekst się zmieni?

Jeśli tekst ulegnie zmianie, oryginalny tekst i oryginalne ustawione współrzędne nie będą równe bieżącemu zmodyfikowanemu tekstowi. Powinieneś zdawać sobie sprawę z adnotacji obecnych w dokumencie tekstowym, więc 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 tekstu przed i po: brakuje słów lub tylko niektóre słowa zostały poprawione?), ale wydaje się to naprawdę trudnym zadaniem.

Uważam, że przechowywanie całej adnotacji tekstowej w db jest niezbędne, aby uniknąć jej zmiany i utraconej adnotacji. W ten sposób będziesz mieć cały tekst, który opisałeś. Następnie powinieneś także użyć rodzaju flagi, aby wskazać początkowy znak adnotacji, a jeśli tekst się zmieni, możesz obliczyć różnicę w znakach od tekstu dokumentu przed zmianą, a następnie po nim, i znaleźć w ten sposób nowy punkt początkowy oryginalnej adnotacji (zakładając, że część adnotacji w tekście dokumentu nie uległa zmianie).

Pomóc powinno również podzielenie dokumentu tekstowego na jak najwięcej akapitów, w ten sposób można oddzielić różne części dokumentu i pracować nad nimi kolejno.

Naprawdę chciałbym zobaczyć, jak to działa! :)

+0

Pytanie uzupełniające - czy nosql db byłby korzystnym wyborem do przechowywania tekstu (w kółko)? –

5

Zajmuję się tym samym pytaniem i osobiście wolę pozostać z dala od toczenia się, na rzecz istniejącej biblioteki typu open source, takiej jak Annotator.

+0

To jest niesamowite. Dziękuję Ci!! –