Compare commits

...

4 Commits

Author SHA1 Message Date
ekzyis aacfa870ba Restyle zap alert 2025-01-03 22:08:50 +01:00
ekzyis 909a36d76f Support reading position from query params 2025-01-03 21:39:07 +01:00
ekzyis 05bc6514d6 Allow QR code to be dragged 2025-01-03 21:03:28 +01:00
ekzyis 0393817939 Also show lightning address 2025-01-03 20:36:30 +01:00
4 changed files with 55 additions and 9 deletions

View File

@ -8,13 +8,13 @@ import (
templ Zap(inv *lightning.Invoice) {
<div class="bg-[#212529] w-fit zap-animate-in border border-[#212529] m-3 rounded-lg" id={ inv.PaymentHash }>
<div class="flex flex-row gap-3 items-center">
<div class="flex flex-row gap-3 py-1 items-center">
<svg width="32" height="32" viewBox="0 0 200 307" fill="#fada5e" xmlns="http://www.w3.org/2000/svg" class="ps-3">
<path d="M56 0L107.606 131H90.2129H89L1.52588e-05 131L177 307L106.979 165H121H160H200L56 0Z"/>
</svg>
<div class="flex flex-col pe-3 py-1">
<div class="text-lg text-[#f0f0f0]">{ inv.Description }</div>
<div class="text-sm text-slate-300">{ fmt.Sprintf("%.8s / %s", inv.PaymentHash, humanize(inv.Msats)) }</div>
<div class="text-sm text-slate-300">{ fmt.Sprintf("%s", humanize(inv.Msats)) }</div>
</div>
</div>
</div>

View File

@ -3,7 +3,7 @@ package pages
import "github.com/skip2/go-qrcode"
import "encoding/base64"
templ Overlay(lnurl string) {
templ Overlay(lnurl string, lnaddr string) {
<html>
<head>
<meta charset="UTF-8">
@ -28,10 +28,50 @@ templ Overlay(lnurl string) {
}, 60_000)
})
</script>
<div class="bg-white fixed bottom-0 left-0 text-center p-3">
<img src={ "data:image/jpeg;base64," + qrEncode(lnurl) }/>
<div>scan to zap message</div>
<div id="qr" class="bg-white fixed bottom-0 left-0 text-center p-3 cursor-move" style="left: 0; bottom: 0;" draggable="true">
<div class="p-2">
<div class="font-bold">{ lnaddr }</div>
<img src={ "data:image/jpeg;base64," + qrEncode(lnurl) }/>
</div>
<div class="italic">zap us a message!</div>
</div>
<script>
const qr = document.getElementById("qr");
const urlParams = new URLSearchParams(window.location.search);
let queryX = parseInt(urlParams.get('x'));
let queryY = parseInt(urlParams.get('y'));
const [localX,localY] = localStorage.getItem('qrPosition')?.split(',').map(Number) ?? [0,0];
let currentX = !isNaN(queryX) ? queryX : localX;
let currentY = !isNaN(queryY) ? queryY : localY;
qr.style.transform = `translate(${currentX}px, ${currentY}px)`;
let startX = 0;
let startY = 0;
qr.addEventListener("dragstart", (e) => {
startX = e.clientX - currentX;
startY = e.clientY - currentY;
e.dataTransfer.setData("text/plain", `${currentX},${currentY}`);
});
qr.addEventListener("drag", (e) => {
if (e.clientX && e.clientY) {
currentX = e.clientX - startX;
currentY = e.clientY - startY;
qr.style.transform = `translate(${currentX}px, ${currentY}px)`;
}
});
qr.addEventListener("dragend", (e) => {
currentX = e.clientX - startX;
currentY = e.clientY - startY;
qr.style.transform = `translate(${currentX}px, ${currentY}px)`;
localStorage.setItem('qrPosition', `${currentX},${currentY}`);
window.location.search = `?x=${currentX}&y=${currentY}`
});
</script>
</body>
</html>
}

View File

@ -27,9 +27,9 @@ func GetEnv(ctx context.Context) string {
return "development"
}
func OverlayHandler(lnurl string) echo.HandlerFunc {
func OverlayHandler(lnurl string, lnaddr string) echo.HandlerFunc {
return func(c echo.Context) error {
return render(c, http.StatusOK, Overlay(lnurl))
return render(c, http.StatusOK, Overlay(lnurl, lnaddr))
}
}

View File

@ -27,6 +27,11 @@ func NewServer() *Server {
CustomTimeFormat: "2006-01-02 15:04:05.00000-0700",
}))
u, err := url.Parse(env.PublicUrl)
if err != nil {
log.Fatal(err)
}
webhookPath := "/overlay/webhook"
webhookUrl, err := url.JoinPath(env.PublicUrl, webhookPath)
if err != nil {
@ -46,7 +51,8 @@ func NewServer() *Server {
s.Static("/", "public/")
s.GET("/overlay", pages.OverlayHandler(
lnurl.Encode(fmt.Sprintf("%s/.well-known/lnurlp/%s", env.PublicUrl, "SNL")),
lnurl.Encode(fmt.Sprintf("%s/.well-known/lnurlp/%s", env.PublicUrl, "snl")),
fmt.Sprintf("%s@%s", "snl", u.Host),
))
s.GET("/overlay/sse", sseHandler(p.IncomingPayments()))