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
|
### Options
|
||||||
|
|
||||||
|
#### separator
|
||||||
|
Type: `String`
|
||||||
|
Default: linefeed + linefeed
|
||||||
|
|
||||||
|
Concatenated files will be joined on this string.
|
||||||
|
|
||||||
#### namespace
|
#### namespace
|
||||||
Type: `String`
|
Type: `String`
|
||||||
Default: 'JST'
|
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.*
|
The namespace in which the precompiled templates will be asssigned. *Use dot notation (e.g. App.Templates) for nested namespaces.*
|
||||||
|
|
||||||
#### processName
|
#### processName
|
||||||
Type: ```function```
|
Type: `function`
|
||||||
Default: null
|
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.
|
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
|
#### templateSettings
|
||||||
Type: ```Object```
|
Type: `Object`
|
||||||
Default: null
|
Default: null
|
||||||
|
|
||||||
The settings passed to underscore when compiling templates.
|
The settings passed to underscore when compiling templates.
|
||||||
@ -67,27 +73,27 @@ jst: {
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### prettify
|
#### prettify
|
||||||
Type: ```boolean```
|
Type: `boolean`
|
||||||
Default: false
|
Default: false
|
||||||
|
|
||||||
When doing a quick once-over of your compiled template file, it's nice to see
|
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
|
an easy-to-read format that has one line per template. This will accomplish
|
||||||
that.
|
that.
|
||||||
|
|
||||||
```javascript
|
```js
|
||||||
options: {
|
options: {
|
||||||
prettify: true
|
prettify: true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### amdWrapper
|
#### amdWrapper
|
||||||
Type: ```boolean```
|
Type: `boolean`
|
||||||
Default: false
|
Default: false
|
||||||
|
|
||||||
With Require.js and a pre-compiled template.js you want the templates to be
|
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:
|
wrapped in a define. This will wrap the output in:
|
||||||
|
|
||||||
``` javascript
|
```js
|
||||||
define(function() {
|
define(function() {
|
||||||
//Templates
|
//Templates
|
||||||
return this["NAMESPACE"];
|
return this["NAMESPACE"];
|
||||||
@ -95,21 +101,21 @@ define(function() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
``` javascript
|
```js
|
||||||
options: {
|
options: {
|
||||||
amdWrapper: true
|
amdWrapper: true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### processContent
|
#### processContent
|
||||||
Type: ```function```
|
Type: `function`
|
||||||
|
|
||||||
This option accepts a function which takes one argument (the file content) and
|
This option accepts a function which takes one argument (the file content) and
|
||||||
returns a string which will be used as template string.
|
returns a string which will be used as template string.
|
||||||
The example below strips whitespace characters from the beginning and the end of
|
The example below strips whitespace characters from the beginning and the end of
|
||||||
each line.
|
each line.
|
||||||
|
|
||||||
```javascript
|
```js
|
||||||
options: {
|
options: {
|
||||||
processContent: function(src) {
|
processContent: function(src) {
|
||||||
return src.replace(/(^\s+|\s+$)/gm, '');
|
return src.replace(/(^\s+|\s+$)/gm, '');
|
||||||
@ -137,7 +143,7 @@ jst: {
|
|||||||
|
|
||||||
## Release History
|
## 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-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-22 v0.3.0 Options no longer accepted from global config key.
|
||||||
* 2012-08-15 v0.2.3 Support for nested namespaces.
|
* 2012-08-15 v0.2.3 Support for nested namespaces.
|
||||||
@ -148,4 +154,4 @@ jst: {
|
|||||||
|
|
||||||
Task submitted by [Tim Branyen](http://tbranyen.com)
|
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
|
# Options
|
||||||
|
|
||||||
|
## separator
|
||||||
|
Type: `String`
|
||||||
|
Default: linefeed + linefeed
|
||||||
|
|
||||||
|
Concatenated files will be joined on this string.
|
||||||
|
|
||||||
## namespace
|
## namespace
|
||||||
Type: `String`
|
Type: `String`
|
||||||
Default: 'JST'
|
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.*
|
The namespace in which the precompiled templates will be asssigned. *Use dot notation (e.g. App.Templates) for nested namespaces.*
|
||||||
|
|
||||||
## processName
|
## processName
|
||||||
Type: ```function```
|
Type: `function`
|
||||||
Default: null
|
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.
|
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
|
## templateSettings
|
||||||
Type: ```Object```
|
Type: `Object`
|
||||||
Default: null
|
Default: null
|
||||||
|
|
||||||
The settings passed to underscore when compiling templates.
|
The settings passed to underscore when compiling templates.
|
||||||
@ -42,27 +48,27 @@ jst: {
|
|||||||
```
|
```
|
||||||
|
|
||||||
## prettify
|
## prettify
|
||||||
Type: ```boolean```
|
Type: `boolean`
|
||||||
Default: false
|
Default: false
|
||||||
|
|
||||||
When doing a quick once-over of your compiled template file, it's nice to see
|
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
|
an easy-to-read format that has one line per template. This will accomplish
|
||||||
that.
|
that.
|
||||||
|
|
||||||
```javascript
|
```js
|
||||||
options: {
|
options: {
|
||||||
prettify: true
|
prettify: true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## amdWrapper
|
## amdWrapper
|
||||||
Type: ```boolean```
|
Type: `boolean`
|
||||||
Default: false
|
Default: false
|
||||||
|
|
||||||
With Require.js and a pre-compiled template.js you want the templates to be
|
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:
|
wrapped in a define. This will wrap the output in:
|
||||||
|
|
||||||
``` javascript
|
```js
|
||||||
define(function() {
|
define(function() {
|
||||||
//Templates
|
//Templates
|
||||||
return this["NAMESPACE"];
|
return this["NAMESPACE"];
|
||||||
@ -70,21 +76,21 @@ define(function() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
``` javascript
|
```js
|
||||||
options: {
|
options: {
|
||||||
amdWrapper: true
|
amdWrapper: true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## processContent
|
## processContent
|
||||||
Type: ```function```
|
Type: `function`
|
||||||
|
|
||||||
This option accepts a function which takes one argument (the file content) and
|
This option accepts a function which takes one argument (the file content) and
|
||||||
returns a string which will be used as template string.
|
returns a string which will be used as template string.
|
||||||
The example below strips whitespace characters from the beginning and the end of
|
The example below strips whitespace characters from the beginning and the end of
|
||||||
each line.
|
each line.
|
||||||
|
|
||||||
```javascript
|
```js
|
||||||
options: {
|
options: {
|
||||||
processContent: function(src) {
|
processContent: function(src) {
|
||||||
return src.replace(/(^\s+|\s+$)/gm, '');
|
return src.replace(/(^\s+|\s+$)/gm, '');
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lodash": "~1.0.0",
|
"lodash": "~1.0.0",
|
||||||
"grunt-lib-contrib": "~0.3.0"
|
"grunt-lib-contrib": "~0.5.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"grunt-contrib-jshint": "~0.1.1rc5",
|
"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; };
|
var defaultProcessName = function(name) { return name; };
|
||||||
|
|
||||||
grunt.registerMultiTask('jst', 'Compile underscore templates to JST file', function() {
|
grunt.registerMultiTask('jst', 'Compile underscore templates to JST file', function() {
|
||||||
|
var lf = grunt.util.linefeed;
|
||||||
var helpers = require('grunt-lib-contrib').init(grunt);
|
var helpers = require('grunt-lib-contrib').init(grunt);
|
||||||
var options = this.options({
|
var options = this.options({
|
||||||
namespace: 'JST',
|
namespace: 'JST',
|
||||||
templateSettings: {},
|
templateSettings: {},
|
||||||
processContent: function (src) { return src; }
|
processContent: function (src) { return src; },
|
||||||
|
separator: lf + lf
|
||||||
});
|
});
|
||||||
|
|
||||||
// assign filename transformation functions
|
// assign filename transformation functions
|
||||||
@ -29,12 +30,21 @@ module.exports = function(grunt) {
|
|||||||
|
|
||||||
grunt.verbose.writeflags(options, 'Options');
|
grunt.verbose.writeflags(options, 'Options');
|
||||||
|
|
||||||
var compiled, src, filename, output;
|
|
||||||
var nsInfo = helpers.getNamespaceDeclaration(options.namespace);
|
var nsInfo = helpers.getNamespaceDeclaration(options.namespace);
|
||||||
|
|
||||||
this.files.forEach(function(f) {
|
this.files.forEach(function(f) {
|
||||||
output = f.src.map(function(file) {
|
var output = f.src.filter(function(filepath) {
|
||||||
src = options.processContent(grunt.file.read(file));
|
// 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 {
|
try {
|
||||||
compiled = _.template(src, false, options.templateSettings).source;
|
compiled = _.template(src, false, options.templateSettings).source;
|
||||||
@ -44,14 +54,16 @@ module.exports = function(grunt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options.prettify) {
|
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+';';
|
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);
|
output.unshift(nsInfo.declaration);
|
||||||
if (options.amdWrapper) {
|
if (options.amdWrapper) {
|
||||||
if (options.prettify) {
|
if (options.prettify) {
|
||||||
@ -60,9 +72,9 @@ module.exports = function(grunt) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
output.unshift("define(function(){");
|
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.');
|
grunt.log.writeln('File "' + f.dest + '" created.');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user