summaryrefslogtreecommitdiffstats
path: root/tpl/compare
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-09-08 14:16:21 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-09-08 16:59:43 +0200
commit0462c96a5a9da3e8adc78d96acd39575a8b46c40 (patch)
treebdcf3a56a54883ff9819afa2110231f0324acf63 /tpl/compare
parent202510fdc92d52a20baeaa7edb1091f6882bd95f (diff)
tpl/compare: Add cond (ternary) template func
Fixes #3860
Diffstat (limited to 'tpl/compare')
-rw-r--r--tpl/compare/compare.go9
-rw-r--r--tpl/compare/compare_test.go9
-rw-r--r--tpl/compare/init.go7
3 files changed, 25 insertions, 0 deletions
diff --git a/tpl/compare/compare.go b/tpl/compare/compare.go
index 2df03b7db..65228da99 100644
--- a/tpl/compare/compare.go
+++ b/tpl/compare/compare.go
@@ -142,6 +142,15 @@ func (n *Namespace) Lt(a, b interface{}) bool {
return left < right
}
+// Conditional can be used as a ternary operator.
+// It returns a if condition, else b.
+func (n *Namespace) Conditional(condition bool, a, b interface{}) interface{} {
+ if condition {
+ return a
+ }
+ return b
+}
+
func (*Namespace) compareGetFloat(a interface{}, b interface{}) (float64, float64) {
var left, right float64
var leftStr, rightStr *string
diff --git a/tpl/compare/compare_test.go b/tpl/compare/compare_test.go
index 9adbcf574..c9bc2ffe9 100644
--- a/tpl/compare/compare_test.go
+++ b/tpl/compare/compare_test.go
@@ -221,3 +221,12 @@ func TestTimeUnix(t *testing.T) {
toTimeUnix(iv)
}(t)
}
+
+func TestConditional(t *testing.T) {
+ assert := require.New(t)
+ n := New()
+ a, b := "a", "b"
+
+ assert.Equal(a, n.Conditional(true, a, b))
+ assert.Equal(b, n.Conditional(false, a, b))
+}
diff --git a/tpl/compare/init.go b/tpl/compare/init.go
index fbc5e1fda..7d58cf9ab 100644
--- a/tpl/compare/init.go
+++ b/tpl/compare/init.go
@@ -69,6 +69,13 @@ func init() {
[][2]string{},
)
+ ns.AddMethodMapping(ctx.Conditional,
+ []string{"cond"},
+ [][2]string{
+ {`{{ cond (eq (add 2 2) 4) "2+2 is 4" "what?" | safeHTML }}`, `2+2 is 4`},
+ },
+ )
+
return ns
}