1. 程式人生 > >前端 diff 文字 - mergely

前端 diff 文字 - mergely

介紹

需要前端展示文字編輯歷史, 並做 diff. 
找了三個庫, 分別是: CodeMirror, DiffMatchPatch, Mergely 
CodeMirror 效果不是很好, DiffMatchPatch 是 Google 開發的, 感覺實現後效果同樣不好.最後選用了 Mergely.

實際上, Mergely 用到了 CodeMirror, 而 CodeMirror 用到了 DiffMatchPatch.

先上最終效果圖 
MergelyDemo

CodeMirror

CodeMirror 和 DiffMatchPatch 這裡不做過多介紹. 有興趣可以試試. 
CodeMirror Github: 

https://github.com/codemirror/CodeMirror 
CodeMirror Demo: http://codemirror.net/demo/merge.html

DiffMatchPatch

DiffMatchPatch Github: https://github.com/google/diff-match-patch 
DiffMatchPatch Diff Demo: https://neil.fraser.name/software/diff_match_patch/demos/diff.html 
DiffMatchPatch Match Demo: 

https://neil.fraser.name/software/diff_match_patch/demos/match.html 
DiffMatchPatch Patch Demo: https://neil.fraser.name/software/diff_match_patch/demos/patch.html

Mergely

官網地址: http://www.mergely.com/ 
Github: https://github.com/wickedest/Mergely 
Demo 1: https://jsfiddle.net/bilgehansolo/142r02ny/

 
Demo 2: https://codepen.io/Sphinxxxx/pen/grVvjG

示例

<HTML>

<HEAD>
    <meta charset="UTF-8">
    <TITLE>Diff Demo</TITLE>
    <!-- <SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript" SRC="diff_match_patch.js"></SCRIPT> -->
    <script type="text/javascript" src="jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="codemirror.min-5.32.0.js"></script>
    <script type="text/javascript" src="searchcursor.min-5.32.0.js"></script>
    <script type="text/javascript" src="mergely.min-3.4.5.js"></script>
    <link rel="stylesheet" href="../css/codemirror.min-5.32.0.css">
    <link rel="stylesheet" media="all" href="../css/mergely-3.4.5.css" />
    <style>
    .CodeMirror,
    .mergely-margin,
    .mergely-column {
        height: 400px;
    }
    </style>
</HEAD>

<BODY>
    <div>
        <h2>Diff Demo</h2>
        <div class="mergely-full-screen-8">
            <div class="mergely-resizer">
                <div id="mergely"></div>
            </div>
        </div>
    </div>
    <script>
    $(document).ready(function() {
        // initialize mergely
        options = { line_numbers: true, editor_height: "400px", autoresize: false, lcs: true }
        $('#mergely').mergely('options', options);

    });
    l = "Q:唉我問一下我們用的這個400電話外呼的時候對方會顯示幾個號碼呀\n\
A:您這邊是那個上海欣榮汽車科技有限公司是嗎?唉。\n\
Q:11300571對吧?\n\
A:對就是您那個件號碼\n\
Q:哪個?你說客戶是哪個方向的嗎?客戶是江蘇的\n\
A:是您稍等我這邊查一下我,您是外省,號碼是11300571呀\n\
Q:你稍等一下,我馬上去看一下我外呼的是哪個號碼。\n\
A:是江蘇無錫的嗎?\n\
Q:那11300001這個是什麼號碼呢?\n\
A:上當,\n\
Q:其他沒有了,謝謝嗯好再見。\n\
A:唉好。"
    r = "Q:唉我問一下我們用的這個400電話外呼的時候對方會顯示幾個號碼呀\n\
A:您這邊是那個上海欣榮汽車科技有限公司是嗎?\n\
Q:11300571對吧?\n\
A:對就是您那個號碼\n\
Q:哪個?你說客戶是哪個方向的嗎?客戶是江蘇的\n\
A:是您稍等我這邊查一下我,您是外省,號碼是11300571\n\
Q:你稍等一下,我馬上去看一下我外省的是哪個號碼。\n\
A:是江蘇無錫的嗎?\n\
Q:其他沒有了,謝謝嗯好再見。\n\
A:唉好。"
    $('#mergely').mergely({
        line_numbers: true,
        lhs: function(setValue) {
            setValue(l);
        },
        rhs: function(setValue) {
            setValue(r);
        }
    });
    </script>
</BODY>

</HTML>