merge view demo

 
1
<head><title>CodeMirror: merge view demo</title>
2
<meta charset="utf-8">
3
<link rel="stylesheet" href="../doc/docs.css">
4
5
<link rel="stylesheet" href="../lib/codemirror.css">
6
<link rel="stylesheet" href="../addon/merge/merge.css">
7
<script src="../lib/codemirror.js"></script>
8
<script src="../mode/xml/xml.js"></script>
9
<script src="../addon/merge/dep/diff_match_patch.js"></script>
10
<script src="../addon/merge/merge.js"></script>
11
<style>
12
    .CodeMirror { line-height: 1.2; }
13
    span.clicky {
14
      cursor: pointer;
15
      background: #d70;
16
      color: white;
17
      padding: 0 3px;
18
      border-radius: 3px;
19
    }
20
  </style>
21
</head><body><div id="nav">
22
  <a href="http://codemirror.net"><img id="logo" src="../doc/logo.png"></a>
23
24
  <ul>
25
    <li><a href="../index.html">Home</a>
26
    </li><li><a href="../doc/manual.html">Manual</a>
27
    </li><li><a href="https://github.com/marijnh/codemirror">Code</a>
28
  </li></ul>
29
  <ul>
30
    <li><a class="active" href="#">merge view</a>
31
  </li></ul>
