Compare commits
25 Commits
master
...
merge-mast
Author | SHA1 | Date | |
---|---|---|---|
|
10f13508aa | ||
|
719a961fb5 | ||
|
285f3ec285 | ||
|
806ddbe0c0 | ||
|
adb8c048de | ||
|
c8bf51f6e5 | ||
|
8491220004 | ||
|
10a06938b9 | ||
|
400eba0fa1 | ||
|
a71859bdf3 | ||
|
dba65df851 | ||
|
0b22db3937 | ||
|
d06dc07fd3 | ||
|
a860ce1eb9 | ||
|
514e7782a6 | ||
|
53cfd8107e | ||
|
f50f1a76cc | ||
|
671b3d069c | ||
|
eea4f84f69 | ||
|
5de2bd1e4d | ||
|
3aedc01de3 | ||
|
8a8cdd6b04 | ||
|
3576c6f107 | ||
|
1b68927794 | ||
|
ba4ba32360 |
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -1,2 +1 @@
|
|||||||
# Automatically normalize line endings for all text-based files
|
* text=auto
|
||||||
* text=crlf
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"boss": true,
|
||||||
"curly": true,
|
"curly": true,
|
||||||
"eqeqeq": true,
|
"eqeqeq": true,
|
||||||
|
"eqnull": true,
|
||||||
"immed": true,
|
"immed": true,
|
||||||
"latedef": true,
|
"latedef": true,
|
||||||
"newcap": true,
|
"newcap": true,
|
||||||
"noarg": true,
|
"noarg": true,
|
||||||
|
"node": true,
|
||||||
"sub": true,
|
"sub": true,
|
||||||
"undef": true,
|
"undef": true,
|
||||||
"boss": true,
|
"unused": true
|
||||||
"eqnull": true,
|
}
|
||||||
"node": true
|
|
||||||
}
|
|
||||||
|
17
.travis.yml
17
.travis.yml
@ -1,6 +1,17 @@
|
|||||||
|
sudo: false
|
||||||
|
|
||||||
language: node_js
|
language: node_js
|
||||||
|
|
||||||
node_js:
|
node_js:
|
||||||
- "0.8"
|
|
||||||
- "0.10"
|
- "0.10"
|
||||||
before_script:
|
- "0.12"
|
||||||
- npm install -g grunt-cli
|
- "4"
|
||||||
|
- "5"
|
||||||
|
- "iojs"
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- node_modules
|
||||||
|
8
AUTHORS
8
AUTHORS
@ -1,5 +1,5 @@
|
|||||||
Tim Branyen (http://tbranyen.com)
|
Tim Branyen (http://tbranyen.com)
|
||||||
Tyler Kellen (http://goingslowly.com/)
|
Tyler Kellen (http://goingslowly.com/)
|
||||||
Chris Talkington (http://christalkington.com/)
|
Chris Talkington (http://christalkington.com/)
|
||||||
Larry Davis (http://lazd.net/)
|
Larry Davis (http://lazd.net/)
|
||||||
Adrien Antoine (http://adriantoine.com/)
|
Adrien Antoine (http://adriantoine.com/)
|
10
CHANGELOG
10
CHANGELOG
@ -1,3 +1,13 @@
|
|||||||
|
v1.0.0:
|
||||||
|
date: 2016-03-04
|
||||||
|
changes:
|
||||||
|
- Bug fixes and dependency updates.
|
||||||
|
- Remove peerDeps and other fixes.
|
||||||
|
v0.6.0:
|
||||||
|
date: 2014-02-28
|
||||||
|
changes:
|
||||||
|
- Bug fixes and dependency updates.
|
||||||
|
- Adds color log.
|
||||||
v0.5.1:
|
v0.5.1:
|
||||||
date: 2013-07-14
|
date: 2013-07-14
|
||||||
changes:
|
changes:
|
||||||
|
326
Gruntfile.js
326
Gruntfile.js
@ -1,163 +1,163 @@
|
|||||||
/*
|
/*
|
||||||
* grunt-contrib-jst
|
* grunt-contrib-jst
|
||||||
* http://gruntjs.com/
|
* http://gruntjs.com/
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013 Tim Branyen, contributors
|
* Copyright (c) 2016 Tim Branyen, contributors
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
module.exports = function(grunt) {
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
// Project configuration.
|
// Project configuration.
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
jshint: {
|
jshint: {
|
||||||
all: [
|
all: [
|
||||||
'Gruntfile.js',
|
'Gruntfile.js',
|
||||||
'tasks/*.js',
|
'tasks/*.js',
|
||||||
'<%= nodeunit.tests %>'
|
'<%= nodeunit.tests %>'
|
||||||
],
|
],
|
||||||
options: {
|
options: {
|
||||||
jshintrc: '.jshintrc'
|
jshintrc: '.jshintrc'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Before generating any new files, remove any previously-created files.
|
// Before generating any new files, remove any previously-created files.
|
||||||
clean: {
|
clean: {
|
||||||
test: ['tmp']
|
test: ['tmp']
|
||||||
},
|
},
|
||||||
|
|
||||||
// Configuration to be run (and then tested).
|
// Configuration to be run (and then tested).
|
||||||
jst: {
|
jst: {
|
||||||
compile: {
|
compile: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/jst.js": ["test/fixtures/template.html"]
|
'tmp/jst.js': ['test/fixtures/template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
pretty_amd: {
|
pretty_amd: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
},
|
||||||
prettify: true,
|
prettify: true,
|
||||||
amd: true
|
amd: true
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/pretty_amd.js": ["test/fixtures/template.html"]
|
'tmp/pretty_amd.js': ['test/fixtures/template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
prettify: {
|
prettify: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
},
|
||||||
prettify: true
|
prettify: true
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/pretty.js": ["test/fixtures/template.html"]
|
'tmp/pretty.js': ['test/fixtures/template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
amd_wrapper: {
|
amd_wrapper: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
},
|
||||||
amd:true
|
amd:true
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/amd_wrapper.js": ["test/fixtures/template.html"]
|
'tmp/amd_wrapper.js': ['test/fixtures/template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
amd_wrapper_no_ns: {
|
amd_wrapper_no_ns: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
},
|
||||||
amd:true,
|
amd: true,
|
||||||
namespace:false
|
namespace: false
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/amd_wrapper_no_ns.js": ["test/fixtures/template.html"]
|
'tmp/amd_wrapper_no_ns.js': ['test/fixtures/template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
uglyfile: {
|
uglyfile: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/uglyfile.js": ["test/fixtures/*bad-filename*"]
|
'tmp/uglyfile.js': ['test/fixtures/*bad-filename*']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ns_nested: {
|
ns_nested: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
},
|
||||||
namespace: "MyApp.JST.Main"
|
namespace: 'MyApp.JST.Main'
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/ns_nested.js": ["test/fixtures/template.html"]
|
'tmp/ns_nested.js': ['test/fixtures/template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ns_nested_this: {
|
ns_nested_this: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
},
|
||||||
namespace: "this.MyApp.JST.Main"
|
namespace: 'this.MyApp.JST.Main'
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/ns_nested_this.js": ["test/fixtures/template.html"]
|
'tmp/ns_nested_this.js': ['test/fixtures/template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
process_content: {
|
process_content: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
variable: 'obj'
|
variable: 'obj'
|
||||||
},
|
},
|
||||||
processContent: function (src) {
|
processContent: function (src) {
|
||||||
return src.replace(/(^\s+|\s+$)/gm, '');
|
return src.replace(/(^\s+|\s+$)/gm, '');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"tmp/process_content.js": ["test/fixtures/indent_template.html"]
|
'tmp/process_content.js': ['test/fixtures/indent_template.html']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
local_scope: {
|
local_scope: {
|
||||||
files: {
|
files: {
|
||||||
"tmp/local_scope.js": ["test/fixtures/template_local_scope.html"]
|
'tmp/local_scope.js': ['test/fixtures/template_local_scope.html']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Unit tests.
|
// Unit tests.
|
||||||
nodeunit: {
|
nodeunit: {
|
||||||
tests: ['test/*_test.js']
|
tests: ['test/*_test.js']
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Actually load this plugin's task(s).
|
// Actually load this plugin's task(s).
|
||||||
grunt.loadTasks('tasks');
|
grunt.loadTasks('tasks');
|
||||||
|
|
||||||
// These plugins provide necessary tasks.
|
// These plugins provide necessary tasks.
|
||||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||||
grunt.loadNpmTasks('grunt-contrib-nodeunit');
|
grunt.loadNpmTasks('grunt-contrib-nodeunit');
|
||||||
grunt.loadNpmTasks('grunt-contrib-internal');
|
grunt.loadNpmTasks('grunt-contrib-internal');
|
||||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||||
|
|
||||||
// Whenever the "test" task is run, first clean the "tmp" dir, then run this
|
// Whenever the "test" task is run, first clean the "tmp" dir, then run this
|
||||||
// plugin's task(s), then test the result.
|
// plugin's task(s), then test the result.
|
||||||
grunt.registerTask('test', ['clean', 'jst', 'nodeunit']);
|
grunt.registerTask('test', ['clean', 'jst', 'nodeunit']);
|
||||||
|
|
||||||
// By default, lint and run all tests.
|
// By default, lint and run all tests.
|
||||||
grunt.registerTask('default', ['jshint', 'test', 'build-contrib']);
|
grunt.registerTask('default', ['jshint', 'test', 'build-contrib']);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
42
LICENSE-MIT
42
LICENSE-MIT
@ -1,22 +1,22 @@
|
|||||||
Copyright (c) 2013 Tim Branyen, contributors
|
Copyright (c) 2016 Tim Branyen, contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation
|
obtaining a copy of this software and associated documentation
|
||||||
files (the "Software"), to deal in the Software without
|
files (the "Software"), to deal in the Software without
|
||||||
restriction, including without limitation the rights to use,
|
restriction, including without limitation the rights to use,
|
||||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
copies of the Software, and to permit persons to whom the
|
copies of the Software, and to permit persons to whom the
|
||||||
Software is furnished to do so, subject to the following
|
Software is furnished to do so, subject to the following
|
||||||
conditions:
|
conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
OTHER DEALINGS IN THE SOFTWARE.
|
OTHER DEALINGS IN THE SOFTWARE.
|
47
README.md
47
README.md
@ -1,11 +1,10 @@
|
|||||||
# grunt-contrib-jst v0.5.1 [![Build Status](https://travis-ci.org/gruntjs/grunt-contrib-jst.png?branch=master)](https://travis-ci.org/gruntjs/grunt-contrib-jst)
|
# grunt-contrib-jst v1.0.0 [![Build Status: Linux](https://travis-ci.org/gruntjs/grunt-contrib-jst.svg?branch=master)](https://travis-ci.org/gruntjs/grunt-contrib-jst) [![Build Status: Windows](https://ci.appveyor.com/api/projects/status/mxt7687c8r7bn7ab/branch/master?svg=true)](https://ci.appveyor.com/project/gruntjs/grunt-contrib-jst/branch/master)
|
||||||
|
|
||||||
> Precompile Underscore templates to JST file.
|
> Precompile Underscore templates to JST file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
This plugin requires Grunt `~0.4.0`
|
|
||||||
|
|
||||||
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
|
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
|
||||||
|
|
||||||
@ -32,34 +31,34 @@ _This plugin uses [the Lo-Dash library](http://lodash.com/) to generate JavaScri
|
|||||||
### Options
|
### Options
|
||||||
|
|
||||||
#### separator
|
#### separator
|
||||||
Type: `String`
|
Type: `String`
|
||||||
Default: linefeed + linefeed
|
Default: linefeed + linefeed
|
||||||
|
|
||||||
Concatenated files will be joined on this string.
|
Concatenated files will be joined on this string.
|
||||||
|
|
||||||
#### namespace
|
#### namespace
|
||||||
Type: `String`
|
Type: `String`
|
||||||
Default: 'JST'
|
Default: `'JST'`
|
||||||
|
|
||||||
The namespace in which the precompiled templates will be assigned. Use dot notation (e.g. App.Templates) for nested namespaces or false for no namespace wrapping. When false with amd option set true, templates will be returned directly from the AMD wrapper.
|
The namespace in which the precompiled templates will be assigned. Use dot notation (e.g. App.Templates) for nested namespaces or false for no namespace wrapping. When false with amd option set true, templates will be returned directly from the AMD wrapper.
|
||||||
|
|
||||||
#### 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.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
options: {
|
options: {
|
||||||
processName: function(filename) {
|
processName: function(filepath) {
|
||||||
return filename.toUpperCase();
|
return filepath.toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 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.
|
||||||
|
|
||||||
@ -68,19 +67,19 @@ jst: {
|
|||||||
compile: {
|
compile: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
interpolate : /\{\{(.+?)\}\}/g
|
interpolate: /\{\{(.+?)\}\}/g
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"path/to/compiled/templates.js": ["path/to/source/**/*.html"]
|
'path/to/compiled/templates.js': ['path/to/source/**/*.html']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 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
|
||||||
@ -93,15 +92,15 @@ options: {
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### amd
|
#### amd
|
||||||
Type: `boolean`
|
Type: `boolean`
|
||||||
Default: false
|
Default: `false`
|
||||||
|
|
||||||
Wraps the output file with an AMD define function and returns the compiled template namespace unless namespace has been explicitly set to false in which case the template function will be returned directly.
|
Wraps the output file with an AMD define function and returns the compiled template namespace unless namespace has been explicitly set to false in which case the template function will be returned directly.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
define(function() {
|
define(function() {
|
||||||
//...//
|
//...//
|
||||||
return this['[template namespace]'];
|
return this['[template namespace]'];
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -135,11 +134,11 @@ jst: {
|
|||||||
compile: {
|
compile: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
interpolate : /\{\{(.+?)\}\}/g
|
interpolate: /\{\{(.+?)\}\}/g
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"path/to/compiled/templates.js": ["path/to/source/**/*.html"]
|
'path/to/compiled/templates.js': ['path/to/source/**/*.html']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -149,6 +148,8 @@ Note that the `interpolate: /\{\{(.+?)\}\}/g` setting above is simply an example
|
|||||||
|
|
||||||
## Release History
|
## Release History
|
||||||
|
|
||||||
|
* 2016-03-04 v1.0.0 Bug fixes and dependency updates. Remove peerDeps and other fixes.
|
||||||
|
* 2014-02-28 v0.6.0 Bug fixes and dependency updates. Adds color log.
|
||||||
* 2013-07-14 v0.5.1 Display filepath when fails to compile.
|
* 2013-07-14 v0.5.1 Display filepath when fails to compile.
|
||||||
* 2013-03-06 v0.5.0 When `namespace` is false and `amd` is true, return templates directly from AMD wrapper. Rename `amdwrapper` option to `amd` to match grunt-contrib-handlebars.
|
* 2013-03-06 v0.5.0 When `namespace` is false and `amd` is true, return templates directly from AMD wrapper. Rename `amdwrapper` option to `amd` to match grunt-contrib-handlebars.
|
||||||
* 2013-02-15 v0.4.1 First official release for Grunt 0.4.0.
|
* 2013-02-15 v0.4.1 First official release for Grunt 0.4.0.
|
||||||
@ -165,4 +166,4 @@ Note that the `interpolate: /\{\{(.+?)\}\}/g` setting above is simply an example
|
|||||||
|
|
||||||
Task submitted by [Tim Branyen](http://tbranyen.com)
|
Task submitted by [Tim Branyen](http://tbranyen.com)
|
||||||
|
|
||||||
*This file was generated on Sat Oct 19 2013 14:22:27.*
|
*This file was generated on Thu Apr 14 2016 09:40:42.*
|
||||||
|
37
appveyor.yml
Normal file
37
appveyor.yml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
clone_depth: 10
|
||||||
|
|
||||||
|
version: "{build}"
|
||||||
|
|
||||||
|
# What combinations to test
|
||||||
|
environment:
|
||||||
|
matrix:
|
||||||
|
- nodejs_version: "0.10"
|
||||||
|
platform: x86
|
||||||
|
- nodejs_version: "0.12"
|
||||||
|
platform: x86
|
||||||
|
- nodejs_version: "4"
|
||||||
|
platform: x64
|
||||||
|
- nodejs_version: "4"
|
||||||
|
platform: x86
|
||||||
|
- nodejs_version: "5"
|
||||||
|
platform: x86
|
||||||
|
|
||||||
|
install:
|
||||||
|
- ps: Install-Product node $env:nodejs_version $env:platform
|
||||||
|
- npm install
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
# Output useful info for debugging
|
||||||
|
- node --version && npm --version
|
||||||
|
# We test multiple Windows shells because of prior stdout buffering issues
|
||||||
|
# filed against Grunt. https://github.com/joyent/node/issues/3584
|
||||||
|
- ps: "npm test # PowerShell" # Pass comment to PS for easier debugging
|
||||||
|
- cmd: npm test
|
||||||
|
|
||||||
|
build: off
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
|
|
||||||
|
cache:
|
||||||
|
- node_modules -> package.json
|
@ -5,11 +5,11 @@ jst: {
|
|||||||
compile: {
|
compile: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
interpolate : /\{\{(.+?)\}\}/g
|
interpolate: /\{\{(.+?)\}\}/g
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"path/to/compiled/templates.js": ["path/to/source/**/*.html"]
|
'path/to/compiled/templates.js': ['path/to/source/**/*.html']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,34 +1,34 @@
|
|||||||
# Options
|
# Options
|
||||||
|
|
||||||
## separator
|
## separator
|
||||||
Type: `String`
|
Type: `String`
|
||||||
Default: linefeed + linefeed
|
Default: linefeed + linefeed
|
||||||
|
|
||||||
Concatenated files will be joined on this string.
|
Concatenated files will be joined on this string.
|
||||||
|
|
||||||
## namespace
|
## namespace
|
||||||
Type: `String`
|
Type: `String`
|
||||||
Default: 'JST'
|
Default: `'JST'`
|
||||||
|
|
||||||
The namespace in which the precompiled templates will be assigned. Use dot notation (e.g. App.Templates) for nested namespaces or false for no namespace wrapping. When false with amd option set true, templates will be returned directly from the AMD wrapper.
|
The namespace in which the precompiled templates will be assigned. Use dot notation (e.g. App.Templates) for nested namespaces or false for no namespace wrapping. When false with amd option set true, templates will be returned directly from the AMD wrapper.
|
||||||
|
|
||||||
## 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.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
options: {
|
options: {
|
||||||
processName: function(filename) {
|
processName: function(filepath) {
|
||||||
return filename.toUpperCase();
|
return filepath.toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 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.
|
||||||
|
|
||||||
@ -37,19 +37,19 @@ jst: {
|
|||||||
compile: {
|
compile: {
|
||||||
options: {
|
options: {
|
||||||
templateSettings: {
|
templateSettings: {
|
||||||
interpolate : /\{\{(.+?)\}\}/g
|
interpolate: /\{\{(.+?)\}\}/g
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
files: {
|
files: {
|
||||||
"path/to/compiled/templates.js": ["path/to/source/**/*.html"]
|
'path/to/compiled/templates.js': ['path/to/source/**/*.html']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 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
|
||||||
@ -62,15 +62,15 @@ options: {
|
|||||||
```
|
```
|
||||||
|
|
||||||
## amd
|
## amd
|
||||||
Type: `boolean`
|
Type: `boolean`
|
||||||
Default: false
|
Default: `false`
|
||||||
|
|
||||||
Wraps the output file with an AMD define function and returns the compiled template namespace unless namespace has been explicitly set to false in which case the template function will be returned directly.
|
Wraps the output file with an AMD define function and returns the compiled template namespace unless namespace has been explicitly set to false in which case the template function will be returned directly.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
define(function() {
|
define(function() {
|
||||||
//...//
|
//...//
|
||||||
return this['[template namespace]'];
|
return this['[template namespace]'];
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
48
package.json
48
package.json
@ -1,50 +1,36 @@
|
|||||||
{
|
{
|
||||||
"name": "grunt-contrib-jst",
|
"name": "grunt-contrib-jst",
|
||||||
"description": "Precompile Underscore templates to JST file.",
|
"description": "Precompile Underscore templates to JST file",
|
||||||
"version": "0.5.1",
|
"version": "1.0.0",
|
||||||
"homepage": "https://github.com/gruntjs/grunt-contrib-jst",
|
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Grunt Team",
|
"name": "Grunt Team",
|
||||||
"url": "http://gruntjs.com/"
|
"url": "http://gruntjs.com/"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": "gruntjs/grunt-contrib-jst",
|
||||||
"type": "git",
|
"license": "MIT",
|
||||||
"url": "git://github.com/gruntjs/grunt-contrib-jst.git"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/gruntjs/grunt-contrib-jst/issues"
|
|
||||||
},
|
|
||||||
"licenses": [
|
|
||||||
{
|
|
||||||
"type": "MIT",
|
|
||||||
"url": "https://github.com/gruntjs/grunt-contrib-jst/blob/master/LICENSE-MIT"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.8.0"
|
"node": ">=0.10.0"
|
||||||
},
|
},
|
||||||
|
"main": "tasks/jst.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "grunt test"
|
"test": "grunt test"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lodash": "~1.0.0",
|
"chalk": "^1.0.0",
|
||||||
"grunt-lib-contrib": "~0.5.1"
|
"lodash": "^2.4.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"grunt-contrib-jshint": "~0.6.0",
|
"grunt": "^1.0.0",
|
||||||
"grunt-contrib-nodeunit": "~0.2.0",
|
"grunt-contrib-clean": "^1.0.0",
|
||||||
"grunt-contrib-clean": "~0.4.1",
|
"grunt-contrib-internal": "^1.1.0",
|
||||||
"grunt-contrib-internal": "~0.4.5",
|
"grunt-contrib-jshint": "^1.0.0",
|
||||||
"grunt": "~0.4.0"
|
"grunt-contrib-nodeunit": "^1.0.0"
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"grunt": "~0.4.0"
|
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"gruntplugin"
|
"gruntplugin"
|
||||||
],
|
],
|
||||||
"files": [
|
"files": [
|
||||||
"tasks",
|
"tasks"
|
||||||
"LICENSE-MIT"
|
],
|
||||||
]
|
"appveyor_id": "mxt7687c8r7bn7ab"
|
||||||
}
|
}
|
||||||
|
190
tasks/jst.js
190
tasks/jst.js
@ -1,95 +1,95 @@
|
|||||||
/*
|
/*
|
||||||
* grunt-contrib-jst
|
* grunt-contrib-jst
|
||||||
* http://gruntjs.com/
|
* http://gruntjs.com/
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013 Tim Branyen, contributors
|
* Copyright (c) 2016 Tim Branyen, contributors
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
module.exports = function(grunt) {
|
var _ = require('lodash');
|
||||||
|
var chalk = require('chalk');
|
||||||
var _ = require('lodash');
|
|
||||||
|
module.exports = function(grunt) {
|
||||||
// filename conversion for templates
|
// filename conversion for templates
|
||||||
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 lf = grunt.util.linefeed;
|
||||||
var helpers = require('grunt-lib-contrib').init(grunt);
|
var lib = require('./lib/jst');
|
||||||
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,
|
separator: lf + lf,
|
||||||
template: _.template
|
template: _.template
|
||||||
});
|
});
|
||||||
|
|
||||||
// assign filename transformation functions
|
// assign filename transformation functions
|
||||||
var processName = options.processName || defaultProcessName;
|
var processName = options.processName || defaultProcessName;
|
||||||
|
|
||||||
var nsInfo;
|
var nsInfo;
|
||||||
if (options.namespace !== false) {
|
if (options.namespace !== false) {
|
||||||
nsInfo = helpers.getNamespaceDeclaration(options.namespace);
|
nsInfo = lib.getNamespaceDeclaration(options.namespace);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.files.forEach(function(f) {
|
this.files.forEach(function(f) {
|
||||||
var output = f.src.filter(function(filepath) {
|
var output = f.src.filter(function(filepath) {
|
||||||
// Warn on and remove invalid source files (if nonull was set).
|
// Warn on and remove invalid source files (if nonull was set).
|
||||||
if (!grunt.file.exists(filepath)) {
|
if (!grunt.file.exists(filepath)) {
|
||||||
grunt.log.warn('Source file "' + filepath + '" not found.');
|
grunt.log.warn('Source file ' + chalk.cyan(filepath) + ' not found.');
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.map(function(filepath) {
|
.map(function(filepath) {
|
||||||
var src = options.processContent(grunt.file.read(filepath));
|
var src = options.processContent(grunt.file.read(filepath));
|
||||||
var compiled, filename;
|
var compiled, filename;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
compiled = options.template(src, false, options.templateSettings).source;
|
compiled = options.template(src, false, options.templateSettings).source;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
grunt.log.error(e);
|
grunt.log.error(e);
|
||||||
grunt.fail.warn('JST "' + filepath + '" failed to compile.');
|
grunt.fail.warn('JST ' + chalk.cyan(filepath) + ' failed to compile.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.prettify) {
|
if (options.prettify) {
|
||||||
compiled = compiled.replace(new RegExp('\n', 'g'), '');
|
compiled = compiled.replace(/\n/g, '');
|
||||||
}
|
}
|
||||||
filename = processName(filepath);
|
filename = processName(filepath);
|
||||||
|
|
||||||
if (options.amd && options.namespace === false) {
|
if (options.amd && options.namespace === false) {
|
||||||
return 'return ' + compiled;
|
return 'return ' + compiled;
|
||||||
}
|
}
|
||||||
return nsInfo.namespace+'['+JSON.stringify(filename)+'] = '+compiled+';';
|
return nsInfo.namespace+'['+JSON.stringify(filename)+'] = '+compiled+';';
|
||||||
});
|
});
|
||||||
|
|
||||||
if (output.length < 1) {
|
if (output.length < 1) {
|
||||||
grunt.log.warn('Destination not written because compiled files were empty.');
|
grunt.log.warn('Destination not written because compiled files were empty.');
|
||||||
} else {
|
} else {
|
||||||
if (options.namespace !== false) {
|
if (options.namespace !== false) {
|
||||||
output.unshift(nsInfo.declaration);
|
output.unshift(nsInfo.declaration);
|
||||||
}
|
}
|
||||||
if (options.amd) {
|
if (options.amd) {
|
||||||
if (options.prettify) {
|
if (options.prettify) {
|
||||||
output.forEach(function(line, index) {
|
output.forEach(function(line, index) {
|
||||||
output[index] = " " + line;
|
output[index] = ' ' + line;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
output.unshift("define(function(){");
|
output.unshift('define(function(){');
|
||||||
if (options.namespace !== false) {
|
if (options.namespace !== false) {
|
||||||
// Namespace has not been explicitly set to false; the AMD
|
// Namespace has not been explicitly set to false; the AMD
|
||||||
// wrapper will return the object containing the template.
|
// wrapper will return the object containing the template.
|
||||||
output.push(" return " + nsInfo.namespace + ";");
|
output.push(' return ' + nsInfo.namespace + ';');
|
||||||
}
|
}
|
||||||
output.push("});");
|
output.push('});');
|
||||||
}
|
}
|
||||||
grunt.file.write(f.dest, output.join(grunt.util.normalizelf(options.separator)));
|
grunt.file.write(f.dest, output.join(grunt.util.normalizelf(options.separator)));
|
||||||
grunt.log.writeln('File "' + f.dest + '" created.');
|
grunt.log.writeln('File ' + chalk.cyan(f.dest) + ' created.');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
20
tasks/lib/jst.js
Normal file
20
tasks/lib/jst.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
exports.getNamespaceDeclaration = function(ns) {
|
||||||
|
var output = [];
|
||||||
|
var curPath = 'this';
|
||||||
|
if (ns !== 'this') {
|
||||||
|
var nsParts = ns.split('.');
|
||||||
|
nsParts.forEach(function(curPart) {
|
||||||
|
if (curPart !== 'this') {
|
||||||
|
curPath += '[' + JSON.stringify(curPart) + ']';
|
||||||
|
output.push(curPath + ' = ' + curPath + ' || {};');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
namespace: curPath,
|
||||||
|
declaration: output.join('\n')
|
||||||
|
};
|
||||||
|
};
|
115
test/jst_test.js
115
test/jst_test.js
@ -1,53 +1,62 @@
|
|||||||
var grunt = require('grunt');
|
'use strict';
|
||||||
|
|
||||||
exports['jst'] = {
|
var grunt = require('grunt');
|
||||||
main: function(test) {
|
|
||||||
'use strict';
|
function readFile(file) {
|
||||||
|
var contents = grunt.file.read(file);
|
||||||
var expect, result;
|
if (process.platform === 'win32') {
|
||||||
|
contents = contents.replace(/\r\n/g, '\n');
|
||||||
test.expect(10);
|
}
|
||||||
|
return contents;
|
||||||
expect = grunt.file.read("test/expected/jst.js");
|
}
|
||||||
result = grunt.file.read("tmp/jst.js");
|
|
||||||
test.equal(expect, result, "should compile underscore templates into JST");
|
exports.jst = {
|
||||||
|
main: function(test) {
|
||||||
expect = grunt.file.read("test/expected/uglyfile.js");
|
|
||||||
result = grunt.file.read("tmp/uglyfile.js");
|
var expect, result;
|
||||||
test.equal(expect, result, "should escape single quotes in filenames");
|
|
||||||
|
test.expect(10);
|
||||||
expect = grunt.file.read("test/expected/ns_nested.js");
|
|
||||||
result = grunt.file.read("tmp/ns_nested.js");
|
expect = readFile('test/expected/jst.js');
|
||||||
test.equal(expect, result, "should define parts of nested namespaces");
|
result = readFile('tmp/jst.js');
|
||||||
|
test.equal(expect, result, 'should compile underscore templates into JST');
|
||||||
expect = grunt.file.read("test/expected/ns_nested.js"); // same as previous test
|
|
||||||
result = grunt.file.read("tmp/ns_nested_this.js");
|
expect = readFile('test/expected/uglyfile.js');
|
||||||
test.equal(expect, result, "should define parts of nested namespaces, ignoring this.");
|
result = readFile('tmp/uglyfile.js');
|
||||||
|
test.equal(expect, result, 'should escape single quotes in filenames');
|
||||||
expect = grunt.file.read("test/expected/pretty.js");
|
|
||||||
result = grunt.file.read("tmp/pretty.js");
|
expect = readFile('test/expected/ns_nested.js');
|
||||||
test.equal(expect, result, "should make the output be 1 line per template, making the output less ugly");
|
result = readFile('tmp/ns_nested.js');
|
||||||
|
test.equal(expect, result, 'should define parts of nested namespaces');
|
||||||
expect = grunt.file.read("test/expected/amd_wrapper.js");
|
|
||||||
result = grunt.file.read("tmp/amd_wrapper.js");
|
expect = readFile('test/expected/ns_nested.js'); // same as previous test
|
||||||
test.equal(expect, result, "should wrap the template with define for AMD pattern");
|
result = readFile('tmp/ns_nested_this.js');
|
||||||
|
test.equal(expect, result, 'should define parts of nested namespaces, ignoring this.');
|
||||||
expect = grunt.file.read("test/expected/amd_wrapper_no_ns.js");
|
|
||||||
result = grunt.file.read("tmp/amd_wrapper_no_ns.js");
|
expect = readFile('test/expected/pretty.js');
|
||||||
test.equal(expect, result, "should wrap the template with define for AMD pattern and return the function itself with no namespace");
|
result = readFile('tmp/pretty.js');
|
||||||
|
test.equal(expect, result, 'should make the output be 1 line per template, making the output less ugly');
|
||||||
expect = grunt.file.read("test/expected/pretty_amd.js");
|
|
||||||
result = grunt.file.read("tmp/pretty_amd.js");
|
expect = readFile('test/expected/amd_wrapper.js');
|
||||||
test.equal(expect, result, "should make the AMD wrapper output pretty");
|
result = readFile('tmp/amd_wrapper.js');
|
||||||
|
test.equal(expect, result, 'should wrap the template with define for AMD pattern');
|
||||||
expect = grunt.file.read("test/expected/process_content.js");
|
|
||||||
result = grunt.file.read("tmp/process_content.js");
|
expect = readFile('test/expected/amd_wrapper_no_ns.js');
|
||||||
test.equal(expect, result, "should convert file content");
|
result = readFile('tmp/amd_wrapper_no_ns.js');
|
||||||
|
test.equal(expect, result, 'should wrap the template with define for AMD pattern and return the function itself with no namespace');
|
||||||
expect = grunt.file.read("test/expected/local_scope.js");
|
|
||||||
result = grunt.file.read("tmp/local_scope.js");
|
expect = readFile('test/expected/pretty_amd.js');
|
||||||
test.equal(expect, result, "should add `with` block when templateSettings.variable is undefined");
|
result = readFile('tmp/pretty_amd.js');
|
||||||
|
test.equal(expect, result, 'should make the AMD wrapper output pretty');
|
||||||
test.done();
|
|
||||||
}
|
expect = readFile('test/expected/process_content.js');
|
||||||
};
|
result = readFile('tmp/process_content.js');
|
||||||
|
test.equal(expect, result, 'should convert file content');
|
||||||
|
|
||||||
|
expect = readFile('test/expected/local_scope.js');
|
||||||
|
result = readFile('tmp/local_scope.js');
|
||||||
|
test.equal(expect, result, 'should add `with` block when templateSettings.variable is undefined');
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user