From 4a06df603919808ebf8e03679772217c4221abf2 Mon Sep 17 00:00:00 2001 From: Paulo Bu Date: Sun, 20 Dec 2015 15:51:56 +0100 Subject: [PATCH 1/2] Makes LineByLine more object oriented --- src/html-printer.js | 4 +++- src/line-by-line-printer.js | 28 +++++++++++++++------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/html-printer.js b/src/html-printer.js index aa3588f..6cc280a 100644 --- a/src/html-printer.js +++ b/src/html-printer.js @@ -13,7 +13,9 @@ function HtmlPrinter() { } - HtmlPrinter.prototype.generateLineByLineJsonHtml = lineByLinePrinter.generateLineByLineJsonHtml; + HtmlPrinter.prototype.generateLineByLineJsonHtml = function(diffFiles, config) { + return lineByLinePrinter.generateLineByLineJsonHtml(diffFiles, config); + }; HtmlPrinter.prototype.generateSideBySideJsonHtml = sideBySidePrinter.generateSideBySideJsonHtml; diff --git a/src/line-by-line-printer.js b/src/line-by-line-printer.js index 834f20c..b92fdae 100644 --- a/src/line-by-line-printer.js +++ b/src/line-by-line-printer.js @@ -16,14 +16,15 @@ } LineByLinePrinter.prototype.generateLineByLineJsonHtml = function(diffFiles, config) { + self = this; return '
\n' + diffFiles.map(function(file) { var diffs; if (file.blocks.length) { - diffs = generateFileHtml(file, config); + diffs = self.generateFileHtml(file, config); } else { - diffs = generateEmptyDiff(); + diffs = self.generateEmptyDiff(); } return '
\n' + @@ -58,7 +59,8 @@ return Rematch.distance(amod, bmod); }); - function generateFileHtml(file, config) { + LineByLinePrinter.prototype.generateFileHtml = function(file, config) { + self = this; return file.blocks.map(function(block) { var lines = '\n' + @@ -101,15 +103,15 @@ var diff = printerUtils.diffHighlight(oldLine.content, newLine.content, config); processedOldLines += - generateLineHtml(deleteType, oldLine.oldNumber, oldLine.newNumber, + self.generateLineHtml(deleteType, oldLine.oldNumber, oldLine.newNumber, diff.first.line, diff.first.prefix); processedNewLines += - generateLineHtml(insertType, newLine.oldNumber, newLine.newNumber, + self.generateLineHtml(insertType, newLine.oldNumber, newLine.newNumber, diff.second.line, diff.second.prefix); } lines += processedOldLines + processedNewLines; - lines += processLines(oldLines.slice(common), newLines.slice(common)); + lines += self.processLines(oldLines.slice(common), newLines.slice(common)); processedOldLines = []; processedNewLines = []; @@ -127,9 +129,9 @@ processChangeBlock(); } if (line.type == diffParser.LINE_TYPE.CONTEXT) { - lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine); + lines += self.generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine); } else if (line.type == diffParser.LINE_TYPE.INSERTS && !oldLines.length) { - lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine); + lines += self.generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine); } else if (line.type == diffParser.LINE_TYPE.DELETES) { oldLines.push(line); } else if (line.type == diffParser.LINE_TYPE.INSERTS && !!oldLines.length) { @@ -146,25 +148,25 @@ }).join('\n'); } - function processLines(oldLines, newLines) { + LineByLinePrinter.prototype.processLines = function(oldLines, newLines) { var lines = ''; for (j = 0; j < oldLines.length; j++) { var oldLine = oldLines[j]; var oldEscapedLine = utils.escape(oldLine.content); - lines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, oldEscapedLine); + lines += this.generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, oldEscapedLine); } for (j = 0; j < newLines.length; j++) { var newLine = newLines[j]; var newEscapedLine = utils.escape(newLine.content); - lines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, newEscapedLine); + lines += this.generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, newEscapedLine); } return lines; } - function generateLineHtml(type, oldNumber, newNumber, content, prefix) { + LineByLinePrinter.prototype.generateLineHtml = function(type, oldNumber, newNumber, content, prefix) { var htmlPrefix = ''; if (prefix) { htmlPrefix = '' + prefix + ''; @@ -186,7 +188,7 @@ '\n'; } - function generateEmptyDiff() { + LineByLinePrinter.prototype.generateEmptyDiff = function() { return '\n' + ' ' + '
' + From e3f572c075dbea13dcd6efa1190013bff3b2be26 Mon Sep 17 00:00:00 2001 From: Paulo Bu Date: Sun, 20 Dec 2015 15:56:53 +0100 Subject: [PATCH 2/2] Passes config in the LineByLine constructor and uses it from within the class --- src/html-printer.js | 5 +++-- src/line-by-line-printer.js | 17 +++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/html-printer.js b/src/html-printer.js index 6cc280a..3690b44 100644 --- a/src/html-printer.js +++ b/src/html-printer.js @@ -7,14 +7,15 @@ (function(ctx, undefined) { - var lineByLinePrinter = require('./line-by-line-printer.js').LineByLinePrinter; + var LineByLinePrinter = require('./line-by-line-printer.js').LineByLinePrinter; var sideBySidePrinter = require('./side-by-side-printer.js').SideBySidePrinter; function HtmlPrinter() { } HtmlPrinter.prototype.generateLineByLineJsonHtml = function(diffFiles, config) { - return lineByLinePrinter.generateLineByLineJsonHtml(diffFiles, config); + var lineByLinePrinter = new LineByLinePrinter(config); + return lineByLinePrinter.generateLineByLineJsonHtml(diffFiles); }; HtmlPrinter.prototype.generateSideBySideJsonHtml = sideBySidePrinter.generateSideBySideJsonHtml; diff --git a/src/line-by-line-printer.js b/src/line-by-line-printer.js index b92fdae..a0f32dd 100644 --- a/src/line-by-line-printer.js +++ b/src/line-by-line-printer.js @@ -12,17 +12,18 @@ var utils = require('./utils.js').Utils; var Rematch = require('./rematch.js').Rematch; - function LineByLinePrinter() { + function LineByLinePrinter(config) { + this.config = config; } - LineByLinePrinter.prototype.generateLineByLineJsonHtml = function(diffFiles, config) { + LineByLinePrinter.prototype.generateLineByLineJsonHtml = function(diffFiles) { self = this; return '
\n' + diffFiles.map(function(file) { var diffs; if (file.blocks.length) { - diffs = self.generateFileHtml(file, config); + diffs = self.generateFileHtml(file); } else { diffs = self.generateEmptyDiff(); } @@ -59,7 +60,7 @@ return Rematch.distance(amod, bmod); }); - LineByLinePrinter.prototype.generateFileHtml = function(file, config) { + LineByLinePrinter.prototype.generateFileHtml = function(file) { self = this; return file.blocks.map(function(block) { @@ -76,7 +77,7 @@ var matches; var insertType; var deleteType; - var doMatching = config.matching === "lines" || config.matching === "words"; + var doMatching = self.config.matching === "lines" || self.config.matching === "words"; if (doMatching) { matches = matcher(oldLines, newLines); insertType = diffParser.LINE_TYPE.INSERT_CHANGES; @@ -99,8 +100,8 @@ oldLine = oldLines[j]; newLine = newLines[j]; - config.isCombined = file.isCombined; - var diff = printerUtils.diffHighlight(oldLine.content, newLine.content, config); + self.config.isCombined = file.isCombined; + var diff = printerUtils.diffHighlight(oldLine.content, newLine.content, self.config); processedOldLines += self.generateLineHtml(deleteType, oldLine.oldNumber, oldLine.newNumber, @@ -198,6 +199,6 @@ '\n'; } - module.exports['LineByLinePrinter'] = new LineByLinePrinter(); + module.exports['LineByLinePrinter'] = LineByLinePrinter; })(this);