aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--issues.go41
-rw-r--r--list.tmpl8
-rw-r--r--table.tmpl194
3 files changed, 149 insertions, 94 deletions
diff --git a/issues.go b/issues.go
index ce0f0c4..055b720 100644
--- a/issues.go
+++ b/issues.go
@@ -36,7 +36,7 @@ type Issue struct {
Category KeyVal
TargetVersion KeyVal `json:"target_version"`
Reporter KeyVal
- handler KeyVal
+ Handler KeyVal
Status KeyVal
Resolution KeyVal
ViewState KeyVal `json:"view_state"`
@@ -103,6 +103,15 @@ func (b ByCategory) Less(i, j int) bool {
}
func (b ByCategory) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+type ByAssignment []Issue
+
+func (b ByAssignment) Len() int { return len(b) }
+func (b ByAssignment) Less(i, j int) bool {
+ return strings.Compare(b[i].Handler.Name, b[j].Handler.Name) < 0
+}
+func (b ByAssignment) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+
+
type ById []Issue
func (b ById) Len() int { return len(b) }
@@ -117,6 +126,19 @@ func (b ByTarget) Less(i, j int) bool {
}
func (b ByTarget) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+type ByHandlerAndId []Issue
+
+func (b ByHandlerAndId) Len() int { return len(b) }
+func (b ByHandlerAndId) Less(i, j int) bool {
+ if (b[i].Handler.Name == "") == (b[j].Handler.Name == "") {
+ return b[i].Id < b[j].Id
+ } else if b[i].Handler.Name == "" {
+ return true
+ }
+ return false
+}
+func (b ByHandlerAndId) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+
func (i Issues) Tags() (tags []string) {
var m = map[string]bool{}
for _, issue := range i {
@@ -131,6 +153,19 @@ func (i Issues) Tags() (tags []string) {
return
}
+func (is Issues) Assigned(assigned bool) (n int) {
+ for _, i := range is {
+ if assigned == (i.Handler.Name != "") {
+ n += 1
+ }
+ }
+ return n
+}
+
+func (i *Issue) IsHandled() bool {
+ return i.Handler.Name != ""
+}
+
func (i Issues) TargetVersions() (targets []string) {
var m = map[string]bool{}
for _, issue := range i {
@@ -164,7 +199,7 @@ func (i Issues) ByCategory(cat string) (issues Issues) {
issues = append(issues, issue)
}
}
- sort.Sort(ById(issues))
+ sort.Sort(sort.Reverse(ByHandlerAndId(issues)))
return issues
}
@@ -175,6 +210,6 @@ func (i Issues) ByCategoryAndTarget(cat, tar string) (issues Issues) {
issues = append(issues, is)
}
}
- sort.Sort(ById(issues))
+ sort.Sort(sort.Reverse(ByHandlerAndId(issues)))
return
}
diff --git a/list.tmpl b/list.tmpl
index f73c441..79c25b9 100644
--- a/list.tmpl
+++ b/list.tmpl
@@ -42,14 +42,18 @@ pre {
<h4>Features</h4>
{{- range $features.ByCategory $cat }}
<details>
- <summary><a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}</summary>
+ <summary>
+ {{ if .IsHandled }}<span title="assigned to {{.Handler.Name}}">🥷</span>{{else}}<span title="unassigned">❓</span>{{end}}
+ <a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}</summary>
<pre>{{ .Description }}</pre>
</details>
{{ end -}}
<h4>Issues</h4>
{{- range $issues.ByCategory $cat }}
<details>
- <summary><a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}</summary>
+ <summary>
+ {{ if .IsHandled }}<span title="assigned to {{.Handler.Name}}">🥷</span>{{else}}<span title="unassigned">❓</span>{{end}}
+ <a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}</summary>
<pre>{{ .Description }}</pre>
</details>
{{ end -}}
diff --git a/table.tmpl b/table.tmpl
index 52557e5..95afd01 100644
--- a/table.tmpl
+++ b/table.tmpl
@@ -1,121 +1,137 @@
<!DOCTYPE html>
- <head><title>GNU Taler Dashboard</title>
+ <head><title>GNU Taler Dashboard</title>
<style>
body {
- margin-left:1%;
- margin-right:1%;
- font-family:sans-serif;
+ margin-left:1%;
+ margin-right:1%;
+ font-family:sans-serif;
}
table {
- background: white;
- border-collapse: collapse;
+ background: white;
+ border-collapse: collapse;
}
th, td {
- padding: 8px;
- border: 1px solid #ddd;
- vertical-align: top;
+ padding: 8px;
+ border: 1px solid #ddd;
+ vertical-align: top;
}
td {
- min-width: 10em;
+ min-width: 10em;
}
th.side {
- color: brown;
- text-align: right;
+ color: brown;
+ text-align: right;
}
tr:hover {
- background: #efe;
+ background: #efefef;
}
.feature {
- background: #cde;
+ background: #cdf;
}
.issue {
- background: #edc;
+ background: #edc;
}
.minh {
- min-height: 5em;
+ min-height: 5em;
+}
+summary {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 5px;
+}
+.assignment {
+ font-size: smaller;
+ color: grey;
}
details {
- max-width: 50vw;
- border-radius: 5px;
- padding: 8px;
- overflow-x: auto;
- white-space: nowrap;
- text-overflow: ellipsis;
+ max-width: 50vw;
+ border-radius: 5px;
+ padding: 8px;
+ overflow-x: auto;
+ white-space: nowrap;
+ text-overflow: ellipsis;
}
details[open] {
- position: absolute;
- background: white;
- border: 2px grey solid;
+ position: absolute;
+ background: white;
+ border: 2px grey solid;
}
details.version {
- max-width: 30vw;
- padding: 5px;
- font-weight: normal;
- overflow: none;
- white-space: normal;
- text-align: justify;
+ max-width: 30vw;
+ padding: 5px;
+ font-weight: normal;
+ overflow: none;
+ white-space: normal;
+ text-align: justify;
}
details[open].feature {
- background: aliceblue;
- border: 2px midnightblue solid;
+ background: aliceblue;
+ border: 2px midnightblue solid;
}
details[open].issue {
- background: lightyellow;
- border: 2px brown solid;
+ background: lightyellow;
+ border: 2px brown solid;
}
</style></head>
- <body>
- <h1>GNU Taler Dashboard</h1>
- <h2>Table view | <a href="/list">List View</a></h2>
- Data from {{ .Timestamp.Format "02 Jan 06 15:04 MST"}}, updateting every {{ .Freq }} (no auto-refresh)
- {{- with .Lasterror }}, Last error: {{ . }} {{end }}
- {{- $top := . -}}
- {{- $features := .Features -}}
- {{- $issues := .Issues -}}
- {{- $versions := .VersionsByDate -}}
- <!--p>
- {{- range $top.Tags -}}<button>{{ . }}</button>{{- end -}}
- </p-->
- <table>
- <tr>
- <th class="side"></th>
- {{- range $vname := $top.TargetVersions }}
- {{- with $version := $versions.Get . }}
- <th>
- <details class="version">
- <summary><b>{{ $vname }}</b> ({{ $version.Timestamp.Format "02 Jan 06"}})</summary>
- <div>{{ $version.Description }}</div>
- </details>
- </th>
- {{- end}}
- {{- end}}
- </tr>
- {{- range $cat := $top.Categories }}
- <tr>
- <th class="side">{{ . }}</th>
- {{- range $tar := $top.TargetVersions }}
- {{- with $version := $versions.Get . }}
- <td><div class="minh">{{ with $features.ByCategoryAndTarget $cat $tar }}
- <details class="feature">
- <summary>{{ $l := len .}}{{ if lt 1 $l }}{{ $l }} features{{ else }}1 feature{{ end }}</summary>
- {{- range . }}
- <a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}<br>
- {{- end}}
- </details>
- {{- end }}
- {{- with $issues.ByCategoryAndTarget $cat $tar }}
- <details class="issue">
- <summary>{{ $l := len .}}{{ if lt 1 $l }}{{ $l }} issues{{ else }}1 issue{{ end }}</summary>
- {{- range . }}
- <a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}<br>{{end}}
- </details>
- {{ end -}}
- </div></td>{{ end }}
- {{ end }}
- </tr>
- {{- end}}
- </table>
- <p>
- <i>taler-dashboard - version: {{.Commit}} - <a href="https://git.kesim.org/taler/taler-dashboard">https://git.kesim.org/taler/taler-dashboard</a> </i>
- </body>
+ <body>
+ <h1>GNU Taler Dashboard</h1>
+ <h2>Table view | <a href="/list">List View</a></h2>
+ Data from {{ .Timestamp.Format "02 Jan 06 15:04 MST"}}, updateting every {{ .Freq }} (no auto-refresh)
+ {{- with .Lasterror }}, Last error: {{ . }} {{end }}
+ {{- $top := . -}}
+ {{- $features := .Features -}}
+ {{- $issues := .Issues -}}
+ {{- $versions := .VersionsByDate -}}
+ <!--p>
+ {{- range $top.Tags -}}<button>{{ . }}</button>{{- end -}}
+ </p-->
+ <table>
+ <tr>
+ <th class="side"></th>
+ {{- range $vname := $top.TargetVersions }}
+ {{- with $version := $versions.Get . }}
+ <th>
+ <details class="version">
+ <summary><b>{{ $vname }}</b> ({{ $version.Timestamp.Format "02 Jan 06"}})</summary>
+ <div>{{ $version.Description }}</div>
+ </details>
+ </th>
+ {{- end}}
+ {{- end}}
+ </tr>
+ {{- range $cat := $top.Categories }}
+ <tr>
+ <th class="side">{{ . }}</th>
+ {{- range $tar := $top.TargetVersions }}
+ {{- with $version := $versions.Get . }}
+ <td><div class="minh">{{ with $features.ByCategoryAndTarget $cat $tar }}
+ <details class="feature">
+ <summary>{{ $l := len .}}{{ if lt 1 $l }}{{ $l }} features{{ else }}1 feature{{ end }}
+ {{- $unassigned := .Assigned false }}{{if gt $unassigned 0 }} <span class="assignment">({{ $unassigned}} unassigned)</span>{{ end -}}
+ </summary>
+ {{- range . }}
+ {{ if .IsHandled }}<span title="assigned to {{.Handler.Name}}">🥷</span>{{else}}<span title="unassigned">❓</span>{{end}}
+ <a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}<br>
+ {{- end}}
+ </details>
+ {{- end }}
+ {{- with $issues.ByCategoryAndTarget $cat $tar }}
+ <details class="issue">
+ <summary>{{ $l := len .}}{{ if lt 1 $l }}{{ $l }} issues{{ else }}1 issue{{ end }}
+ {{- $unassigned := .Assigned false }}{{if gt $unassigned 0 }} <span class="assignment">({{ $unassigned}} unassigned)</span>{{ end -}}
+ </summary>
+ {{- range . }}
+ {{ if .IsHandled }}<span title="assigned to {{.Handler.Name}}">🥷</span>{{else}}<span title="unassigned">❓</span>{{end}}
+ <a href="https://bugs.gnunet.org/view.php?id={{.Id}}" target="_blank">{{.Id}}</a> {{.Summary}}<br>{{end}}
+ </details>
+ {{ end -}}
+ </div></td>{{ end }}
+ {{ end }}
+ </tr>
+ {{- end}}
+ </table>
+ <p>
+ <i>taler-dashboard - version: {{.Commit}} - <a href="https://git.kesim.org/taler/taler-dashboard">https://git.kesim.org/taler/taler-dashboard</a> </i>
+ </body>
</html>