hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 0462c96a5a9da3e8adc78d96acd39575a8b46c40
parent 202510fdc92d52a20baeaa7edb1091f6882bd95f
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Fri,  8 Sep 2017 14:16:21 +0200

tpl/compare: Add cond (ternary) template func

Fixes #3860

Diffstat:
Mtpl/compare/compare.go | 9+++++++++
Mtpl/compare/compare_test.go | 9+++++++++
Mtpl/compare/init.go | 7+++++++
3 files changed, 25 insertions(+), 0 deletions(-)
diff --git 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
@@ -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
@@ -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
 
 	}