[bugfix] Let templates deref pointers, as a treat (#2448)

This commit is contained in:
tobi 2023-12-12 15:44:54 +01:00 committed by GitHub
parent ac48192562
commit d0bb8f0973
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 3 deletions

View file

@ -22,6 +22,7 @@ import (
"html/template"
"os"
"path/filepath"
"reflect"
"strings"
"time"
"unsafe"
@ -180,6 +181,19 @@ func isNil(i interface{}) bool {
return (*eface)(unsafe.Pointer(&i)).data == nil
}
// deref returns the dereferenced value of
// its input. To ensure you don't pass nil
// pointers into this func, use isNil first.
func deref(i any) any {
vOf := reflect.ValueOf(i)
if vOf.Kind() != reflect.Pointer {
// Not a pointer.
return i
}
return vOf.Elem()
}
func LoadTemplateFunctions(engine *gin.Engine) {
engine.SetFuncMap(template.FuncMap{
"escape": escape,
@ -194,5 +208,6 @@ func LoadTemplateFunctions(engine *gin.Engine) {
"acctInstance": acctInstance,
"increment": increment,
"isNil": isNil,
"deref": deref,
})
}

View file

@ -50,15 +50,17 @@
{{- if isNil $pollOption.VotesCount }}
Results not yet published.
{{- else -}}
{{- with deref $pollOption.VotesCount }}
<span class="poll-vote-share">{{- $pollOption.VoteShareStr -}}&#37;</span>
<span class="poll-vote-count">
{{- if eq $pollOption.VotesCount 1 -}}
{{- $pollOption.VotesCount }} vote
{{- if eq . 1 -}}
{{- . }} vote
{{- else -}}
{{- $pollOption.VotesCount }} votes
{{- . }} votes
{{- end -}}
</span>
{{- end -}}
{{- end }}
</div>
</li>
{{- end }}