diff --git a/internal/domain/config.go b/internal/domain/config.go index 0bea79f..6222d83 100644 --- a/internal/domain/config.go +++ b/internal/domain/config.go @@ -12,9 +12,10 @@ type ( } ConfigProcessors struct { - PayPal string `env:"PAYPAL"` - Liberapay string `env:"LIBERAPAY"` - YooMoney string `env:"YOOMONEY"` - Kofi string `env:"KOFI"` + PayPal string `env:"PAYPAL"` + Liberapay string `env:"LIBERAPAY"` + YooMoney string `env:"YOOMONEY"` + Kofi string `env:"KOFI"` + DonationAlerts string `env:"DONATION_ALERTS"` } ) diff --git a/web/static/scripts.js b/web/static/scripts.js index 2cb2347..dfe57a4 100644 --- a/web/static/scripts.js +++ b/web/static/scripts.js @@ -41,8 +41,9 @@ async function updateButtons() { let inAmount = (!el.dataset.amountMin || el.dataset.amountMin <= form.amount) && (!el.dataset.amountMax || form.amount <= +el.dataset.amountMax); let inPeriod = (!el.dataset.periodMin || +el.dataset.periodMin <= form.period) && - (!el.dataset.periodMax || form.period <= +el.dataset.periodMax); - let inRegion = Boolean(el.dataset.inRussia) == form.inRussia; + (!el.dataset.periodMax || form.period <= +el.dataset.periodMax) && + (!el.dataset.periodExcept || form.period != +el.dataset.periodExcept); + let inRegion = !el.dataset.inRussia || (el.dataset.inRussia == 'true') == form.inRussia; if (form.amount == 0.0 || inAmount && inPeriod && inRegion) { el.href = el.dataset.pattern. diff --git a/web/static/styles.css b/web/static/styles.css index 43482fd..1afc7ea 100644 --- a/web/static/styles.css +++ b/web/static/styles.css @@ -105,6 +105,12 @@ button[href*='ko-fi.com'] { --color: hsl(0, 0%, 100%); } +.button[href*='donationalerts.com'], +button[href*='donationalerts.com'] { + --background: hsl(30, 94%, 49%); + --color: hsl(0, 0%, 95%); +} + .with-icon .icon, .button .icon, .button svg, diff --git a/web/template/template.qtpl b/web/template/template.qtpl index 0a1214b..9cf3401 100644 --- a/web/template/template.qtpl +++ b/web/template/template.qtpl @@ -101,6 +101,7 @@ func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount ui @@ -114,6 +115,7 @@ func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount ui
  • @@ -144,6 +146,8 @@ func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount ui @@ -153,6 +157,20 @@ func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount ui
  • {% endif %} + {% if ctx.processors.DonationAlerts != "" %} +
  • + + + {%= icon("da") %} + DonationAlerts + +
  • + {% endif %} {% endfunc %} @@ -264,6 +282,17 @@ func NewContext(processors domain.ConfigProcessors, lang language.Tag, amount ui + {% case "da" %} + {% endswitch %} {% endfunc %} {% endstripspace %} diff --git a/web/template/template.qtpl.go b/web/template/template.qtpl.go index d6acd6f..649043a 100644 --- a/web/template/template.qtpl.go +++ b/web/template/template.qtpl.go @@ -251,563 +251,645 @@ func (ctx Context) streambody(qw422016 *qt422016.Writer) { //line web/template/template.qtpl:103 qw422016.N().S(` `) //line web/template/template.qtpl:103 + qw422016.N().S(`data-in-russia="false"`) +//line web/template/template.qtpl:104 + qw422016.N().S(` `) +//line web/template/template.qtpl:104 qw422016.N().S(`data-pattern="https://liberapay.com/`) -//line web/template/template.qtpl:104 +//line web/template/template.qtpl:105 qw422016.E().S(ctx.processors.Liberapay) -//line web/template/template.qtpl:104 +//line web/template/template.qtpl:105 qw422016.N().S(`/donate?amount=%f¤cy=USD&period=%p"`) -//line web/template/template.qtpl:104 +//line web/template/template.qtpl:105 qw422016.N().S(` `) -//line web/template/template.qtpl:104 +//line web/template/template.qtpl:105 qw422016.N().S(`rel="noopener noreferrer payment"`) -//line web/template/template.qtpl:105 +//line web/template/template.qtpl:106 qw422016.N().S(` `) -//line web/template/template.qtpl:105 +//line web/template/template.qtpl:106 qw422016.N().S(`href="https://liberapay.com/`) -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 qw422016.E().S(ctx.processors.Liberapay) -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 qw422016.N().S(`/donate`) -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 if ctx.amount > 0 { -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 qw422016.N().S(`?amount=`) -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 qw422016.N().FPrec(float64(ctx.amount)/100, 2) -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 qw422016.N().S(`¤cy=USD&period=monthly`) -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 } -//line web/template/template.qtpl:106 +//line web/template/template.qtpl:107 qw422016.N().S(`">`) -//line web/template/template.qtpl:108 +//line web/template/template.qtpl:109 streamicon(qw422016, "liberapay") -//line web/template/template.qtpl:108 +//line web/template/template.qtpl:109 qw422016.N().S(`Liberapay`) -//line web/template/template.qtpl:112 - } //line web/template/template.qtpl:113 + } +//line web/template/template.qtpl:114 if ctx.processors.PayPal != "" { -//line web/template/template.qtpl:113 +//line web/template/template.qtpl:114 qw422016.N().S(`
  • `) //line web/template/template.qtpl:121 + } +//line web/template/template.qtpl:121 + qw422016.N().S(`">`) +//line web/template/template.qtpl:123 streamicon(qw422016, "paypal") -//line web/template/template.qtpl:121 +//line web/template/template.qtpl:123 qw422016.N().S(`PayPal
  • `) -//line web/template/template.qtpl:125 +//line web/template/template.qtpl:127 } -//line web/template/template.qtpl:126 +//line web/template/template.qtpl:128 if ctx.processors.YooMoney != "" { -//line web/template/template.qtpl:126 +//line web/template/template.qtpl:128 qw422016.N().S(`
  • `) //line web/template/template.qtpl:137 + } +//line web/template/template.qtpl:137 + qw422016.N().S(`">`) +//line web/template/template.qtpl:139 streamicon(qw422016, "yoomoney") -//line web/template/template.qtpl:137 +//line web/template/template.qtpl:139 qw422016.N().S(`ЮMoney
  • `) -//line web/template/template.qtpl:141 +//line web/template/template.qtpl:143 } -//line web/template/template.qtpl:142 +//line web/template/template.qtpl:144 if ctx.processors.Kofi != "" { -//line web/template/template.qtpl:142 +//line web/template/template.qtpl:144 qw422016.N().S(`
  • `) -//line web/template/template.qtpl:151 +//line web/template/template.qtpl:155 streamicon(qw422016, "kofi") -//line web/template/template.qtpl:151 +//line web/template/template.qtpl:155 qw422016.N().S(`Ko-fi
  • `) -//line web/template/template.qtpl:155 - } -//line web/template/template.qtpl:155 - qw422016.N().S(``) -//line web/template/template.qtpl:157 -} - -//line web/template/template.qtpl:157 -func (ctx Context) writebody(qq422016 qtio422016.Writer) { -//line web/template/template.qtpl:157 - qw422016 := qt422016.AcquireWriter(qq422016) -//line web/template/template.qtpl:157 - ctx.streambody(qw422016) -//line web/template/template.qtpl:157 - qt422016.ReleaseWriter(qw422016) -//line web/template/template.qtpl:157 -} - -//line web/template/template.qtpl:157 -func (ctx Context) body() string { -//line web/template/template.qtpl:157 - qb422016 := qt422016.AcquireByteBuffer() -//line web/template/template.qtpl:157 - ctx.writebody(qb422016) -//line web/template/template.qtpl:157 - qs422016 := string(qb422016.B) -//line web/template/template.qtpl:157 - qt422016.ReleaseByteBuffer(qb422016) -//line web/template/template.qtpl:157 - return qs422016 -//line web/template/template.qtpl:157 -} - //line web/template/template.qtpl:159 -func (ctx Context) streamdir(qw422016 *qt422016.Writer) { -//line web/template/template.qtpl:160 - switch ctx.language { -//line web/template/template.qtpl:161 - default: -//line web/template/template.qtpl:161 - qw422016.N().S(`ltr`) -//line web/template/template.qtpl:163 - case language.Arabic, language.Persian, language.Hebrew, language.Urdu: -//line web/template/template.qtpl:163 - qw422016.N().S(`rtl`) -//line web/template/template.qtpl:165 } +//line web/template/template.qtpl:160 + if ctx.processors.DonationAlerts != "" { +//line web/template/template.qtpl:160 + qw422016.N().S(`
  • `) //line web/template/template.qtpl:169 + streamicon(qw422016, "da") +//line web/template/template.qtpl:169 + 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:177 +func (ctx Context) streamdir(qw422016 *qt422016.Writer) { +//line web/template/template.qtpl:178 + switch ctx.language { +//line web/template/template.qtpl:179 + default: +//line web/template/template.qtpl:179 + qw422016.N().S(`ltr`) +//line web/template/template.qtpl:181 + case language.Arabic, language.Persian, language.Hebrew, language.Urdu: +//line web/template/template.qtpl:181 + qw422016.N().S(`rtl`) +//line web/template/template.qtpl:183 + } +//line web/template/template.qtpl:184 +} + +//line web/template/template.qtpl:184 +func (ctx Context) writedir(qq422016 qtio422016.Writer) { +//line web/template/template.qtpl:184 + qw422016 := qt422016.AcquireWriter(qq422016) +//line web/template/template.qtpl:184 + ctx.streamdir(qw422016) +//line web/template/template.qtpl:184 + qt422016.ReleaseWriter(qw422016) +//line web/template/template.qtpl:184 +} + +//line web/template/template.qtpl:184 +func (ctx Context) dir() string { +//line web/template/template.qtpl:184 + qb422016 := qt422016.AcquireByteBuffer() +//line web/template/template.qtpl:184 + ctx.writedir(qb422016) +//line web/template/template.qtpl:184 + qs422016 := string(qb422016.B) +//line web/template/template.qtpl:184 + qt422016.ReleaseByteBuffer(qb422016) +//line web/template/template.qtpl:184 + return qs422016 +//line web/template/template.qtpl:184 +} + +//line web/template/template.qtpl:186 +func (ctx Context) streamlang(qw422016 *qt422016.Writer) { +//line web/template/template.qtpl:187 base, _ := ctx.language.Base() -//line web/template/template.qtpl:170 +//line web/template/template.qtpl:188 qw422016.E().S(base.String()) -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 } -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 func (ctx Context) writelang(qq422016 qtio422016.Writer) { -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 qw422016 := qt422016.AcquireWriter(qq422016) -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 ctx.streamlang(qw422016) -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 qt422016.ReleaseWriter(qw422016) -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 } -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 func (ctx Context) lang() string { -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 qb422016 := qt422016.AcquireByteBuffer() -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 ctx.writelang(qb422016) -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 qs422016 := string(qb422016.B) -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 qt422016.ReleaseByteBuffer(qb422016) -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 return qs422016 -//line web/template/template.qtpl:171 +//line web/template/template.qtpl:189 } -//line web/template/template.qtpl:173 +//line web/template/template.qtpl:191 func (ctx Context) streamt(qw422016 *qt422016.Writer, format message.Reference, v ...any) { -//line web/template/template.qtpl:174 +//line web/template/template.qtpl:192 qw422016.E().S(ctx.printer.Sprintf(format, v...)) -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 } -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 func (ctx Context) writet(qq422016 qtio422016.Writer, format message.Reference, v ...any) { -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 qw422016 := qt422016.AcquireWriter(qq422016) -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 ctx.streamt(qw422016, format, v...) -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 qt422016.ReleaseWriter(qw422016) -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 } -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 func (ctx Context) t(format message.Reference, v ...any) string { -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 qb422016 := qt422016.AcquireByteBuffer() -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 ctx.writet(qb422016, format, v...) -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 qs422016 := string(qb422016.B) -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 qt422016.ReleaseByteBuffer(qb422016) -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 return qs422016 -//line web/template/template.qtpl:175 +//line web/template/template.qtpl:193 } -//line web/template/template.qtpl:177 +//line web/template/template.qtpl:195 func (ctx Context) streamtitle(qw422016 *qt422016.Writer) { -//line web/template/template.qtpl:177 +//line web/template/template.qtpl:195 qw422016.N().S(`NotDotPay`) -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 } -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 func (ctx Context) writetitle(qq422016 qtio422016.Writer) { -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 qw422016 := qt422016.AcquireWriter(qq422016) -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 ctx.streamtitle(qw422016) -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 qt422016.ReleaseWriter(qw422016) -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 } -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 func (ctx Context) title() string { -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 qb422016 := qt422016.AcquireByteBuffer() -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 ctx.writetitle(qb422016) -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 qs422016 := string(qb422016.B) -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 qt422016.ReleaseByteBuffer(qb422016) -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 return qs422016 -//line web/template/template.qtpl:179 +//line web/template/template.qtpl:197 } -//line web/template/template.qtpl:181 +//line web/template/template.qtpl:199 func StreamTemplate(qw422016 *qt422016.Writer, p Page) { -//line web/template/template.qtpl:181 +//line web/template/template.qtpl:199 qw422016.N().S(`NotDotPay`) -//line web/template/template.qtpl:191 +//line web/template/template.qtpl:209 p.streamhead(qw422016) -//line web/template/template.qtpl:191 +//line web/template/template.qtpl:209 qw422016.N().S(``) -//line web/template/template.qtpl:195 +//line web/template/template.qtpl:213 p.streambody(qw422016) -//line web/template/template.qtpl:195 +//line web/template/template.qtpl:213 qw422016.N().S(``) -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 } -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 func WriteTemplate(qq422016 qtio422016.Writer, p Page) { -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 qw422016 := qt422016.AcquireWriter(qq422016) -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 StreamTemplate(qw422016, p) -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 qt422016.ReleaseWriter(qw422016) -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 } -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 func Template(p Page) string { -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 qb422016 := qt422016.AcquireByteBuffer() -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 WriteTemplate(qb422016, p) -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 qs422016 := string(qb422016.B) -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 qt422016.ReleaseByteBuffer(qb422016) -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 return qs422016 -//line web/template/template.qtpl:203 +//line web/template/template.qtpl:221 } -//line web/template/template.qtpl:205 +//line web/template/template.qtpl:223 func streamicon(qw422016 *qt422016.Writer, id string) { -//line web/template/template.qtpl:206 +//line web/template/template.qtpl:224 switch id { -//line web/template/template.qtpl:207 +//line web/template/template.qtpl:225 case "liberapay": -//line web/template/template.qtpl:207 +//line web/template/template.qtpl:225 qw422016.N().S(``) -//line web/template/template.qtpl:218 - case "paypal": -//line web/template/template.qtpl:218 - qw422016.N().S(``) //line web/template/template.qtpl:227 - qw422016.N().S(``) + qw422016.N().S(` `) +//line web/template/template.qtpl:227 + qw422016.N().S(`height="32"`) +//line web/template/template.qtpl:228 + qw422016.N().S(` `) +//line web/template/template.qtpl:228 + qw422016.N().S(`viewBox="0 0 80 80"`) //line web/template/template.qtpl:229 - qw422016.N().S(``) + qw422016.N().S(` `) +//line web/template/template.qtpl:229 + qw422016.N().S(`aria-hidden="true"`) +//line web/template/template.qtpl:230 + qw422016.N().S(` `) +//line web/template/template.qtpl:230 + qw422016.N().S(`focusable="false"`) //line web/template/template.qtpl:231 + qw422016.N().S(` `) +//line web/template/template.qtpl:231 + qw422016.N().S(`xmlns="http://www.w3.org/2000/svg">`) +//line web/template/template.qtpl:236 + case "paypal": +//line web/template/template.qtpl:236 + qw422016.N().S(``) +//line web/template/template.qtpl:245 + qw422016.N().S(``) +//line web/template/template.qtpl:247 + qw422016.N().S(``) +//line web/template/template.qtpl:249 qw422016.N().S(``) -//line web/template/template.qtpl:234 +//line web/template/template.qtpl:252 case "yoomoney": -//line web/template/template.qtpl:234 +//line web/template/template.qtpl:252 qw422016.N().S(``) -//line web/template/template.qtpl:246 +//line web/template/template.qtpl:264 case "kofi": -//line web/template/template.qtpl:246 +//line web/template/template.qtpl:264 qw422016.N().S(``) //line web/template/template.qtpl:267 + qw422016.N().S(` `) +//line web/template/template.qtpl:267 + qw422016.N().S(`viewBox="0 0 665.2 436.4"`) +//line web/template/template.qtpl:268 + qw422016.N().S(` `) +//line web/template/template.qtpl:268 + qw422016.N().S(`aria-hidden="true"`) +//line web/template/template.qtpl:269 + qw422016.N().S(` `) +//line web/template/template.qtpl:269 + qw422016.N().S(`focusable="false"`) +//line web/template/template.qtpl:270 + qw422016.N().S(` `) +//line web/template/template.qtpl:270 + qw422016.N().S(`xmlns="http://www.w3.org/2000/svg">`) +//line web/template/template.qtpl:285 + case "da": +//line web/template/template.qtpl:285 + qw422016.N().S(``) +//line web/template/template.qtpl:296 } -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 } -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 func writeicon(qq422016 qtio422016.Writer, id string) { -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 qw422016 := qt422016.AcquireWriter(qq422016) -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 streamicon(qw422016, id) -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 qt422016.ReleaseWriter(qw422016) -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 } -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 func icon(id string) string { -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 qb422016 := qt422016.AcquireByteBuffer() -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 writeicon(qb422016, id) -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 qs422016 := string(qb422016.B) -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 qt422016.ReleaseByteBuffer(qb422016) -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 return qs422016 -//line web/template/template.qtpl:268 +//line web/template/template.qtpl:297 }