karma-ng-jade2js-preprocessor
Version:
A Karma plugin. Compile Jade AngularJS templates to JavaScript on the fly.
70 lines (54 loc) • 2.27 kB
JavaScript
var util = require('util');
var jade = require('jade');
var TEMPLATE = 'angular.module(\'%s\', []).run([\'$templateCache\', function($templateCache) {\n' +
' $templateCache.put(\'%s\',\n \'%s\');\n' +
'}]);\n';
var SINGLE_MODULE_TPL = '(function(module) {\n' +
'try {\n' +
' module = angular.module(\'%s\');\n' +
'} catch (e) {\n' +
' module = angular.module(\'%s\', []);\n' +
'}\n' +
'module.run([\'$templateCache\', function($templateCache) {\n' +
' $templateCache.put(\'%s\',\n \'%s\');\n' +
'}]);\n' +
'})();\n';
var escapeContent = function(content) {
return content.replace(/\\/g, '\\\\').replace(/'/g, '\\\'').replace(/\r?\n/g, '\\n\' +\n \'');
};
var createJade2JsPreprocessor = function(logger, basePath, config) {
config = typeof config === 'object' ? config : {};
var log = logger.create('preprocessor.jade2js');
var moduleName = config.moduleName;
var locals = config.locals;
var templateExtension = config.templateExtension || 'html';
var stripPrefix = new RegExp('^' + (config.stripPrefix || ''));
var prependPrefix = config.prependPrefix || '';
var jadeOptions = config.jadeOptions || {};
var cacheIdFromPath = config && config.cacheIdFromPath || function(filepath) {
return prependPrefix +
filepath
.replace(stripPrefix, '')
.replace(/\.jade$/, '.' + templateExtension);
};
return function(content, file, done) {
var processed;
log.debug('Processing "%s".', file.originalPath);
jadeOptions.filename = file.originalPath;
try {
processed = jade.compile(content, jadeOptions);
} catch (e) {
log.error('%s\n at %s', e.message, file.originalPath);
}
content = processed(locals);
var htmlPath = cacheIdFromPath(file.originalPath.replace(basePath + '/', ''));
file.path = file.path.replace(/\.jade$/, '.html') + '.js';
if (moduleName) {
done(util.format(SINGLE_MODULE_TPL, moduleName, moduleName, htmlPath, escapeContent(content)));
} else {
done(util.format(TEMPLATE, htmlPath, htmlPath, escapeContent(content)));
}
};
};
createJade2JsPreprocessor.$inject = ['logger', 'config.basePath', 'config.ngJade2JsPreprocessor'];
module.exports = createJade2JsPreprocessor;