# 5.1.5 * Fixed: compiler emitted wrong JS code when dealing with placeholders or boolean attributes # 5.1.4 * Fixed: missing \n # 5.1.3 * Fixed: fix weird source map when an EJS tag spans multiple lines # 5.1.2 * Fixed: `stricMode` not working for `compile.standAlone` # 5.1.1 * Fixed: bug with empty EJS eval tags (`<% %>`) * Fixed: bug with text after EJS tag inside custom tag (`<%= a %> text`) # 5.1.0 * Added: `sourceMap` option to create source maps # 5.0.0 ## Breaking changes * Removed: support for node 4 * Changed: from `reduce(tokens[, compileDebug])` to `reduce(tokens[, options])` * Changed: use strict mode and do not wrap code in `with(locals)` by default. The old version (v4) compiled templates to sloppy JS mode and used the long-deprecated `with()` structure. The new (v5) version changes that, but allows one to opt-out. We used `with(locals)` to allow one to write `<%= x %>` instead of `<%= locals.x %>`, but employing `with()` forced the lib to compile to sloppy mode since this construct isn't allowed in strict mode. In this new version, we revisited that decision and prefered to drop `with` in favor of strict mode. To ease transition, you can opt-out and keep using the old behavior with the option `strictMode: false`. On the other hand, if don't want to keep writing `locals.` all the time, you can list which variables should be made available with the option `vars: ['someVar', 'anotherOne']`. See the examples below ```js /** * Old (v4) */ // Variables could be accessed directly, unless there were absent in the locals parameter ejs.render('<%= a %>', {a: 2}) // '2' ejs.render('<%= b %>', {a: 2}) // ReferenceError: b is not defined // In sloppy mode, weird things happen, like leaking to global context ejs.render('<% x = 17 %>') // '' x // 17 /** * New (v5) */ // Direct access does not work out of the box ejs.render('<%= a %>', {a: 2}) // ReferenceError: a is not defined // You have to be explicit. Either use the locals object or list variables to be made available ejs.render('<%= locals.a %>', {a: 2}) // '2' ejs.render('<%= a %>', {a: 2}, {vars: ['a']}) // '2' ejs.render('<%= b %>', {a: 2}, {vars: ['b']}) // '' // Code is executed in strict mode ejs.render('<% x = 17 %>') // ReferenceError: x is not defined // If you REALLY want to use old behavior ejs.render('<%= a %>', {a: 2}, {strictMode: false}) // '2' ``` ## Other changes * Added: option `strictMode` (defaults to `true`) * Added: option `vars` (defaults to `[]`) # 4.0.3 * Fixed: bug in minifier with spaces around some EJS tags # 4.0.2 * Fixed: compiling custom elements inside custom elements with `compileDebug` set to `false` would crash on runtime. The fix on 4.0.1 did not covered the recursive case. # 4.0.1 * Fixed: compiling custom elements with `compileDebug` set to `false` would crash on runtime # 4.0.0 ## Breaking changes * Removed: `compile.both()`, since it was not as useful as it has appeared at first and it would make the other improvents in this release harder to implement. * Removed: compile `debug` option, since it was not useful to be present in the public API ## Other changes * Added: compile option `compileDebug` (defaults to `true`) to indicate whether to add extended context to exceptions # 3.1.1 * Fixed: white-space-only content for custom element is considered empty and the default placeholder is used # 3.1.0 * Added: `compile.both(source[, option])` # 3.0.1 * Fixed: npm.js does not render tabs on README correctly # 3.0.0 ## Breaking Changes * Changed: EJS eval tags `<% %>` are no longer allowed in attribute values, for safety and simplicity, use escaped tags `<%= %>` * Removed: `standAlone` option to `compile()`. Use new function `compile.standAlone()` for similar effect * Added: `compile.standAlone()`. It returns the JS render function body as a string. The string can be trasmitted to a client and then the render function reconstructed with `new Function('locals, customRender', code)` # 2.1.0 * Added: exposed `getSnippet()` # 2.0.1 * Fixed: detect and throw syntax error on repeated attributes * Fixed: boolean and case attributes handling in custom tags * Fixed: show line numbers in render-time errors and fix line mapping for custom tags # 2.0.0 * Changed: `` is no longer a void element, its content indicates the default value if no content for it is provided # 1.2.0 * Added: support for custom elements # 1.1.0 * Added: parse HTML as tree of elements * Added: check element tree is well balanced (no implicit end-tags) * Added: `transformer` option to extend semantics * Fixed: whitespace collapsing inside pre, script, style and textarea tags * Fixed: parsing of script and style tags # 1.0.0 * Started