diff --git a/views/history.qtpl b/views/history.qtpl
index 7b3cce4..874411c 100644
--- a/views/history.qtpl
+++ b/views/history.qtpl
@@ -1,4 +1,6 @@
+{% import "fmt" %}
{% import "net/http" %}
+{% import "time" %}
{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
{% import "github.com/bouncepaw/mycorrhiza/util" %}
@@ -32,15 +34,15 @@ if err != nil {
@@ -54,18 +56,28 @@ if err != nil {
How come? I'll add the role anyway. -- bouncepaw
{% endcomment %}
- {% code
+ {% code
changes := history.RecentChanges(n)
+ var year, day int
+ var month time.Month
%}
{% if len(changes) == 0 %}
Could not find any recent changes.
{% else %}
{% for i, entry := range changes %}
+
+ {% code y, m, d := entry.Time.UTC().Date() %}
+ {% if d != day || m != month || y != year %}
+ {%s fmt.Sprintf("%04d-%02d-%02d", y, m, d) %}
+ {% code year, month, day = y, m, d %}
+ {% endif %}
+
{%s= recentChangesEntry(entry) %}
+
{% endfor %}
{% endif %}
@@ -74,7 +86,7 @@ if err != nil {
{% endfunc %}
{% func recentChangesEntry(rev history.Revision) %}
-
+
{%s rev.Hash %}
{%s= rev.HyphaeLinksHTML() %}
{%s rev.Message %} {% if rev.Username != "anon" %}by {%s rev.Username %}{% endif %}
diff --git a/views/history.qtpl.go b/views/history.qtpl.go
index 50cbad2..9c7d22b 100644
--- a/views/history.qtpl.go
+++ b/views/history.qtpl.go
@@ -5,107 +5,113 @@
package views
//line views/history.qtpl:1
+import "fmt"
+
+//line views/history.qtpl:2
import "net/http"
//line views/history.qtpl:3
-import "github.com/bouncepaw/mycorrhiza/cfg"
-
-//line views/history.qtpl:4
-import "github.com/bouncepaw/mycorrhiza/util"
+import "time"
//line views/history.qtpl:5
-import "github.com/bouncepaw/mycorrhiza/user"
+import "github.com/bouncepaw/mycorrhiza/cfg"
//line views/history.qtpl:6
-import "github.com/bouncepaw/mycorrhiza/hyphae"
+import "github.com/bouncepaw/mycorrhiza/util"
//line views/history.qtpl:7
+import "github.com/bouncepaw/mycorrhiza/user"
+
+//line views/history.qtpl:8
+import "github.com/bouncepaw/mycorrhiza/hyphae"
+
+//line views/history.qtpl:9
import "github.com/bouncepaw/mycorrhiza/history"
-//line views/history.qtpl:10
+//line views/history.qtpl:12
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
-//line views/history.qtpl:10
+//line views/history.qtpl:12
var (
_ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer
)
-//line views/history.qtpl:10
+//line views/history.qtpl:12
func StreamPrimitiveDiffHTML(qw422016 *qt422016.Writer, rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) {
-//line views/history.qtpl:10
+//line views/history.qtpl:12
qw422016.N().S(`
`)
-//line views/history.qtpl:12
+//line views/history.qtpl:14
text, err := history.PrimitiveDiffAtRevision(h.TextPath, hash)
if err != nil {
text = err.Error()
}
-//line views/history.qtpl:16
+//line views/history.qtpl:18
qw422016.N().S(`
`)
-//line views/history.qtpl:17
+//line views/history.qtpl:19
StreamNavHTML(qw422016, rq, h.Name, "history")
-//line views/history.qtpl:17
+//line views/history.qtpl:19
qw422016.N().S(`
Diff `)
-//line views/history.qtpl:21
+//line views/history.qtpl:23
qw422016.E().S(util.BeautifulName(h.Name))
-//line views/history.qtpl:21
+//line views/history.qtpl:23
qw422016.N().S(` at `)
-//line views/history.qtpl:21
+//line views/history.qtpl:23
qw422016.E().S(hash)
-//line views/history.qtpl:21
+//line views/history.qtpl:23
qw422016.N().S(`
`)
-//line views/history.qtpl:22
+//line views/history.qtpl:24
qw422016.E().S(text)
-//line views/history.qtpl:22
+//line views/history.qtpl:24
qw422016.N().S(`
`)
-//line views/history.qtpl:26
+//line views/history.qtpl:28
}
-//line views/history.qtpl:26
+//line views/history.qtpl:28
func WritePrimitiveDiffHTML(qq422016 qtio422016.Writer, rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) {
-//line views/history.qtpl:26
+//line views/history.qtpl:28
qw422016 := qt422016.AcquireWriter(qq422016)
-//line views/history.qtpl:26
+//line views/history.qtpl:28
StreamPrimitiveDiffHTML(qw422016, rq, h, u, hash)
-//line views/history.qtpl:26
+//line views/history.qtpl:28
qt422016.ReleaseWriter(qw422016)
-//line views/history.qtpl:26
+//line views/history.qtpl:28
}
-//line views/history.qtpl:26
+//line views/history.qtpl:28
func PrimitiveDiffHTML(rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) string {
-//line views/history.qtpl:26
+//line views/history.qtpl:28
qb422016 := qt422016.AcquireByteBuffer()
-//line views/history.qtpl:26
+//line views/history.qtpl:28
WritePrimitiveDiffHTML(qb422016, rq, h, u, hash)
-//line views/history.qtpl:26
+//line views/history.qtpl:28
qs422016 := string(qb422016.B)
-//line views/history.qtpl:26
+//line views/history.qtpl:28
qt422016.ReleaseByteBuffer(qb422016)
-//line views/history.qtpl:26
+//line views/history.qtpl:28
return qs422016
-//line views/history.qtpl:26
+//line views/history.qtpl:28
}
-//line views/history.qtpl:28
+//line views/history.qtpl:30
func StreamRecentChangesHTML(qw422016 *qt422016.Writer, n int) {
-//line views/history.qtpl:28
+//line views/history.qtpl:30
qw422016.N().S(`
@@ -114,51 +120,54 @@ func StreamRecentChangesHTML(qw422016 *qt422016.Writer, n int) {
@@ -166,216 +175,248 @@ func StreamRecentChangesHTML(qw422016 *qt422016.Writer, n int) {
Subscribe via RSS, Atom or JSON feed.
`)
-//line views/history.qtpl:55
+//line views/history.qtpl:57
qw422016.N().S(`
`)
-//line views/history.qtpl:58
+//line views/history.qtpl:60
changes := history.RecentChanges(n)
+ var year, day int
+ var month time.Month
-//line views/history.qtpl:59
+//line views/history.qtpl:63
qw422016.N().S(`
`)
-//line views/history.qtpl:61
+//line views/history.qtpl:65
if len(changes) == 0 {
-//line views/history.qtpl:61
+//line views/history.qtpl:65
qw422016.N().S(`
Could not find any recent changes.
`)
-//line views/history.qtpl:63
+//line views/history.qtpl:67
} else {
-//line views/history.qtpl:63
+//line views/history.qtpl:67
qw422016.N().S(`
`)
-//line views/history.qtpl:64
+//line views/history.qtpl:68
for i, entry := range changes {
-//line views/history.qtpl:64
+//line views/history.qtpl:68
qw422016.N().S(`
+
+ `)
+//line views/history.qtpl:70
+ y, m, d := entry.Time.UTC().Date()
+
+//line views/history.qtpl:70
+ qw422016.N().S(`
+ `)
+//line views/history.qtpl:71
+ if d != day || m != month || y != year {
+//line views/history.qtpl:71
+ qw422016.N().S(`
+ `)
+//line views/history.qtpl:72
+ qw422016.E().S(fmt.Sprintf("%04d-%02d-%02d", y, m, d))
+//line views/history.qtpl:72
+ qw422016.N().S(`
+ `)
+//line views/history.qtpl:73
+ year, month, day = y, m, d
+
+//line views/history.qtpl:73
+ qw422016.N().S(`
+ `)
+//line views/history.qtpl:74
+ }
+//line views/history.qtpl:74
+ qw422016.N().S(`
+
`)
-//line views/history.qtpl:67
+//line views/history.qtpl:78
qw422016.N().S(recentChangesEntry(entry))
-//line views/history.qtpl:67
+//line views/history.qtpl:78
qw422016.N().S(`
+
`)
-//line views/history.qtpl:69
+//line views/history.qtpl:81
}
-//line views/history.qtpl:69
+//line views/history.qtpl:81
qw422016.N().S(`
`)
-//line views/history.qtpl:70
+//line views/history.qtpl:82
}
-//line views/history.qtpl:70
+//line views/history.qtpl:82
qw422016.N().S(`
`)
-//line views/history.qtpl:74
+//line views/history.qtpl:86
}
-//line views/history.qtpl:74
+//line views/history.qtpl:86
func WriteRecentChangesHTML(qq422016 qtio422016.Writer, n int) {
-//line views/history.qtpl:74
+//line views/history.qtpl:86
qw422016 := qt422016.AcquireWriter(qq422016)
-//line views/history.qtpl:74
+//line views/history.qtpl:86
StreamRecentChangesHTML(qw422016, n)
-//line views/history.qtpl:74
+//line views/history.qtpl:86
qt422016.ReleaseWriter(qw422016)
-//line views/history.qtpl:74
+//line views/history.qtpl:86
}
-//line views/history.qtpl:74
+//line views/history.qtpl:86
func RecentChangesHTML(n int) string {
-//line views/history.qtpl:74
+//line views/history.qtpl:86
qb422016 := qt422016.AcquireByteBuffer()
-//line views/history.qtpl:74
+//line views/history.qtpl:86
WriteRecentChangesHTML(qb422016, n)
-//line views/history.qtpl:74
+//line views/history.qtpl:86
qs422016 := string(qb422016.B)
-//line views/history.qtpl:74
+//line views/history.qtpl:86
qt422016.ReleaseByteBuffer(qb422016)
-//line views/history.qtpl:74
+//line views/history.qtpl:86
return qs422016
-//line views/history.qtpl:74
+//line views/history.qtpl:86
}
-//line views/history.qtpl:76
+//line views/history.qtpl:88
func streamrecentChangesEntry(qw422016 *qt422016.Writer, rev history.Revision) {
-//line views/history.qtpl:76
+//line views/history.qtpl:88
qw422016.N().S(`
`)
-//line views/history.qtpl:78
+//line views/history.qtpl:90
qw422016.E().S(rev.Hash)
-//line views/history.qtpl:78
+//line views/history.qtpl:90
qw422016.N().S(`
`)
-//line views/history.qtpl:79
+//line views/history.qtpl:91
qw422016.N().S(rev.HyphaeLinksHTML())
-//line views/history.qtpl:79
+//line views/history.qtpl:91
qw422016.N().S(`
`)
-//line views/history.qtpl:80
+//line views/history.qtpl:92
qw422016.E().S(rev.Message)
-//line views/history.qtpl:80
+//line views/history.qtpl:92
qw422016.N().S(` `)
-//line views/history.qtpl:80
+//line views/history.qtpl:92
if rev.Username != "anon" {
-//line views/history.qtpl:80
+//line views/history.qtpl:92
qw422016.N().S(`by `)
-//line views/history.qtpl:80
+//line views/history.qtpl:92
qw422016.E().S(rev.Username)
-//line views/history.qtpl:80
+//line views/history.qtpl:92
qw422016.N().S(``)
-//line views/history.qtpl:80
+//line views/history.qtpl:92
}
-//line views/history.qtpl:80
+//line views/history.qtpl:92
qw422016.N().S(`
`)
-//line views/history.qtpl:81
+//line views/history.qtpl:93
}
-//line views/history.qtpl:81
+//line views/history.qtpl:93
func writerecentChangesEntry(qq422016 qtio422016.Writer, rev history.Revision) {
-//line views/history.qtpl:81
+//line views/history.qtpl:93
qw422016 := qt422016.AcquireWriter(qq422016)
-//line views/history.qtpl:81
+//line views/history.qtpl:93
streamrecentChangesEntry(qw422016, rev)
-//line views/history.qtpl:81
+//line views/history.qtpl:93
qt422016.ReleaseWriter(qw422016)
-//line views/history.qtpl:81
+//line views/history.qtpl:93
}
-//line views/history.qtpl:81
+//line views/history.qtpl:93
func recentChangesEntry(rev history.Revision) string {
-//line views/history.qtpl:81
+//line views/history.qtpl:93
qb422016 := qt422016.AcquireByteBuffer()
-//line views/history.qtpl:81
+//line views/history.qtpl:93
writerecentChangesEntry(qb422016, rev)
-//line views/history.qtpl:81
+//line views/history.qtpl:93
qs422016 := string(qb422016.B)
-//line views/history.qtpl:81
+//line views/history.qtpl:93
qt422016.ReleaseByteBuffer(qb422016)
-//line views/history.qtpl:81
+//line views/history.qtpl:93
return qs422016
-//line views/history.qtpl:81
+//line views/history.qtpl:93
}
-//line views/history.qtpl:83
+//line views/history.qtpl:95
func StreamHistoryHTML(qw422016 *qt422016.Writer, rq *http.Request, hyphaName, list string) {
-//line views/history.qtpl:83
+//line views/history.qtpl:95
qw422016.N().S(`
`)
-//line views/history.qtpl:84
+//line views/history.qtpl:96
StreamNavHTML(qw422016, rq, hyphaName, "history")
-//line views/history.qtpl:84
+//line views/history.qtpl:96
qw422016.N().S(`
History of `)
-//line views/history.qtpl:88
+//line views/history.qtpl:100
qw422016.E().S(util.BeautifulName(hyphaName))
-//line views/history.qtpl:88
+//line views/history.qtpl:100
qw422016.N().S(`
`)
-//line views/history.qtpl:89
+//line views/history.qtpl:101
qw422016.N().S(list)
-//line views/history.qtpl:89
+//line views/history.qtpl:101
qw422016.N().S(`
`)
-//line views/history.qtpl:93
+//line views/history.qtpl:105
}
-//line views/history.qtpl:93
+//line views/history.qtpl:105
func WriteHistoryHTML(qq422016 qtio422016.Writer, rq *http.Request, hyphaName, list string) {
-//line views/history.qtpl:93
+//line views/history.qtpl:105
qw422016 := qt422016.AcquireWriter(qq422016)
-//line views/history.qtpl:93
+//line views/history.qtpl:105
StreamHistoryHTML(qw422016, rq, hyphaName, list)
-//line views/history.qtpl:93
+//line views/history.qtpl:105
qt422016.ReleaseWriter(qw422016)
-//line views/history.qtpl:93
+//line views/history.qtpl:105
}
-//line views/history.qtpl:93
+//line views/history.qtpl:105
func HistoryHTML(rq *http.Request, hyphaName, list string) string {
-//line views/history.qtpl:93
+//line views/history.qtpl:105
qb422016 := qt422016.AcquireByteBuffer()
-//line views/history.qtpl:93
+//line views/history.qtpl:105
WriteHistoryHTML(qb422016, rq, hyphaName, list)
-//line views/history.qtpl:93
+//line views/history.qtpl:105
qs422016 := string(qb422016.B)
-//line views/history.qtpl:93
+//line views/history.qtpl:105
qt422016.ReleaseByteBuffer(qb422016)
-//line views/history.qtpl:93
+//line views/history.qtpl:105
return qs422016
-//line views/history.qtpl:93
+//line views/history.qtpl:105
}