Skip to content

Releases: stencilproject/Stencil

0.10.1

17 Nov 18:43
Compare
Choose a tag to compare

Enhancements

  • Add support for Xcode 9.1.

0.10.0

28 Oct 20:39
Compare
Choose a tag to compare

Enhancements

  • Adds counter0 to for loop context allowing you to get the current index of the for loop 0 indexed.
  • Introduces a new DictionaryLoader for loading templates from a Swift Dictionary.
  • Added in expression in if tag for strings and arrays of hashable types
  • You can now access the amount of items in a dictionary using the count property.

Bug Fixes

  • Fixes a potential crash when using the {% for %} template tag with the incorrect amount of arguments.
  • Fixes a potential crash when using incomplete tokens in a template for example, {%%} or {{}}.
  • Fixes evaluating nil properties as true

0.9.0

18 Apr 23:12
Compare
Choose a tag to compare

Enhancements

  • for block now can contain where expression to filter array items. For example {% for item in items where item > 1 %} is now supported.

  • if blocks may now contain else if (elif) conditions.

    {% if one or two and not three %}
      one or two but not three
    {% elif four %}
      four
    {% else %}
      not one, two, or four
    {% endif %}
  • for block now allows you to iterate over array of tuples or dictionaries.

    {% for key, value in thing %}
      <li>{{ key }}: {{ value }}</li>
    {% endfor %}

Bug Fixes

  • You can now use literal filter arguments which contain quotes.
    #98

0.8.0

18 Feb 12:45
Compare
Choose a tag to compare

Breaking

  • It is no longer possible to create Context objects. Instead, you can pass a
    dictionary directly to a Templates render method.

    - try template.render(Context(dictionary: ["name": "Kyle"]))
    + try template.render(["name": "Kyle"])
  • Template loader are no longer passed into a Context, instead you will need
    to pass the Loader to an Environment and create a template from the
    Environment.

    let loader = FileSystemLoader(paths: ["templates/"])
    
    - let template = loader.loadTemplate(name: "index.html")
    - try template.render(Context(dictionary: ["loader": loader]))
    + let environment = Environment(loader: loader)
    + try environment.renderTemplate(name: "index.html")
  • Loaders will now throw a TemplateDoesNotExist error when a template
    is not found.

  • Namespace has been removed and replaced by extensions. You can create an
    extension including any custom template tags and filters. A collection of
    extensions can be passed to an Environment.

Enhancements

  • Environment is a new way to load templates. You can configure an
    environment with custom template filters, tags and loaders and then create a
    template from an environment.

    Environment also provides a convenience method to render a template directly.

  • FileSystemLoader will now ensure that template paths are within the base
    path. Any template names that try to escape the base path will raise a
    SuspiciousFileOperation error.

  • New {% filter %} tag allowing you to perform a filter across the contents
    of a block.

    {% filter lowercase %}
      This Text Will Be Lowercased.
    {% endfilter %}
  • You can now use {{ block.super }} to render a super block from another {% block %}.

  • Environment allows you to provide a custom Template subclass, allowing
    new template to use a specific subclass.

  • If expressions may now contain filters on variables. For example
    {% if name|uppercase == "TEST" %} is now supported.

Deprecations

  • Template initialisers have been deprecated in favour of using a template
    loader such as FileSystemLoader inside an Environment.

  • The use of whitespace inside variable filter expression is now deprecated.

    - {{ name | uppercase }}
    + {{ name|uppercase }}

Bug Fixes

  • Restores compatibility with ARM based platforms such as iOS. Stencil 0.7
    introduced compilation errors due to using the Float80 type which is not
    available.

0.7.1

30 Nov 17:14
Compare
Choose a tag to compare

Bug Fixes

  • Fixes an issue where using {% if %} statements which use operators would
    throw a syntax error.

0.7.0

29 Nov 12:28
Compare
Choose a tag to compare

New documentation website: https://stencil.fuller.li

Breaking

  • TemplateLoader has been renamed to FileSystemLoader. The
    loadTemplate(s) methods are now throwing and now take labels for the name
    and names arguments.
  • Many internal classes are no longer public. Some APIs were previously
    accessible due to earlier versions of Swift requiring the types to be public
    to be able to test. Now we have access to @testable these can correctly be
    private.
  • {% ifnot %} tag is now deprecated, please use {% if not %} instead.

Enhancements

  • Variable lookup now supports introspection of Swift types. You can now lookup
    values of Swift structures and classes inside a Context.

  • If tags can now use prefix and infix operators such as not, and, or,
    ==, !=, >, >=, < and <=.

      {% if one or two and not three %}
  • You may now register custom template filters which make use of arguments.

  • There is now a default filter.

    Hello {{ name|default:"World" }}
  • There is now a join filter.

    {{ value|join:", " }}
  • {% for %} tag now supports filters.

    {% for user in non_admins|default:admins %}
      {{ user }}
    {% endfor %}

Bug Fixes

  • Variables ({{ variable.5 }}) that reference an array index at an unknown
    index will now resolve to nil instead of causing a crash.
    #72
  • Templates can now extend templates that extend other templates.
    #60
  • If comparisons will now treat 0 and below numbers as negative.

0.6.0

13 Sep 19:29
Compare
Choose a tag to compare

Enhancements

  • Adds support for Swift 3.0.

0.6.0-beta.1

04 Apr 20:44
Compare
Choose a tag to compare
0.6.0-beta.1 Pre-release
Pre-release

Enhancements

  • Namespaces are now included in contexts so that template tags can make use of the namespace and pass it down to subsequent temples.

0.5.3

26 Feb 21:51
Compare
Choose a tag to compare

Bug Fixes

  • Fixes issues resolving variables on Linux.

0.5.1

08 Dec 18:10
Compare
Choose a tag to compare
Bug Fixes
  • Fixes an issue where the SPM dependency on PathKit wouldn't have Linux support.