2011-07-01 85 views
12

我很好奇聽到別人對我一直在考慮一段時間的問題的意見。Javascript,Text Annotations and Ideas

本質上,我想向用戶展示一個文本文檔,並允許他/她選擇文本並對其進行註釋。具體到註釋我的目標是實現以下目標:

  1. 允許用戶進行文本選擇,批註,然後保存選擇和註釋參考代表重疊的註釋後
  2. (UI)的支持。例如,如果字符串其中:「這是我的示例測試句子的測試語句」,則user1可能在「是我的示例的測試語句」上註釋,而user2可能在「我的示例」上註釋了註釋。
  3. 考慮文檔文本更改的情況。如果可能的話,註釋將被更新。

如何從技術角度解決這個問題?

有些想法我已經是:

  • 使用JavaScript範圍和註釋存儲爲一對整數是這樣的:(document_start_char,document_end_char)。將這對保存在數據庫中。
  • 或者,使用JS獲取選定的文本,並實際將全文保存在數據庫中。 (不知道我將如何做重疊的註釋)
  • 通過應用css風格突出顯示文本,然後使它們重疊的註釋的「堆棧」變暗來表示重疊的註釋。最小的註釋總是必須位於「堆棧」的頂部。

您的想法或改進方面有哪些? 我可以在不破壞所有註釋的情況下支持正在更新的文檔文本嗎?

+0

我有完全相同的要求。請讓我們更新我們的進度SP – swami

+0

即時在做什麼是周圍的每個單個字符與唯一的ID。我使用Rangy(http://code.google.com/p/rangy/)來獲取選擇,然後提取ID,以便我確切地知道選擇了哪些字符。這樣做可以讓我獲得一些自由,因爲我已經完成了選擇並且可以在幕後做一些特殊的事情,比如計算一個字符在註釋套件中被註釋了多少次,並相應地調整它的背景顏色(以表示重疊選擇)。 –

+0

噢,我忘了一件事......我還沒有想出如何處理文檔本身被編輯時更新所有註釋,但我在想,一個好方法可能是將文檔分成獨特的段落或句子或類似的東西。在這種情況下隔離損害將是目標,但它不是完美的。 –

回答

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

獲取選定的文本是很容易的。存儲它(或其起點/終點)也是一個笑話。但是,你的第三點是什麼?如果文字改變了怎麼辦?

如果文字發生變化,原始文本和您保存的原始選擇座標將不等於當前修改的文本。您應該瞭解文本文檔中的註釋,以便每次更改時,引用該特定改動文本的註釋都應該更新或刪除(也許在對文本之前和之後進行快速比較之後:有些單詞缺失?或者只是一些單詞已被糾正?),但這似乎確實是一項艱鉅的任務。

我認爲在一個數據庫中存儲整個文本註釋是必不可少的,以避免它被改變和註釋丟失。這樣您仍然可以獲得註釋完整的文本。然後,您還應該使用一種標誌來指示註釋的開始字符,如果文本發生更改,則可以計算文檔文本在更改前的字符與後面的文本之間的差異,並以此方式查找原始註釋的新起點(假設文檔文本的註釋部分未更改)。

儘可能多的段落劃分文本文檔也應該有所幫助,這樣你可以分開文檔的不同部分並逐一處理。

現在我真的很想看到它完成! :)

+0

後續問題 - 將一個nosql數據庫存儲文本(反覆)是一​​個有利的選擇? –

5

我正在研究這個相同的問題,我個人喜歡遠離滾動我自己的,贊成現有的開放源碼庫,如Annotator

+0

這太神奇了。謝謝!! –