|
12 | 12 | var utils = require('./utils.js').Utils;
|
13 | 13 | var Rematch = require('./rematch.js').Rematch;
|
14 | 14 |
|
| 15 | + var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils; |
| 16 | + var genericTemplatesPath = 'generic'; |
| 17 | + var baseTemplatesPath = 'side-by-side'; |
| 18 | + var iconsBaseTemplatesPath = 'icon'; |
| 19 | + var tagsBaseTemplatesPath = 'tag'; |
| 20 | + |
15 | 21 | var matcher = Rematch.rematch(function(a, b) {
|
16 | 22 | var amod = a.content.substr(1);
|
17 | 23 | var bmod = b.content.substr(1);
|
|
24 | 30 | }
|
25 | 31 |
|
26 | 32 | SideBySidePrinter.prototype.makeDiffHtml = function(file, diffs) {
|
27 |
| - return '<div id="' + printerUtils.getHtmlId(file) + '" class="d2h-file-wrapper" data-lang="' + file.language + '">\n' + |
28 |
| - ' <div class="d2h-file-header">\n' + |
29 |
| - ' <span class="d2h-file-stats">\n' + |
30 |
| - ' <span class="d2h-lines-added">\n' + |
31 |
| - ' <span>+' + file.addedLines + '</span>\n' + |
32 |
| - ' </span>\n' + |
33 |
| - ' <span class="d2h-lines-deleted">\n' + |
34 |
| - ' <span>-' + file.deletedLines + '</span>\n' + |
35 |
| - ' </span>\n' + |
36 |
| - ' </span>\n' + |
37 |
| - ' <span class="d2h-file-name-wrapper">\n' + |
38 |
| - ' <span class="d2h-file-name">' + printerUtils.getDiffName(file) + '</span>\n' + |
39 |
| - ' </span>\n' + |
40 |
| - ' </div>\n' + |
41 |
| - ' <div class="d2h-files-diff">\n' + |
42 |
| - ' <div class="d2h-file-side-diff">\n' + |
43 |
| - ' <div class="d2h-code-wrapper">\n' + |
44 |
| - ' <table class="d2h-diff-table">\n' + |
45 |
| - ' <tbody class="d2h-diff-tbody">\n' + |
46 |
| - ' ' + diffs.left + |
47 |
| - ' </tbody>\n' + |
48 |
| - ' </table>\n' + |
49 |
| - ' </div>\n' + |
50 |
| - ' </div>\n' + |
51 |
| - ' <div class="d2h-file-side-diff">\n' + |
52 |
| - ' <div class="d2h-code-wrapper">\n' + |
53 |
| - ' <table class="d2h-diff-table">\n' + |
54 |
| - ' <tbody class="d2h-diff-tbody">\n' + |
55 |
| - ' ' + diffs.right + |
56 |
| - ' </tbody>\n' + |
57 |
| - ' </table>\n' + |
58 |
| - ' </div>\n' + |
59 |
| - ' </div>\n' + |
60 |
| - ' </div>\n' + |
61 |
| - ' </div>\n'; |
| 33 | + var fileDiffTemplate = hoganUtils.template(baseTemplatesPath, 'file-diff'); |
| 34 | + var filePathTemplate = hoganUtils.template(genericTemplatesPath, 'file-path'); |
| 35 | + var fileIconTemplate = hoganUtils.template(iconsBaseTemplatesPath, 'file'); |
| 36 | + var fileTagTemplate = hoganUtils.template(tagsBaseTemplatesPath, printerUtils.getFileTypeIcon(file)); |
| 37 | + |
| 38 | + return fileDiffTemplate.render({ |
| 39 | + file: file, |
| 40 | + fileHtmlId: printerUtils.getHtmlId(file), |
| 41 | + diffs: diffs, |
| 42 | + filePath: filePathTemplate.render({ |
| 43 | + fileDiffName: printerUtils.getDiffName(file) |
| 44 | + }, { |
| 45 | + fileIcon: fileIconTemplate, |
| 46 | + fileTag: fileTagTemplate |
| 47 | + }) |
| 48 | + }); |
62 | 49 | };
|
63 | 50 |
|
64 | 51 | SideBySidePrinter.prototype.generateSideBySideJsonHtml = function(diffFiles) {
|
65 | 52 | var that = this;
|
66 |
| - return '<div class="d2h-wrapper">\n' + |
67 |
| - diffFiles.map(function(file) { |
68 | 53 |
|
69 |
| - var diffs; |
70 |
| - if (file.blocks.length) { |
71 |
| - diffs = that.generateSideBySideFileHtml(file); |
72 |
| - } else { |
73 |
| - diffs = that.generateEmptyDiff(); |
74 |
| - } |
| 54 | + var content = diffFiles.map(function(file) { |
| 55 | + var diffs; |
| 56 | + if (file.blocks.length) { |
| 57 | + diffs = that.generateSideBySideFileHtml(file); |
| 58 | + } else { |
| 59 | + diffs = that.generateEmptyDiff(); |
| 60 | + } |
75 | 61 |
|
76 |
| - return that.makeDiffHtml(file, diffs); |
77 |
| - }).join('\n') + |
78 |
| - '</div>\n'; |
| 62 | + return that.makeDiffHtml(file, diffs); |
| 63 | + }).join('\n'); |
| 64 | + |
| 65 | + return hoganUtils.render(genericTemplatesPath, 'wrapper', {'content': content}); |
79 | 66 | };
|
80 | 67 |
|
81 | 68 | SideBySidePrinter.prototype.makeSideHtml = function(blockHeader) {
|
82 |
| - return '<tr>\n' + |
83 |
| - ' <td class="d2h-code-side-linenumber ' + diffParser.LINE_TYPE.INFO + '"></td>\n' + |
84 |
| - ' <td class="' + diffParser.LINE_TYPE.INFO + '">\n' + |
85 |
| - ' <div class="d2h-code-side-line ' + diffParser.LINE_TYPE.INFO + '">' + blockHeader + '</div>\n' + |
86 |
| - ' </td>\n' + |
87 |
| - '</tr>\n'; |
| 69 | + return hoganUtils.render(genericTemplatesPath, 'column-line-number', { |
| 70 | + diffParser: diffParser, |
| 71 | + blockHeader: blockHeader, |
| 72 | + lineClass: 'd2h-code-side-linenumber', |
| 73 | + contentClass: 'd2h-code-side-line' |
| 74 | + }); |
88 | 75 | };
|
89 | 76 |
|
90 | 77 | SideBySidePrinter.prototype.generateSideBySideFileHtml = function(file) {
|
|
95 | 82 |
|
96 | 83 | file.blocks.forEach(function(block) {
|
97 | 84 |
|
98 |
| - fileHtml.left += that.makeSideHtml(utils.escape(block.header)); |
| 85 | + fileHtml.left += that.makeSideHtml(block.header); |
99 | 86 | fileHtml.right += that.makeSideHtml('');
|
100 | 87 |
|
101 | 88 | var oldLines = [];
|
|
109 | 96 | var comparisons = oldLines.length * newLines.length;
|
110 | 97 | var maxComparisons = that.config.matchingMaxComparisons || 2500;
|
111 | 98 | var doMatching = comparisons < maxComparisons && (that.config.matching === 'lines' ||
|
112 |
| - that.config.matching === 'words'); |
| 99 | + that.config.matching === 'words'); |
113 | 100 |
|
114 | 101 | if (doMatching) {
|
115 | 102 | matches = matcher(oldLines, newLines);
|
|
232 | 219 | return fileHtml;
|
233 | 220 | };
|
234 | 221 |
|
235 |
| - SideBySidePrinter.prototype.makeSingleLineHtml = function(type, number, htmlContent, htmlPrefix) { |
236 |
| - return '<tr>\n' + |
237 |
| - ' <td class="d2h-code-side-linenumber ' + type + '">' + number + '</td>\n' + |
238 |
| - ' <td class="' + type + '">' + |
239 |
| - ' <div class="d2h-code-side-line ' + type + '">' + htmlPrefix + htmlContent + '</div>' + |
240 |
| - ' </td>\n' + |
241 |
| - ' </tr>\n'; |
242 |
| - }; |
243 |
| - |
244 | 222 | SideBySidePrinter.prototype.generateSingleLineHtml = function(type, number, content, prefix) {
|
245 |
| - var htmlPrefix = ''; |
246 |
| - if (prefix) { |
247 |
| - htmlPrefix = '<span class="d2h-code-line-prefix">' + prefix + '</span>'; |
248 |
| - } |
249 |
| - |
250 |
| - var htmlContent = ''; |
251 |
| - if (content) { |
252 |
| - htmlContent = '<span class="d2h-code-line-ctn">' + content + '</span>'; |
253 |
| - } |
254 |
| - |
255 |
| - return this.makeSingleLineHtml(type, number, htmlContent, htmlPrefix); |
| 223 | + return hoganUtils.render(genericTemplatesPath, 'line', |
| 224 | + { |
| 225 | + type: type, |
| 226 | + lineClass: 'd2h-code-side-linenumber', |
| 227 | + contentClass: 'd2h-code-side-line', |
| 228 | + prefix: prefix && utils.convertWhiteSpaceToNonBreakingSpace(prefix), |
| 229 | + content: content && utils.convertWhiteSpaceToNonBreakingSpace(content), |
| 230 | + lineNumber: number |
| 231 | + }); |
256 | 232 | };
|
257 | 233 |
|
258 | 234 | SideBySidePrinter.prototype.generateEmptyDiff = function() {
|
259 | 235 | var fileHtml = {};
|
260 | 236 | fileHtml.right = '';
|
261 | 237 |
|
262 |
| - fileHtml.left = '<tr>\n' + |
263 |
| - ' <td class="' + diffParser.LINE_TYPE.INFO + '">' + |
264 |
| - ' <div class="d2h-code-side-line ' + diffParser.LINE_TYPE.INFO + '">' + |
265 |
| - 'File without changes' + |
266 |
| - ' </div>' + |
267 |
| - ' </td>\n' + |
268 |
| - '</tr>\n'; |
| 238 | + fileHtml.left = hoganUtils.render(genericTemplatesPath, 'empty-diff', { |
| 239 | + contentClass: 'd2h-code-side-line', |
| 240 | + diffParser: diffParser |
| 241 | + }); |
269 | 242 |
|
270 | 243 | return fileHtml;
|
271 | 244 | };
|
|
0 commit comments