Skip to content

Commit

Permalink
added folding to the diff report and fixed a minor Webkit bug about o…
Browse files Browse the repository at this point in the history
…utput of tabbed text content
  • Loading branch information
prettydiff committed Mar 21, 2014
1 parent 3786f96 commit 2ff4bf3
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 41 deletions.
33 changes: 32 additions & 1 deletion api/dom.js

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion api/node-local.js

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion api/prettydiff.wsf

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion diffview.css

Large diffs are not rendered by default.

66 changes: 53 additions & 13 deletions lib/diffview.js
Expand Up @@ -444,6 +444,8 @@ var diffview = function diffview(args) {
newStart = 0,
newEnd = 0,
rowcnt = 0,
foldcount = 0,
foldstart = 0,
jump = 0,
tabFix = (tab === "") ? "" : new RegExp("^((" + tab.replace(/\\/g, "\\") + ")+)"),
noTab = function diffview__report_noTab(str) {
Expand Down Expand Up @@ -792,10 +794,11 @@ var diffview = function diffview(args) {
ctest = true;
for (i = 0; i < rowcnt; i += 1) {
//apply context collapsing for the output, if needed
if (isNaN(context) === false && context > -1 && opcodes.length > 1 && ((a > 0 && i === context) || (a === 0 && i === 0)) && change === "equal") {
if (context > -1 && opcodes.length > 1 && ((a > 0 && i === context) || (a === 0 && i === 0)) && change === "equal") {
ctest = false;
jump = rowcnt - ((a === 0 ? 1 : 2) * context);
if (jump > 1) {
foldcount += 1;
data[0].push("<li>...</li>");
if (inline === false) {
data[1].push("<li class='skip'>&#10;</li>");
Expand Down Expand Up @@ -830,6 +833,9 @@ var diffview = function diffview(args) {
//this is the final of the three primary components
//this is where the output is built
if (inline === true) {
if (context < 0 && baseTextArray[baseStart - 1] === newTextArray[newStart - 1] && baseTextArray[baseStart] !== newTextArray[newStart]) {
data[0][foldstart] = data[0][foldstart].replace("xxx", foldcount);
}
if (ntest === true || change === "insert") {
data[0].push("<li class='empty'>&#8203;&#10;</li>");
data[2].push("<li>");
Expand All @@ -838,6 +844,7 @@ var diffview = function diffview(args) {
data[3].push("<li class='insert'>");
data[3].push(newTextArray[newStart]);
data[3].push("&#10;</li>");
foldcount += 1;
} else if (btest === true || change === "delete") {
data[0].push("<li>");
data[0].push(baseStart + 1);
Expand All @@ -846,6 +853,7 @@ var diffview = function diffview(args) {
data[3].push("<li class='delete'>");
data[3].push(baseTextArray[baseStart]);
data[3].push("&#10;</li>");
foldcount += 1;
} else if (change === "replace") {
if (baseTextArray[baseStart] !== newTextArray[newStart]) {
if (baseTextArray[baseStart] === "") {
Expand All @@ -872,6 +880,7 @@ var diffview = function diffview(args) {
data[3].push(baseTextArray[baseStart]);
}
data[3].push("&#10;</li>");
foldcount += 1;
}
if (newStart < newEnd) {
data[0].push("<li class='empty'>&#8203;&#10;</li>");
Expand All @@ -885,10 +894,26 @@ var diffview = function diffview(args) {
data[3].push(newTextArray[newStart]);
}
data[3].push("&#10;</li>");
foldcount += 1;
}
} else if (baseStart < baseEnd || newStart < newEnd) {
data[0].push("<li>");
data[0].push(baseStart + 1);
foldcount += 1;
if (context < 0 && ((baseTextArray[baseStart - 1] !== newTextArray[newStart - 1]) || (baseStart === 0 && newStart === 0)) && baseTextArray[baseStart + 1] === newTextArray[newStart + 1] && ((baseEnd - baseStart > 1) || (newEnd - newStart > 1))) {
foldstart = data[0].length;
if (a === opcodesLength - 1) {
if (baseEnd > newEnd) {
data[0].push("<li class=\"fold\" onclick=\"pd.difffold(this," + foldcount + "," + (baseEnd + 3) + ")\">");
} else {
data[0].push("<li class=\"fold\" onclick=\"pd.difffold(this," + foldcount + "," + (newEnd + 3) + ")\">");
}
} else {
data[0].push("<li class=\"fold\" onclick=\"pd.difffold(this," + foldcount + ",xxx)\">");
}
data[0].push("- " + (baseStart + 1));
} else {
data[0].push("<li>");
data[0].push(baseStart + 1);
}
data[0].push("</li>");
data[2].push("<li>");
data[2].push(newStart + 1);
Expand All @@ -911,6 +936,9 @@ var diffview = function diffview(args) {
}
} else {
if (btest === false && ntest === false && typeof baseTextArray[baseStart] === "string" && typeof newTextArray[newStart] === "string") {
if (context < 0 && baseTextArray[baseStart - 1] === newTextArray[newStart - 1] && baseTextArray[baseStart] !== newTextArray[newStart]) {
data[0][foldstart] = data[0][foldstart].replace("xxx", foldcount);
}
if (baseTextArray[baseStart] === "" && newTextArray[newStart] !== "") {
change = "insert";
}
Expand All @@ -922,12 +950,26 @@ var diffview = function diffview(args) {
} else {
charcompOutput = [];
}
if (baseStart === data[0][data[0].length - 2] - 1 || newStart === data[2][data[2].length - 2] - 1) {
if (baseStart === Number(data[0][data[0].length - 1].substring(data[0][data[0].length - 1].indexOf(">") + 1, data[0][data[0].length - 1].lastIndexOf("<"))) - 1 || newStart === Number(data[2][data[2].length - 1].substring(data[2][data[2].length - 1].indexOf(">") + 1, data[2][data[2].length - 1].lastIndexOf("<"))) - 1) {
repeat = true;
}
if (repeat === false) {
foldcount += 1;
if (baseStart < baseEnd) {
data[0].push("<li>" + (baseStart + 1) + "</li>");
if (context < 0 && ((baseTextArray[baseStart - 1] !== newTextArray[newStart - 1]) || (baseStart === 0 && newStart === 0)) && baseTextArray[baseStart + 1] === newTextArray[newStart + 1] && ((baseEnd - baseStart > 1) || (newEnd - newStart > 1))) {
if (a === opcodesLength - 1) {
if (baseEnd > newEnd) {
data[0].push("<li class=\"fold\" onclick=\"pd.difffold(this," + foldcount + "," + baseEnd + ")\">- " + (baseStart + 1) + "</li>");
} else {
data[0].push("<li class=\"fold\" onclick=\"pd.difffold(this," + foldcount + "," + newEnd + ")\">- " + (baseStart + 1) + "</li>");
}
} else {
foldstart = data[0].length;
data[0].push("<li class=\"fold\" onclick=\"pd.difffold(this," + foldcount + ",xxx)\">- " + (baseStart + 1) + "</li>");
}
} else {
data[0].push("<li>" + (baseStart + 1) + "</li>");
}
data[1].push("<li class='");
if (newStart >= newEnd) {
data[1].push("delete");
Expand Down Expand Up @@ -978,10 +1020,9 @@ var diffview = function diffview(args) {
newStart += 1;
}
} else if (btest === true || (typeof baseTextArray[baseStart] === "string" && typeof newTextArray[newStart] !== "string")) {
if (baseStart !== data[0][data[0].length - 2] - 1) {
data[0].push("<li>");
data[0].push(baseStart + 1);
data[0].push("</li>");
if (baseStart !== Number(data[0][data[0].length - 1].substring(data[0][data[0].length - 1].indexOf(">") + 1, data[0][data[0].length - 1].lastIndexOf("<"))) - 1) {
foldcount += 1;
data[0].push("<li>" + (baseStart + 1) + "</li>");
data[1].push("<li class='delete'>");
data[1].push(baseTextArray[baseStart]);
data[1].push("&#10;</li>");
Expand All @@ -991,12 +1032,11 @@ var diffview = function diffview(args) {
btest = false;
baseStart += 1;
} else if (ntest === true || (typeof baseTextArray[baseStart] !== "string" && typeof newTextArray[newStart] === "string")) {
if (newStart !== data[2][data[2].length - 2] - 1) {
if (newStart !== Number(data[2][data[2].length - 1].substring(data[2][data[2].length - 1].indexOf(">") + 1, data[2][data[2].length - 1].lastIndexOf("<"))) - 1) {
foldcount += 1;
data[0].push("<li class='empty'>&#8203;&#10;</li>");
data[1].push("<li class='empty'>&#8203;</li>");
data[2].push("<li>");
data[2].push(newStart + 1);
data[2].push("</li>");
data[2].push("<li>" + (newStart + 1) + "</li>");
data[3].push("<li class='insert'>");
data[3].push(newTextArray[newStart]);
data[3].push("&#10;</li>");
Expand Down

0 comments on commit 2ff4bf3

Please sign in to comment.