diff --git a/internal/domain/config.go b/internal/domain/config.go
index 6222d83..926d13c 100644
--- a/internal/domain/config.go
+++ b/internal/domain/config.go
@@ -17,5 +17,6 @@ type (
YooMoney string `env:"YOOMONEY"`
Kofi string `env:"KOFI"`
DonationAlerts string `env:"DONATION_ALERTS"`
+ BuyMeACoffee string `env:"BUY_ME_A_COFFEE"`
}
)
diff --git a/web/static/styles.css b/web/static/styles.css
index 1afc7ea..8cb09a3 100644
--- a/web/static/styles.css
+++ b/web/static/styles.css
@@ -111,6 +111,12 @@ button[href*='donationalerts.com'] {
--color: hsl(0, 0%, 95%);
}
+.button[href*='buymeacoffee.com'],
+button[href*='buymeacoffee.com'] {
+ --background: hsl(52, 100%, 50%);
+ --color: hsl(243, 49%, 9%);
+}
+
.with-icon .icon,
.button .icon,
.button svg,
diff --git a/web/template/template.qtpl b/web/template/template.qtpl
index ca40f0b..22124a8 100644
--- a/web/template/template.qtpl
+++ b/web/template/template.qtpl
@@ -171,6 +171,21 @@ func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount ui
{% endif %}
+ {% if ctx.processors.BuyMeACoffee != "" %}
+
+
+
+ {%= icon("bmc") %}
+ Buy me a coffee
+
+
+ {% endif %}
{% endfunc %}
@@ -293,6 +308,20 @@ func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount ui
+ {% case "bmc" %}
+
{% endswitch %}
{% endfunc %}
{% endstripspace %}
diff --git a/web/template/template.qtpl.go b/web/template/template.qtpl.go
index 45f9bb8..ba5d7a8 100644
--- a/web/template/template.qtpl.go
+++ b/web/template/template.qtpl.go
@@ -484,412 +484,482 @@ func (ctx Context) streambody(qw422016 *qt422016.Writer) {
qw422016.N().S(`DonationAlerts`)
//line web/template/template.qtpl:173
}
-//line web/template/template.qtpl:173
- qw422016.N().S(``)
-//line web/template/template.qtpl:175
-}
-
-//line web/template/template.qtpl:175
-func (ctx Context) writebody(qq422016 qtio422016.Writer) {
-//line web/template/template.qtpl:175
- qw422016 := qt422016.AcquireWriter(qq422016)
-//line web/template/template.qtpl:175
- ctx.streambody(qw422016)
-//line web/template/template.qtpl:175
- qt422016.ReleaseWriter(qw422016)
-//line web/template/template.qtpl:175
-}
-
-//line web/template/template.qtpl:175
-func (ctx Context) body() string {
-//line web/template/template.qtpl:175
- qb422016 := qt422016.AcquireByteBuffer()
-//line web/template/template.qtpl:175
- ctx.writebody(qb422016)
-//line web/template/template.qtpl:175
- qs422016 := string(qb422016.B)
-//line web/template/template.qtpl:175
- qt422016.ReleaseByteBuffer(qb422016)
-//line web/template/template.qtpl:175
- return qs422016
-//line web/template/template.qtpl:175
-}
-
+//line web/template/template.qtpl:174
+ if ctx.processors.BuyMeACoffee != "" {
+//line web/template/template.qtpl:174
+ qw422016.N().S(``)
+//line web/template/template.qtpl:184
+ streamicon(qw422016, "bmc")
+//line web/template/template.qtpl:184
+ qw422016.N().S(`Buy me a coffee`)
+//line web/template/template.qtpl:188
}
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:188
+ qw422016.N().S(``)
+//line web/template/template.qtpl:190
}
-//line web/template/template.qtpl:184
-func (ctx Context) writedir(qq422016 qtio422016.Writer) {
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
+func (ctx Context) writebody(qq422016 qtio422016.Writer) {
+//line web/template/template.qtpl:190
qw422016 := qt422016.AcquireWriter(qq422016)
-//line web/template/template.qtpl:184
- ctx.streamdir(qw422016)
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
+ ctx.streambody(qw422016)
+//line web/template/template.qtpl:190
qt422016.ReleaseWriter(qw422016)
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
}
-//line web/template/template.qtpl:184
-func (ctx Context) dir() string {
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
+func (ctx Context) body() string {
+//line web/template/template.qtpl:190
qb422016 := qt422016.AcquireByteBuffer()
-//line web/template/template.qtpl:184
- ctx.writedir(qb422016)
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
+ ctx.writebody(qb422016)
+//line web/template/template.qtpl:190
qs422016 := string(qb422016.B)
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
qt422016.ReleaseByteBuffer(qb422016)
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
return qs422016
-//line web/template/template.qtpl:184
+//line web/template/template.qtpl:190
}
-//line web/template/template.qtpl:186
+//line web/template/template.qtpl:192
+func (ctx Context) streamdir(qw422016 *qt422016.Writer) {
+//line web/template/template.qtpl:193
+ switch ctx.language {
+//line web/template/template.qtpl:194
+ default:
+//line web/template/template.qtpl:194
+ qw422016.N().S(`ltr`)
+//line web/template/template.qtpl:196
+ case language.Arabic, language.Persian, language.Hebrew, language.Urdu:
+//line web/template/template.qtpl:196
+ qw422016.N().S(`rtl`)
+//line web/template/template.qtpl:198
+ }
+//line web/template/template.qtpl:199
+}
+
+//line web/template/template.qtpl:199
+func (ctx Context) writedir(qq422016 qtio422016.Writer) {
+//line web/template/template.qtpl:199
+ qw422016 := qt422016.AcquireWriter(qq422016)
+//line web/template/template.qtpl:199
+ ctx.streamdir(qw422016)
+//line web/template/template.qtpl:199
+ qt422016.ReleaseWriter(qw422016)
+//line web/template/template.qtpl:199
+}
+
+//line web/template/template.qtpl:199
+func (ctx Context) dir() string {
+//line web/template/template.qtpl:199
+ qb422016 := qt422016.AcquireByteBuffer()
+//line web/template/template.qtpl:199
+ ctx.writedir(qb422016)
+//line web/template/template.qtpl:199
+ qs422016 := string(qb422016.B)
+//line web/template/template.qtpl:199
+ qt422016.ReleaseByteBuffer(qb422016)
+//line web/template/template.qtpl:199
+ return qs422016
+//line web/template/template.qtpl:199
+}
+
+//line web/template/template.qtpl:201
func (ctx Context) streamlang(qw422016 *qt422016.Writer) {
-//line web/template/template.qtpl:187
+//line web/template/template.qtpl:202
base, _ := ctx.language.Base()
-//line web/template/template.qtpl:188
+//line web/template/template.qtpl:203
qw422016.E().S(base.String())
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
}
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
func (ctx Context) writelang(qq422016 qtio422016.Writer) {
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
qw422016 := qt422016.AcquireWriter(qq422016)
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
ctx.streamlang(qw422016)
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
qt422016.ReleaseWriter(qw422016)
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
}
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
func (ctx Context) lang() string {
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
qb422016 := qt422016.AcquireByteBuffer()
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
ctx.writelang(qb422016)
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
qs422016 := string(qb422016.B)
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
qt422016.ReleaseByteBuffer(qb422016)
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
return qs422016
-//line web/template/template.qtpl:189
+//line web/template/template.qtpl:204
}
-//line web/template/template.qtpl:191
+//line web/template/template.qtpl:206
func (ctx Context) streamt(qw422016 *qt422016.Writer, format message.Reference, v ...any) {
-//line web/template/template.qtpl:192
+//line web/template/template.qtpl:207
qw422016.E().S(ctx.printer.Sprintf(format, v...))
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
}
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
func (ctx Context) writet(qq422016 qtio422016.Writer, format message.Reference, v ...any) {
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
qw422016 := qt422016.AcquireWriter(qq422016)
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
ctx.streamt(qw422016, format, v...)
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
qt422016.ReleaseWriter(qw422016)
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
}
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
func (ctx Context) t(format message.Reference, v ...any) string {
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
qb422016 := qt422016.AcquireByteBuffer()
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
ctx.writet(qb422016, format, v...)
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
qs422016 := string(qb422016.B)
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
qt422016.ReleaseByteBuffer(qb422016)
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
return qs422016
-//line web/template/template.qtpl:193
+//line web/template/template.qtpl:208
}
-//line web/template/template.qtpl:195
+//line web/template/template.qtpl:210
func (ctx Context) streamtitle(qw422016 *qt422016.Writer) {
-//line web/template/template.qtpl:195
+//line web/template/template.qtpl:210
qw422016.N().S(`NotDotPay`)
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
}
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
func (ctx Context) writetitle(qq422016 qtio422016.Writer) {
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
qw422016 := qt422016.AcquireWriter(qq422016)
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
ctx.streamtitle(qw422016)
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
qt422016.ReleaseWriter(qw422016)
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
}
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
func (ctx Context) title() string {
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
qb422016 := qt422016.AcquireByteBuffer()
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
ctx.writetitle(qb422016)
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
qs422016 := string(qb422016.B)
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
qt422016.ReleaseByteBuffer(qb422016)
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
return qs422016
-//line web/template/template.qtpl:197
+//line web/template/template.qtpl:212
}
-//line web/template/template.qtpl:199
+//line web/template/template.qtpl:214
func StreamTemplate(qw422016 *qt422016.Writer, p Page) {
-//line web/template/template.qtpl:199
+//line web/template/template.qtpl:214
qw422016.N().S(`NotDotPay`)
-//line web/template/template.qtpl:209
- p.streamhead(qw422016)
-//line web/template/template.qtpl:209
- qw422016.N().S(``)
-//line web/template/template.qtpl:213
- p.streambody(qw422016)
-//line web/template/template.qtpl:213
- qw422016.N().S(``)
-//line web/template/template.qtpl:221
-}
-
-//line web/template/template.qtpl:221
-func WriteTemplate(qq422016 qtio422016.Writer, p Page) {
-//line web/template/template.qtpl:221
- qw422016 := qt422016.AcquireWriter(qq422016)
-//line web/template/template.qtpl:221
- StreamTemplate(qw422016, p)
-//line web/template/template.qtpl:221
- qt422016.ReleaseWriter(qw422016)
-//line web/template/template.qtpl:221
-}
-
-//line web/template/template.qtpl:221
-func Template(p Page) string {
-//line web/template/template.qtpl:221
- qb422016 := qt422016.AcquireByteBuffer()
-//line web/template/template.qtpl:221
- WriteTemplate(qb422016, p)
-//line web/template/template.qtpl:221
- qs422016 := string(qb422016.B)
-//line web/template/template.qtpl:221
- qt422016.ReleaseByteBuffer(qb422016)
-//line web/template/template.qtpl:221
- return qs422016
-//line web/template/template.qtpl:221
-}
-
-//line web/template/template.qtpl:223
-func streamicon(qw422016 *qt422016.Writer, id string) {
//line web/template/template.qtpl:224
- switch id {
-//line web/template/template.qtpl:225
- case "liberapay":
-//line web/template/template.qtpl:225
- qw422016.N().S(``)
+ qw422016.N().S(`