32
</div>
33
34
<article>
35
<h2>merge view demo</h2>
36
37
38
<div id="view"></div>
39
40
<p>The <a href="../doc/manual.html#addon_merge"><code>merge</code></a>
41
addon provides an interface for displaying and merging diffs,
42
either <span class="clicky" onclick="initUI(2)">two-way</span>
43
or <span class="clicky" onclick="initUI(3)">three-way</span>. The left
44
(or center) pane is editable, and the differences with the other
45
pane(s) are <span class="clicky" onclick="toggleDifferences()">optionally</span> shown live as you edit it.</p>
46
47
<p>This addon depends on
48
the <a href="https://code.google.com/p/google-diff-match-patch/">google-diff-match-patch</a>
49
library to compute the diffs.</p>
50
51
<script>
52
var value, orig1, orig2, dv, hilight= true;
53
function initUI(panes) {
54
  if (value == null) return;
55
  var target = document.getElementById("view");
56
  target.innerHTML = "";
57
  dv = CodeMirror.MergeView(target, {
58
    value: value,
59
    origLeft: panes == 3 ? orig1 : null,
60
    orig: orig2,
61
    lineNumbers: true,
62
    mode: "text/html",
63
    highlightDifferences: hilight
64
  });
65
}
66
67
function toggleDifferences() {
68
  dv.setShowDifferences(hilight = !hilight);
69
}
70
71
window.onload = function() {
72
  value = document.documentElement.innerHTML;
73
  orig1 = value.replace(/\.\.\//g, "codemirror/").replace("yellow", "orange");
74
  orig2 = value.replace(/\u003cscript/g, "\u003cscript type=text/javascript ")
75
    .replace("white", "purple;\n      font: comic sans;\n      text-decoration: underline;\n      height: 15em");
76
  initUI(2);
77
};
78
79
function mergeViewHeight(mergeView) {
80
  function editorHeight(editor) {
81
    if (!editor) return 0;
82
    return editor.getScrollInfo().height;
83
  }
84
  return Math.max(editorHeight(mergeView.leftOriginal()),
85
                  editorHeight(mergeView.editor()),
86
                  editorHeight(mergeView.rightOriginal()));
87
}
88
89
function resize(mergeView) {
90
  var height = mergeViewHeight(mergeView);
91
  for(;;) {
92
    if (mergeView.leftOriginal())
93
      mergeView.leftOriginal().setSize(null, height);
94
    mergeView.editor().setSize(null, height);
95
    if (mergeView.rightOriginal())
96
      mergeView.rightOriginal().setSize(null, height);
97
98
    var newHeight = mergeViewHeight(mergeView);
99
    if (newHeight >= height) break;
100
    else height = newHeight;
101
  }
102
  mergeView.wrap.style.height = height + "px";
103
}
104
</script>
105
</article>
106
</body>
⇛⇚
109
 
1
<head><title>CodeMirror: merge view demo</title>
2
<meta charset="utf-8">
3
<link rel="stylesheet" href="../doc/docs.css">
4
5
<link rel="stylesheet" href="../lib/codemirror.css">
6
<link rel="stylesheet" href="../addon/merge/merge.css">
7
<script type=text/javascript  src="../lib/codemirror.js"></script>
8
<script type=text/javascript  src="../mode/xml/xml.js"></script>
9
<script type=text/javascript  src="../addon/merge/dep/diff_match_patch.js"></script>
10
<script type=text/javascript  src="../addon/merge/merge.js"></script>
11
<style>
12
    .CodeMirror { line-height: 1.2; }
13
    span.clicky {
14
      cursor: pointer;
15
      background: #d70;
16
      color: purple;
17
      font: comic sans;
18
      text-decoration: underline;
19
      height: 15em;
20
      padding: 0 3px;
21
      border-radius: 3px;
22
    }
23
  </style>
24
</head><body><div id="nav">
25
  <a href="http://codemirror.net"><img id="logo" src="../doc/logo.png"></a>
26
27
  <ul>
28
    <li><a href="../index.html">Home</a>
29
    </li><li><a href="../doc/manual.html">Manual</a>
30
    </li><li><a href="https://github.com/marijnh/codemirror">Code</a>
31
  </li></ul>
32
  <ul>
33
    <li><a class="active" href="#">merge view</a>
34
  </li></ul>
35
</div>
36
37
<article>
38
<h2>merge view demo</h2>
39
40
41
<div id="view"></div>
42
43
<p>The <a href="../doc/manual.html#addon_merge"><code>merge</code></a>
44
addon provides an interface for displaying and merging diffs,
45
either <span class="clicky" onclick="initUI(2)">two-way</span>
46
or <span class="clicky" onclick="initUI(3)">three-way</span>. The left
47
(or center) pane is editable, and the differences with the other
48
pane(s) are <span class="clicky" onclick="toggleDifferences()">optionally</span> shown live as you edit it.</p>
49
50
<p>This addon depends on
51
the <a href="https://code.google.com/p/google-diff-match-patch/">google-diff-match-patch</a>
52
library to compute the diffs.</p>
53
54
<script type=text/javascript >
55
var value, orig1, orig2, dv, hilight= true;
56
function initUI(panes) {
57
  if (value == null) return;
58
  var target = document.getElementById("view");
59
  target.innerHTML = "";
60
  dv = CodeMirror.MergeView(target, {
61
    value: value,
62
    origLeft: panes == 3 ? orig1 : null,
63
    orig: orig2,
64
    lineNumbers: true,
65
    mode: "text/html",
66
    highlightDifferences: hilight
67
  });
68
}
69
70
function toggleDifferences() {
71
  dv.setShowDifferences(hilight = !hilight);
72
}
73
74
window.onload = function() {
75
  value = document.documentElement.innerHTML;
76
  orig1 = value.replace(/\.\.\//g, "codemirror/").replace("yellow", "orange");
77
  orig2 = value.replace(/\u003cscript/g, "\u003cscript type=text/javascript ")
78
    .replace("white", "purple;\n      font: comic sans;\n      text-decoration: underline;\n      height: 15em");
79
  initUI(2);
80
};
81
82
function mergeViewHeight(mergeView) {
83
  function editorHeight(editor) {
84
    if (!editor) return 0;
85
    return editor.getScrollInfo().height;
86
  }
87
  return Math.max(editorHeight(mergeView.leftOriginal()),
88
                  editorHeight(mergeView.editor()),
89
                  editorHeight(mergeView.rightOriginal()));
90
}
91
92
function resize(mergeView) {
93
  var height = mergeViewHeight(mergeView);
94
  for(;;) {
95
    if (mergeView.leftOriginal())
96
      mergeView.leftOriginal().setSize(null, height);
97
    mergeView.editor().setSize(null, height);
98
    if (mergeView.rightOriginal())
99
      mergeView.rightOriginal().setSize(null, height);
100
101
    var newHeight = mergeViewHeight(mergeView);
102
    if (newHeight >= height) break;
103
    else height = newHeight;
104
  }
105
  mergeView.wrap.style.height = height + "px";
106
}
107
</script>
108
</article>
109
</body>

The merge addon provides an interface for displaying and merging diffs, either two-way or three-way. The left (or center) pane is editable, and the differences with the other pane(s) are optionally shown live as you edit it.

This addon depends on the google-diff-match-patch library to compute the diffs.