Skip to content

Commit b13d0a6

Browse files
jmooringbep
authored andcommitted
tpl/images: Change signature of images.QR to images.QR TEXT OPTIONS
Closes #13230
1 parent d9594a9 commit b13d0a6

File tree

5 files changed

+42
-35
lines changed

5 files changed

+42
-35
lines changed

docs/content/en/functions/images/QR.md

+5-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ action:
66
aliases: []
77
related: []
88
returnType: images.ImageResource
9-
signatures: ['images.QR OPTIONS']
9+
signatures: ['images.QR TEXT OPTIONS']
1010
toc: true
1111
math: true
1212
---
@@ -25,9 +25,6 @@ Although the default option values are sufficient for most applications, you sho
2525

2626
## Options
2727

28-
text
29-
: (`string`) The text to encode.
30-
3128
level
3229
: (`string`) The error correction level to use when encoding the text, one of `low`, `medium`, `quartile`, or `high`. Default is `medium`.
3330

@@ -51,8 +48,8 @@ targetDir
5148
To create a QR code using the default values for `level` and `scale`:
5249

5350
```go-html-template
54-
{{ $opts := dict "text" "https://gohugo.io" }}
55-
{{ with images.QR $opts }}
51+
{{ $text := "https://gohugo.io" }}
52+
{{ with images.QR $text }}
5653
<img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
5754
{{ end }}
5855
```
@@ -62,13 +59,13 @@ To create a QR code using the default values for `level` and `scale`:
6259
Specify `level`, `scale`, and `targetDir` as needed to achieve the desired result:
6360

6461
```go-html-template
62+
{{ $text := "https://gohugo.io" }}
6563
{{ $opts := dict
66-
"text" "https://gohugo.io"
6764
"level" "high"
6865
"scale" 3
6966
"targetDir" "codes"
7067
}}
71-
{{ with images.QR $opts }}
68+
{{ with images.QR $text $opts }}
7269
<img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
7370
{{ end }}
7471
```

tpl/images/images.go

