port over the page template
This commit is contained in:
parent
90dc93fc52
commit
c526153f60
172
ArchiveState.go
Normal file
172
ArchiveState.go
Normal file
@ -0,0 +1,172 @@
|
||||
package archive
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type ArchiveState struct {
|
||||
svr *ArchiveServer
|
||||
log *LogSource
|
||||
logBestSlug string
|
||||
query string
|
||||
queryIsRegex bool
|
||||
nonce string
|
||||
ym YearMonth
|
||||
page int
|
||||
highestPage int
|
||||
}
|
||||
|
||||
func NewArchiveState(svr *ArchiveServer, log *LogSource) (*ArchiveState, error) {
|
||||
logBestSlug, err := svr.bestSlugFor(log)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &ArchiveState{
|
||||
svr: svr,
|
||||
log: log,
|
||||
logBestSlug: logBestSlug,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (this *ArchiveState) renderTemplateHead(w http.ResponseWriter) {
|
||||
w.Header().Set(`Content-Type`, `text/html; charset=UTF-8`)
|
||||
w.Header().Set(`X-UA-Compatible`, `IE=Edge`)
|
||||
w.WriteHeader(200)
|
||||
|
||||
title := `Archives`
|
||||
if this.log != nil {
|
||||
title = this.log.Description + ` Archives`
|
||||
}
|
||||
|
||||
showPageURLs := (this.log != nil && len(this.query) == 0)
|
||||
|
||||
w.Write([]byte(`<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>` + template.HTMLEscapeString(title) + `</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="layout-top nav">
|
||||
|
||||
<div id="tr1" style="display:none;"></div>
|
||||
<div id="tr2" style="display:none;"></div>
|
||||
<div class="ddmenu" id="spm" style="display:none;">
|
||||
<a href="/">Latest</a>
|
||||
<a onclick="fontSize(1);">Font increase</a>
|
||||
<a onclick="fontSize(-1);">Font decrease</a>
|
||||
<a href="/download" onclick="return confirm('Are you sure you want to download a backup?');">Download backup</a>
|
||||
</div>
|
||||
|
||||
<a onclick="toggleMenu();"><div id="logo" class="layout-pushdown"></div></a>
|
||||
|
||||
<span class="area-nav">
|
||||
|
||||
<form method="GET" id="frmHub">
|
||||
<select name="h" id="selHub">
|
||||
`))
|
||||
|
||||
for i, h := range this.svr.cfg.Logs {
|
||||
slug, _ := this.svr.bestSlugFor(&this.svr.cfg.Logs[i])
|
||||
current := (this.log == &this.svr.cfg.Logs[i])
|
||||
|
||||
w.Write([]byte(`<option value="` + template.HTMLEscapeString(slug) + attr(current, " selected") + `>` + template.HTMLEscapeString(h.Description) + `</option>`))
|
||||
}
|
||||
|
||||
w.Write([]byte(`
|
||||
</select>
|
||||
</form>
|
||||
`))
|
||||
|
||||
if showPageURLs {
|
||||
w.Write([]byte(`
|
||||
|
||||
<form method="GET">
|
||||
<input type="hidden" name="h" value="` + template.HTMLEscapeString(this.logBestSlug) + `">
|
||||
<select id="seldate" onchange="setYM(this);">
|
||||
`))
|
||||
|
||||
// Generate month dropdown options
|
||||
|
||||
lastY := -1
|
||||
for ympair := this.log.EarliestDate(); !ympair.Equals(this.log.LatestDate()); ympair = ympair.Next() {
|
||||
if ympair.Year != lastY {
|
||||
if lastY != -1 {
|
||||
w.Write([]byte(`</optgroup>`))
|
||||
}
|
||||
w.Write([]byte(`<optgroup label="` + fmt.Sprintf("%s", ympair.Year) + `">`))
|
||||
lastY = ympair.Year
|
||||
}
|
||||
|
||||
w.Write([]byte(fmt.Sprintf(`<option value="%d-%d" %s>%s</option>`, ympair.Year, ympair.Month, attr(ympair.Equals(this.ym), "selected"), template.HTMLEscapeString(ympair.Month.String()))))
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
pageBase := fmt.Sprintf(`/%s/%d/%d`, this.logBestSlug, this.ym.Year, this.ym.Month)
|
||||
|
||||
previousPage := this.page - 1
|
||||
if previousPage < 0 {
|
||||
previousPage = 0
|
||||
}
|
||||
|
||||
nextPage := this.page + 1
|
||||
if nextPage > this.highestPage {
|
||||
nextPage = this.highestPage
|
||||
}
|
||||
|
||||
w.Write([]byte(`
|
||||
</optgroup>
|
||||
|
||||
</select>
|
||||
<input type="hidden" name="y" id="f_y" value="">
|
||||
<input type="hidden" name="m" id="f_m" value="">
|
||||
<input type="hidden" name="p" value="0" >
|
||||
</form>
|
||||
|
||||
<div class="mini-separator layout-pushdown"></div>
|
||||
|
||||
<a class="btn" href="` + pageBase + `/page-0">«</a><a
|
||||
class="btn" id="pgprev" href="` + pageBase + `/page-` + fmt.Sprintf("%d", previousPage) + `">‹</a>
|
||||
` + fmt.Sprintf("%d", this.page) + `
|
||||
<a class="btn" id="pgnext" href="` + pageBase + `/page-` + fmt.Sprintf("%d", nextPage) + `">›</a><a
|
||||
class="btn" href="` + pageBase + `">»</a>
|
||||
`))
|
||||
}
|
||||
|
||||
w.Write([]byte(`
|
||||
<div class="pad"></div>
|
||||
|
||||
</span>
|
||||
|
||||
<span class="area-search">
|
||||
|
||||
<form method="GET">
|
||||
<input type="hidden" name="h" value="` + template.HTMLEscapeString(this.logBestSlug) + `">
|
||||
<input type="text" id="searchbox" name="q" value="` + template.HTMLEscapeString(this.query) + `" placeholder="Search...">
|
||||
<input type="submit" value="»">
|
||||
<input type="checkbox" class="layout-pushdown" name="rx" value="1" title="PCRE Regular Expression" ` + attr(this.queryIsRegex, "checked") + `>
|
||||
</form>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="layout-body" id="chatarea">
|
||||
`))
|
||||
|
||||
// Header ends
|
||||
}
|
||||
|
||||
func (this *ArchiveState) renderTemplateFoot(w http.ResponseWriter) {
|
||||
w.Write([]byte(`
|
||||
</div>
|
||||
<script type="text/javascript" src="/archive.js?nonce=` + this.nonce + `"></script>
|
||||
</body>
|
||||
</html>
|
||||
`))
|
||||
}
|
Loading…
Reference in New Issue
Block a user