Improve consistency of handling shrotcode attributes

This commit is contained in:
Alex Shpak
2025-10-12 13:27:05 +02:00
parent 6c9e2a1918
commit 836a8a82d6
15 changed files with 140 additions and 34 deletions
+36
View File
@@ -0,0 +1,36 @@
{{- /*
This is generic function the helps modifying and merging dictionaries, usually used for html attributes
Logic is executed in order defined below.
partial "docs/text/mapper" (dict
"attributes" (cond .IsNamedParams .Params dict)
"keep" (slice "id" "class" "tabindex" "alt" "title" "loading")
"set" (dict "href" "https://")
"merge" (dict "class" "a-class")
"delimiter" " " // Used when merging values
"delete" (slice "src")
)
*/ -}}
{{- $store := newScratch -}}
{{- $allowlist := or (.keep) (slice "id" "class" "tabindex" "dir")}}
{{- range $key, $value := .attributes -}}
{{- if in $allowlist $key -}}
{{- $store.Set $key $value -}}
{{- end -}}
{{- end -}}
{{- range $key, $value := .set -}}
{{- $store.Set $key (print $value) -}}
{{- end -}}
{{- range $key, $value := .merge -}}
{{- $merged := (slice) | append $value | append (or (index $.attributes $key) (slice)) -}}
{{- $delimiter := or ($.delimiter) (" ") }}
{{- $store.Set $key (delimit $merged $delimiter) -}}
{{- end -}}
{{- range $key := .delete -}}
{{- $store.Delete $key -}}
{{- end -}}
{{- return $store.Values -}}