brexpressions v0.1.0
Brexpressions
Grammar and parser for Breezy's expressions in brackets.
Expressions
Breezy uses expressions as placeholders that will be substituted with the value when rendered. Expression are very similar to JavaScript property lookups and function calls with the tenary operator. A full expression looks like:
path[.to.method] [args... ] [? truthy] [: falsy]path is either a direct or dot-separated nested property lookup. args can be any number of (whitespace separated) parameters if the result of the path lookup is a function. Each parameter can either be another path or a sinlge- or doublequoted string. The optional truthy and falsy block can be used to change the return value to another value or string.
Examples:
- Look up the
nameproperty:name
- Look up
siteand get thetitle:site.title
- Get
nameand call thetoUpperCasestring method:name.toUpperCase
- Call the
helpers.equalmethod to check the name against a string:helpers.equal name 'David'
- Call
helpers.equalmethod and returnYesif it matches (nullotherwise):helpers.equal name 'David' ? 'Yes'
- Call
helpers.equalmethod and returnNoif it does not match (nullotherwise):helpers.equal name 'David' : 'No'
- Call
helpers.equalmethod and returnYesif andNoif it does not match:helpers.equal name 'David' ? 'Yes' : 'No'
helpers.equal simply looks like:
{
helpers: {
equal: function(first, second) {
return first === second;
}
}
}Expressions can be used in Attributes or any other text when wrapped with double curly braces {{}}:
<div show-if="helpers.equal name 'David'">Hi {{name.toUpperCase}} how are you?</div>
<img src="person.png" alt="This person is: {{helpers.equal name 'David' ? 'Dave' : 'I don\'t know'}}">Note: Dynamically adding attributes like <img {{helpers.equal name 'David' ? 'alt="This is David"'}}> is currently not supported. This can almost always be done in a more HTML-y way, anyway, for example using a custom attribute.
11 years ago