Releases: stencilproject/Stencil
Releases · stencilproject/Stencil
0.15.1
0.15.0
Breaking
- Drop support for Swift < 5. For Swift 4.2 support, you should use Stencil 0.14.2.
David Jennes
#323
Enhancements
- Added support for trimming whitespace around blocks with Jinja2 whitespace control symbols. eg
{%- if value +%}
.
Miguel Bejar
Yonas Kolb
#92
#287 - Added support for adding default whitespace trimming behaviour to an environment.
Yonas Kolb
#287 - Blocks now can be used repeatedly in the template. When block is rendered for the first time its content will be cached and it can be rendered again later using
{{ block.block_name }}
.
Ilya Puchka
#158
#182 - Added
break
andcontinue
tags to break or continue current loop.
Ilya Puchka
#175 - You can now access outer loop's scope by labeling it:
{% outer: for ... %}... {% for ... %} {{ outer.counter }} {% endfor %}{% endfor %}
.
Ilya Puchka
#175 - Boolean expressions can now be rendered, i.e
{{ name == "John" }}
will rendertrue
orfalse
depending on the evaluation result.
Ilya Puchka
David Jennes
#164
#325 - Enable dynamic member lookup using a new
DynamicMemberLookup
marker protocol. Conform your own types to this protocol to support dynamic member from with contexts.
Ilya Puchka
#219
#246 - Allow providing lazily evaluated context data, using the
LazyValueWrapper
structure.
David Jennes
#324
Bug Fixes
- Fixed using
{{ block.super }}
inside nodes other thanblock
.
Ilya Puchka
#266
#267
Internal Changes
- Updated internal maintenance scripts, and switched to GitHub actions.
David Jennes
#321 - Made the
tokens
property on aTemplate
public.
Stefanomondino
#292 - Made the
Template.render(_:)
method (that accepts aContext
) public.
David Jennes
#322
0.14.2
0.14.1
0.14.0
Breaking
- Drop support for Swift < 4.2. For Swift 4 support, you should use Stencil 0.13.1.
David Jennes
#294
Enhancements
- Added support for dynamic filter using
filter
filter. With that you can define a variable with a name of filter
, i.e.myfilter = "uppercase"
and then use it to invoke this filter with{{ string|filter:myfilter }}
.
Ilya Puchka
#203
Deprecations
None
Bug Fixes
- Fixed using parenthesis in boolean expressions, they now can be used without spaces around them.
Ilya Puchka
#254 - Throw syntax error on empty variable tags (
{{ }}
) insteadfatalError
.
Ilya Puchka
#263
Internal Changes
Token
type converted to struct to allow computing token components only once.
Ilya Puchka
#256- Added SwiftLint to the project.
David Jennes
#249 - Updated to Swift 5.
Jungwon An
#268
0.13.1
Bug Fixes
- Fixed a bug in Stencil 0.13 where tags without spaces were incorrectly parsed.
David Jennes
#252
0.13.0
Breaking
- Now requires Swift 4.1 or newer.
Yonas Kolb
#228
Enhancements
- You can now use parentheses in boolean expressions to change operator precedence.
Ilya Puchka
#165 - Added method to add boolean filters with their negative counterparts.
Ilya Puchka
#160 - Now you can conditionally render variables with
{{ variable if condition }}
, which is a shorthand for{% if condition %}{{ variable }}{% endif %}
. You can also useelse
like{{ variable1 if condition else variable2 }}
, which is a shorthand for{% if condition %}{{ variable1 }}{% else %}{{ variable2 }}{% endif %}
Ilya Puchka
#243 - Now you can access string characters by index or get string length the same was as if it was an array, i.e.
{{ 'string'.first }}
,{{ 'string'.last }}
,{{ 'string'.1 }}
,{{ 'string'.count }}
.
Ilya Puchka
#245
Bug Fixes
- Fixed the performance issues introduced in Stencil 0.12 with the error log improvements.
Ilya Puchka
#230 - Now accessing undefined keys in NSObject does not cause runtime crash and instead renders empty string.
Ilya Puchka
#234 for
tag: When iterating over a dictionary the keys will now always be sorted (in an ascending order) to ensure consistent output generation.
David Jennes
#240
Internal Changes
- Updated the codebase to use Swift 4 features.
David Jennes
#239 - Update to Spectre 0.9.0.
Ilya Puchka
#247 - Optimise Scanner performance.
Eric Thorpe
Sébastien Duperron
David Jennes
#226
0.12.1
0.12.0
Enhancements
- Added an optional second parameter to the
include
tag for passing a sub context to the included file.
Yonas Kolb
#214 - Variables now support the subscript notation. For example, if you have a variable
key = "name"
, and an
objectitem = ["name": "John"]
, then{{ item[key] }}
will evaluate to "John".
David Jennes
#215 - Adds support for using spaces in filter expression.
Ilya Puchka
#178 - Improvements in error reporting.
Ilya Puchka
#167
Bug Fixes
- Fixed using quote as a filter parameter.
Ilya Puchka
#210
0.11.0
Enhancements
- Added support for resolving superclass properties for not-NSObject subclasses
- The
{% for %}
tag can now iterate over tuples, structures and classes via
their stored properties. - Added
split
filter - Allow default string filters to be applied to arrays
- Similar filters are suggested when unknown filter is used
- Added
indent
filter - Allow using new lines inside tags
- Added support for iterating arrays of tuples
- Added support for ranges in if-in expression
- Added property
forloop.length
to get number of items in the loop - Now you can construct ranges for loops using
a...b
syntax, i.e.for i in 1...array.count
Bug Fixes
- Fixed rendering
{{ block.super }}
with several levels of inheritance - Fixed checking dictionary values for nil in
default
filter - Fixed comparing string variables with string literals, in Swift 4 string literals became
Substring
and thus couldn't be directly compared to strings. - Integer literals now resolve into Int values, not Float
- Fixed accessing properties of optional properties via reflection
- No longer render optional values in arrays as
Optional(..)
- Fixed subscription tuples by value index, i.e.
{{ tuple.0 }}