Skip to content

Commit 2b3c977

Browse files
committed
add support for both wordByWord and charByChar hightlight
1 parent 0662960 commit 2b3c977

File tree

4 files changed

+43
-19
lines changed

4 files changed

+43
-19
lines changed

src/diff2html.js

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,24 @@
1515
function Diff2Html() {
1616
}
1717

18+
/*
19+
* config
20+
* {
21+
* "wordByWord" : true (default)
22+
* OR
23+
* "charByChar" : true
24+
* }
25+
*
26+
*/
27+
1828
/*
1929
* Generates pretty html from string diff input
2030
*/
21-
Diff2Html.prototype.getPrettyHtmlFromDiff = function (diffInput) {
31+
Diff2Html.prototype.getPrettyHtmlFromDiff = function (diffInput, config) {
2232
var diffJson = diffParser.generateDiffJson(diffInput);
23-
return htmlPrinter.generateLineByLineJsonHtml(diffJson);
33+
34+
var configOrEmpty = config || {};
35+
return htmlPrinter.generateLineByLineJsonHtml(diffJson, configOrEmpty);
2436
};
2537

2638
/*
@@ -33,23 +45,27 @@
3345
/*
3446
* Generates pretty html from a json object
3547
*/
36-
Diff2Html.prototype.getPrettyHtmlFromJson = function (diffJson) {
37-
return htmlPrinter.generateLineByLineJsonHtml(diffJson);
48+
Diff2Html.prototype.getPrettyHtmlFromJson = function (diffJson, config) {
49+
var configOrEmpty = config || {};
50+
return htmlPrinter.generateLineByLineJsonHtml(diffJson, configOrEmpty);
3851
};
3952

4053
/*
4154
* Generates pretty side by side html from string diff input
4255
*/
43-
Diff2Html.prototype.getPrettySideBySideHtmlFromDiff = function (diffInput) {
56+
Diff2Html.prototype.getPrettySideBySideHtmlFromDiff = function (diffInput, config) {
4457
var diffJson = diffParser.generateDiffJson(diffInput);
45-
return htmlPrinter.generateSideBySideJsonHtml(diffJson);
58+
59+
var configOrEmpty = config || {};
60+
return htmlPrinter.generateSideBySideJsonHtml(diffJson, configOrEmpty);
4661
};
4762

4863
/*
4964
* Generates pretty side by side html from a json object
5065
*/
51-
Diff2Html.prototype.getPrettySideBySideHtmlFromJson = function (diffJson) {
52-
return htmlPrinter.generateSideBySideJsonHtml(diffJson);
66+
Diff2Html.prototype.getPrettySideBySideHtmlFromJson = function (diffJson, config) {
67+
var configOrEmpty = config || {};
68+
return htmlPrinter.generateSideBySideJsonHtml(diffJson, configOrEmpty);
5369
};
5470

5571
if (typeof module !== 'undefined' && module.exports) {

src/line-by-line-printer.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
function LineByLinePrinter() {
1515
}
1616

17-
LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles) {
17+
LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles, config) {
1818
return "<div class=\"d2h-wrapper\">\n" +
1919
diffFiles.map(function (file) {
2020
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
@@ -29,7 +29,7 @@
2929
" <div class=\"d2h-code-wrapper\">\n" +
3030
" <table class=\"d2h-diff-table\">\n" +
3131
" <tbody class=\"d2h-diff-tbody\">\n" +
32-
" " + generateFileHtml(file) +
32+
" " + generateFileHtml(file, config) +
3333
" </tbody>\n" +
3434
" </table>\n" +
3535
" </div>\n" +
@@ -39,7 +39,7 @@
3939
"</div>\n";
4040
};
4141

42-
function generateFileHtml(file) {
42+
function generateFileHtml(file, config) {
4343
return file.blocks.map(function (block) {
4444

4545
var lines = "<tr>\n" +
@@ -76,7 +76,8 @@
7676
oldEscapedLine = utils.escape(oldLine.content);
7777
newEscapedLine = utils.escape(newLine.content);
7878

79-
var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff);
79+
config.isTripleDiff = file.isTripleDiff;
80+
var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, config);
8081

8182
processedOldLines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, diff.o);
8283
processedNewLines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, diff.n);

src/printer-utils.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,25 @@
2525
}
2626
};
2727

28-
PrinterUtils.prototype.diffHighlight = function (diffLine1, diffLine2, isTripleDiff) {
28+
PrinterUtils.prototype.diffHighlight = function (diffLine1, diffLine2, config) {
2929
var lineStart1, lineStart2;
3030

3131
var prefixSize = 1;
3232

33-
if (isTripleDiff) prefixSize = 2;
33+
if (config.isTripleDiff) prefixSize = 2;
3434

3535
lineStart1 = diffLine1.substr(0, prefixSize);
3636
lineStart2 = diffLine2.substr(0, prefixSize);
3737

3838
diffLine1 = diffLine1.substr(prefixSize);
3939
diffLine2 = diffLine2.substr(prefixSize);
4040

41-
var diff = jsDiff.diffChars(diffLine1, diffLine2);
41+
var diff;
42+
if (config.charByChar) diff = jsDiff.diffChars(diffLine1, diffLine2);
43+
else diff = jsDiff.diffWordsWithSpace(diffLine1, diffLine2);
44+
45+
//var diff = jsDiff.diffChars(diffLine1, diffLine2);
46+
//var diff = jsDiff.diffWordsWithSpace(diffLine1, diffLine2);
4247

4348
var highlightedLine = "";
4449

src/side-by-side-printer.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
function SideBySidePrinter() {
1515
}
1616

17-
SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles) {
17+
SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles, config) {
1818
return "<div class=\"d2h-wrapper\">\n" +
1919
diffFiles.map(function (file) {
20-
var diffs = generateSideBySideFileHtml(file);
20+
var diffs = generateSideBySideFileHtml(file, config);
2121

2222
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
2323
" <div class=\"d2h-file-header\">\n" +
@@ -52,7 +52,7 @@
5252
"</div>\n";
5353
};
5454

55-
function generateSideBySideFileHtml(file) {
55+
function generateSideBySideFileHtml(file, config) {
5656
var fileHtml = {};
5757
fileHtml.left = "";
5858
fileHtml.right = "";
@@ -101,7 +101,9 @@
101101
oldEscapedLine = utils.escape(oldLine.content);
102102
newEscapedLine = utils.escape(newLine.content);
103103

104-
var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff);
104+
config.isTripleDiff = file.isTripleDiff;
105+
106+
var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, config);
105107

106108
fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, diff.o);
107109
fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);

0 commit comments

Comments
 (0)