Compare commits

...

12 Commits

Author SHA1 Message Date
kpdecker 47d13cb23c v1.1.2 2013-11-05 18:10:06 -06:00
kpdecker 7c13753bb5 Update release notes 2013-11-05 18:09:26 -06:00
kpdecker affbcbb79e Unify isArray/isFunction/toString implementations
Restores Array.isArray polyfill for all use cases.

Fixes #645
2013-11-05 18:07:33 -06:00
kpdecker 96a45a4a96 Add simple binary utility tests 2013-11-05 18:02:25 -06:00
kpdecker 6f6eb89bd8 Use handlebars runtime from precompiled amd files
Fixes #644
2013-11-05 18:02:05 -06:00
kpdecker eea708a18d Fix empty string compilation 2013-11-04 22:11:53 -06:00
Stefan Penner 508bb2d55d local grunt-cli 2013-11-04 21:18:57 -05:00
kpdecker 09cdc19a21 v1.1.1 2013-11-04 10:48:59 -06:00
kpdecker 2cb61c9d5f Update release notes 2013-11-04 10:48:12 -06:00
kpdecker 986d6f4096 Fix CLI library loading
Fixes #642
2013-11-04 10:46:50 -06:00
kpdecker 1e20373428 Document release process
Fixes #546
Fixes #640
2013-11-04 00:26:03 -06:00
kpdecker 17ba258355 Fix release notes link 2013-11-03 23:43:45 -06:00
14 changed files with 117 additions and 40 deletions
-11
View File
@@ -147,17 +147,6 @@ module.exports = function(grunt) {
// traceur exec issues
grunt.util.spawn({grunt: true, args: ['--stack', 'packager'], opts: {stdio: 'inherit'}}, this.async());
});
grunt.registerTask('test', function() {
var done = this.async();
var runner = childProcess.fork('./spec/env/runner', [], {stdio: 'inherit'});
runner.on('close', function(code) {
if (code != 0) {
grunt.fatal(code + ' tests failed');
}
done();
});
});
grunt.registerTask('bench', ['metrics']);
grunt.registerTask('default', ['build', 'test', 'release']);
+17
View File
@@ -411,8 +411,25 @@ Feel free to contact commondream or wycats through GitHub with any other
questions or feature requests. To submit changes fork the project and
send a pull request.
### Releasing
Handlebars utilizes the [release yeoman generator][generator-release] to perform most release tasks.
A full release may be completed with the following:
```
yo release:notes patch
yo release:release patch
npm publish
yo release:publish cdnjs handlebars.js dist/cdnjs/
yo release:publish components handlebars.js dist/components/
```
After this point the handlebars site needs to be updated to point to the new version numbers.
License
-------
Handlebars.js is released under the MIT license.
[builds-page]: http://builds.handlebarsjs.com.s3.amazonaws.com/index.html
[generator-release]: https://github.com/walmartlabs/generator-release
+2 -2
View File
@@ -102,7 +102,7 @@ var optimist = require('optimist')
});
var fs = require('fs'),
handlebars = require('../lib/handlebars'),
handlebars = require('../lib'),
basename = require('path').basename,
uglify = require('uglify-js');
@@ -127,7 +127,7 @@ extension = new RegExp('\\.' + extension + '$');
var output = [];
if (!argv.simple) {
if (argv.amd) {
output.push('define([\'' + argv.handlebarPath + 'handlebars\'], function(Handlebars) {\n Handlebars = Handlebars["default"];');
output.push('define([\'' + argv.handlebarPath + 'handlebars.runtime\'], function(Handlebars) {\n Handlebars = Handlebars["default"];');
} else if (argv.commonjs) {
output.push('var Handlebars = require("' + argv.commonjs + '");');
} else {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "handlebars",
"version": "1.1.0",
"version": "1.1.2",
"main": "handlebars.js",
"dependencies": {}
}
+1 -1
View File
@@ -2,7 +2,7 @@
<package>
<metadata>
<id>handlebars.js</id>
<version>1.1.0</version>
<version>1.1.2</version>
<authors>handlebars.js Authors</authors>
<licenseUrl>https://github.com/wycats/handlebars.js/blob/master/LICENSE</licenseUrl>
<projectUrl>https://github.com/wycats/handlebars.js/</projectUrl>
+4 -18
View File
@@ -2,7 +2,7 @@
module Utils from "./utils";
import Exception from "./exception";
export var VERSION = "1.1.0";
export var VERSION = "1.1.2";
export var COMPILER_REVISION = 4;
export var REVISION_CHANGES = {
@@ -12,25 +12,11 @@ export var REVISION_CHANGES = {
4: '>= 1.0.0'
};
var toString = Object.prototype.toString,
var isArray = Utils.isArray,
isFunction = Utils.isFunction,
toString = Utils.toString,
objectType = '[object Object]';
// Sourced from lodash
// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
var isFunction = function(value) {
return typeof value === 'function';
};
// fallback for older versions of Chrome and Safari
if (isFunction(/x/)) {
isFunction = function(value) {
return typeof value === 'function' && toString.call(value) === '[object Function]';
};
}
function isArray(value) {
return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;
}
export function HandlebarsEnvironment(helpers, partials) {
this.helpers = helpers || {};
this.partials = partials || {};
+20 -2
View File
@@ -1,7 +1,5 @@
import SafeString from "./safe-string";
var isArray = Array.isArray;
var escape = {
"&": "&amp;",
"<": "&lt;",
@@ -26,6 +24,26 @@ export function extend(obj, value) {
}
}
export var toString = Object.prototype.toString;
// Sourced from lodash
// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
var isFunction = function(value) {
return typeof value === 'function';
};
// fallback for older versions of Chrome and Safari
if (isFunction(/x/)) {
isFunction = function(value) {
return typeof value === 'function' && toString.call(value) === '[object Function]';
};
}
export var isFunction;
export var isArray = Array.isArray || function(value) {
return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;
};
export function escapeExpression(string) {
// don't escape SafeStrings, since they're already safe
if (string instanceof SafeString) {
+3 -2
View File
@@ -1,7 +1,7 @@
{
"name": "handlebars",
"barename": "handlebars",
"version": "1.1.0",
"version": "1.1.2",
"description": "Handlebars provides the power necessary to let you build semantic templates effectively with no frustration",
"homepage": "http://www.handlebarsjs.com/",
"keywords": [
@@ -46,7 +46,8 @@
"mustache": "~0.7.2",
"semver": "~2.1.0",
"should": "~1.2.2",
"underscore": "~1.5.1"
"underscore": "~1.5.1",
"grunt-cli": "~0.1.10"
},
"main": "lib/index.js",
"bin": {
+21 -3
View File
@@ -2,7 +2,25 @@
## Development
[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.0...master)
[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.2...master)
## v1.1.2 - November 5th, 2013
- [#645](https://github.com/wycats/handlebars.js/issues/645) - 1.1.1 fails under IE8 ([@kpdecker](https://api.github.com/users/kpdecker))
- [#644](https://github.com/wycats/handlebars.js/issues/644) - Using precompiled templates (AMD mode) with handlebars.runtime 1.1.1 ([@fddima](https://api.github.com/users/fddima))
- Add simple binary utility tests - 96a45a4
- Fix empty string compilation - eea708a
[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.1...v1.1.2)
## v1.1.1 - November 4th, 2013
- [#642](https://github.com/wycats/handlebars.js/issues/642) - handlebars 1.1.0 are broken with nodejs
- Fix release notes link - 17ba258
[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.0...v1.1.1)
## v1.1.0 - November 3rd, 2013
@@ -27,7 +45,7 @@ Compatibility notes:
- AMD: Users may load the bundled `handlebars.amd.js` or `handlebars.runtime.amd.js` files or load individual modules directly. AMD users should also note that the handlebars object is exposed via the `default` field on the imported object. This [gist](https://gist.github.com/wycats/7417be0dc361a69d5916) provides some discussion of possible compatibility shims.
- CommonJS/Node: Node loading occurs as normal via `require`
- Globals: The `handlebars.js` and `handlebars.runtime.js` files should behave in the same manner as the v1.0.12 / 1.0.0 release.
- Build artifacts have been removed from the repository. [npm][npm], [components/handlebars.js][components], [cdnjs][cdnjs-lib], or the [builds page][builds-page] should now be used as the source of built artifacts.
- Build artifacts have been removed from the repository. [npm][npm], [components/handlebars.js][components], [cdnjs][cdnjs], or the [builds page][builds-page] should now be used as the source of built artifacts.
- Context-stored helpers are now always passed the `options` hash. Previously no-argument helpers did not have this argument.
@@ -124,6 +142,6 @@ template(context, {helpers: helpers, partials: partials, data: data})
```
[builds-page]: http://builds.handlebarsjs.com.s3.amazonaws.com/index.html
[cdn-js]: http://cdnjs.com/libraries/handlebars.js/
[cdnjs]: http://cdnjs.com/libraries/handlebars.js/
[components]: https://github.com/components/handlebars.js
[npm]: https://npmjs.org/package/handlebars
View File
+11
View File
@@ -0,0 +1,11 @@
define(['handlebars.runtime'], function(Handlebars) {
Handlebars = Handlebars["default"]; var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
return templates['empty'] = template(function (Handlebars,depth0,helpers,partials,data) {
this.compilerInfo = [4,'>= 1.0.0'];
helpers = this.merge(helpers, Handlebars.helpers); data = data || {};
var buffer = "";
return buffer;
});
});
+4
View File
@@ -115,5 +115,9 @@ describe('Regressions', function() {
it("can pass through an already-compiled AST via compile/precompile", function() {
equal(Handlebars.compile(new Handlebars.AST.ProgramNode([ new Handlebars.AST.ContentNode("Hello")]))(), 'Hello');
});
it("can pass through an empty string", function() {
equal(Handlebars.compile('')(), '');
});
}
});
+1
View File
@@ -17,6 +17,7 @@ function stripFlags(open, close) {
root
: statements EOF { return new yy.ProgramNode($1); }
| EOF { return new yy.ProgramNode([]); }
;
program
+32
View File
@@ -0,0 +1,32 @@
var childProcess = require('child_process'),
fs = require('fs');
module.exports = function(grunt) {
grunt.registerTask('test:bin', function() {
var done = this.async();
childProcess.exec('./bin/handlebars -a spec/artifacts/empty.handlebars', function(err, stdout) {
if (err) {
throw err;
}
if (stdout.toString() !== fs.readFileSync('./spec/expected/empty.amd.js').toString()) {
throw new Error('Expected binary output differed');
}
done();
});
});
grunt.registerTask('test:mocha', function() {
var done = this.async();
var runner = childProcess.fork('./spec/env/runner', [], {stdio: 'inherit'});
runner.on('close', function(code) {
if (code != 0) {
grunt.fatal(code + ' tests failed');
}
done();
});
});
grunt.registerTask('test', ['test:bin', 'test:mocha']);
};