diff --git a/endpoint.go b/endpoint.go index 9a680303..667a6b66 100644 --- a/endpoint.go +++ b/endpoint.go @@ -82,6 +82,13 @@ func getReport(w http.ResponseWriter, r *http.Request) { respondError(w, "Failed to generate report page", err, http.StatusInternalServerError) } } +func getReportDetail(w http.ResponseWriter, r *http.Request) { + code := chi.URLParam(r, "code") + err := htmlReportDetail(w, code) + if err != nil { + respondError(w, "Failed to generate report page", err, http.StatusInternalServerError) + } +} func getRoot(w http.ResponseWriter, r *http.Request) { user, err := getAuthenticatedUser(r) diff --git a/html.go b/html.go index 3d0921b5..da715a22 100644 --- a/html.go +++ b/html.go @@ -16,6 +16,7 @@ import ( var ( dashboard = newBuiltTemplate("dashboard", "authenticated") report = newBuiltTemplate("report", "base") + reportDetail = newBuiltTemplate("report-detail", "base") signin = newBuiltTemplate("signin", "base") signup = newBuiltTemplate("signup", "base") ) @@ -30,6 +31,9 @@ type Link struct { Href string Title string } +type ContentReportDetail struct { + NextURL string +} type ContentReportDiagnostic struct { URL string } @@ -97,6 +101,14 @@ func htmlReport(w io.Writer) error { return report.ExecuteTemplate(w, data) } +func htmlReportDetail(w io.Writer, code string) error { + nextURL := BaseURL + "/report/" + code + "/evidence" + data := ContentReportDetail{ + NextURL: nextURL, + } + return reportDetail.ExecuteTemplate(w, data) +} + func htmlSignin(w io.Writer, errorCode string) error { data := ContentSignin{ InvalidCredentials: errorCode == "invalid-credentials", diff --git a/main.go b/main.go index 59ed3a5a..755c2cb5 100644 --- a/main.go +++ b/main.go @@ -60,6 +60,7 @@ func main() { r.Get("/", getRoot) r.Get("/qr-code/report/{code}", getQRCodeReport) r.Get("/report", getReport) + r.Get("/report/{code}", getReportDetail) r.Post("/signin", postSignin) r.Get("/signup", getSignup) r.Post("/signup", postSignup) diff --git a/templates/report-detail.html b/templates/report-detail.html new file mode 100644 index 00000000..367b022b --- /dev/null +++ b/templates/report-detail.html @@ -0,0 +1,133 @@ +{{template "base.html" .}} + +{{define "title"}}Login{{end}} +{{define "style"}} + body { + background-color: #f8f9fa; + } + .page-container { + max-width: 600px; + margin: 0 auto; + padding: 20px; + } + .content-card { + background-color: white; + border-radius: 15px; + box-shadow: 0 2px 10px rgba(0,0,0,0.1); + padding: 25px; + margin-bottom: 20px; + } + .logo-area { + text-align: center; + margin-bottom: 20px; + } + .logo-placeholder { + height: 50px; + max-width: 200px; + margin: 0 auto; + } + .map-container { + height: 300px; + background-color: #e9ecef; + border-radius: 10px; + margin-bottom: 20px; + position: relative; + overflow: hidden; + } + .map-placeholder { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background-image: url('https://placehold.co/600x300/e9ecef/adb5bd?text=Map+View'); + background-size: cover; + background-position: center; + } + .map-pin { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -100%); + color: #dc3545; + font-size: 30px; + } + .address-container { + background-color: #f8f9fa; + border-radius: 10px; + padding: 15px; + margin-bottom: 20px; + border-left: 4px solid #0d6efd; + } + .action-buttons { + display: flex; + gap: 10px; + } + .progress-container { + margin: 30px 0 20px; + } + .progress { + height: 8px; + } +{{end}} +{{define "content"}} +
Is this the correct location of the property in question?
+If you need assistance, please contact Vector Control at (555) 123-4567
+