今しばらく考えていた問題について、他の人から意見を聞くのはとても興味深いです。
基本的に、ユーザーにテキストドキュメントを提示し、ユーザーがテキストを選択して注釈を付けることができるようにしたいと考えています。アノテーションに固有の私は以下を達成することを目指しています:
技術的な観点からこれにどのように取り組みますか?
私が持っているいくつかのアイデアは次のとおりです。
あなたの考えや改善点は何ですか?どのようにheckは、すべての注釈を壊すことなくドキュメントのテキストの更新をサポートできますか?
Open Knowledge Foundation Annotator [ http://okfn.org/projects/annotator/ ]でインスピレーション、JavaScriptライブラリ(GPLまたはMIT)+ couchdbバックエンド...を確認することをお勧めします。 co-ment.org、あなたが説明することを行うmarginalia
@trevor-Rangy [ https://github.com/timdown/rangy ]-クロスブラウザのJavaScript範囲と選択ライブラリ-IE範囲選択を解決する可能性があります問題-デモには開発中の位置(x、y)モジュールもあります。
これに自分で取り組み、上記のOKFNアノテーターを使用します。正しく行うのは簡単ではなく、Annotatorは正しく行います。
https://github.com/okfn/annotator
変化するテキストの問題に関しては、重要ではありません。ニューヨークタイムズの賢い人は、この問題についてこのブログの投稿で説明しています。
http://open.blogs.nytimes.com/2011/01/11/emphasis-update-and-source/
幸運を。
ここにあなたを始めるためのいくつかのコードがあります:
if (window.getSelection) {
t = window.getSelection().toString();
} else if (document.getSelection) {
t = document.getSelection().toString();
} else if (document.selection) {
t = document.selection.createRange().text.toString();
}
これをマウスアップイベントに入れると、選択されているものすべてのtextを取得できます。私が過去に持っていた問題は、選択されたtextを取得できる一方で、テキストの「位置」を取得できないことですIEまたはテキストが含まれるノード。From quirksmode :
Microsoft Text Rangeオブジェクトは文字列ベースであるため、他の2つのオブジェクトとは大きく異なります。実際、Text Rangeに含まれる文字列からDOMノードにジャンプするのは非常に困難です。
私はこれを回避するために、各文を異なるタグにして、マウスアップイベントとマウスダウンイベントが発生するスパンをキャプチャしています。次に、それらの範囲内でユーザーが選択したテキストを検索します。それはハックですが、私にはうまくいきました。機能しないのは、ユーザーがスパン内で複数回出現する単語または一連の単語を選択する場合です。したがって、各Wordでスパンを実行できると思います。
私はこの問題に1年ほど取り組んでいないため、状況が変わった可能性があり、おそらく私の解決策は最適ではありません。
ここにもいくつかの良いアイデアがあるようです:
オーバーラップに関しては、おそらくアノテーションのオーバーラップを示す何らかのマーカーが必要になるでしょう。ユーザーは、マーカーをクリックするか、マーカーにカーソルを合わせると、2つの注釈を確認できます。