♻️ Moved hardcoded payment identifiers into Config domain

This commit is contained in:
Maxim Lebedev 2023-12-13 14:06:14 +06:00
parent 0eb2f09131
commit 5010553a4e
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
5 changed files with 438 additions and 395 deletions

View File

@ -20,7 +20,7 @@ type Service struct {
}
func New(logger *log.Logger, static fs.FS, config domain.Config) *Service {
handler := paymenthttpdelivery.NewHandler()
handler := paymenthttpdelivery.NewHandler(config.ConfigProcessors)
fileServer := http.FileServer(http.FS(static))
return &Service{

View File

@ -4,7 +4,15 @@ import (
"net/url"
)
type Config struct {
BaseURL *url.URL `env:"BASE_URL" envDefault:"http://localhost:3000/"`
Bind string `env:"BIND" envDefault:":3000"`
}
type (
Config struct {
BaseURL *url.URL `env:"BASE_URL" envDefault:"http://localhost:3000/"`
Bind string `env:"BIND" envDefault:":3000"`
ConfigProcessors
}
ConfigProcessors struct {
PayPal string `env:"PAYPAL"`
Liberapay string `env:"LIBERAPAY"`
}
)

View File

@ -9,16 +9,19 @@ import (
"golang.org/x/text/message"
"source.toby3d.me/toby3d/pay/internal/common"
"source.toby3d.me/toby3d/pay/internal/domain"
"source.toby3d.me/toby3d/pay/internal/urlutil"
"source.toby3d.me/toby3d/pay/web/template"
)
type Handler struct {
matcher language.Matcher
matcher language.Matcher
processors domain.ConfigProcessors
}
func NewHandler() *Handler {
func NewHandler(processors domain.ConfigProcessors) *Handler {
return &Handler{
processors: processors,
matcher: language.NewMatcher(append([]language.Tag{language.English},
message.DefaultCatalog.Languages()...)),
}
@ -48,5 +51,5 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
w.Header().Set(common.HeaderContentType, common.MIMETextHTMLCharsetUTF8)
template.WriteTemplate(w, template.NewContext(tag, amount))
template.WriteTemplate(w, template.NewContext(h.processors, tag, amount))
}

View File

@ -3,6 +3,8 @@
{% import (
"golang.org/x/text/language"
"golang.org/x/text/message"
"source.toby3d.me/toby3d/pay/internal/domain"
) %}
{% interface Page {
@ -19,13 +21,15 @@ type Context struct {
language language.Tag
printer *message.Printer
amount float64
processors domain.ConfigProcessors
}
func NewContext(lang language.Tag, amount uint64) *Context {
func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount uint64) *Context {
return &Context{
language: lang,
printer: message.NewPrinter(lang),
amount: float64(amount),
processors: processors,
}
}
%}
@ -49,25 +53,29 @@ func NewContext(lang language.Tag, amount uint64) *Context {
<h1>{%= ctx.title() %}</h1>
<ul class="[ cluster ][ list-style-type:none padding-inline-start:unset ]">
<li>
<a class="button"{% space %}
rel="noopener noreferrer payment"{% space %}
href="https://liberapay.com/toby3d/donate{% if ctx.amount > 0 %}?amount={%f.2 ctx.amount/100 %}&currency=USD&period=monthly{% endif %}">
{% if ctx.processors.Liberapay != "" %}
<li>
<a class="button"{% space %}
rel="noopener noreferrer payment"{% space %}
href="https://liberapay.com/{%s ctx.processors.Liberapay %}/donate{% if ctx.amount > 0 %}?amount={%f.2 ctx.amount/100 %}&currency=USD&period=monthly{% endif %}">
{%= icon("liberapay") %}
Liberapay
</a>
</li>
<li>
<a class="button"{% space %}
rel="noopener noreferrer payment"{% space %}
href="https://www.paypal.me/toby3dKZ{% if ctx.amount > 0 %}/{%f.2 ctx.amount/100 %}USD{% endif %}">
{%= icon("liberapay") %}
Liberapay
</a>
</li>
{% endif %}
{% if ctx.processors.PayPal != "" %}
<li>
<a class="button"{% space %}
rel="noopener noreferrer payment"{% space %}
href="https://www.paypal.me/{%s ctx.processors.PayPal %}{% if ctx.amount > 0 %}/{%f.2 ctx.amount/100 %}USD{% endif %}">
{%= icon("paypal") %}
PayPal
</a>
</span>
</li>
{%= icon("paypal") %}
PayPal
</a>
</span>
</li>
{% endif %}
</ul>
{% endfunc %}

View File

@ -8,510 +8,534 @@ package template
import (
"golang.org/x/text/language"
"golang.org/x/text/message"
"source.toby3d.me/toby3d/pay/internal/domain"
)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
var (
_ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer
)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
type Page interface {
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
body() string
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
streambody(qw422016 *qt422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
writebody(qq422016 qtio422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
dir() string
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
streamdir(qw422016 *qt422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
writedir(qq422016 qtio422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
lang() string
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
streamlang(qw422016 *qt422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
writelang(qq422016 qtio422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
t(format message.Reference, v ...any) string
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
streamt(qw422016 *qt422016.Writer, format message.Reference, v ...any)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
writet(qq422016 qtio422016.Writer, format message.Reference, v ...any)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
title() string
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
streamtitle(qw422016 *qt422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
writetitle(qq422016 qtio422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
head() string
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
streamhead(qw422016 *qt422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
writehead(qq422016 qtio422016.Writer)
//line web/template/template.qtpl:8
//line web/template/template.qtpl:10
}
//line web/template/template.qtpl:18
//line web/template/template.qtpl:20
type Context struct {
language language.Tag
printer *message.Printer
amount float64
language language.Tag
printer *message.Printer
amount float64
processors domain.ConfigProcessors
}
func NewContext(lang language.Tag, amount uint64) *Context {
func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount uint64) *Context {
return &Context{
language: lang,
printer: message.NewPrinter(lang),
amount: float64(amount),
language: lang,
printer: message.NewPrinter(lang),
amount: float64(amount),
processors: processors,
}
}
//line web/template/template.qtpl:34
//line web/template/template.qtpl:38
func (ctx Context) streamhead(qw422016 *qt422016.Writer) {
//line web/template/template.qtpl:34
//line web/template/template.qtpl:38
qw422016.N().S(`<link rel="icon" href="/favicon.ico" sizes="32x32"><link rel="icon" href="/icon.svg" type="image/svg+xml"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="manifest" href="/manifest.webmanifest"><link rel="preload stylesheet"`)
//line web/template/template.qtpl:39
//line web/template/template.qtpl:43
qw422016.N().S(` `)
//line web/template/template.qtpl:39
//line web/template/template.qtpl:43
qw422016.N().S(`as="style"`)
//line web/template/template.qtpl:40
//line web/template/template.qtpl:44
qw422016.N().S(` `)
//line web/template/template.qtpl:40
//line web/template/template.qtpl:44
qw422016.N().S(`href="/styles.css"`)
//line web/template/template.qtpl:41
//line web/template/template.qtpl:45
qw422016.N().S(` `)
//line web/template/template.qtpl:41
//line web/template/template.qtpl:45
qw422016.N().S(`type="text/css"`)
//line web/template/template.qtpl:42
//line web/template/template.qtpl:46
qw422016.N().S(` `)
//line web/template/template.qtpl:42
//line web/template/template.qtpl:46
qw422016.N().S(`fetchpriority="high"`)
//line web/template/template.qtpl:43
//line web/template/template.qtpl:47
qw422016.N().S(` `)
//line web/template/template.qtpl:43
//line web/template/template.qtpl:47
qw422016.N().S(`referrerpolicy="no-referrer"`)
//line web/template/template.qtpl:44
//line web/template/template.qtpl:48
qw422016.N().S(` `)
//line web/template/template.qtpl:44
//line web/template/template.qtpl:48
qw422016.N().S(`crossorigin="anonymous">`)
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
}
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
func (ctx Context) writehead(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
ctx.streamhead(qw422016)
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
}
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
func (ctx Context) head() string {
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
ctx.writehead(qb422016)
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
return qs422016
//line web/template/template.qtpl:46
//line web/template/template.qtpl:50
}
//line web/template/template.qtpl:48
//line web/template/template.qtpl:52
func (ctx Context) streambody(qw422016 *qt422016.Writer) {
//line web/template/template.qtpl:48
//line web/template/template.qtpl:52
qw422016.N().S(`<h1>`)
//line web/template/template.qtpl:49
//line web/template/template.qtpl:53
ctx.streamtitle(qw422016)
//line web/template/template.qtpl:49
qw422016.N().S(`</h1><ul class="[ cluster ][ list-style-type:none padding-inline-start:unset ]"><li><a class="button"`)
//line web/template/template.qtpl:53
qw422016.N().S(` `)
//line web/template/template.qtpl:53
qw422016.N().S(`rel="noopener noreferrer payment"`)
//line web/template/template.qtpl:54
qw422016.N().S(` `)
//line web/template/template.qtpl:54
qw422016.N().S(`href="https://liberapay.com/toby3d/donate`)
//line web/template/template.qtpl:55
if ctx.amount > 0 {
//line web/template/template.qtpl:55
qw422016.N().S(`?amount=`)
//line web/template/template.qtpl:55
qw422016.N().FPrec(ctx.amount/100, 2)
//line web/template/template.qtpl:55
qw422016.N().S(`&currency=USD&period=monthly`)
//line web/template/template.qtpl:55
}
//line web/template/template.qtpl:55
qw422016.N().S(`">`)
//line web/template/template.qtpl:57
streamicon(qw422016, "liberapay")
//line web/template/template.qtpl:57
qw422016.N().S(`Liberapay</a></li><li><a class="button"`)
qw422016.N().S(`</h1><ul class="[ cluster ][ list-style-type:none padding-inline-start:unset ]">`)
//line web/template/template.qtpl:56
if ctx.processors.Liberapay != "" {
//line web/template/template.qtpl:56
qw422016.N().S(`<li><a class="button"`)
//line web/template/template.qtpl:58
qw422016.N().S(` `)
//line web/template/template.qtpl:58
qw422016.N().S(`rel="noopener noreferrer payment"`)
//line web/template/template.qtpl:59
qw422016.N().S(` `)
//line web/template/template.qtpl:59
qw422016.N().S(`href="https://liberapay.com/`)
//line web/template/template.qtpl:60
qw422016.E().S(ctx.processors.Liberapay)
//line web/template/template.qtpl:60
qw422016.N().S(`/donate`)
//line web/template/template.qtpl:60
if ctx.amount > 0 {
//line web/template/template.qtpl:60
qw422016.N().S(`?amount=`)
//line web/template/template.qtpl:60
qw422016.N().FPrec(ctx.amount/100, 2)
//line web/template/template.qtpl:60
qw422016.N().S(`&currency=USD&period=monthly`)
//line web/template/template.qtpl:60
}
//line web/template/template.qtpl:60
qw422016.N().S(`">`)
//line web/template/template.qtpl:62
qw422016.N().S(` `)
streamicon(qw422016, "liberapay")
//line web/template/template.qtpl:62
qw422016.N().S(`rel="noopener noreferrer payment"`)
//line web/template/template.qtpl:63
qw422016.N().S(` `)
//line web/template/template.qtpl:63
qw422016.N().S(`href="https://www.paypal.me/toby3dKZ`)
//line web/template/template.qtpl:64
if ctx.amount > 0 {
//line web/template/template.qtpl:64
qw422016.N().S(`/`)
//line web/template/template.qtpl:64
qw422016.N().FPrec(ctx.amount/100, 2)
//line web/template/template.qtpl:64
qw422016.N().S(`USD`)
//line web/template/template.qtpl:64
qw422016.N().S(`Liberapay</a></li>`)
//line web/template/template.qtpl:66
}
//line web/template/template.qtpl:64
qw422016.N().S(`">`)
//line web/template/template.qtpl:66
streamicon(qw422016, "paypal")
//line web/template/template.qtpl:66
qw422016.N().S(`PayPal</a></span></li></ul>`)
//line web/template/template.qtpl:72
}
//line web/template/template.qtpl:72
func (ctx Context) writebody(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:72
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:72
ctx.streambody(qw422016)
//line web/template/template.qtpl:72
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:72
}
//line web/template/template.qtpl:72
func (ctx Context) body() string {
//line web/template/template.qtpl:72
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:72
ctx.writebody(qb422016)
//line web/template/template.qtpl:72
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:72
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:72
return qs422016
//line web/template/template.qtpl:72
}
//line web/template/template.qtpl:74
func (ctx Context) streamdir(qw422016 *qt422016.Writer) {
//line web/template/template.qtpl:75
switch ctx.language {
//line web/template/template.qtpl:76
default:
//line web/template/template.qtpl:76
qw422016.N().S(`ltr`)
//line web/template/template.qtpl:67
if ctx.processors.PayPal != "" {
//line web/template/template.qtpl:67
qw422016.N().S(`<li><a class="button"`)
//line web/template/template.qtpl:69
qw422016.N().S(` `)
//line web/template/template.qtpl:69
qw422016.N().S(`rel="noopener noreferrer payment"`)
//line web/template/template.qtpl:70
qw422016.N().S(` `)
//line web/template/template.qtpl:70
qw422016.N().S(`href="https://www.paypal.me/`)
//line web/template/template.qtpl:71
qw422016.E().S(ctx.processors.PayPal)
//line web/template/template.qtpl:71
if ctx.amount > 0 {
//line web/template/template.qtpl:71
qw422016.N().S(`/`)
//line web/template/template.qtpl:71
qw422016.N().FPrec(ctx.amount/100, 2)
//line web/template/template.qtpl:71
qw422016.N().S(`USD`)
//line web/template/template.qtpl:71
}
//line web/template/template.qtpl:71
qw422016.N().S(`">`)
//line web/template/template.qtpl:73
streamicon(qw422016, "paypal")
//line web/template/template.qtpl:73
qw422016.N().S(`PayPal</a></span></li>`)
//line web/template/template.qtpl:78
case language.Arabic, language.Persian, language.Hebrew, language.Urdu:
}
//line web/template/template.qtpl:78
qw422016.N().S(`rtl`)
qw422016.N().S(`</ul>`)
//line web/template/template.qtpl:80
}
//line web/template/template.qtpl:81
}
//line web/template/template.qtpl:81
func (ctx Context) writedir(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
func (ctx Context) writebody(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:80
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:81
ctx.streamdir(qw422016)
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
ctx.streambody(qw422016)
//line web/template/template.qtpl:80
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
}
//line web/template/template.qtpl:81
func (ctx Context) dir() string {
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
func (ctx Context) body() string {
//line web/template/template.qtpl:80
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:81
ctx.writedir(qb422016)
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
ctx.writebody(qb422016)
//line web/template/template.qtpl:80
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
return qs422016
//line web/template/template.qtpl:81
//line web/template/template.qtpl:80
}
//line web/template/template.qtpl:82
func (ctx Context) streamdir(qw422016 *qt422016.Writer) {
//line web/template/template.qtpl:83
func (ctx Context) streamlang(qw422016 *qt422016.Writer) {
switch ctx.language {
//line web/template/template.qtpl:84
default:
//line web/template/template.qtpl:84
qw422016.N().S(`ltr`)
//line web/template/template.qtpl:86
case language.Arabic, language.Persian, language.Hebrew, language.Urdu:
//line web/template/template.qtpl:86
qw422016.N().S(`rtl`)
//line web/template/template.qtpl:88
}
//line web/template/template.qtpl:89
}
//line web/template/template.qtpl:89
func (ctx Context) writedir(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:89
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:89
ctx.streamdir(qw422016)
//line web/template/template.qtpl:89
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:89
}
//line web/template/template.qtpl:89
func (ctx Context) dir() string {
//line web/template/template.qtpl:89
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:89
ctx.writedir(qb422016)
//line web/template/template.qtpl:89
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:89
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:89
return qs422016
//line web/template/template.qtpl:89
}
//line web/template/template.qtpl:91
func (ctx Context) streamlang(qw422016 *qt422016.Writer) {
//line web/template/template.qtpl:92
base, _ := ctx.language.Base()
//line web/template/template.qtpl:85
qw422016.E().S(base.String())
//line web/template/template.qtpl:86
}
//line web/template/template.qtpl:86
func (ctx Context) writelang(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:86
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:86
ctx.streamlang(qw422016)
//line web/template/template.qtpl:86
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:86
}
//line web/template/template.qtpl:86
func (ctx Context) lang() string {
//line web/template/template.qtpl:86
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:86
ctx.writelang(qb422016)
//line web/template/template.qtpl:86
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:86
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:86
return qs422016
//line web/template/template.qtpl:86
}
//line web/template/template.qtpl:88
func (ctx Context) streamt(qw422016 *qt422016.Writer, format message.Reference, v ...any) {
//line web/template/template.qtpl:89
qw422016.E().S(ctx.printer.Sprintf(format, v...))
//line web/template/template.qtpl:90
}
//line web/template/template.qtpl:90
func (ctx Context) writet(qq422016 qtio422016.Writer, format message.Reference, v ...any) {
//line web/template/template.qtpl:90
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:90
ctx.streamt(qw422016, format, v...)
//line web/template/template.qtpl:90
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:90
}
//line web/template/template.qtpl:90
func (ctx Context) t(format message.Reference, v ...any) string {
//line web/template/template.qtpl:90
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:90
ctx.writet(qb422016, format, v...)
//line web/template/template.qtpl:90
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:90
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:90
return qs422016
//line web/template/template.qtpl:90
}
//line web/template/template.qtpl:92
func (ctx Context) streamtitle(qw422016 *qt422016.Writer) {
//line web/template/template.qtpl:93
qw422016.E().S(base.String())
//line web/template/template.qtpl:94
}
//line web/template/template.qtpl:94
func (ctx Context) writelang(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:94
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:94
ctx.streamlang(qw422016)
//line web/template/template.qtpl:94
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:94
}
//line web/template/template.qtpl:94
func (ctx Context) lang() string {
//line web/template/template.qtpl:94
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:94
ctx.writelang(qb422016)
//line web/template/template.qtpl:94
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:94
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:94
return qs422016
//line web/template/template.qtpl:94
}
//line web/template/template.qtpl:96
func (ctx Context) streamt(qw422016 *qt422016.Writer, format message.Reference, v ...any) {
//line web/template/template.qtpl:97
qw422016.E().S(ctx.printer.Sprintf(format, v...))
//line web/template/template.qtpl:98
}
//line web/template/template.qtpl:98
func (ctx Context) writet(qq422016 qtio422016.Writer, format message.Reference, v ...any) {
//line web/template/template.qtpl:98
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:98
ctx.streamt(qw422016, format, v...)
//line web/template/template.qtpl:98
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:98
}
//line web/template/template.qtpl:98
func (ctx Context) t(format message.Reference, v ...any) string {
//line web/template/template.qtpl:98
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:98
ctx.writet(qb422016, format, v...)
//line web/template/template.qtpl:98
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:98
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:98
return qs422016
//line web/template/template.qtpl:98
}
//line web/template/template.qtpl:100
func (ctx Context) streamtitle(qw422016 *qt422016.Writer) {
//line web/template/template.qtpl:101
ctx.streamt(qw422016, `Donate $%.2f to %s`, ctx.amount/100, "toby3d")
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
}
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
func (ctx Context) writetitle(qq422016 qtio422016.Writer) {
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
ctx.streamtitle(qw422016)
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
}
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
func (ctx Context) title() string {
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
ctx.writetitle(qb422016)
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
return qs422016
//line web/template/template.qtpl:94
//line web/template/template.qtpl:102
}
//line web/template/template.qtpl:96
//line web/template/template.qtpl:104
func StreamTemplate(qw422016 *qt422016.Writer, p Page) {
//line web/template/template.qtpl:96
//line web/template/template.qtpl:104
qw422016.N().S(`<!DOCTYPE html><html lang="`)
//line web/template/template.qtpl:98
//line web/template/template.qtpl:106
p.streamlang(qw422016)
//line web/template/template.qtpl:98
//line web/template/template.qtpl:106
qw422016.N().S(`" dir="`)
//line web/template/template.qtpl:98
//line web/template/template.qtpl:106
p.streamdir(qw422016)
//line web/template/template.qtpl:98
//line web/template/template.qtpl:106
qw422016.N().S(`"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>`)
//line web/template/template.qtpl:102
//line web/template/template.qtpl:110
p.streamtitle(qw422016)
//line web/template/template.qtpl:102
//line web/template/template.qtpl:110
qw422016.N().S(`</title>`)
//line web/template/template.qtpl:103
p.streamhead(qw422016)
//line web/template/template.qtpl:103
qw422016.N().S(`</head><body>`)
//line web/template/template.qtpl:106
p.streambody(qw422016)
//line web/template/template.qtpl:106
qw422016.N().S(`</body></html>`)
//line web/template/template.qtpl:109
}
//line web/template/template.qtpl:109
func WriteTemplate(qq422016 qtio422016.Writer, p Page) {
//line web/template/template.qtpl:109
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:109
StreamTemplate(qw422016, p)
//line web/template/template.qtpl:109
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:109
}
//line web/template/template.qtpl:109
func Template(p Page) string {
//line web/template/template.qtpl:109
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:109
WriteTemplate(qb422016, p)
//line web/template/template.qtpl:109
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:109
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:109
return qs422016
//line web/template/template.qtpl:109
}
//line web/template/template.qtpl:111
func streamicon(qw422016 *qt422016.Writer, id string) {
//line web/template/template.qtpl:112
switch id {
//line web/template/template.qtpl:113
case "liberapay":
//line web/template/template.qtpl:113
qw422016.N().S(`<svg class="icon"`)
p.streamhead(qw422016)
//line web/template/template.qtpl:111
qw422016.N().S(`</head><body>`)
//line web/template/template.qtpl:114
qw422016.N().S(` `)
p.streambody(qw422016)
//line web/template/template.qtpl:114
qw422016.N().S(`width="32"`)
//line web/template/template.qtpl:115
qw422016.N().S(` `)
//line web/template/template.qtpl:115
qw422016.N().S(`height="32"`)
//line web/template/template.qtpl:116
qw422016.N().S(` `)
//line web/template/template.qtpl:116
qw422016.N().S(`viewBox="0 0 80 80"`)
qw422016.N().S(`</body></html>`)
//line web/template/template.qtpl:117
qw422016.N().S(` `)
//line web/template/template.qtpl:117
qw422016.N().S(`aria-hidden="true"`)
//line web/template/template.qtpl:118
qw422016.N().S(` `)
//line web/template/template.qtpl:118
qw422016.N().S(`focusable="false"`)
//line web/template/template.qtpl:119
qw422016.N().S(` `)
//line web/template/template.qtpl:119
qw422016.N().S(`xmlns="http://www.w3.org/2000/svg"><path fill="#1a171b" d="M25.91 63.04c-3.57 0-6.37-.47-8.41-1.4a9.03 9.03 0 0 1-4.38-3.8 11.15 11.15 0 0 1-1.28-5.55c.03-2.08.32-4.31.87-6.67L22.3 5.57l11.69-1.81L23.5 47.2c-.2.9-.32 1.73-.34 2.49-.03.75.11 1.42.41 2 .3.57.82 1.04 1.55 1.39a8.7 8.7 0 0 0 3.05.68l-2.26 9.28m42.24-24.96c0 3.67-.6 7.03-1.81 10.07a23.94 23.94 0 0 1-5.01 7.88 22.43 22.43 0 0 1-7.7 5.17 25.4 25.4 0 0 1-9.76 1.85c-1.71 0-3.42-.16-5.13-.46l-3.4 13.65H24.19L36.7 24.05a67.6 67.6 0 0 1 6.9-1.62c2.6-.48 5.4-.71 8.42-.71 2.81 0 5.24.42 7.27 1.28a13.6 13.6 0 0 1 5.02 3.5 14.32 14.32 0 0 1 2.9 5.21c.63 1.99.95 4.11.95 6.37M40.78 53.54c.85.2 1.91.3 3.17.3 1.96 0 3.74-.36 5.35-1.09a11.8 11.8 0 0 0 4.11-3.05 14.1 14.1 0 0 0 2.64-4.72c.63-1.83.95-3.86.95-6.07 0-2.16-.48-4-1.44-5.5-.95-1.51-2.61-2.27-4.97-2.27-1.61 0-3.12.15-4.53.46l-5.28 21.94" /></svg>`)
//line web/template/template.qtpl:124
case "paypal":
//line web/template/template.qtpl:124
qw422016.N().S(`<svg class="icon"`)
//line web/template/template.qtpl:125
qw422016.N().S(` `)
//line web/template/template.qtpl:125
qw422016.N().S(`width="32"`)
//line web/template/template.qtpl:126
qw422016.N().S(` `)
//line web/template/template.qtpl:126
qw422016.N().S(`height="32"`)
//line web/template/template.qtpl:127
qw422016.N().S(` `)
//line web/template/template.qtpl:127
qw422016.N().S(`viewBox="0 0 154.7 190.5"`)
//line web/template/template.qtpl:128
qw422016.N().S(` `)
//line web/template/template.qtpl:128
qw422016.N().S(`aria-hidden="true"`)
//line web/template/template.qtpl:129
qw422016.N().S(` `)
//line web/template/template.qtpl:129
qw422016.N().S(`focusable="false"`)
//line web/template/template.qtpl:130
qw422016.N().S(` `)
//line web/template/template.qtpl:130
qw422016.N().S(`xmlns="http://www.w3.org/2000/svg">`)
//line web/template/template.qtpl:133
qw422016.N().S(`<path fill="#003087" d="M28 0a5.5 5.5 0 0 0-5.5 4.6L.1 147.2a4.5 4.5 0 0 0 4.4 5.2h33.3l8.3-52.5 9-57.2a5.5 5.5 0 0 1 5.4-4.6h47.8c8.7 0 16.6 2 23.4 5.6C132 19.7 112.4 0 85.3 0z" />`)
//line web/template/template.qtpl:135
qw422016.N().S(`<path fill="#001c64" d="M60.5 38.1a5.5 5.5 0 0 0-5.4 4.6l-9 57.2-8.3 52.5 8.3-52.5a5.5 5.5 0 0 1 5.4-4.6H78a54 54 0 0 0 53.8-51.6 50 50 0 0 0-23.4-5.6z" />`)
//line web/template/template.qtpl:137
qw422016.N().S(`<path fill="#0070e0" d="M131.7 43.7a54 54 0 0 1-53.8 51.6H51.5c-2.7 0-5 2-5.4 4.6l-8.3 52.5-5.2 33a4.5 4.5 0 0 0 4.4 5.1h28.7a5.5 5.5 0 0 0 5.4-4.6l7.6-48a5.5 5.5 0 0 1 5.4-4.5H101a54 54 0 0 0 53.2-45.7c3-18.7-6.5-35.6-22.5-44z" /></svg>`)
//line web/template/template.qtpl:140
}
//line web/template/template.qtpl:141
}
//line web/template/template.qtpl:141
func writeicon(qq422016 qtio422016.Writer, id string) {
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
func WriteTemplate(qq422016 qtio422016.Writer, p Page) {
//line web/template/template.qtpl:117
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:141
streamicon(qw422016, id)
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
StreamTemplate(qw422016, p)
//line web/template/template.qtpl:117
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
}
//line web/template/template.qtpl:141
func icon(id string) string {
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
func Template(p Page) string {
//line web/template/template.qtpl:117
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:141
writeicon(qb422016, id)
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
WriteTemplate(qb422016, p)
//line web/template/template.qtpl:117
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
return qs422016
//line web/template/template.qtpl:141
//line web/template/template.qtpl:117
}
//line web/template/template.qtpl:119
func streamicon(qw422016 *qt422016.Writer, id string) {
//line web/template/template.qtpl:120
switch id {
//line web/template/template.qtpl:121
case "liberapay":
//line web/template/template.qtpl:121
qw422016.N().S(`<svg class="icon"`)
//line web/template/template.qtpl:122
qw422016.N().S(` `)
//line web/template/template.qtpl:122
qw422016.N().S(`width="32"`)
//line web/template/template.qtpl:123
qw422016.N().S(` `)
//line web/template/template.qtpl:123
qw422016.N().S(`height="32"`)
//line web/template/template.qtpl:124
qw422016.N().S(` `)
//line web/template/template.qtpl:124
qw422016.N().S(`viewBox="0 0 80 80"`)
//line web/template/template.qtpl:125
qw422016.N().S(` `)
//line web/template/template.qtpl:125
qw422016.N().S(`aria-hidden="true"`)
//line web/template/template.qtpl:126
qw422016.N().S(` `)
//line web/template/template.qtpl:126
qw422016.N().S(`focusable="false"`)
//line web/template/template.qtpl:127
qw422016.N().S(` `)
//line web/template/template.qtpl:127
qw422016.N().S(`xmlns="http://www.w3.org/2000/svg"><path fill="#1a171b" d="M25.91 63.04c-3.57 0-6.37-.47-8.41-1.4a9.03 9.03 0 0 1-4.38-3.8 11.15 11.15 0 0 1-1.28-5.55c.03-2.08.32-4.31.87-6.67L22.3 5.57l11.69-1.81L23.5 47.2c-.2.9-.32 1.73-.34 2.49-.03.75.11 1.42.41 2 .3.57.82 1.04 1.55 1.39a8.7 8.7 0 0 0 3.05.68l-2.26 9.28m42.24-24.96c0 3.67-.6 7.03-1.81 10.07a23.94 23.94 0 0 1-5.01 7.88 22.43 22.43 0 0 1-7.7 5.17 25.4 25.4 0 0 1-9.76 1.85c-1.71 0-3.42-.16-5.13-.46l-3.4 13.65H24.19L36.7 24.05a67.6 67.6 0 0 1 6.9-1.62c2.6-.48 5.4-.71 8.42-.71 2.81 0 5.24.42 7.27 1.28a13.6 13.6 0 0 1 5.02 3.5 14.32 14.32 0 0 1 2.9 5.21c.63 1.99.95 4.11.95 6.37M40.78 53.54c.85.2 1.91.3 3.17.3 1.96 0 3.74-.36 5.35-1.09a11.8 11.8 0 0 0 4.11-3.05 14.1 14.1 0 0 0 2.64-4.72c.63-1.83.95-3.86.95-6.07 0-2.16-.48-4-1.44-5.5-.95-1.51-2.61-2.27-4.97-2.27-1.61 0-3.12.15-4.53.46l-5.28 21.94" /></svg>`)
//line web/template/template.qtpl:132
case "paypal":
//line web/template/template.qtpl:132
qw422016.N().S(`<svg class="icon"`)
//line web/template/template.qtpl:133
qw422016.N().S(` `)
//line web/template/template.qtpl:133
qw422016.N().S(`width="32"`)
//line web/template/template.qtpl:134
qw422016.N().S(` `)
//line web/template/template.qtpl:134
qw422016.N().S(`height="32"`)
//line web/template/template.qtpl:135
qw422016.N().S(` `)
//line web/template/template.qtpl:135
qw422016.N().S(`viewBox="0 0 154.7 190.5"`)
//line web/template/template.qtpl:136
qw422016.N().S(` `)
//line web/template/template.qtpl:136
qw422016.N().S(`aria-hidden="true"`)
//line web/template/template.qtpl:137
qw422016.N().S(` `)
//line web/template/template.qtpl:137
qw422016.N().S(`focusable="false"`)
//line web/template/template.qtpl:138
qw422016.N().S(` `)
//line web/template/template.qtpl:138
qw422016.N().S(`xmlns="http://www.w3.org/2000/svg">`)
//line web/template/template.qtpl:141
qw422016.N().S(`<path fill="#003087" d="M28 0a5.5 5.5 0 0 0-5.5 4.6L.1 147.2a4.5 4.5 0 0 0 4.4 5.2h33.3l8.3-52.5 9-57.2a5.5 5.5 0 0 1 5.4-4.6h47.8c8.7 0 16.6 2 23.4 5.6C132 19.7 112.4 0 85.3 0z" />`)
//line web/template/template.qtpl:143
qw422016.N().S(`<path fill="#001c64" d="M60.5 38.1a5.5 5.5 0 0 0-5.4 4.6l-9 57.2-8.3 52.5 8.3-52.5a5.5 5.5 0 0 1 5.4-4.6H78a54 54 0 0 0 53.8-51.6 50 50 0 0 0-23.4-5.6z" />`)
//line web/template/template.qtpl:145
qw422016.N().S(`<path fill="#0070e0" d="M131.7 43.7a54 54 0 0 1-53.8 51.6H51.5c-2.7 0-5 2-5.4 4.6l-8.3 52.5-5.2 33a4.5 4.5 0 0 0 4.4 5.1h28.7a5.5 5.5 0 0 0 5.4-4.6l7.6-48a5.5 5.5 0 0 1 5.4-4.5H101a54 54 0 0 0 53.2-45.7c3-18.7-6.5-35.6-22.5-44z" /></svg>`)
//line web/template/template.qtpl:148
}
//line web/template/template.qtpl:149
}
//line web/template/template.qtpl:149
func writeicon(qq422016 qtio422016.Writer, id string) {
//line web/template/template.qtpl:149
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/template.qtpl:149
streamicon(qw422016, id)
//line web/template/template.qtpl:149
qt422016.ReleaseWriter(qw422016)
//line web/template/template.qtpl:149
}
//line web/template/template.qtpl:149
func icon(id string) string {
//line web/template/template.qtpl:149
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/template.qtpl:149
writeicon(qb422016, id)
//line web/template/template.qtpl:149
qs422016 := string(qb422016.B)
//line web/template/template.qtpl:149
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/template.qtpl:149
return qs422016
//line web/template/template.qtpl:149
}