Create version of timeSince that handles non-pointers
Useful for structs where we know we must have a value
This commit is contained in:
parent
2da6bba041
commit
a4afa057e3
6 changed files with 23 additions and 19 deletions
|
|
@ -118,6 +118,7 @@ func makeFuncMap() template.FuncMap {
|
||||||
"timeElapsed": timeElapsed,
|
"timeElapsed": timeElapsed,
|
||||||
"timeInterval": timeInterval,
|
"timeInterval": timeInterval,
|
||||||
"timeSince": timeSince,
|
"timeSince": timeSince,
|
||||||
|
"timeSincePtr": timeSincePtr,
|
||||||
"uuidShort": uuidShort,
|
"uuidShort": uuidShort,
|
||||||
}
|
}
|
||||||
return funcMap
|
return funcMap
|
||||||
|
|
@ -269,12 +270,15 @@ func timeInterval(d time.Duration) string {
|
||||||
years := days / 365
|
years := days / 365
|
||||||
return fmt.Sprintf("every %d years", int(math.Round(years)))
|
return fmt.Sprintf("every %d years", int(math.Round(years)))
|
||||||
}
|
}
|
||||||
func timeSince(t *time.Time) string {
|
func timeSincePtr(t *time.Time) string {
|
||||||
if t == nil {
|
if t == nil {
|
||||||
return "never"
|
return "never"
|
||||||
}
|
}
|
||||||
|
return timeSince(*t)
|
||||||
|
}
|
||||||
|
func timeSince(t time.Time) string {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
diff := now.Sub(*t)
|
diff := now.Sub(t)
|
||||||
|
|
||||||
hours := diff.Hours()
|
hours := diff.Hours()
|
||||||
if hours < 1 {
|
if hours < 1 {
|
||||||
|
|
|
||||||
|
|
@ -85,8 +85,8 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/source/{{.ID}}">{{.ID|uuidShort}}</a></td>
|
<td><a href="/source/{{.ID}}">{{.ID|uuidShort}}</a></td>
|
||||||
<td>{{.Type}}</td>
|
<td>{{.Type}}</td>
|
||||||
<td>{{.LastInspected|timeSince}}</td>
|
<td>{{.LastInspected|timeSincePtr}}</td>
|
||||||
<td>{{.LastTreated|timeSince}}</td>
|
<td>{{.LastTreated|timeSincePtr}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
@ -130,7 +130,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/source/{{.LocationID}}">{{.LocationID|uuidShort}}</a></td>
|
<td><a href="/source/{{.LocationID}}">{{.LocationID|uuidShort}}</a></td>
|
||||||
<td>{{.Location}}</td>
|
<td>{{.Location}}</td>
|
||||||
<td>{{.Date|timeSince}}</td>
|
<td>{{.Date|timeSincePtr}}</td>
|
||||||
<td>{{.Action}}</td>
|
<td>{{.Action}}</td>
|
||||||
<td>{{.Notes}}</td>
|
<td>{{.Notes}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -208,7 +208,7 @@
|
||||||
{{ range .Treatments }}
|
{{ range .Treatments }}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="/source/{{.LocationID}}">{{.LocationID|uuidShort}}</a></td>
|
<td><a href="/source/{{.LocationID}}">{{.LocationID|uuidShort}}</a></td>
|
||||||
<td>{{.Date|timeSince}}</td>
|
<td>{{.Date|timeSincePtr}}</td>
|
||||||
<td>{{.Product}}</td>
|
<td>{{.Product}}</td>
|
||||||
<td>{{.Notes}}</td>
|
<td>{{.Notes}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-grow-1 ms-2">
|
<div class="flex-grow-1 ms-2">
|
||||||
<p class="mb-0 small">{{.Message}}</p>
|
<p class="mb-0 small">{{.Message}}</p>
|
||||||
<span class="text-muted x-small">{{.Time | timeSince}}</span>
|
<span class="text-muted x-small">{{.Time | timeSincePtr}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ window.addEventListener("load", onLoad);
|
||||||
</p>
|
</p>
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<p class="last-refreshed mb-0">
|
<p class="last-refreshed mb-0">
|
||||||
<i class="fas fa-sync-alt me-2"></i>Last updated: <span id="last-refreshed-time">{{ .LastSync | timeSince }}</span>
|
<i class="fas fa-sync-alt me-2"></i>Last updated: <span id="last-refreshed-time">{{ .LastSync | timeSincePtr }}</span>
|
||||||
<button class="btn btn-sm btn-outline-primary ms-3">Refresh Data</button>
|
<button class="btn btn-sm btn-outline-primary ms-3">Refresh Data</button>
|
||||||
</p>
|
</p>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
@ -99,7 +99,7 @@ window.addEventListener("load", onLoad);
|
||||||
<i class="fas fa-clock"></i>
|
<i class="fas fa-clock"></i>
|
||||||
</div>
|
</div>
|
||||||
<h5 class="card-title">Last Data Refresh</h5>
|
<h5 class="card-title">Last Data Refresh</h5>
|
||||||
<p class="metric-value">{{ .LastSync | timeSince }}</p>
|
<p class="metric-value">{{ .LastSync | timeSincePtr }}</p>
|
||||||
<!-- <p class="card-text text-muted">Last sync: 12:45 PM</p> -->
|
<!-- <p class="card-text text-muted">Last sync: 12:45 PM</p> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -207,7 +207,7 @@ window.addEventListener("load", onLoad);
|
||||||
<tbody>
|
<tbody>
|
||||||
{{ range $i, $sr := .RecentRequests }}
|
{{ range $i, $sr := .RecentRequests }}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $sr.Date | timeSince }}</td>
|
<td>{{ $sr.Date | timeSincePtr }}</td>
|
||||||
<td>Service Request</td>
|
<td>Service Request</td>
|
||||||
<td>{{ $sr.Location }}</td>
|
<td>{{ $sr.Location }}</td>
|
||||||
<td><span class="badge bg-success">Completed</span></td>
|
<td><span class="badge bg-success">Completed</span></td>
|
||||||
|
|
|
||||||
|
|
@ -147,11 +147,11 @@
|
||||||
<table class="info-table">
|
<table class="info-table">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Creation date</td>
|
<td class="info-label">Creation date</td>
|
||||||
<td>{{ .Source.Created|timeSince }}</td>
|
<td>{{ .Source.Created|timeSincePtr }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Edit date</td>
|
<td class="info-label">Edit date</td>
|
||||||
<td>{{ .Source.EditedAt|timeSince }}</td>
|
<td>{{ .Source.EditedAt|timeSincePtr }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Larva Inspect Interval</td>
|
<td class="info-label">Larva Inspect Interval</td>
|
||||||
|
|
@ -179,7 +179,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Last Inspect Date</td>
|
<td class="info-label">Last Inspect Date</td>
|
||||||
<td>{{ .Source.LastInspectionDate|timeSince }}</td>
|
<td>{{ .Source.LastInspectionDate|timeSincePtr }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Last Inspect Species</td>
|
<td class="info-label">Last Inspect Species</td>
|
||||||
|
|
@ -195,7 +195,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Last Treat Date</td>
|
<td class="info-label">Last Treat Date</td>
|
||||||
<td>{{ .Source.LastTreatmentDate|timeSince }}</td>
|
<td>{{ .Source.LastTreatmentDate|timeSincePtr }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Last Treat Product</td>
|
<td class="info-label">Last Treat Product</td>
|
||||||
|
|
@ -211,7 +211,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Next action date scheduled:</td>
|
<td class="info-label">Next action date scheduled:</td>
|
||||||
<td>{{ .Source.NextActionScheduledDate|timeSince }}</td>
|
<td>{{ .Source.NextActionScheduledDate|timeSincePtr }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="info-label">Treatment Cadence:</td>
|
<td class="info-label">Treatment Cadence:</td>
|
||||||
|
|
@ -272,7 +272,7 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
{{ range .Treatments }}
|
{{ range .Treatments }}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{.Date|timeSince}}</td>
|
<td>{{.Date|timeSincePtr}}</td>
|
||||||
<td>{{.Product}}</td>
|
<td>{{.Product}}</td>
|
||||||
<td class="time-delta-neutral">{{.CadenceDelta|timeDelta}}</td>
|
<td class="time-delta-neutral">{{.CadenceDelta|timeDelta}}</td>
|
||||||
<td>{{.Notes}}</td>
|
<td>{{.Notes}}</td>
|
||||||
|
|
@ -304,7 +304,7 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
{{ range .Inspections }}
|
{{ range .Inspections }}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{.Date|timeSince}}</td>
|
<td>{{.Date|timeSincePtr}}</td>
|
||||||
<td>{{.Action}}</td>
|
<td>{{.Action}}</td>
|
||||||
<td>{{.Notes}}</td>
|
<td>{{.Notes}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -348,7 +348,7 @@
|
||||||
<!-- Trap 1 with multiple collections -->
|
<!-- Trap 1 with multiple collections -->
|
||||||
{{ range .Counts }}
|
{{ range .Counts }}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ .Ended|timeSince }}</td>
|
<td>{{ .Ended|timeSincePtr }}</td>
|
||||||
<td>{{ .Females }}</td>
|
<td>{{ .Females }}</td>
|
||||||
<td>{{ .Males }}</td>
|
<td>{{ .Males }}</td>
|
||||||
<td>{{ .Total }}</td>
|
<td>{{ .Total }}</td>
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
<!-- Trap 1 with multiple collections -->
|
<!-- Trap 1 with multiple collections -->
|
||||||
{{ range .Trap.Collections }}
|
{{ range .Trap.Collections }}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ .EndDateTime|timeSince }}</td>
|
<td>{{ .EndDateTime|timeSincePtr }}</td>
|
||||||
<td>{{ .GlobalID }}</td>
|
<td>{{ .GlobalID }}</td>
|
||||||
<td>{{ .Count.Females }}</td>
|
<td>{{ .Count.Females }}</td>
|
||||||
<td>{{ .Count.Males }}</td>
|
<td>{{ .Count.Males }}</td>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue