🌿 Parsley the template parser has been released to maven.wocommunity.org so it's now easy to try out. Just add it to your pom.xml.
Parsley is not "automatically enabled" when added as a dependency, since it contains utility functionality you might want to use without having it as your default template parser. You must activate it somewhere during application initialization to use it as your default parser, for example in your Application class constructor as shown below.
<dependency>
<groupId>is.rebbi</groupId>
<artifactId>parsley</artifactId>
<version>1.2.0</version>
</dependency>
<!-- make sure to also remove WOOgnl from the pom if present -->
public Application() {
parsley.Parsley.register();
parsley.Parsley.showInlineRenderingErrors( isDevelopmentModeSafe() ); // For enabling inline error reporting in dev mode
}
Parsley is an evolution of Project Wonder's WOOgnl template parser. It's largest currently visible "new feature" is inline display of some common templating errors during development, replacing the beloved meter long stack trace pages.
Parsley's largest changes are behind the scenes though. It parses templates to an AST before converting them to a WO Dynamic Element template. This is what enables the inline error messages and will allow for some more fun functionality as we extend it. Parsley's template parser is also used in ng-objects, meaning templates that work in WO under Parsley are syntactically guaranteed to carry over.
Note that Parsley does not support all of WOOgnl's features. Specifics can be found in the section "Differences from WOOgnl" in the README
| 🚀 ng-objects | NGPopUpButton: fail deliberately on out-of-range selection index | Aug 11 |
| 🚀 ng-objects | NGPopUpButton: selection binding is the sole authority for rendered s… | Aug 11 |
| 🤸♀️ wonder-slim | Log pid | Aug 11 |
| 🚀 ng-objects | Log pid | Aug 11 |
| 🚀 ng-objects | /ng/dev/eval: reject a form-encoded body with a clear error, don't guess | Aug 10 |
| 🚀 ng-objects | NGRequest: FIXME on the remoteAddress accessors | Aug 10 |
| 🤸♀️ wonder-slim | Move dev-loop machinery to er.extensions.dev | Aug 10 |
| 💋 parslips | Dev server: element-API lookup endpoint + a plain-tag binding lint | Aug 10 |
| 🤸♀️ wonder-slim | Add eval and problems dev request handlers (aligned with ng-objects) | Aug 10 |
| 🚀 ng-objects | Add /ng/dev/eval and /ng/dev/problems development endpoints | Aug 10 |
| 🤸♀️ wonder-slim | 8.0.3 | Jun 26 |
| 🌿 parsley | 1.6.0 | Jun 26 |
| 🌿 parsley | 1.5.0 | Jun 18 |
| 🤸♀️ wonder-slim | 8.0.2 | Jun 18 |
| 🦡 vermilingua | 1.1.5 | Jun 15 |
| 🤸♀️ wonder-slim | 8.0.1 | Jun 1 |
| 🌿 parsley | 1.4.2 | Jun 1 |
| 🦡 vermilingua | 1.1.4 | Apr 24 |
| 🚀 ng-objects | 0.1.1 | Apr 22 |
| 🦡 vermilingua | 1.1.3 | Apr 15 |
| 💋 parslips | Dev server surface: planned endpoints + conventions (catch-all roadmap) | Aug 10 |
| 🚀 ng-objects | NGRequest: parse the body lazily (raw body + on-demand form values), not eagerly at the adaptor | Aug 10 |
| 🚀 ng-objects | Headless action driving: render a page, list its actions, invoke one (dev endpoint) | Aug 10 |
| 🤸♀️ wonder-slim | Make ERXWOImage the full <wo:img> replacement (incl. dynamic/data images) | Jul 8 |
| 🌿 parsley | Heat map: make render-tree sibling ordering user-selectable (hottest-first vs source order) | Jul 6 |
| 🚀 ng-objects | Parser: record a SourceRange per binding (not just per element) | Jul 6 |
| 🧩 apiext-format | Generated-from-source authoring mode (annotations + javadoc → .apiext); the file stays canonical | Jul 5 |
| 🤸♀️ wonder-slim | AjaxSlim: remove replaceID (the ajax-replacement mode) | Jul 5 |
| 🧩 apiext-format | Prefix-family bindings (declare a family of bindings by prefix, e.g. ?key query params) | Jul 4 |
| 🧩 apiext-format | Enclosing-context requirement (element must sit inside a form) | Jul 4 |