Add selector for number of items per page on search view

This commit is contained in:
Las Zenow 2013-08-31 01:45:15 +02:00
parent d7b207159b
commit e9dba080a7
2 changed files with 33 additions and 10 deletions

View file

@ -26,12 +26,13 @@ func buildQuery(q string) bson.M {
} }
type searchData struct { type searchData struct {
S Status S Status
Found int Found int
Books []Book Books []Book
Page int ItemsPage int
Next string Page int
Prev string Next string
Prev string
} }
func searchHandler(w http.ResponseWriter, r *http.Request, sess *Session) { func searchHandler(w http.ResponseWriter, r *http.Request, sess *Session) {
@ -48,19 +49,21 @@ func searchHandler(w http.ResponseWriter, r *http.Request, sess *Session) {
page = 0 page = 0
} }
} }
res, num, _ := db.GetBooks(buildQuery(req), SEARCH_ITEMS_PAGE, page*SEARCH_ITEMS_PAGE) items_page := itemsPage(r)
res, num, _ := db.GetBooks(buildQuery(req), items_page, page*items_page)
var data searchData var data searchData
data.S = GetStatus(w, r) data.S = GetStatus(w, r)
data.S.Search = req data.S.Search = req
data.Books = res data.Books = res
data.ItemsPage = items_page
data.Found = num data.Found = num
data.Page = page + 1 data.Page = page + 1
if num > (page+1)*SEARCH_ITEMS_PAGE { if num > (page+1)*items_page {
data.Next = "/search/?q=" + req + "&p=" + strconv.Itoa(page+1) data.Next = "/search/?q=" + req + "&p=" + strconv.Itoa(page+1) + "&num=" + strconv.Itoa(items_page)
} }
if page > 0 { if page > 0 {
data.Prev = "/search/?q=" + req + "&p=" + strconv.Itoa(page-1) data.Prev = "/search/?q=" + req + "&p=" + strconv.Itoa(page-1) + "&num=" + strconv.Itoa(items_page)
} }
format := r.Form["fmt"] format := r.Form["fmt"]
@ -70,3 +73,13 @@ func searchHandler(w http.ResponseWriter, r *http.Request, sess *Session) {
loadTemplate(w, "search", data) loadTemplate(w, "search", data)
} }
} }
func itemsPage(r *http.Request) int {
if len(r.Form["num"]) > 0 {
items_page, err := strconv.Atoi(r.Form["num"][0])
if err == nil {
return items_page
}
}
return SEARCH_ITEMS_PAGE
}

View file

@ -50,7 +50,17 @@
<li class="previous"> <li class="previous">
<a href="{{.Prev}}">&larr; Prev</a> <a href="{{.Prev}}">&larr; Prev</a>
</li> </li>
{{else}}
<div class="span1"></div>
{{end}} {{end}}
<form class="form-inline span9 centered">
<label>Books per page: </label>
<div class="input-append" action="/search/">
<input class="span1" name="num" type="text" value="{{.ItemsPage}}" />
<button type="submit" class="btn">Ok</button>
</div>
<input class="hidden span1" name="q" type="text" value="{{.S.Search}}" />
</form>
{{if .Next}} {{if .Next}}
<li class="next"> <li class="next">
<a href="{{.Next}}">Next &rarr;</a> <a href="{{.Next}}">Next &rarr;</a>