/* * * LineByLinePrinter (line-by-line-printer.js) * Author: rtfpessoa * */ (function (global, undefined) { var diffParser = require("./diff-parser.js").DiffParser; var printerUtils = require("./printer-utils.js").PrinterUtils; var utils = require("./utils.js").Utils; function LineByLinePrinter() { } LineByLinePrinter.prototype.generateLineByLineJsonHtml = function (diffFiles) { return "
\n" + diffFiles.map(function (file) { return "
\n" + "
\n" + "
\n" + " +" + file.addedLines + "\n" + " -" + file.deletedLines + "\n" + "
\n" + "
" + printerUtils.getDiffName(file.oldName, file.newName) + "
\n" + "
\n" + "
\n" + "
\n" + " \n" + " \n" + " " + generateFileHtml(file) + " \n" + "
\n" + "
\n" + "
\n" + "
\n"; }).join("\n") + "
\n"; }; function generateFileHtml(file) { return file.blocks.map(function (block) { var lines = "\n" + " \n" + " " + "
" + utils.escape(block.header) + "
" + " \n" + "\n"; var oldLines = [], newLines = []; var processedOldLines = [], processedNewLines = []; for (var i = 0; i < block.lines.length; i++) { var line = block.lines[i]; var escapedLine = utils.escape(line.content); if (line.type == diffParser.LINE_TYPE.CONTEXT && !oldLines.length && !newLines.length) { lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine); } else if (line.type == diffParser.LINE_TYPE.INSERTS && !oldLines.length && !newLines.length) { lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine); } else if (line.type == diffParser.LINE_TYPE.DELETES && !newLines.length) { oldLines.push(line); } else if (line.type == diffParser.LINE_TYPE.INSERTS && oldLines.length > newLines.length) { newLines.push(line); } else { var j = 0; var oldLine, newLine; var oldEscapedLine, newEscapedLine; if (oldLines.length === newLines.length) { for (j = 0; j < oldLines.length; j++) { oldLine = oldLines[j]; newLine = newLines[j]; oldEscapedLine = utils.escape(oldLine.content); newEscapedLine = utils.escape(newLine.content); var diff = printerUtils.diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff); processedOldLines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, diff.o); processedNewLines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, diff.n); } lines += processedOldLines + processedNewLines; } else { for (j = 0; j < oldLines.length; j++) { oldLine = oldLines[j]; oldEscapedLine = utils.escape(oldLine.content); lines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, oldEscapedLine); } for (j = 0; j < newLines.length; j++) { newLine = newLines[j]; newEscapedLine = utils.escape(newLine.content); lines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, newEscapedLine); } } oldLines = []; newLines = []; processedOldLines = []; processedNewLines = []; i--; } } return lines; }).join("\n"); } function generateLineHtml(type, oldNumber, newNumber, content) { return "\n" + " " + "
" + utils.valueOrEmpty(oldNumber) + "
" + "
" + utils.valueOrEmpty(newNumber) + "
" + " \n" + " " + "
" + content + "
" + " \n" + "\n"; } if (typeof module !== 'undefined' && module.exports) { module.exports.LineByLinePrinter = new LineByLinePrinter(); } else if (typeof global.LineByLinePrinter === 'undefined') { global.LineByLinePrinter = new LineByLinePrinter(); } })(this);