Add update location page.
This commit is contained in:
parent
44e39fa44a
commit
8cd11b350d
4 changed files with 212 additions and 0 deletions
|
|
@ -123,6 +123,14 @@ func getReportSchedule(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getReportUpdate(w http.ResponseWriter, r *http.Request) {
|
||||||
|
code := chi.URLParam(r, "code")
|
||||||
|
err := htmlReportUpdate(w, code)
|
||||||
|
if err != nil {
|
||||||
|
respondError(w, "Failed to generate report page", err, http.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func getRoot(w http.ResponseWriter, r *http.Request) {
|
func getRoot(w http.ResponseWriter, r *http.Request) {
|
||||||
user, err := getAuthenticatedUser(r)
|
user, err := getAuthenticatedUser(r)
|
||||||
if err != nil && !errors.Is(err, &NoCredentialsError{}) {
|
if err != nil && !errors.Is(err, &NoCredentialsError{}) {
|
||||||
|
|
|
||||||
9
html.go
9
html.go
|
|
@ -21,6 +21,7 @@ var (
|
||||||
reportDetail = newBuiltTemplate("report-detail", "base")
|
reportDetail = newBuiltTemplate("report-detail", "base")
|
||||||
reportEvidence = newBuiltTemplate("report-evidence", "base")
|
reportEvidence = newBuiltTemplate("report-evidence", "base")
|
||||||
reportSchedule = newBuiltTemplate("report-schedule", "base")
|
reportSchedule = newBuiltTemplate("report-schedule", "base")
|
||||||
|
reportUpdate = newBuiltTemplate("report-update", "base")
|
||||||
signin = newBuiltTemplate("signin", "base")
|
signin = newBuiltTemplate("signin", "base")
|
||||||
signup = newBuiltTemplate("signup", "base")
|
signup = newBuiltTemplate("signup", "base")
|
||||||
)
|
)
|
||||||
|
|
@ -147,6 +148,14 @@ func htmlReportSchedule(w io.Writer, code string) error {
|
||||||
return reportSchedule.ExecuteTemplate(w, data)
|
return reportSchedule.ExecuteTemplate(w, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func htmlReportUpdate(w io.Writer, code string) error {
|
||||||
|
nextURL := BaseURL + "/report/" + code + "/evidence"
|
||||||
|
data := ContentReportDetail{
|
||||||
|
NextURL: nextURL,
|
||||||
|
}
|
||||||
|
return reportUpdate.ExecuteTemplate(w, data)
|
||||||
|
}
|
||||||
|
|
||||||
func htmlSignin(w io.Writer, errorCode string) error {
|
func htmlSignin(w io.Writer, errorCode string) error {
|
||||||
data := ContentSignin{
|
data := ContentSignin{
|
||||||
InvalidCredentials: errorCode == "invalid-credentials",
|
InvalidCredentials: errorCode == "invalid-credentials",
|
||||||
|
|
|
||||||
1
main.go
1
main.go
|
|
@ -65,6 +65,7 @@ func main() {
|
||||||
r.Get("/report/{code}/contribute", getReportContribute)
|
r.Get("/report/{code}/contribute", getReportContribute)
|
||||||
r.Get("/report/{code}/evidence", getReportEvidence)
|
r.Get("/report/{code}/evidence", getReportEvidence)
|
||||||
r.Get("/report/{code}/schedule", getReportSchedule)
|
r.Get("/report/{code}/schedule", getReportSchedule)
|
||||||
|
r.Get("/report/{code}/update", getReportUpdate)
|
||||||
r.Post("/signin", postSignin)
|
r.Post("/signin", postSignin)
|
||||||
r.Get("/signup", getSignup)
|
r.Get("/signup", getSignup)
|
||||||
r.Post("/signup", postSignup)
|
r.Post("/signup", postSignup)
|
||||||
|
|
|
||||||
194
templates/report-update.html
Normal file
194
templates/report-update.html
Normal file
|
|
@ -0,0 +1,194 @@
|
||||||
|
{{template "base.html" .}}
|
||||||
|
|
||||||
|
{{define "title"}}Login{{end}}
|
||||||
|
{{define "style"}}
|
||||||
|
body {
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
}
|
||||||
|
.page-container {
|
||||||
|
max-width: 800px;
|
||||||
|
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: 350px;
|
||||||
|
background-color: #e9ecef;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-bottom: 25px;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
border: 1px solid #dee2e6;
|
||||||
|
}
|
||||||
|
.map-placeholder {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
background-image: url('https://placehold.co/800x350/e9ecef/adb5bd?text=Interactive+Map');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
.map-pin {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -100%);
|
||||||
|
color: #dc3545;
|
||||||
|
font-size: 30px;
|
||||||
|
filter: drop-shadow(0px 2px 2px rgba(0,0,0,0.3));
|
||||||
|
}
|
||||||
|
.map-instructions {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 15px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
padding: 10px 15px;
|
||||||
|
border-radius: 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
|
||||||
|
max-width: 90%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.or-divider {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin: 25px 0;
|
||||||
|
color: #6c757d;
|
||||||
|
}
|
||||||
|
.or-divider::before, .or-divider::after {
|
||||||
|
content: '';
|
||||||
|
flex: 1;
|
||||||
|
border-bottom: 1px solid #dee2e6;
|
||||||
|
}
|
||||||
|
.or-divider::before {
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
.or-divider::after {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
.info-box {
|
||||||
|
background-color: #e8f4f8;
|
||||||
|
border-left: 4px solid #0d6efd;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.info-box p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
.form-section {
|
||||||
|
margin-bottom: 25px;
|
||||||
|
}
|
||||||
|
{{end}}
|
||||||
|
{{define "content"}}
|
||||||
|
<div class="page-container">
|
||||||
|
<!-- Logo -->
|
||||||
|
<div class="logo-area">
|
||||||
|
<img src="https://placehold.co/200x50/e9ecef/adb5bd?text=County+Vector+Control" alt="County Vector Control" class="logo-placeholder">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Main Content -->
|
||||||
|
<div class="content-card">
|
||||||
|
<h1 class="h4 mb-4">Update Property Location</h1>
|
||||||
|
|
||||||
|
<!-- Information Box -->
|
||||||
|
<div class="info-box mb-4">
|
||||||
|
<h5><i class="bi bi-info-circle me-2"></i>Two Ways to Update Location</h5>
|
||||||
|
<p>You can update the property location by either clicking on the map or entering an address below. Both methods will automatically update each other.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Map Section -->
|
||||||
|
<div class="form-section">
|
||||||
|
<h5 class="mb-3">Option 1: Select Location on Map</h5>
|
||||||
|
<div class="map-container">
|
||||||
|
<div class="map-placeholder"></div>
|
||||||
|
<div class="map-pin">
|
||||||
|
<i class="bi bi-geo-alt-fill"></i>
|
||||||
|
</div>
|
||||||
|
<div class="map-instructions">
|
||||||
|
<i class="bi bi-hand-index me-2"></i> Click or tap anywhere on the map to set the location
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Divider -->
|
||||||
|
<div class="or-divider">OR</div>
|
||||||
|
|
||||||
|
<!-- Address Form -->
|
||||||
|
<div class="form-section">
|
||||||
|
<h5 class="mb-3">Option 2: Enter Address</h5>
|
||||||
|
<form>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="streetAddress" class="form-label">Street Address</label>
|
||||||
|
<input type="text" class="form-control" id="streetAddress" placeholder="123 Main Street">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label for="city" class="form-label">City</label>
|
||||||
|
<input type="text" class="form-control" id="city" placeholder="Riverside">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-3">
|
||||||
|
<label for="state" class="form-label">State</label>
|
||||||
|
<select class="form-select" id="state">
|
||||||
|
<option selected>CA</option>
|
||||||
|
<option>AZ</option>
|
||||||
|
<option>NV</option>
|
||||||
|
<option>OR</option>
|
||||||
|
<!-- Add more states as needed -->
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-3">
|
||||||
|
<label for="zipCode" class="form-label">ZIP Code</label>
|
||||||
|
<input type="text" class="form-control" id="zipCode" placeholder="92501">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Current Coordinates Display -->
|
||||||
|
<div class="mb-4 p-3 bg-light rounded small text-muted">
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
<span>Current Coordinates:</span>
|
||||||
|
<span>33.9806° N, 117.3755° W</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Action Buttons -->
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
<button type="button" class="btn btn-outline-secondary" id="cancelBtn">
|
||||||
|
Nevermind
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="saveBtn">
|
||||||
|
<i class="bi bi-check-circle me-2"></i> Save Updates
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Help Text -->
|
||||||
|
<div class="text-center text-muted small">
|
||||||
|
<p>If you need assistance, please contact Vector Control at (555) 123-4567</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue