diff --git a/src/diff2html.js b/src/diff2html.js index 2bf86ba..ad5664f 100644 --- a/src/diff2html.js +++ b/src/diff2html.js @@ -15,12 +15,24 @@ function Diff2Html() { } + /* + * config + * { + * "wordByWord" : true (default) + * OR + * "charByChar" : true + * } + * + */ + /* * Generates pretty html from string diff input */ - Diff2Html.prototype.getPrettyHtmlFromDiff = function (diffInput) { + Diff2Html.prototype.getPrettyHtmlFromDiff = function (diffInput, config) { var diffJson = diffParser.generateDiffJson(diffInput); - return htmlPrinter.generateLineByLineJsonHtml(diffJson); + + var configOrEmpty = config || {}; + return htmlPrinter.generateLineByLineJsonHtml(diffJson, configOrEmpty); }; /* @@ -33,23 +45,27 @@ /* * Generates pretty html from a json object */ - Diff2Html.prototype.getPrettyHtmlFromJson = function (diffJson) { - return htmlPrinter.generateLineByLineJsonHtml(diffJson); + Diff2Html.prototype.getPrettyHtmlFromJson = function (diffJson, config) { + var configOrEmpty = config || {}; + return htmlPrinter.generateLineByLineJsonHtml(diffJson, configOrEmpty); }; /* * Generates pretty side by side html from string diff input */ - Diff2Html.prototype.getPrettySideBySideHtmlFromDiff = function (diffInput) { + Diff2Html.prototype.getPrettySideBySideHtmlFromDiff = function (diffInput, config) { var diffJson = diffParser.generateDiffJson(diffInput); - return htmlPrinter.generateSideBySideJsonHtml(diffJson); + + var configOrEmpty = config || {}; + return htmlPrinter.generateSideBySideJsonHtml(diffJson, configOrEmpty); }; /* * Generates pretty side by side html from a json object */ - Diff2Html.prototype.getPrettySideBySideHtmlFromJson = function (diffJson) { - return htmlPrinter.generateSideBySideJsonHtml(diffJson); + Diff2Html.prototype.getPrettySideBySideHtmlFromJson = function (diffJson, config) { + var configOrEmpty = config || {}; + return htmlPrinter.generateSideBySideJsonHtml(diffJson, configOrEmpty); }; if (typeof module !== 'undefined' && module.exports) { diff --git a/src/line-by-line-printer.js b/src/line-by-line-printer.js index d936278..20b040d 100644 --- a/src/line-by-line-printer.js +++ b/src/line-by-line-printer.js @@ -14,7 +14,7 @@ function LineByLinePrinter() { } - LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles) { + LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles, config) { return "
\n" + diffFiles.map(function (file) { return "
\n" + @@ -29,7 +29,7 @@ "
\n" + " \n" + " \n" + - " " + generateFileHtml(file) + + " " + generateFileHtml(file, config) + " \n" + "
\n" + "
\n" + @@ -39,7 +39,7 @@ "
\n"; }; - function generateFileHtml(file) { + function generateFileHtml(file, config) { return file.blocks.map(function (block) { var lines = "\n" + @@ -76,7 +76,8 @@ oldEscapedLine = utils.escape(oldLine.content); newEscapedLine = utils.escape(newLine.content); - var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff); + config.isTripleDiff = file.isTripleDiff; + var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, config); processedOldLines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, diff.o); processedNewLines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, diff.n); diff --git a/src/printer-utils.js b/src/printer-utils.js index bd016ef..2ea00d4 100644 --- a/src/printer-utils.js +++ b/src/printer-utils.js @@ -25,12 +25,12 @@ } }; - PrinterUtils.prototype.diffHighlight = function (diffLine1, diffLine2, isTripleDiff) { + PrinterUtils.prototype.diffHighlight = function (diffLine1, diffLine2, config) { var lineStart1, lineStart2; var prefixSize = 1; - if (isTripleDiff) prefixSize = 2; + if (config.isTripleDiff) prefixSize = 2; lineStart1 = diffLine1.substr(0, prefixSize); lineStart2 = diffLine2.substr(0, prefixSize); @@ -38,7 +38,12 @@ diffLine1 = diffLine1.substr(prefixSize); diffLine2 = diffLine2.substr(prefixSize); - var diff = jsDiff.diffChars(diffLine1, diffLine2); + var diff; + if (config.charByChar) diff = jsDiff.diffChars(diffLine1, diffLine2); + else diff = jsDiff.diffWordsWithSpace(diffLine1, diffLine2); + + //var diff = jsDiff.diffChars(diffLine1, diffLine2); + //var diff = jsDiff.diffWordsWithSpace(diffLine1, diffLine2); var highlightedLine = ""; diff --git a/src/side-by-side-printer.js b/src/side-by-side-printer.js index f3307c8..dca025f 100644 --- a/src/side-by-side-printer.js +++ b/src/side-by-side-printer.js @@ -14,10 +14,10 @@ function SideBySidePrinter() { } - SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles) { + SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles, config) { return "
\n" + diffFiles.map(function (file) { - var diffs = generateSideBySideFileHtml(file); + var diffs = generateSideBySideFileHtml(file, config); return "
\n" + "
\n" + @@ -52,7 +52,7 @@ "
\n"; }; - function generateSideBySideFileHtml(file) { + function generateSideBySideFileHtml(file, config) { var fileHtml = {}; fileHtml.left = ""; fileHtml.right = ""; @@ -101,7 +101,9 @@ oldEscapedLine = utils.escape(oldLine.content); newEscapedLine = utils.escape(newLine.content); - var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff); + config.isTripleDiff = file.isTripleDiff; + + var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, config); fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, diff.o); fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);