diff --git a/views/components/image_card.templ b/views/components/image_card.templ
index 78dd5fb..d434534 100644
--- a/views/components/image_card.templ
+++ b/views/components/image_card.templ
@@ -71,8 +71,8 @@ templ ImageCard(data *models.Image, opts ImageCardOption) {
{ formatByteSize(data.ImageSize) }
if data.R.Device != nil && !opts.Has(HideDevice) {
-
- { data.R.Device.Name }
+
+ { data.R.Device.Name }
}
diff --git a/views/components/pagination.templ b/views/components/pagination.templ
index 5ca2a37..14235ac 100644
--- a/views/components/pagination.templ
+++ b/views/components/pagination.templ
@@ -4,28 +4,131 @@ import "github.com/tigorlazuardi/redmage/views"
import "strconv"
import "github.com/tigorlazuardi/redmage/views/utils"
import "strings"
+import "fmt"
type PaginationData struct {
- Offset int64
- Limit int64
- BaseURL string
- Total int64
- Classes []string
+ Offset int64
+ Limit int64
+ BaseURL string
+ Total int64
+ Classes []string
+ UnhideRange int
+}
+
+type pageStatus int
+
+const (
+ pageStatusShow = iota
+ pageStatusHidden
+ pageStatusDot
+)
+
+func (pgdata PaginationData) GetUnhideRange() int {
+ if pgdata.UnhideRange < 1 {
+ return 2
+ }
+ return pgdata.UnhideRange
+}
+
+func (pgdata PaginationData) getPageStatus(page int) pageStatus {
+ if page < 2 {
+ return pageStatusShow
+ }
+ lastPage := (pgdata.Total / max(pgdata.Limit, 1)) + 1
+ if page == int(lastPage) {
+ return pageStatusShow
+ }
+ current := pgdata.GetCurrentPage()
+ unhideRange := pgdata.GetUnhideRange()
+ if page == current-unhideRange-1 {
+ return pageStatusDot
+ }
+ if page == current+unhideRange+1 {
+ return pageStatusDot
+ }
+ if page >= current-unhideRange && page <= current+unhideRange {
+ return pageStatusShow
+ }
+
+ return pageStatusHidden
+}
+
+func (pgdata PaginationData) GetCurrentPage() int {
+ return int(pgdata.Offset/pgdata.Limit) + 1
+}
+
+func (pgdata PaginationData) GetTotalPage() int {
+ return int(pgdata.Total/max(pgdata.Limit, 1)) + 1
}
templ Pagination(c *views.Context, data PaginationData) {
if data.Total > data.Limit {
-
}
}
diff --git a/views/context.go b/views/context.go
index d8f4dda..4afb4ea 100644
--- a/views/context.go
+++ b/views/context.go
@@ -1,6 +1,7 @@
package views
import (
+ "encoding/json"
"fmt"
"net/http"
"net/url"
@@ -35,6 +36,18 @@ func (c *Context) URLWithExtraQuery(baseUrl string, extraKeyValues ...string) te
return templ.SafeURL(fmt.Sprintf("%s?%s", baseUrl, query.Encode()))
}
+func (c *Context) JSONQuery() string {
+ m := make(map[string]string, len(c.Query))
+ for k := range c.Query {
+ v := c.Query.Get(k)
+ if v != "" {
+ m[k] = v
+ }
+ }
+ v, _ := json.Marshal(m)
+ return string(v)
+}
+
func NewContext(config *config.Config, request *http.Request) *Context {
return &Context{
Config: config,