add support for both wordByWord and charByChar hightlight

This commit is contained in:
Rodrigo Fernandes 2015-04-12 11:32:37 +01:00
parent 0662960fae
commit 2b3c977ff9
4 changed files with 43 additions and 19 deletions

View file

@ -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) {

View file

@ -14,7 +14,7 @@
function LineByLinePrinter() {
}
LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles) {
LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles, config) {
return "<div class=\"d2h-wrapper\">\n" +
diffFiles.map(function (file) {
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
@ -29,7 +29,7 @@
" <div class=\"d2h-code-wrapper\">\n" +
" <table class=\"d2h-diff-table\">\n" +
" <tbody class=\"d2h-diff-tbody\">\n" +
" " + generateFileHtml(file) +
" " + generateFileHtml(file, config) +
" </tbody>\n" +
" </table>\n" +
" </div>\n" +
@ -39,7 +39,7 @@
"</div>\n";
};
function generateFileHtml(file) {
function generateFileHtml(file, config) {
return file.blocks.map(function (block) {
var lines = "<tr>\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);

View file

@ -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 = "";

View file

@ -14,10 +14,10 @@
function SideBySidePrinter() {
}
SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles) {
SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles, config) {
return "<div class=\"d2h-wrapper\">\n" +
diffFiles.map(function (file) {
var diffs = generateSideBySideFileHtml(file);
var diffs = generateSideBySideFileHtml(file, config);
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
" <div class=\"d2h-file-header\">\n" +
@ -52,7 +52,7 @@
"</div>\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);