first commit
This commit is contained in:
commit
f0d8e0fcdf
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
tmp
|
3
AUTHORS
Normal file
3
AUTHORS
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Tim Branyen (http://tbranyen.com)
|
||||||
|
Tyler Kellen (http://goingslowly.com/)
|
||||||
|
Chris Talkington (http://christalkington.com/)
|
22
LICENSE-MIT
Normal file
22
LICENSE-MIT
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2012 Tim Branyen, contributors.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
61
README.md
Normal file
61
README.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
# grunt-contrib-jst
|
||||||
|
> Compile underscore templates to JST file (part of the [grunt-contrib](https://github.com/gruntjs/grunt-contrib) collection). Submitted by [Tim Branyen](/tbranyen).
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
Install this grunt plugin next to your project's [grunt.js gruntfile][getting_started] with: `npm install grunt-contrib-jst`
|
||||||
|
|
||||||
|
Then add this line to your project's `grunt.js` gruntfile:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-jst');
|
||||||
|
```
|
||||||
|
|
||||||
|
[grunt]: https://github.com/cowboy/grunt
|
||||||
|
[getting_started]: https://github.com/cowboy/grunt/blob/master/docs/getting_started.md
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
This task compiles Underscore compatible templates into functions that can be concatenated and minified with existing source files.
|
||||||
|
|
||||||
|
Inside your `grunt.js` file, add a section named `jst`. This section specifies the files to compile and the options passed to [underscore.template](http://underscorejs.org/#template).
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
##### files ```object```
|
||||||
|
|
||||||
|
This defines what files this task will process and should contain key:value pairs.
|
||||||
|
|
||||||
|
The key (destination) should be an unique filepath (supports [grunt.template](https://github.com/cowboy/grunt/blob/master/docs/api_template.md)) and the value (source) should be a filepath or an array of filepaths (supports [minimatch](https://github.com/isaacs/minimatch)).
|
||||||
|
|
||||||
|
Note: Values are precompiled to the namespaced JST array in the order passed.
|
||||||
|
|
||||||
|
##### options ```object```
|
||||||
|
|
||||||
|
This controls how this task (and its helpers) operate and should contain key:value pairs, see options below.
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
##### namespace ```string```
|
||||||
|
|
||||||
|
The namespace in which the resulting JST templates are assigned to.
|
||||||
|
|
||||||
|
##### templateSettings ```object```
|
||||||
|
|
||||||
|
The settings passed to underscore when compiling templates.
|
||||||
|
|
||||||
|
#### Config Examples
|
||||||
|
|
||||||
|
``` javascript
|
||||||
|
jst: {
|
||||||
|
compile: {
|
||||||
|
options: {
|
||||||
|
templateSettings: {
|
||||||
|
interpolate : /\{\{(.+?)\}\}/g
|
||||||
|
}
|
||||||
|
},
|
||||||
|
files: {
|
||||||
|
"path/to/compiled/templates.js": ["path/to/source/**/*.html"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
69
grunt.js
Normal file
69
grunt.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* grunt-contrib-jst
|
||||||
|
* http://gruntjs.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Tim Branyen, contributors
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
* https://github.com/gruntjs/grunt-contrib-jst/blob/master/LICENSE-MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function(grunt) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Project configuration.
|
||||||
|
grunt.initConfig({
|
||||||
|
lint: {
|
||||||
|
all: ['grunt.js', 'tasks/*.js', '<config:nodeunit.tasks>']
|
||||||
|
},
|
||||||
|
|
||||||
|
jshint: {
|
||||||
|
options: {
|
||||||
|
curly: true,
|
||||||
|
eqeqeq: true,
|
||||||
|
immed: true,
|
||||||
|
latedef: true,
|
||||||
|
newcap: true,
|
||||||
|
noarg: true,
|
||||||
|
sub: true,
|
||||||
|
undef: true,
|
||||||
|
boss: true,
|
||||||
|
eqnull: true,
|
||||||
|
node: true,
|
||||||
|
es5: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Before generating any new files, remove any previously-created files.
|
||||||
|
clean: {
|
||||||
|
test: ['tmp']
|
||||||
|
},
|
||||||
|
|
||||||
|
// Configuration to be run (and then tested).
|
||||||
|
jst: {
|
||||||
|
compile: {
|
||||||
|
files: {
|
||||||
|
"tmp/jst.js": ["test/fixtures/*.html"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Unit tests.
|
||||||
|
nodeunit: {
|
||||||
|
tasks: ['test/*_test.js']
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Actually load this plugin's task(s).
|
||||||
|
grunt.loadTasks('tasks');
|
||||||
|
|
||||||
|
// The clean plugin helps in testing.
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||||
|
|
||||||
|
// Whenever the "test" task is run, first clean the "tmp" dir, then run this
|
||||||
|
// plugin's task(s), then test the result.
|
||||||
|
grunt.renameTask('test', 'nodeunit');
|
||||||
|
grunt.registerTask('test', 'clean jst nodeunit');
|
||||||
|
|
||||||
|
// By default, lint and run all tests.
|
||||||
|
grunt.registerTask('default', 'lint test');
|
||||||
|
};
|
41
package.json
Normal file
41
package.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"name": "grunt-contrib-jst",
|
||||||
|
"description": "Precompile Handlebars templates to JST file.",
|
||||||
|
"version": "0.2.0",
|
||||||
|
"homepage": "https://github.com/gruntjs/grunt-contrib-jst",
|
||||||
|
"author": {
|
||||||
|
"name": "Tim Branyen",
|
||||||
|
"url": "http://tbranyen.com/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"main": "grunt.js",
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "grunt test"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": "~1.3.3",
|
||||||
|
"grunt-contrib-lib": "~0.2.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"grunt": "~0.3.15",
|
||||||
|
"grunt-contrib-clean": "~0.2.0"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"gruntplugin"
|
||||||
|
]
|
||||||
|
}
|
61
tasks/jst.js
Normal file
61
tasks/jst.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* grunt-contrib-jst
|
||||||
|
* http://gruntjs.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Tim Branyen, contributors
|
||||||
|
* Licensed under the MIT license.
|
||||||
|
* https://github.com/gruntjs/grunt-contrib-jst/blob/master/LICENSE-MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function(grunt) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _ = require("underscore");
|
||||||
|
var helpers = require("grunt-contrib-lib").init(grunt);
|
||||||
|
|
||||||
|
var jst = function(source, filepath, namespace, templateSettings) {
|
||||||
|
try {
|
||||||
|
return namespace + "['" + filepath + "'] = " + _.template(source, false, templateSettings).source + ";";
|
||||||
|
} catch (e) {
|
||||||
|
grunt.log.error(e);
|
||||||
|
grunt.fail.warn("JST failed to compile.");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
grunt.registerMultiTask("jst", "Compile underscore templates to JST file", function() {
|
||||||
|
var options = helpers.options(this, {namespace: "JST", templateSettings: {}});
|
||||||
|
|
||||||
|
grunt.verbose.writeflags(options, "Options");
|
||||||
|
|
||||||
|
// TODO: ditch this when grunt v0.4 is released
|
||||||
|
this.files = this.files || helpers.normalizeMultiTaskFiles(this.data, this.target);
|
||||||
|
|
||||||
|
var srcFiles;
|
||||||
|
var taskOutput;
|
||||||
|
var sourceCode;
|
||||||
|
var sourceCompiled;
|
||||||
|
|
||||||
|
var helperNamespace = "this['" + options.namespace + "']";
|
||||||
|
|
||||||
|
this.files.forEach(function(file) {
|
||||||
|
srcFiles = grunt.file.expandFiles(file.src);
|
||||||
|
|
||||||
|
taskOutput = [];
|
||||||
|
taskOutput.push(helperNamespace + " = " + helperNamespace + " || {};");
|
||||||
|
|
||||||
|
srcFiles.forEach(function(srcFile) {
|
||||||
|
sourceCode = grunt.file.read(srcFile);
|
||||||
|
|
||||||
|
sourceCompiled = jst(sourceCode, srcFile, helperNamespace, options.templateSettings);
|
||||||
|
|
||||||
|
taskOutput.push(sourceCompiled);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (taskOutput.length > 0) {
|
||||||
|
grunt.file.write(file.dest, taskOutput.join("\n\n"));
|
||||||
|
grunt.log.writeln("File '" + file.dest + "' created.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
1
test/fixtures/template.html
vendored
Normal file
1
test/fixtures/template.html
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
<head><title><%= title %></title></head>
|
15
test/jst_test.js
Normal file
15
test/jst_test.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
var grunt = require('grunt');
|
||||||
|
|
||||||
|
exports['jst'] = {
|
||||||
|
main: function(test) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
test.expect(1);
|
||||||
|
|
||||||
|
var expect = "this['JST'] = this['JST'] || {};\n\nthis['JST']['test/fixtures/template.html'] = function(obj){\nvar __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\nwith(obj||{}){\n__p+='<head><title>'+\n( title )+\n'</title></head>';\n}\nreturn __p;\n};";
|
||||||
|
var result = grunt.file.read("tmp/jst.js");
|
||||||
|
test.equal(expect, result, "should compile underscore templates into JST");
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user