side by side block diff
This commit is contained in:
parent
a284dc182f
commit
39730ad271
1 changed files with 81 additions and 36 deletions
117
diff2html.js
117
diff2html.js
|
|
@ -220,24 +220,32 @@ var generateFileHtml = function (file) {
|
||||||
" </td>\n" +
|
" </td>\n" +
|
||||||
"</tr>\n";
|
"</tr>\n";
|
||||||
|
|
||||||
|
|
||||||
var oldLines = [], newLines = [];
|
var oldLines = [], newLines = [];
|
||||||
var processedOldLines = [], processedNewLines = [];
|
var processedOldLines = [], processedNewLines = [];
|
||||||
|
|
||||||
for (var i = 0; i < block.lines.length; i++) {
|
for (var i = 0; i < block.lines.length; i++) {
|
||||||
var line = block.lines[i];
|
var line = block.lines[i];
|
||||||
|
var escapedLine = escape(line.content);
|
||||||
|
|
||||||
if (line.type == LINE_TYPE.DELETES && !newLines.length) {
|
if (line.type == LINE_TYPE.CONTEXT && !oldLines.length && !newLines.length) {
|
||||||
|
lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine);
|
||||||
|
} else if (line.type == LINE_TYPE.INSERTS && !oldLines.length && !newLines.length) {
|
||||||
|
lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine);
|
||||||
|
} else if (line.type == LINE_TYPE.DELETES && !newLines.length) {
|
||||||
oldLines.push(line);
|
oldLines.push(line);
|
||||||
} else if (line.type == LINE_TYPE.INSERTS && oldLines.length > newLines.length) {
|
} else if (line.type == LINE_TYPE.INSERTS && oldLines.length > newLines.length) {
|
||||||
newLines.push(line);
|
newLines.push(line);
|
||||||
} else {
|
} else {
|
||||||
|
var j = 0;
|
||||||
|
var oldLine, newLine;
|
||||||
|
var oldEscapedLine, newEscapedLine;
|
||||||
|
|
||||||
if (oldLines.length === newLines.length) {
|
if (oldLines.length === newLines.length) {
|
||||||
for (var j = 0; j < oldLines.length; j++) {
|
for (j = 0; j < oldLines.length; j++) {
|
||||||
var oldLine = oldLines[j];
|
oldLine = oldLines[j];
|
||||||
var newLine = newLines[j];
|
newLine = newLines[j];
|
||||||
var oldEscapedLine = escape(oldLine.content);
|
oldEscapedLine = escape(oldLine.content);
|
||||||
var newEscapedLine = escape(newLine.content);
|
newEscapedLine = escape(newLine.content);
|
||||||
|
|
||||||
var diff = diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff);
|
var diff = diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff);
|
||||||
|
|
||||||
|
|
@ -246,14 +254,25 @@ var generateFileHtml = function (file) {
|
||||||
}
|
}
|
||||||
|
|
||||||
lines += processedOldLines + processedNewLines;
|
lines += processedOldLines + processedNewLines;
|
||||||
|
|
||||||
oldLines = [];
|
|
||||||
newLines = [];
|
|
||||||
processedOldLines = [];
|
|
||||||
processedNewLines = []
|
|
||||||
} else {
|
} else {
|
||||||
lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escape(line.content));
|
for (j = 0; j < oldLines.length; j++) {
|
||||||
|
oldLine = oldLines[j];
|
||||||
|
oldEscapedLine = escape(oldLine.content);
|
||||||
|
lines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, oldEscapedLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = 0; j < newLines.length; j++) {
|
||||||
|
newLine = newLines[j];
|
||||||
|
newEscapedLine = escape(newLine.content);
|
||||||
|
lines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, newEscapedLine);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
oldLines = [];
|
||||||
|
newLines = [];
|
||||||
|
processedOldLines = [];
|
||||||
|
processedNewLines = [];
|
||||||
|
i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -336,39 +355,65 @@ var generateSideBySideFileHtml = function (file) {
|
||||||
" </td>\n" +
|
" </td>\n" +
|
||||||
"</tr>\n";
|
"</tr>\n";
|
||||||
|
|
||||||
|
var oldLines = [], newLines = [];
|
||||||
|
|
||||||
for (var i = 0; i < block.lines.length; i++) {
|
for (var i = 0; i < block.lines.length; i++) {
|
||||||
var prevLine = block.lines[i - 1];
|
|
||||||
var line = block.lines[i];
|
var line = block.lines[i];
|
||||||
var newLine = block.lines[i + 1];
|
|
||||||
var nextNewLine = block.lines[i + 2];
|
|
||||||
|
|
||||||
var isOpositeTypeTwoLineBlock = line.type == LINE_TYPE.DELETES && newLine && newLine.type == LINE_TYPE.INSERTS &&
|
|
||||||
(!nextNewLine || nextNewLine && nextNewLine.type != LINE_TYPE.INSERTS) &&
|
|
||||||
(!prevLine || prevLine && prevLine.type != LINE_TYPE.DELETES);
|
|
||||||
|
|
||||||
var escapedLine = escape(line.content);
|
var escapedLine = escape(line.content);
|
||||||
|
|
||||||
if (isOpositeTypeTwoLineBlock) {
|
if (line.type == LINE_TYPE.CONTEXT && !oldLines.length && !newLines.length) {
|
||||||
var nextEscapedLine = escape(newLine.content);
|
|
||||||
|
|
||||||
var diff = diffHighlight(escapedLine, nextEscapedLine, file.isTripleDiff);
|
|
||||||
|
|
||||||
fileHtml.left += generateSingleLineHtml(line.type, line.oldNumber, diff.o);
|
|
||||||
fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
} else if (line.type == LINE_TYPE.DELETES) {
|
|
||||||
fileHtml.left += generateSingleLineHtml(line.type, line.oldNumber, escapedLine);
|
fileHtml.left += generateSingleLineHtml(line.type, line.oldNumber, escapedLine);
|
||||||
fileHtml.right += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
|
fileHtml.right += generateSingleLineHtml(line.type, line.newNumber, escapedLine);
|
||||||
} else if (line.type == LINE_TYPE.INSERTS) {
|
} else if (line.type == LINE_TYPE.INSERTS && !oldLines.length && !newLines.length) {
|
||||||
fileHtml.left += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
|
fileHtml.left += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
|
||||||
fileHtml.right += generateSingleLineHtml(line.type, line.newNumber, escapedLine);
|
fileHtml.right += generateSingleLineHtml(line.type, line.newNumber, escapedLine);
|
||||||
|
} else if (line.type == LINE_TYPE.DELETES && !newLines.length) {
|
||||||
|
oldLines.push(line);
|
||||||
|
} else if (line.type == LINE_TYPE.INSERTS && oldLines.length > newLines.length) {
|
||||||
|
newLines.push(line);
|
||||||
} else {
|
} else {
|
||||||
fileHtml.left += generateSingleLineHtml(line.type, line.oldNumber, escapedLine);
|
var j = 0;
|
||||||
fileHtml.right += generateSingleLineHtml(line.type, line.newNumber, escapedLine);
|
var oldLine, newLine;
|
||||||
|
var oldEscapedLine, newEscapedLine;
|
||||||
|
|
||||||
|
if (oldLines.length === newLines.length) {
|
||||||
|
for (j = 0; j < oldLines.length; j++) {
|
||||||
|
oldLine = oldLines[j];
|
||||||
|
newLine = newLines[j];
|
||||||
|
oldEscapedLine = escape(oldLine.content);
|
||||||
|
newEscapedLine = escape(newLine.content);
|
||||||
|
|
||||||
|
var diff = diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff);
|
||||||
|
|
||||||
|
fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, diff.o);
|
||||||
|
fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var maxLinesNumber = Math.max(oldLines.length, newLines.length);
|
||||||
|
for (j = 0; j < maxLinesNumber; j++) {
|
||||||
|
oldLine = oldLines[j];
|
||||||
|
newLine = newLines[j];
|
||||||
|
|
||||||
|
if (oldLine && newLine) {
|
||||||
|
fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, escape(oldLine.content));
|
||||||
|
fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, escape(newLine.content));
|
||||||
|
} else if (oldLine) {
|
||||||
|
fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, escape(oldLine.content));
|
||||||
|
fileHtml.right += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
|
||||||
|
} else if (newLine) {
|
||||||
|
fileHtml.left += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
|
||||||
|
fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, escape(newLine.content));
|
||||||
|
} else {
|
||||||
|
console.error("How did it get here?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
oldLines = [];
|
||||||
|
newLines = [];
|
||||||
|
i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return fileHtml;
|
return fileHtml;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue