add support for both wordByWord and charByChar hightlight
This commit is contained in:
parent
0662960fae
commit
2b3c977ff9
4 changed files with 43 additions and 19 deletions
|
|
@ -15,12 +15,24 @@
|
||||||
function Diff2Html() {
|
function Diff2Html() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* config
|
||||||
|
* {
|
||||||
|
* "wordByWord" : true (default)
|
||||||
|
* OR
|
||||||
|
* "charByChar" : true
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generates pretty html from string diff input
|
* Generates pretty html from string diff input
|
||||||
*/
|
*/
|
||||||
Diff2Html.prototype.getPrettyHtmlFromDiff = function (diffInput) {
|
Diff2Html.prototype.getPrettyHtmlFromDiff = function (diffInput, config) {
|
||||||
var diffJson = diffParser.generateDiffJson(diffInput);
|
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
|
* Generates pretty html from a json object
|
||||||
*/
|
*/
|
||||||
Diff2Html.prototype.getPrettyHtmlFromJson = function (diffJson) {
|
Diff2Html.prototype.getPrettyHtmlFromJson = function (diffJson, config) {
|
||||||
return htmlPrinter.generateLineByLineJsonHtml(diffJson);
|
var configOrEmpty = config || {};
|
||||||
|
return htmlPrinter.generateLineByLineJsonHtml(diffJson, configOrEmpty);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generates pretty side by side html from string diff input
|
* 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);
|
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
|
* Generates pretty side by side html from a json object
|
||||||
*/
|
*/
|
||||||
Diff2Html.prototype.getPrettySideBySideHtmlFromJson = function (diffJson) {
|
Diff2Html.prototype.getPrettySideBySideHtmlFromJson = function (diffJson, config) {
|
||||||
return htmlPrinter.generateSideBySideJsonHtml(diffJson);
|
var configOrEmpty = config || {};
|
||||||
|
return htmlPrinter.generateSideBySideJsonHtml(diffJson, configOrEmpty);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (typeof module !== 'undefined' && module.exports) {
|
if (typeof module !== 'undefined' && module.exports) {
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
function LineByLinePrinter() {
|
function LineByLinePrinter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles) {
|
LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles, config) {
|
||||||
return "<div class=\"d2h-wrapper\">\n" +
|
return "<div class=\"d2h-wrapper\">\n" +
|
||||||
diffFiles.map(function (file) {
|
diffFiles.map(function (file) {
|
||||||
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
|
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
" <div class=\"d2h-code-wrapper\">\n" +
|
" <div class=\"d2h-code-wrapper\">\n" +
|
||||||
" <table class=\"d2h-diff-table\">\n" +
|
" <table class=\"d2h-diff-table\">\n" +
|
||||||
" <tbody class=\"d2h-diff-tbody\">\n" +
|
" <tbody class=\"d2h-diff-tbody\">\n" +
|
||||||
" " + generateFileHtml(file) +
|
" " + generateFileHtml(file, config) +
|
||||||
" </tbody>\n" +
|
" </tbody>\n" +
|
||||||
" </table>\n" +
|
" </table>\n" +
|
||||||
" </div>\n" +
|
" </div>\n" +
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
"</div>\n";
|
"</div>\n";
|
||||||
};
|
};
|
||||||
|
|
||||||
function generateFileHtml(file) {
|
function generateFileHtml(file, config) {
|
||||||
return file.blocks.map(function (block) {
|
return file.blocks.map(function (block) {
|
||||||
|
|
||||||
var lines = "<tr>\n" +
|
var lines = "<tr>\n" +
|
||||||
|
|
@ -76,7 +76,8 @@
|
||||||
oldEscapedLine = utils.escape(oldLine.content);
|
oldEscapedLine = utils.escape(oldLine.content);
|
||||||
newEscapedLine = utils.escape(newLine.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);
|
processedOldLines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, diff.o);
|
||||||
processedNewLines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, diff.n);
|
processedNewLines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, diff.n);
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,12 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
PrinterUtils.prototype.diffHighlight = function (diffLine1, diffLine2, isTripleDiff) {
|
PrinterUtils.prototype.diffHighlight = function (diffLine1, diffLine2, config) {
|
||||||
var lineStart1, lineStart2;
|
var lineStart1, lineStart2;
|
||||||
|
|
||||||
var prefixSize = 1;
|
var prefixSize = 1;
|
||||||
|
|
||||||
if (isTripleDiff) prefixSize = 2;
|
if (config.isTripleDiff) prefixSize = 2;
|
||||||
|
|
||||||
lineStart1 = diffLine1.substr(0, prefixSize);
|
lineStart1 = diffLine1.substr(0, prefixSize);
|
||||||
lineStart2 = diffLine2.substr(0, prefixSize);
|
lineStart2 = diffLine2.substr(0, prefixSize);
|
||||||
|
|
@ -38,7 +38,12 @@
|
||||||
diffLine1 = diffLine1.substr(prefixSize);
|
diffLine1 = diffLine1.substr(prefixSize);
|
||||||
diffLine2 = diffLine2.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 = "";
|
var highlightedLine = "";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,10 @@
|
||||||
function SideBySidePrinter() {
|
function SideBySidePrinter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles) {
|
SideBySidePrinter.prototype.generateSideBySideJsonHtml = function (diffFiles, config) {
|
||||||
return "<div class=\"d2h-wrapper\">\n" +
|
return "<div class=\"d2h-wrapper\">\n" +
|
||||||
diffFiles.map(function (file) {
|
diffFiles.map(function (file) {
|
||||||
var diffs = generateSideBySideFileHtml(file);
|
var diffs = generateSideBySideFileHtml(file, config);
|
||||||
|
|
||||||
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
|
return "<div class=\"d2h-file-wrapper\" data-lang=\"" + file.language + "\">\n" +
|
||||||
" <div class=\"d2h-file-header\">\n" +
|
" <div class=\"d2h-file-header\">\n" +
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
"</div>\n";
|
"</div>\n";
|
||||||
};
|
};
|
||||||
|
|
||||||
function generateSideBySideFileHtml(file) {
|
function generateSideBySideFileHtml(file, config) {
|
||||||
var fileHtml = {};
|
var fileHtml = {};
|
||||||
fileHtml.left = "";
|
fileHtml.left = "";
|
||||||
fileHtml.right = "";
|
fileHtml.right = "";
|
||||||
|
|
@ -101,7 +101,9 @@
|
||||||
oldEscapedLine = utils.escape(oldLine.content);
|
oldEscapedLine = utils.escape(oldLine.content);
|
||||||
newEscapedLine = utils.escape(newLine.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.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, diff.o);
|
||||||
fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);
|
fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue