2016-08-10 2 views
0

Ich versuche, ein Online-Diff-Tool zu entwickeln. Derzeit zeigt es die Unterschiede zwischen den beiden Dateien. Ich brauche auch vorherige Diff und nächste Diff-Funktion. Laut Dokumentation gibt es dafür die Befehle "goNextDiff" und "goPrevDiff". Ich habe den relevanten Code eingefügt. panel1 und panel2 werden mit einem AJAX-Aufruf gefüllt. Ich bekomme den Inhalt und das Diff wird im Panel angezeigt. Ich will nur einen Diff zu einem Zeitpunkt, wenn er auf den nächsten Diff-Button klickt, sollte es zum nächsten Diff gehen. Ich habe zwei Tasten, die versuchen, diese Befehle auszuführen. Ich bin mir nicht sicher über die Syntax dafür. Problem bei der Verwendung von Codemirror. Korrekte Syntax zum Ausführen des Befehls, der in merge.js ist

</div> 
    <!-- JS code for the second panel --> 
    <div id="panel1" style="display:none"> 

    </div> 
    <!-- the placehorder for the merge/kdiff interface --> 
    <div id="placeholder"></div> 
    </body> 
    <button id = "prevdiff" disabled onclick> Previous Difference </button> 
    <button id = "nextdiff" disabled> Next Difference </button> 
    <script type="text/javascript"> 
    dv = CodeMirror.MergeView(document.getElementById("placeholder"), { 
    value: a1[0], 
    orig: a2[0], 
    lineNumbers: true, 
    mode: "javascript", 

    highlightDifferences: true 
    }); 

    var prev = document.getElementById("prevdiff"); 
    var next = document.getElementById("nextdiff"); 
    prev.disabled = false; 
    next.disabled = false; 
    prev.onclick = function(){ console.log("prevdiff"); this.execCommand("goPrevDiff"); console.log("prevdiff1");}; 
    next.onclick = function(){ console.log("nextdiff"); this.goNextDiff; console.log("nextdiff1");}; 




    }); 
</script> 

Antwort

0

sollten Sie in der Lage sein goNextDiff und goPrevDiff Befehle auf dem Codemirror Object (link) unter Verwendung des execCommand Methode auszuführen. In Ihrem Fall ist ein Beispiel Codemirror bearbeiten Mitglied MerveView Objekt referenziert durch variable dv, so dass Sie rufen müssen:

dv.edit.execCommand("goNextDiff"); 
dv.edit.execCommand("goPrevDiff"); 

Natürlich wird dies nur die Cursor-Position im Editor ändern. Ich habe keine Möglichkeit gefunden, einen bestimmten Block hervorzuheben, deshalb habe ich in meinem eigenen Projekt (https://easydiff.com) zwei separate Instanzen von CodeMirror verwendet und Diff-Berechnungen verwaltet und die Hervorhebung mit meinem eigenen Code blockiert.

Verwandte Themen