Reviewer string
}
-// ShortOwner returns the CL's owner, either as their email address
+// DisplayOwner returns the CL's owner, either as their email address
// or the person ID if it's a reviewer. It is for display only.
-func (cl *CL) ShortOwner() string {
+func (cl *CL) DisplayOwner() string {
if p, ok := emailToPerson[cl.Owner]; ok {
return p
}
}
func (cl *CL) ModifiedAgo() string {
+ // Just the first non-zero unit.
+ units := map[string]time.Duration{
+ "d": 24 * time.Hour,
+ "h": time.Hour,
+ "m": time.Minute,
+ "s": time.Second,
+ }
d := time.Now().Sub(cl.Modified)
- d -= d % time.Minute // truncate to minute resolution
- s := d.String()
- if strings.HasSuffix(s, "0s") {
- s = s[:len(s)-2]
+ for suffix, u := range units {
+ if d > u {
+ return fmt.Sprintf("%d%s", d/u, suffix)
+ }
}
- return s
+ return "just now"
}
func handleAssign(w http.ResponseWriter, r *http.Request) {
<table class="cls">
{{range $cl := .CLs}}
<tr id="cl-{{$cl.Number}}">
- <td class="email">{{$cl.ShortOwner}}</td>
+ <td class="email">{{$cl.DisplayOwner}}</td>
{{if $tbl.Assignable}}
<td>
<select id="cl-rev-{{$cl.Number}}" {{if not $.UserIsReviewer}}disabled{{end}}>