+16-6
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,13 @@ var qrErrorCorrectionLevels = map[string]qr.Level{
135135

136136
// QR encodes the given text into a QR code using the specified options,
137137
// returning an image resource.
138-
func (ns *Namespace) QR(options any) (images.ImageResource, error) {
138+
func (ns *Namespace) QR(args ...any) (images.ImageResource, error) {
139139
const (
140140
qrDefaultErrorCorrectionLevel = "medium"
141141
qrDefaultScale = 4
142142
)
143143

144144
opts := struct {
145-
Text string // text to encode
146145
Level string // error correction level; one of low, medium, quartile, or high
147146
Scale int // number of image pixels per QR code module
148147
TargetDir string // target directory relative to publishDir
@@ -151,15 +150,26 @@ func (ns *Namespace) QR(options any) (images.ImageResource, error) {
151150
Scale: qrDefaultScale,
152151
}
153152

154-
err := mapstructure.WeakDecode(options, &opts)
153+
if len(args) == 0 || len(args) > 2 {
154+
return nil, errors.New("requires 1 or 2 arguments")
155+
}
156+
157+
text, err := cast.ToStringE(args[0])
155158
if err != nil {
156159
return nil, err
157160
}
158161

159-
if opts.Text == "" {
162+
if text == "" {
160163
return nil, errors.New("cannot encode an empty string")
161164
}
162165

166+
if len(args) == 2 {
167+
err := mapstructure.WeakDecode(args[1], &opts)
168+
if err != nil {
169+
return nil, err
170+
}
171+
}
172+
163173
level, ok := qrErrorCorrectionLevels[opts.Level]
164174
if !ok {
165175
return nil, errors.New("error correction level must be one of low, medium, quartile, or high")
@@ -169,14 +179,14 @@ func (ns *Namespace) QR(options any) (images.ImageResource, error) {
169179
return nil, errors.New("scale must be an integer greater than or equal to 2")
170180
}
171181

172-
targetPath := path.Join(opts.TargetDir, fmt.Sprintf("qr_%s.png", hashing.HashStringHex(opts)))
182+
targetPath := path.Join(opts.TargetDir, fmt.Sprintf("qr_%s.png", hashing.HashStringHex(text, opts)))
173183

174184
r, err := ns.createClient.FromOpts(
175185
create.Options{
176186
TargetPath: targetPath,
177187
TargetPathHasHash: true,
178188
CreateContent: func() (func() (hugio.ReadSeekCloser, error), error) {
179-
code, err := qr.Encode(opts.Text, level)
189+
code, err := qr.Encode(text, level)
180190
if err != nil {
181191
return nil, err
182192
}

tpl/images/images_integration_test.go

+17-17
Original file line numberDiff line numberDiff line change
@@ -61,32 +61,32 @@ disableKinds = ['page','rss','section','sitemap','taxonomy','term']
6161
-- layouts/index.html --
6262
{{- $text := "https://gohugo.io" }}
6363
{{- $optionMaps := slice
64-
(dict "text" $text)
65-
(dict "text" $text "level" "medium")
66-
(dict "text" $text "level" "medium" "scale" 4)
67-
(dict "text" $text "level" "low" "scale" 2)
68-
(dict "text" $text "level" "medium" "scale" 3)
69-
(dict "text" $text "level" "quartile" "scale" 5)
70-
(dict "text" $text "level" "high" "scale" 6)
71-
(dict "text" $text "level" "high" "scale" 6 "targetDir" "foo/bar")
64+
(dict)
65+
(dict "level" "medium")
66+
(dict "level" "medium" "scale" 4)
67+
(dict "level" "low" "scale" 2)
68+
(dict "level" "medium" "scale" 3)
69+
(dict "level" "quartile" "scale" 5)
70+
(dict "level" "high" "scale" 6)
71+
(dict "level" "high" "scale" 6 "targetDir" "foo/bar")
7272
}}
7373
{{- range $k, $opts := $optionMaps }}
74-
{{- with images.QR $opts }}
74+
{{- with images.QR $text $opts }}
7575
<img data-id="{{ $k }}" data-img-hash="{{ .Content | hash.XxHash }}" data-level="{{ $opts.level }}" data-scale="{{ $opts.scale }}" data-targetDir="{{ $opts.targetDir }}" src="{{ .RelPermalink }}">
7676
{{- end }}
7777
{{- end }}
7878
`
7979

8080
b := hugolib.Test(t, files)
8181
b.AssertFileContent("public/index.html",
82-
`<img data-id="0" data-img-hash="6ccacf8056c41475" data-level="" data-scale="" data-targetDir="" src="/qr_3601c357f288f47f.png">`,
83-
`<img data-id="1" data-img-hash="6ccacf8056c41475" data-level="medium" data-scale="" data-targetDir="" src="/qr_3601c357f288f47f.png">`,
84-
`<img data-id="2" data-img-hash="6ccacf8056c41475" data-level="medium" data-scale="4" data-targetDir="" src="/qr_3601c357f288f47f.png">`,
85-
`<img data-id="3" data-img-hash="c29338c3d105b156" data-level="low" data-scale="2" data-targetDir="" src="/qr_232594637b3d9ac1.png">`,
86-
`<img data-id="4" data-img-hash="8f7a639cea917b0e" data-level="medium" data-scale="3" data-targetDir="" src="/qr_5c02e7507f8e86e0.png">`,
87-
`<img data-id="5" data-img-hash="2d15d6dcb861b5da" data-level="quartile" data-scale="5" data-targetDir="" src="/qr_c49dd961bcc47c06.png">`,
88-
`<img data-id="6" data-img-hash="113c45f2c091bc4d" data-level="high" data-scale="6" data-targetDir="" src="/qr_17994d3244e3c686.png">`,
89-
`<img data-id="7" data-img-hash="113c45f2c091bc4d" data-level="high" data-scale="6" data-targetDir="foo/bar" src="/foo/bar/qr_abd2f7b221eee6ea.png">`,
82+
`<img data-id="0" data-img-hash="6ccacf8056c41475" data-level="" data-scale="" data-targetDir="" src="/qr_924bf7d80a564b23.png">`,
83+
`<img data-id="1" data-img-hash="6ccacf8056c41475" data-level="medium" data-scale="" data-targetDir="" src="/qr_924bf7d80a564b23.png">`,
84+
`<img data-id="2" data-img-hash="6ccacf8056c41475" data-level="medium" data-scale="4" data-targetDir="" src="/qr_924bf7d80a564b23.png">`,
85+
`<img data-id="3" data-img-hash="c29338c3d105b156" data-level="low" data-scale="2" data-targetDir="" src="/qr_9bf1ce25c5f2c058.png">`,
86+
`<img data-id="4" data-img-hash="8f7a639cea917b0e" data-level="medium" data-scale="3" data-targetDir="" src="/qr_7af14b329dd10af7.png">`,
87+
`<img data-id="5" data-img-hash="2d15d6dcb861b5da" data-level="quartile" data-scale="5" data-targetDir="" src="/qr_9600ecb2010c2185.png">`,
88+
`<img data-id="6" data-img-hash="113c45f2c091bc4d" data-level="high" data-scale="6" data-targetDir="" src="/qr_bdc74ee7f5c11cc6.png">`,
89+
`<img data-id="7" data-img-hash="113c45f2c091bc4d" data-level="high" data-scale="6" data-targetDir="foo/bar" src="/foo/bar/qr_14162f02f2b83fff.png">`,
9090
)
9191

9292
files = strings.ReplaceAll(files, "low", "foo")

tpl/tplimpl/embedded/templates/shortcodes/qr.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@
6464

6565
{{- /* Render image. */}}
6666
{{- if not $errors }}
67-
{{- $opts := dict "text" $text "level" $level "scale" $scale "targetDir" $targetDir }}
68-
{{- with images.QR $opts -}}
67+
{{- $opts := dict "level" $level "scale" $scale "targetDir" $targetDir }}
68+
{{- with images.QR $text $opts -}}
6969
<img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"
7070
{{- with $alt }} alt="{{ $alt }}" {{- end }}
7171
{{- with $class }} class="{{ $class }}" {{- end }}

tpl/tplimpl/tplimpl_integration_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,7 @@ https://gohugo.io"
730730
b := hugolib.Test(t, files)
731731

732732
b.AssertFileContent("public/index.html",
733-
`<img src="/codes/qr_1ad588024620edf6.png" width="148" height="148" alt="QR code linking to https://gohugo.io" class="my-class" id="my-id" title="My Title">`,
734-
`<img src="/qr_7307530a297f2cc9.png" width="132" height="132">`,
733+
`<img src="/codes/qr_be5d263c2671bcbd.png" width="148" height="148" alt="QR code linking to https://gohugo.io" class="my-class" id="my-id" title="My Title">`,
734+
`<img src="/qr_472aab57ec7a6e3d.png" width="132" height="132">`,
735735
)
736736
}

0 commit comments

Comments
 (0)