Initial template override support
This commit is contained in:
parent
d4bab74b1a
commit
2aaae31cc2
11 changed files with 62 additions and 29 deletions
|
|
@ -173,11 +173,11 @@ function namespace(name) {
|
||||||
// write a template foreach file that matches template extension
|
// write a template foreach file that matches template extension
|
||||||
templates = extractFiles(options.argv.remain)
|
templates = extractFiles(options.argv.remain)
|
||||||
.map(function(file) {
|
.map(function(file) {
|
||||||
var openedFile = fs.readFileSync(file, 'utf-8');
|
var openedFile = fs.readFileSync(file, 'utf-8').trim();
|
||||||
var name;
|
var name;
|
||||||
if (!openedFile) return;
|
if (!openedFile) return;
|
||||||
name = namespace(path.basename(file).replace(/\..*$/, ''));
|
name = namespace(path.basename(file).replace(/\..*$/, ''));
|
||||||
openedFile = removeByteOrderMark(openedFile.trim());
|
openedFile = removeByteOrderMark(openedFile);
|
||||||
openedFile = wrap(file, name, openedFile);
|
openedFile = wrap(file, name, openedFile);
|
||||||
if (!options.outputdir) return openedFile;
|
if (!options.outputdir) return openedFile;
|
||||||
fs.writeFileSync(path.join(options.outputdir, name + '.js')
|
fs.writeFileSync(path.join(options.outputdir, name + '.js')
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var diffParser = require('./diff-parser.js').DiffParser;
|
var diffParser = require('./diff-parser.js').DiffParser;
|
||||||
var fileLister = require('./file-list-printer.js').FileListPrinter;
|
|
||||||
var htmlPrinter = require('./html-printer.js').HtmlPrinter;
|
var htmlPrinter = require('./html-printer.js').HtmlPrinter;
|
||||||
|
|
||||||
function Diff2Html() {
|
function Diff2Html() {
|
||||||
|
|
@ -43,7 +42,7 @@
|
||||||
|
|
||||||
var fileList = '';
|
var fileList = '';
|
||||||
if (configOrEmpty.showFiles === true) {
|
if (configOrEmpty.showFiles === true) {
|
||||||
fileList = fileLister.generateFileList(diffJson, configOrEmpty);
|
fileList = htmlPrinter.generateFileListSummary(diffJson, configOrEmpty);
|
||||||
}
|
}
|
||||||
|
|
||||||
var diffOutput = '';
|
var diffOutput = '';
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,16 @@
|
||||||
(function() {
|
(function() {
|
||||||
var printerUtils = require('./printer-utils.js').PrinterUtils;
|
var printerUtils = require('./printer-utils.js').PrinterUtils;
|
||||||
|
|
||||||
var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils;
|
var hoganUtils;
|
||||||
|
|
||||||
var baseTemplatesPath = 'file-summary';
|
var baseTemplatesPath = 'file-summary';
|
||||||
var iconsBaseTemplatesPath = 'icon';
|
var iconsBaseTemplatesPath = 'icon';
|
||||||
|
|
||||||
function FileListPrinter() {
|
function FileListPrinter(config) {
|
||||||
|
this.config = config;
|
||||||
|
|
||||||
|
var HoganJsUtils = require('./hoganjs-utils.js').HoganJsUtils;
|
||||||
|
hoganUtils = new HoganJsUtils(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileListPrinter.prototype.generateFileList = function(diffFiles) {
|
FileListPrinter.prototype.generateFileList = function(diffFiles) {
|
||||||
|
|
@ -38,5 +43,5 @@
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.FileListPrinter = new FileListPrinter();
|
module.exports.FileListPrinter = FileListPrinter;
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -8,18 +8,19 @@
|
||||||
(function() {
|
(function() {
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
|
||||||
var hogan = require('hogan.js');
|
var hogan = require('hogan.js');
|
||||||
|
|
||||||
var hoganTemplates = require('./templates/diff2html-templates.js');
|
var hoganTemplates = require('./templates/diff2html-templates.js');
|
||||||
|
|
||||||
var templatesPath = path.resolve(__dirname, 'templates');
|
var extraTemplates;
|
||||||
|
|
||||||
function HoganJsUtils() {
|
function HoganJsUtils(configuration) {
|
||||||
|
this.config = configuration || {};
|
||||||
|
extraTemplates = this.config.templates || {};
|
||||||
}
|
}
|
||||||
|
|
||||||
HoganJsUtils.prototype.render = function(namespace, view, params, configuration) {
|
HoganJsUtils.prototype.render = function(namespace, view, params) {
|
||||||
var template = this.template(namespace, view, configuration);
|
var template = this.template(namespace, view);
|
||||||
if (template) {
|
if (template) {
|
||||||
return template.render(params);
|
return template.render(params);
|
||||||
}
|
}
|
||||||
|
|
@ -27,17 +28,16 @@
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
HoganJsUtils.prototype.template = function(namespace, view, configuration) {
|
HoganJsUtils.prototype.template = function(namespace, view) {
|
||||||
var config = configuration || {};
|
|
||||||
var templateKey = this._templateKey(namespace, view);
|
var templateKey = this._templateKey(namespace, view);
|
||||||
|
|
||||||
return this._getTemplate(templateKey, config);
|
return this._getTemplate(templateKey);
|
||||||
};
|
};
|
||||||
|
|
||||||
HoganJsUtils.prototype._getTemplate = function(templateKey, config) {
|
HoganJsUtils.prototype._getTemplate = function(templateKey) {
|
||||||
var template;
|
var template;
|
||||||
|
|
||||||
if (!config.noCache) {
|
if (!this.config.noCache) {
|
||||||
template = this._readFromCache(templateKey);
|
template = this._readFromCache(templateKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (fs.readFileSync) {
|
if (fs.readFileSync) {
|
||||||
|
var templatesPath = path.resolve(__dirname, 'templates');
|
||||||
var templatePath = path.join(templatesPath, templateKey);
|
var templatePath = path.join(templatesPath, templateKey);
|
||||||
var templateContent = fs.readFileSync(templatePath + '.mustache', 'utf8');
|
var templateContent = fs.readFileSync(templatePath + '.mustache', 'utf8');
|
||||||
template = hogan.compile(templateContent);
|
template = hogan.compile(templateContent);
|
||||||
|
|
@ -66,12 +67,16 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
HoganJsUtils.prototype._readFromCache = function(templateKey) {
|
HoganJsUtils.prototype._readFromCache = function(templateKey) {
|
||||||
return hoganTemplates[templateKey];
|
return extraTemplates[templateKey] || hoganTemplates[templateKey];
|
||||||
};
|
};
|
||||||
|
|
||||||
HoganJsUtils.prototype._templateKey = function(namespace, view) {
|
HoganJsUtils.prototype._templateKey = function(namespace, view) {
|
||||||
return namespace + '-' + view;
|
return namespace + '-' + view;
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.HoganJsUtils = new HoganJsUtils();
|
HoganJsUtils.prototype.compile = function(templateStr) {
|
||||||
|
return hogan.compile(templateStr);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.HoganJsUtils = HoganJsUtils;
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
(function() {
|
(function() {
|
||||||
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;
|
var SideBySidePrinter = require('./side-by-side-printer.js').SideBySidePrinter;
|
||||||
|
var FileListPrinter = require('./file-list-printer.js').FileListPrinter;
|
||||||
|
|
||||||
function HtmlPrinter() {
|
function HtmlPrinter() {
|
||||||
}
|
}
|
||||||
|
|
@ -22,5 +23,10 @@
|
||||||
return sideBySidePrinter.generateSideBySideJsonHtml(diffFiles);
|
return sideBySidePrinter.generateSideBySideJsonHtml(diffFiles);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
HtmlPrinter.prototype.generateFileListSummary = function(diffJson, config) {
|
||||||
|
var fileListPrinter = new FileListPrinter(config);
|
||||||
|
return fileListPrinter.generateFileList(diffJson);
|
||||||
|
};
|
||||||
|
|
||||||
module.exports.HtmlPrinter = new HtmlPrinter();
|
module.exports.HtmlPrinter = new HtmlPrinter();
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@
|
||||||
var utils = require('./utils.js').Utils;
|
var utils = require('./utils.js').Utils;
|
||||||
var Rematch = require('./rematch.js').Rematch;
|
var Rematch = require('./rematch.js').Rematch;
|
||||||
|
|
||||||
var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils;
|
var hoganUtils;
|
||||||
|
|
||||||
var genericTemplatesPath = 'generic';
|
var genericTemplatesPath = 'generic';
|
||||||
var baseTemplatesPath = 'line-by-line';
|
var baseTemplatesPath = 'line-by-line';
|
||||||
var iconsBaseTemplatesPath = 'icon';
|
var iconsBaseTemplatesPath = 'icon';
|
||||||
|
|
@ -19,6 +20,9 @@
|
||||||
|
|
||||||
function LineByLinePrinter(config) {
|
function LineByLinePrinter(config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
|
||||||
|
var HoganJsUtils = require('./hoganjs-utils.js').HoganJsUtils;
|
||||||
|
hoganUtils = new HoganJsUtils(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
LineByLinePrinter.prototype.makeFileDiffHtml = function(file, diffs) {
|
LineByLinePrinter.prototype.makeFileDiffHtml = function(file, diffs) {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@
|
||||||
var utils = require('./utils.js').Utils;
|
var utils = require('./utils.js').Utils;
|
||||||
var Rematch = require('./rematch.js').Rematch;
|
var Rematch = require('./rematch.js').Rematch;
|
||||||
|
|
||||||
var hoganUtils = require('./hoganjs-utils.js').HoganJsUtils;
|
var hoganUtils;
|
||||||
|
|
||||||
var genericTemplatesPath = 'generic';
|
var genericTemplatesPath = 'generic';
|
||||||
var baseTemplatesPath = 'side-by-side';
|
var baseTemplatesPath = 'side-by-side';
|
||||||
var iconsBaseTemplatesPath = 'icon';
|
var iconsBaseTemplatesPath = 'icon';
|
||||||
|
|
@ -26,6 +27,9 @@
|
||||||
|
|
||||||
function SideBySidePrinter(config) {
|
function SideBySidePrinter(config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
|
||||||
|
var HoganJsUtils = require('./hoganjs-utils.js').HoganJsUtils;
|
||||||
|
hoganUtils = new HoganJsUtils(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
SideBySidePrinter.prototype.makeDiffHtml = function(file, diffs) {
|
SideBySidePrinter.prototype.makeDiffHtml = function(file, diffs) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
|
|
||||||
var fileListPrinter = require('../src/file-list-printer.js').FileListPrinter;
|
var fileListPrinter = new (require('../src/file-list-printer.js').FileListPrinter)();
|
||||||
|
|
||||||
describe('FileListPrinter', function() {
|
describe('FileListPrinter', function() {
|
||||||
describe('generateFileList', function() {
|
describe('generateFileList', function() {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
|
|
||||||
var HoganJsUtils = require('../src/hoganjs-utils.js').HoganJsUtils;
|
var HoganJsUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)();
|
||||||
var diffParser = require('../src/diff-parser.js').DiffParser;
|
var diffParser = require('../src/diff-parser.js').DiffParser;
|
||||||
|
|
||||||
describe('HoganJsUtils', function() {
|
describe('HoganJsUtils', function() {
|
||||||
|
|
@ -21,16 +21,28 @@ describe('HoganJsUtils', function() {
|
||||||
});
|
});
|
||||||
assert.equal(emptyDiffHtml, result);
|
assert.equal(emptyDiffHtml, result);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render view without cache', function() {
|
it('should render view without cache', function() {
|
||||||
var result = HoganJsUtils.render('generic', 'empty-diff', {
|
var result = HoganJsUtils.render('generic', 'empty-diff', {
|
||||||
contentClass: 'd2h-code-line',
|
contentClass: 'd2h-code-line',
|
||||||
diffParser: diffParser
|
diffParser: diffParser
|
||||||
}, {noCache: true});
|
}, {noCache: true});
|
||||||
assert.equal(emptyDiffHtml + '\n', result);
|
assert.equal(emptyDiffHtml, result);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return null if template is missing', function() {
|
it('should return null if template is missing', function() {
|
||||||
var result = HoganJsUtils.render('generic', 'missing-template', {}, {noCache: true});
|
var hoganUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)({noCache: true});
|
||||||
|
var result = hoganUtils.render('generic', 'missing-template', {});
|
||||||
assert.equal(null, result);
|
assert.equal(null, result);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should allow templates to be overridden', function() {
|
||||||
|
var emptyDiffTemplate = HoganJsUtils.compile('<p>{{myName}}</p>');
|
||||||
|
|
||||||
|
var config = {templates: {'generic-empty-diff': emptyDiffTemplate}};
|
||||||
|
var hoganUtils = new (require('../src/hoganjs-utils.js').HoganJsUtils)(config);
|
||||||
|
var result = hoganUtils.render('generic', 'empty-diff', {myName: 'Rodrigo Fernandes'});
|
||||||
|
assert.equal('<p>Rodrigo Fernandes</p>', result);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ describe('LineByLinePrinter', function() {
|
||||||
' File without changes\n' +
|
' File without changes\n' +
|
||||||
' </div>\n' +
|
' </div>\n' +
|
||||||
' </td>\n' +
|
' </td>\n' +
|
||||||
'</tr>\n';
|
'</tr>';
|
||||||
|
|
||||||
assert.equal(expected, fileHtml);
|
assert.equal(expected, fileHtml);
|
||||||
});
|
});
|
||||||
|
|
@ -422,7 +422,6 @@ describe('LineByLinePrinter', function() {
|
||||||
' </div>\n' +
|
' </div>\n' +
|
||||||
' </td>\n' +
|
' </td>\n' +
|
||||||
'</tr>\n' +
|
'</tr>\n' +
|
||||||
'\n' +
|
|
||||||
' </tbody>\n' +
|
' </tbody>\n' +
|
||||||
' </table>\n' +
|
' </table>\n' +
|
||||||
' </div>\n' +
|
' </div>\n' +
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ describe('SideBySidePrinter', function() {
|
||||||
' File without changes\n' +
|
' File without changes\n' +
|
||||||
' </div>\n' +
|
' </div>\n' +
|
||||||
' </td>\n' +
|
' </td>\n' +
|
||||||
'</tr>\n';
|
'</tr>';
|
||||||
|
|
||||||
assert.equal(expectedRight, fileHtml.right);
|
assert.equal(expectedRight, fileHtml.right);
|
||||||
assert.equal(expectedLeft, fileHtml.left);
|
assert.equal(expectedLeft, fileHtml.left);
|
||||||
|
|
@ -324,7 +324,6 @@ describe('SideBySidePrinter', function() {
|
||||||
' </div>\n' +
|
' </div>\n' +
|
||||||
' </td>\n' +
|
' </td>\n' +
|
||||||
'</tr>\n' +
|
'</tr>\n' +
|
||||||
'\n' +
|
|
||||||
' </tbody>\n' +
|
' </tbody>\n' +
|
||||||
' </table>\n' +
|
' </table>\n' +
|
||||||
' </div>\n' +
|
' </div>\n' +
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue