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();