2011-04-15 23 views
4

私は、サイト全体で使用している「履歴ビュー」メカニズムを強化するソリューションを考え出しています。この履歴ビューのUIについては、オブジェクトの2つのリビジョン間でどのような変更が発生したかをユーザーに示したいと思います。言い換えれば、diff。HTML用の構造化された(ツリー)diffを作成するためのjavascriptライブラリはありますか?

問題のオブジェクトはすべてかなり複雑なので、これは実際の課題です。最良の方法は、各オブジェクトをHTMLとしてレンダリングし、生成されたHTMLにある種の差分ツールを使用して、その違いをユーザーに提示することだと考えました。

私がこれまで働いてきたソリューションに最も近いのは、google-match-patchライブラリ(http://code.google.com/p/google-diff-match-patch/)です。私は構造化されたコンテンツ(http://code.google.com/p/google-diff-match-patch/wiki/Plaintext)でgoogle-match-patchを使用するためにwikiに記載されている推奨された方法の1つを実装しましたが、結果は正しくありません。参考のために、ここで私の(多少の粗 - 私はちょうどコンセプトテストしていた)であるコードを:https://gist.github.com/921264

私の質問:は、上記のwikiページ上で説明したように、「正解は、ツリーベース差分を使用することです、マッチとパッチ。誰もがJavaScriptで書かれたそのようなライブラリを提案することはできますか?

私はDaisyDiff(java)を試してみましたが、結果には感動しませんでした。


EDITHere is a working jsfiddleショーと-伝えるために!


EDIT#2:共有がを世話されていますhttps://github.com/GenuineParts/TableDiff

+0

これはすべて簡単な履歴表示のためのものですか?そのデータはどのように保存されていますか?問題のページは、それ自体をリフレッシュするか、またはユーザーがそれに戻るのですか?私は、このシナリオのための2つのより単純なソリューションを考えることができます。 – Khez

+0

シンプルなソリューションのアイデアをご紹介ください!データ:各履歴「スナップショット」は、ネイティブオブジェクトに解析するJSON文字列です。私はページ自体に関してあなたの質問に従いません。 –

+0

歴史を示すページ。サンプルデータをお願いします。私たちはどのような歴史を紹介していますか? – Khez

答えて

2

あなたの解決策の問題は非常に多く存在するため、それは、それがサポートできるドキュメント内のHTMLタグの有限量を有することですユニコード文字。投稿したのと同じアプローチを使用しましたが、これは非常に便利でしたが、ユニコード文字を使用する代わりに番号付きプレースホルダを使用しています。たとえば、次のようになります:

{{0}}、{{1}}、{{2 }}}の代わりにUnicode文字を使用します。これにより、サポートできるHTMLの量が大幅に増えます。

+0

これはソリューションの改善点です!おそらく "{{"と "}}"を2つの異なる高域ユニコード文字で置き換えることによって、(ほとんど)完全なコンテンツとの衝突の可能性を取り除くことができます –

関連する問題