Add paging links to web feed
This commit is contained in:
parent
3874abf8bd
commit
b434c1acfe
@ -98,7 +98,7 @@ Parity features
|
|||||||
|
|
||||||
* [x] web feed supports item TTS
|
* [x] web feed supports item TTS
|
||||||
* [x] item punt
|
* [x] item punt
|
||||||
* [ ] web feed paging
|
* [x] web feed paging
|
||||||
* [ ] web fetch
|
* [ ] web fetch
|
||||||
* [ ] set a working directory for item actions
|
* [ ] set a working directory for item actions
|
||||||
* [ ] crontab integration
|
* [ ] crontab integration
|
||||||
|
@ -37,5 +37,12 @@ tmp/intake channel add -c all -s spook
|
|||||||
|
|
||||||
tmp/intake channel add -c none -s nothing
|
tmp/intake channel add -c none -s nothing
|
||||||
|
|
||||||
|
tmp/intake source add -s page
|
||||||
|
tmp/intake item add -s page --id 1 --title "Item 1" --body "This is the body of item 1"
|
||||||
|
for i in $(seq 2 211); do
|
||||||
|
tmp/intake item add -s page --id $i --title "Item $i" --body "This is the body of item $i" 2>/dev/null
|
||||||
|
done
|
||||||
|
tmp/intake item add -s page --id 212 --title "Item 212" --body "This is the body of item 212"
|
||||||
|
|
||||||
echo "hello" | tmp/intake passwd --stdin
|
echo "hello" | tmp/intake passwd --stdin
|
||||||
echo "hello" | tmp/intake passwd --stdin --verify
|
echo "hello" | tmp/intake passwd --stdin --verify
|
||||||
|
@ -10,13 +10,16 @@ import (
|
|||||||
func (env *Env) getChannel(writer http.ResponseWriter, req *http.Request) {
|
func (env *Env) getChannel(writer http.ResponseWriter, req *http.Request) {
|
||||||
channel := req.PathValue("channel")
|
channel := req.PathValue("channel")
|
||||||
|
|
||||||
|
page := getQueryInt(req, "page", 1)
|
||||||
|
count := getQueryInt(req, "count", core.DefaultFeedLimit)
|
||||||
|
showHidden := getQueryInt(req, "hidden", 0)
|
||||||
|
|
||||||
var items []core.Item
|
var items []core.Item
|
||||||
var err error
|
var err error
|
||||||
inactive := req.URL.Query().Get("inactive") == "1"
|
if showHidden != 0 {
|
||||||
if inactive {
|
items, err = core.GetAllItemsForChannel(env.db, channel, (page-1)*count, count)
|
||||||
items, err = core.GetAllItemsForChannel(env.db, channel, 0, core.DefaultFeedLimit)
|
|
||||||
} else {
|
} else {
|
||||||
items, err = core.GetActiveItemsForChannel(env.db, channel, 0, core.DefaultFeedLimit)
|
items, err = core.GetActiveItemsForChannel(env.db, channel, (page-1)*count, count)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(writer, err.Error(), 500)
|
http.Error(writer, err.Error(), 500)
|
||||||
@ -25,6 +28,9 @@ func (env *Env) getChannel(writer http.ResponseWriter, req *http.Request) {
|
|||||||
|
|
||||||
data := html.FeedData{
|
data := html.FeedData{
|
||||||
Items: items,
|
Items: items,
|
||||||
|
ShowHidden: showHidden,
|
||||||
|
Page: page,
|
||||||
|
Count: count,
|
||||||
}
|
}
|
||||||
html.Feed(writer, data)
|
html.Feed(writer, data)
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,17 @@
|
|||||||
|
|
||||||
{{ define "content" -}}
|
{{ define "content" -}}
|
||||||
<article class="center">
|
<article class="center">
|
||||||
<span class="feed-controls">
|
<span class="feed-controls" style="display: flex; justify-content: space-between;">
|
||||||
|
<a href="?hidden={{ .ShowHidden }}&page={{ page .Page -1 }}&count={{ .Count }}"><--</a>
|
||||||
<a href="/">Home</a>
|
<a href="/">Home</a>
|
||||||
[<a href="?inactive=0">Active</a> | <a href="?inactive=1">All</a>]
|
<span>
|
||||||
|
{{ if .ShowHidden -}}
|
||||||
|
[ <a href="?hidden=0&page={{ .Page }}&count={{ .Count }}">Active</a> | All ]
|
||||||
|
{{- else -}}
|
||||||
|
[ Active | <a href="?hidden=1&page={{ .Page }}&count={{ .Count }}">All</a> ]
|
||||||
|
{{- end }}
|
||||||
|
</span>
|
||||||
|
<a href="?hidden={{ .ShowHidden }}&page={{ page .Page 1 }}&count={{ .Count }}">--></a>
|
||||||
</span>
|
</span>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
|
@ -61,12 +61,21 @@ func massDeactivateVals(items []core.Item) string {
|
|||||||
return string(vals)
|
return string(vals)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func page(i int, delta int) int {
|
||||||
|
i = i + delta
|
||||||
|
if i < 1 {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
var funcs = template.FuncMap{
|
var funcs = template.FuncMap{
|
||||||
"raw": rawHtml,
|
"raw": rawHtml,
|
||||||
"dateFormat": dateFormat,
|
"dateFormat": dateFormat,
|
||||||
"tsToDate": tsToDate,
|
"tsToDate": tsToDate,
|
||||||
"until": until,
|
"until": until,
|
||||||
"massDeacVars": massDeactivateVals,
|
"massDeacVars": massDeactivateVals,
|
||||||
|
"page": page,
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:embed intake.css
|
//go:embed intake.css
|
||||||
@ -109,6 +118,9 @@ var feed = load("feed.html", "item.html")
|
|||||||
|
|
||||||
type FeedData struct {
|
type FeedData struct {
|
||||||
Items []core.Item
|
Items []core.Item
|
||||||
|
ShowHidden int
|
||||||
|
Page int
|
||||||
|
Count int
|
||||||
}
|
}
|
||||||
|
|
||||||
func Feed(writer io.Writer, data FeedData) {
|
func Feed(writer io.Writer, data FeedData) {
|
||||||
|
11
web/main.go
11
web/main.go
@ -4,6 +4,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/Jaculabilis/intake/core"
|
"github.com/Jaculabilis/intake/core"
|
||||||
)
|
)
|
||||||
@ -48,3 +49,13 @@ func RunServer(db core.DB, addr string, port string) {
|
|||||||
|
|
||||||
log.Fatal(http.ListenAndServe(bind, nil))
|
log.Fatal(http.ListenAndServe(bind, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getQueryInt(req *http.Request, name string, def int) int {
|
||||||
|
s := req.URL.Query().Get(name)
|
||||||
|
i, err := strconv.Atoi(s)
|
||||||
|
if err != nil {
|
||||||
|
return def
|
||||||
|
} else {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -14,13 +14,16 @@ func (env *Env) getSource(writer http.ResponseWriter, req *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
page := getQueryInt(req, "page", 1)
|
||||||
|
count := getQueryInt(req, "count", core.DefaultFeedLimit)
|
||||||
|
showHidden := getQueryInt(req, "hidden", 0)
|
||||||
|
|
||||||
var items []core.Item
|
var items []core.Item
|
||||||
var err error
|
var err error
|
||||||
inactive := req.URL.Query().Get("inactive") == "1"
|
if showHidden != 0 {
|
||||||
if inactive {
|
items, err = core.GetAllItemsForSource(env.db, source, (page-1)*count, count)
|
||||||
items, err = core.GetAllItemsForSource(env.db, source, 0, core.DefaultFeedLimit)
|
|
||||||
} else {
|
} else {
|
||||||
items, err = core.GetActiveItemsForSource(env.db, source, 0, core.DefaultFeedLimit)
|
items, err = core.GetActiveItemsForSource(env.db, source, (page-1)*count, count)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(writer, err.Error(), 500)
|
http.Error(writer, err.Error(), 500)
|
||||||
@ -29,6 +32,9 @@ func (env *Env) getSource(writer http.ResponseWriter, req *http.Request) {
|
|||||||
|
|
||||||
data := html.FeedData{
|
data := html.FeedData{
|
||||||
Items: items,
|
Items: items,
|
||||||
|
ShowHidden: showHidden,
|
||||||
|
Page: page,
|
||||||
|
Count: count,
|
||||||
}
|
}
|
||||||
html.Feed(writer, data)
|
html.Feed(writer, data)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user