Add separator option, warn on nonexistent src files and empty output.
This commit is contained in:
parent
f6d67bca77
commit
ab2565473e
28
README.md
28
README.md
@ -25,6 +25,12 @@ _Version `0.4.x` of this plugin is compatible with Grunt `0.4.x`. Version `0.3.x
|
||||
|
||||
### Options
|
||||
|
||||
#### separator
|
||||
Type: `String`
|
||||
Default: linefeed + linefeed
|
||||
|
||||
Concatenated files will be joined on this string.
|
||||
|
||||
#### namespace
|
||||
Type: `String`
|
||||
Default: 'JST'
|
||||
@ -32,7 +38,7 @@ Default: 'JST'
|
||||
The namespace in which the precompiled templates will be asssigned. *Use dot notation (e.g. App.Templates) for nested namespaces.*
|
||||
|
||||
#### processName
|
||||
Type: ```function```
|
||||
Type: `function`
|
||||
Default: null
|
||||
|
||||
This option accepts a function which takes one argument (the template filepath) and returns a string which will be used as the key for the precompiled template object. The example below stores all templates on the default JST namespace in capital letters.
|
||||
@ -46,7 +52,7 @@ options: {
|
||||
```
|
||||
|
||||
#### templateSettings
|
||||
Type: ```Object```
|
||||
Type: `Object`
|
||||
Default: null
|
||||
|
||||
The settings passed to underscore when compiling templates.
|
||||
@ -67,27 +73,27 @@ jst: {
|
||||
```
|
||||
|
||||
#### prettify
|
||||
Type: ```boolean```
|
||||
Type: `boolean`
|
||||
Default: false
|
||||
|
||||
When doing a quick once-over of your compiled template file, it's nice to see
|
||||
an easy-to-read format that has one line per template. This will accomplish
|
||||
that.
|
||||
|
||||
```javascript
|
||||
```js
|
||||
options: {
|
||||
prettify: true
|
||||
}
|
||||
```
|
||||
|
||||
#### amdWrapper
|
||||
Type: ```boolean```
|
||||
Type: `boolean`
|
||||
Default: false
|
||||
|
||||
With Require.js and a pre-compiled template.js you want the templates to be
|
||||
wrapped in a define. This will wrap the output in:
|
||||
|
||||
``` javascript
|
||||
```js
|
||||
define(function() {
|
||||
//Templates
|
||||
return this["NAMESPACE"];
|
||||
@ -95,21 +101,21 @@ define(function() {
|
||||
```
|
||||
|
||||
Example:
|
||||
``` javascript
|
||||
```js
|
||||
options: {
|
||||
amdWrapper: true
|
||||
}
|
||||
```
|
||||
|
||||
#### processContent
|
||||
Type: ```function```
|
||||
Type: `function`
|
||||
|
||||
This option accepts a function which takes one argument (the file content) and
|
||||
returns a string which will be used as template string.
|
||||
The example below strips whitespace characters from the beginning and the end of
|
||||
each line.
|
||||
|
||||
```javascript
|
||||
```js
|
||||
options: {
|
||||
processContent: function(src) {
|
||||
return src.replace(/(^\s+|\s+$)/gm, '');
|
||||
@ -137,7 +143,7 @@ jst: {
|
||||
|
||||
## Release History
|
||||
|
||||
* 2013-01-08 v0.4.0rc5 Updating to work with grunt v0.4.0rc5. Switching to this.filesSrc api.
|
||||
* 2013-01-08 v0.4.0rc5 Updating to work with grunt v0.4.0rc5. Switching to this.files api.
|
||||
* 2012-10-11 v0.3.1 Rename grunt-contrib-lib dep to grunt-lib-contrib.
|
||||
* 2012-08-22 v0.3.0 Options no longer accepted from global config key.
|
||||
* 2012-08-15 v0.2.3 Support for nested namespaces.
|
||||
@ -148,4 +154,4 @@ jst: {
|
||||
|
||||
Task submitted by [Tim Branyen](http://tbranyen.com)
|
||||
|
||||
*This file was generated on Wed Jan 09 2013 14:42:32.*
|
||||
*This file was generated on Thu Jan 10 2013 13:04:44.*
|
||||
|
@ -1,5 +1,11 @@
|
||||
# Options
|
||||
|
||||
## separator
|
||||
Type: `String`
|
||||
Default: linefeed + linefeed
|
||||
|
||||
Concatenated files will be joined on this string.
|
||||
|
||||
## namespace
|
||||
Type: `String`
|
||||
Default: 'JST'
|
||||
@ -7,7 +13,7 @@ Default: 'JST'
|
||||
The namespace in which the precompiled templates will be asssigned. *Use dot notation (e.g. App.Templates) for nested namespaces.*
|
||||
|
||||
## processName
|
||||
Type: ```function```
|
||||
Type: `function`
|
||||
Default: null
|
||||
|
||||
This option accepts a function which takes one argument (the template filepath) and returns a string which will be used as the key for the precompiled template object. The example below stores all templates on the default JST namespace in capital letters.
|
||||
@ -21,7 +27,7 @@ options: {
|
||||
```
|
||||
|
||||
## templateSettings
|
||||
Type: ```Object```
|
||||
Type: `Object`
|
||||
Default: null
|
||||
|
||||
The settings passed to underscore when compiling templates.
|
||||
@ -42,27 +48,27 @@ jst: {
|
||||
```
|
||||
|
||||
## prettify
|
||||
Type: ```boolean```
|
||||
Type: `boolean`
|
||||
Default: false
|
||||
|
||||
When doing a quick once-over of your compiled template file, it's nice to see
|
||||
an easy-to-read format that has one line per template. This will accomplish
|
||||
that.
|
||||
|
||||
```javascript
|
||||
```js
|
||||
options: {
|
||||
prettify: true
|
||||
}
|
||||
```
|
||||
|
||||
## amdWrapper
|
||||
Type: ```boolean```
|
||||
Type: `boolean`
|
||||
Default: false
|
||||
|
||||
With Require.js and a pre-compiled template.js you want the templates to be
|
||||
wrapped in a define. This will wrap the output in:
|
||||
|
||||
``` javascript
|
||||
```js
|
||||
define(function() {
|
||||
//Templates
|
||||
return this["NAMESPACE"];
|
||||
@ -70,21 +76,21 @@ define(function() {
|
||||
```
|
||||
|
||||
Example:
|
||||
``` javascript
|
||||
```js
|
||||
options: {
|
||||
amdWrapper: true
|
||||
}
|
||||
```
|
||||
|
||||
## processContent
|
||||
Type: ```function```
|
||||
Type: `function`
|
||||
|
||||
This option accepts a function which takes one argument (the file content) and
|
||||
returns a string which will be used as template string.
|
||||
The example below strips whitespace characters from the beginning and the end of
|
||||
each line.
|
||||
|
||||
```javascript
|
||||
```js
|
||||
options: {
|
||||
processContent: function(src) {
|
||||
return src.replace(/(^\s+|\s+$)/gm, '');
|
||||
|
@ -29,7 +29,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": "~1.0.0",
|
||||
"grunt-lib-contrib": "~0.3.0"
|
||||
"grunt-lib-contrib": "~0.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt-contrib-jshint": "~0.1.1rc5",
|
||||
|
32
tasks/jst.js
32
tasks/jst.js
@ -16,12 +16,13 @@ module.exports = function(grunt) {
|
||||
var defaultProcessName = function(name) { return name; };
|
||||
|
||||
grunt.registerMultiTask('jst', 'Compile underscore templates to JST file', function() {
|
||||
|
||||
var lf = grunt.util.linefeed;
|
||||
var helpers = require('grunt-lib-contrib').init(grunt);
|
||||
var options = this.options({
|
||||
namespace: 'JST',
|
||||
templateSettings: {},
|
||||
processContent: function (src) { return src; }
|
||||
processContent: function (src) { return src; },
|
||||
separator: lf + lf
|
||||
});
|
||||
|
||||
// assign filename transformation functions
|
||||
@ -29,12 +30,21 @@ module.exports = function(grunt) {
|
||||
|
||||
grunt.verbose.writeflags(options, 'Options');
|
||||
|
||||
var compiled, src, filename, output;
|
||||
var nsInfo = helpers.getNamespaceDeclaration(options.namespace);
|
||||
|
||||
this.files.forEach(function(f) {
|
||||
output = f.src.map(function(file) {
|
||||
src = options.processContent(grunt.file.read(file));
|
||||
var output = f.src.filter(function(filepath) {
|
||||
// Warn on and remove invalid source files (if nonull was set).
|
||||
if (!grunt.file.exists(filepath)) {
|
||||
grunt.log.warn('Source file "' + filepath + '" not found.');
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
})
|
||||
.map(function(filepath) {
|
||||
var src = options.processContent(grunt.file.read(filepath));
|
||||
var compiled, filename;
|
||||
|
||||
try {
|
||||
compiled = _.template(src, false, options.templateSettings).source;
|
||||
@ -44,14 +54,16 @@ module.exports = function(grunt) {
|
||||
}
|
||||
|
||||
if (options.prettify) {
|
||||
compiled = compiled.replace(/\n+/g, '');
|
||||
compiled = compiled.replace(new RegExp(lf, 'g'), '');
|
||||
}
|
||||
filename = processName(file);
|
||||
filename = processName(filepath);
|
||||
|
||||
return nsInfo.namespace+'['+JSON.stringify(filename)+'] = '+compiled+';';
|
||||
});
|
||||
|
||||
if (output.length > 0) {
|
||||
if (output.length < 1) {
|
||||
grunt.log.warn('Destination not written because compiled files were empty.');
|
||||
} else {
|
||||
output.unshift(nsInfo.declaration);
|
||||
if (options.amdWrapper) {
|
||||
if (options.prettify) {
|
||||
@ -60,9 +72,9 @@ module.exports = function(grunt) {
|
||||
});
|
||||
}
|
||||
output.unshift("define(function(){");
|
||||
output.push(" return " + nsInfo.namespace + ";\n});");
|
||||
output.push(" return " + nsInfo.namespace + ";" + lf + "});");
|
||||
}
|
||||
grunt.file.write(f.dest, output.join('\n\n'));
|
||||
grunt.file.write(f.dest, output.join(grunt.util.normalizelf(options.separator)));
|
||||
grunt.log.writeln('File "' + f.dest + '" created.');
|
||||
}
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user