fix: legacy QR URLs without '?' (productid in path) redirect to /t/CODE (new tag 97 now scans); preview page photo portrait aspect; Preview button on user tags list; admin photo form = preview + standalone Upload button (removed URL TextInput — no duplicate, no stale placeholder)

This commit is contained in:
2026-08-10 16:54:10 +10:00
parent ae0290b343
commit 04fd5ac63a
4 changed files with 24 additions and 2 deletions

View File

@@ -0,0 +1,21 @@
package handlers
import (
"net/http"
"strings"
)
// LegacyNotFound handles old printed QR URLs of the form
// https://where-woof.com/x=5&productid=CODE (no '?' before productid —
// the whole thing lands in the path). Redirects to /t/CODE.
func (a *App) LegacyNotFound(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if i := strings.Index(path, "productid="); i >= 0 {
code := path[i+len("productid="):]
if code != "" {
http.Redirect(w, r, "/t/"+code, http.StatusFound)
return
}
}
http.NotFound(w, r)
}

View File

@@ -70,7 +70,7 @@ func main() {
mux.HandleFunc("GET /about", app.About)
mux.HandleFunc("GET /what-is-this", app.WhatIsThis)
mux.HandleFunc("GET /contact", app.Contact)
mux.HandleFunc("/{path...}", http.NotFound)
mux.HandleFunc("/{path...}", app.LegacyNotFound)
mux.HandleFunc("GET /t/{tag_code}", app.PublicTag)
mux.HandleFunc("GET /s/{code}", app.ServeShort)
mux.HandleFunc("POST /t/{tag_code}/scan", app.Scan)

View File

@@ -25,6 +25,7 @@
{{if ne .Status "closed"}}
<a href="/account/tags/{{.ID}}/edit" class="text-amber-600 hover:underline">Edit</a>
{{end}}
<a href="/t/{{.TagCode}}?preview=1" target="_blank" rel="noopener" class="ml-3 text-blue-600 hover:underline">Preview</a>
<form hx-post="/account/tags/{{.ID}}/close" hx-target="#account-panel" hx-swap="outerHTML" hx-confirm="Close this tag? It will stop alerts but keep its details." class="inline">
<button class="ml-3 text-stone-500 hover:underline">Close</button>
</form>

View File

@@ -40,7 +40,7 @@
</div>
<div class="p-6">
{{if .Data.PhotoUrl.Valid}}
<img src="{{.Data.PhotoUrl.String}}?v={{.Data.UpdatedAt.Time.Unix}}" alt="Item photo" class="mb-4 h-56 w-full rounded-lg object-cover">
<img src="{{.Data.PhotoUrl.String}}?v={{.Data.UpdatedAt.Time.Unix}}" alt="Item photo" class="mb-4 w-full rounded-lg object-cover" style="aspect-ratio: 3 / 4;">
{{end}}
{{if .Data.Description.Valid}}
<p class="text-stone-700">{{.Data.Description.String}}</p>