|
40 | 40 | (this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this); |
41 | 41 | this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options))); |
42 | 42 | this.orig.state.diffViews = [this]; |
43 | | - this.classes.location = options.mergeMarkerLocation || "background"; |
| 43 | + var classLocation = options.chunkClassLocation || "background"; |
| 44 | + if (Object.prototype.toString.call(classLocation) != "[object Array]") classLocation = [classLocation] |
| 45 | + this.classes.classLocation = classLocation |
44 | 46 |
|
45 | 47 | this.diff = getDiff(asString(orig), asString(options.value)); |
46 | 48 | this.chunks = getChunks(this.diff); |
|
192 | 194 |
|
193 | 195 | // Updating the marks for editor content |
194 | 196 |
|
195 | | - function clearMarks(editor, arr, classes) { |
196 | | - function removeLineClass(l, klass) { |
197 | | - var classList = Array.isArray(classes.location) ? classes.location : [classes.location] |
198 | | - for (var c = 0; c < classList.length; ++c) { |
199 | | - editor.removeLineClass(l, classList[c], klass) |
200 | | - } |
| 197 | + function removeClass(editor, line, classes) { |
| 198 | + var locs = classes.classLocation |
| 199 | + for (var i = 0; i < locs.length; i++) { |
| 200 | + editor.removeLineClass(line, locs[i], classes.chunk); |
| 201 | + editor.removeLineClass(line, locs[i], classes.start); |
| 202 | + editor.removeLineClass(line, locs[i], classes.chunk); |
201 | 203 | } |
| 204 | + } |
| 205 | + |
| 206 | + function clearMarks(editor, arr, classes) { |
202 | 207 | for (var i = 0; i < arr.length; ++i) { |
203 | 208 | var mark = arr[i]; |
204 | | - if (mark instanceof CodeMirror.TextMarker) { |
| 209 | + if (mark instanceof CodeMirror.TextMarker) |
205 | 210 | mark.clear(); |
206 | | - } else if (mark.parent) { |
207 | | - removeLineClass(mark, classes.chunk); |
208 | | - removeLineClass(mark, classes.start); |
209 | | - removeLineClass(mark, classes.end); |
210 | | - } |
| 211 | + else if (mark.parent) |
| 212 | + removeClass(editor, mark, classes); |
211 | 213 | } |
212 | 214 | arr.length = 0; |
213 | 215 | } |
|
233 | 235 | }); |
234 | 236 | } |
235 | 237 |
|
| 238 | + function addClass(editor, lineNr, classes, main, start, end) { |
| 239 | + var locs = classes.classLocation, line = editor.getLineHandle(lineNr); |
| 240 | + for (var i = 0; i < locs.length; i++) { |
| 241 | + if (main) editor.addLineClass(line, locs[i], classes.chunk); |
| 242 | + if (start) editor.addLineClass(line, locs[i], classes.start); |
| 243 | + if (end) editor.addLineClass(line, locs[i], classes.end); |
| 244 | + } |
| 245 | + return line; |
| 246 | + } |
| 247 | + |
236 | 248 | function markChanges(editor, diff, type, marks, from, to, classes) { |
237 | 249 | var pos = Pos(0, 0); |
238 | 250 | var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1)); |
239 | 251 | var cls = type == DIFF_DELETE ? classes.del : classes.insert; |
240 | 252 | function markChunk(start, end) { |
241 | | - function addLineClass(l, klass) { |
242 | | - var classList = Array.isArray(classes.location) ? classes.location : [classes.location] |
243 | | - var ret = null |
244 | | - for (var c = 0; c < classList.length; ++c) { |
245 | | - ret = editor.addLineClass(l, classList[c], klass) |
246 | | - } |
247 | | - |
248 | | - return ret |
249 | | - } |
250 | | - |
251 | 253 | var bfrom = Math.max(from, start), bto = Math.min(to, end); |
252 | | - for (var i = bfrom; i < bto; ++i) { |
253 | | - var line = addLineClass(i, classes.chunk); |
254 | | - if (i == start) addLineClass(line, classes.start); |
255 | | - if (i == end - 1) addLineClass(line, classes.end); |
256 | | - marks.push(line); |
257 | | - } |
| 254 | + for (var i = bfrom; i < bto; ++i) |
| 255 | + marks.push(addClass(editor, i, classes, true, i == start, i == end - 1)); |
258 | 256 | // When the chunk is empty, make sure a horizontal line shows up |
259 | 257 | if (start == end && bfrom == end && bto == end) { |
260 | 258 | if (bfrom) |
261 | | - marks.push(addLineClass(bfrom - 1, classes.end)); |
| 259 | + marks.push(addClass(editor, bfrom - 1, classes, false, false, true)); |
262 | 260 | else |
263 | | - marks.push(addLineClass(bfrom, classes.start)); |
| 261 | + marks.push(addClass(editor, bfrom, classes, false, true, false)); |
264 | 262 | } |
265 | 263 | } |
266 | 264 |
|
|
0 commit comments