diff --git a/src/file-list-printer.js b/src/file-list-printer.js index 5b6d8ff..18ccbbe 100644 --- a/src/file-list-printer.js +++ b/src/file-list-printer.js @@ -11,17 +11,25 @@ var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils; var baseTemplatesPath = 'file-summary'; + var iconsBaseTemplatesPath = 'icon'; function FileListPrinter() { } FileListPrinter.prototype.generateFileList = function(diffFiles) { + var lineTemplate = hoganUtils.template(baseTemplatesPath, 'line'); + var files = diffFiles.map(function(file) { - return hoganUtils.render(baseTemplatesPath, 'line', { + var fileTypeName = printerUtils.getFileTypeIcon(file); + var iconTemplate = hoganUtils.template(iconsBaseTemplatesPath, fileTypeName); + + return lineTemplate.render({ fileHtmlId: printerUtils.getHtmlId(file), fileName: printerUtils.getDiffName(file), deletedLines: '-' + file.deletedLines, addedLines: '+' + file.addedLines + }, { + fileIcon: iconTemplate }); }).join('\n'); diff --git a/src/hoganjs-utils.js b/src/hoganjs-utils.js index 0f050d7..70a5d12 100644 --- a/src/hoganjs-utils.js +++ b/src/hoganjs-utils.js @@ -20,10 +20,7 @@ } HoganJsUtils.prototype.render = function(namespace, view, params, configuration) { - var config = configuration || {}; - var templateKey = this._templateKey(namespace, view); - - var template = this._getTemplate(templateKey, config); + var template = this.template(namespace, view, configuration); if (template) { return template.render(params); } @@ -31,6 +28,13 @@ return null; }; + HoganJsUtils.prototype.template = function(namespace, view, configuration) { + var config = configuration || {}; + var templateKey = this._templateKey(namespace, view); + + return this._getTemplate(templateKey, config); + }; + HoganJsUtils.prototype._getTemplate = function(templateKey, config) { var template; diff --git a/src/line-by-line-printer.js b/src/line-by-line-printer.js index 401cb22..6086bec 100644 --- a/src/line-by-line-printer.js +++ b/src/line-by-line-printer.js @@ -14,18 +14,27 @@ var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils; var baseTemplatesPath = 'line-by-line'; + var iconsBaseTemplatesPath = 'icon'; + var tagsBaseTemplatesPath = 'tag'; function LineByLinePrinter(config) { this.config = config; } LineByLinePrinter.prototype.makeFileDiffHtml = function(file, diffs) { - return hoganUtils.render(baseTemplatesPath, 'file-diff', { + var fileDiffTemplate = hoganUtils.template(baseTemplatesPath, 'file-diff'); + var fileIconTemplate = hoganUtils.template(iconsBaseTemplatesPath, 'file'); + var fileTagTemplate = hoganUtils.template(tagsBaseTemplatesPath, printerUtils.getFileTypeIcon(file)); + + return fileDiffTemplate.render({ file: file, fileDiffName: printerUtils.getDiffName(file), fileHtmlId: printerUtils.getHtmlId(file), diffs: diffs - }); + }, { + fileIcon: fileIconTemplate, + fileTag: fileTagTemplate + }) }; LineByLinePrinter.prototype.makeLineByLineHtmlWrapper = function(content) { diff --git a/src/printer-utils.js b/src/printer-utils.js index adf879e..1add31c 100644 --- a/src/printer-utils.js +++ b/src/printer-utils.js @@ -95,6 +95,25 @@ return 'unknown/file/path'; }; + PrinterUtils.prototype.getFileTypeIcon = function(file) { + var templateName = 'file-changed'; + + if (file.isRename) { + templateName = 'file-renamed'; + } else if (file.isCopy) { + templateName = 'file-renamed'; + } else if (file.isNew) { + templateName = 'file-added'; + } else if (file.isDeleted) { + templateName = 'file-deleted'; + } else if (file.newName !== file.oldName) { + // If file is not Added, not Deleted and the names changed it must be a rename :) + templateName = 'file-renamed'; + } + + return templateName; + }; + PrinterUtils.prototype.diffHighlight = function(diffLine1, diffLine2, config) { var linePrefix1, linePrefix2, unprefixedLine1, unprefixedLine2; diff --git a/src/templates/diff2html-templates.js b/src/templates/diff2html-templates.js index 6b11375..0dd9b78 100644 --- a/src/templates/diff2html-templates.js +++ b/src/templates/diff2html-templates.js @@ -1,11 +1,20 @@ (function() { if (!!!global.browserTemplates) global.browserTemplates = {}; -var Hogan = require("hogan.js");global.browserTemplates["file-summary-line"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("