vendor/assets/javascripts/codemirror/addons/merge/merge.js in codemirror-rails-3.16 vs vendor/assets/javascripts/codemirror/addons/merge/merge.js in codemirror-rails-3.17
- old
+ new
@@ -29,40 +29,60 @@
this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: true}, copyObj(options)));
this.diff = getDiff(orig, options.value);
this.diffOutOfDate = false;
+ this.showDifferences = options.showDifferences !== false;
this.forceUpdate = registerUpdate(this);
setScrollLock(this, true, false);
registerScroll(this);
+ },
+ setShowDifferences: function(val) {
+ val = val !== false;
+ if (val != this.showDifferences) {
+ this.showDifferences = val;
+ this.forceUpdate("full");
+ }
}
};
function registerUpdate(dv) {
var edit = {from: 0, to: 0, marked: []};
var orig = {from: 0, to: 0, marked: []};
var debounceChange;
- function update() {
+ function update(mode) {
+ if (mode == "full") {
+ if (dv.svg) clear(dv.svg);
+ clear(dv.copyButtons);
+ clearMarks(dv.edit, edit.marked, dv.classes);
+ clearMarks(dv.orig, orig.marked, dv.classes);
+ edit.from = edit.to = orig.from = orig.to = 0;
+ }
if (dv.diffOutOfDate) {
dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue());
dv.diffOutOfDate = false;
+ CodeMirror.signal(dv.edit, "updateDiff", dv.diff);
}
- updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);
- updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);
+ if (dv.showDifferences) {
+ updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);
+ updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);
+ }
drawConnectors(dv);
}
function set(slow) {
clearTimeout(debounceChange);
debounceChange = setTimeout(update, slow == true ? 250 : 100);
}
- dv.edit.on("change", function() {
+ function change() {
if (!dv.diffOutOfDate) {
dv.diffOutOfDate = true;
edit.from = edit.to = orig.from = orig.to = 0;
}
set(true);
- });
+ }
+ dv.edit.on("change", change);
+ dv.orig.on("change", change);
dv.edit.on("viewportChange", set);
dv.orig.on("viewportChange", set);
update();
return update;
}
@@ -209,10 +229,12 @@
}
// Updating the gap between editor and original
function drawConnectors(dv) {
+ if (!dv.showDifferences) return;
+
if (dv.svg) {
clear(dv.svg);
var w = dv.gap.offsetWidth;
attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight);
}
@@ -320,10 +342,14 @@
MergeView.prototype = {
constuctor: MergeView,
editor: function() { return this.edit; },
rightOriginal: function() { return this.right && this.right.orig; },
- leftOriginal: function() { return this.left && this.left.orig; }
+ leftOriginal: function() { return this.left && this.left.orig; },
+ setShowDifferences: function(val) {
+ if (this.right) this.right.setShowDifferences(val);
+ if (this.left) this.left.setShowDifferences(val);
+ }
};
// Operations on diffs
var dmp = new diff_match_patch();