diff --git a/helper/maps/map.go b/helper/maps/map.go index 9ec3ae2..5fe48c8 100644 --- a/helper/maps/map.go +++ b/helper/maps/map.go @@ -48,3 +48,10 @@ func AnyAnyToStrAny(m map[any]any) (r map[string]any) { } return } + +func Reduce[T, V any, K comparable](m map[K]V, fn func(K, V, T) T, r T) T { + for k, v := range m { + r = fn(k, v, r) + } + return r +} diff --git a/internal/actions/detail.go b/internal/actions/detail.go index dafa759..7d1a863 100644 --- a/internal/actions/detail.go +++ b/internal/actions/detail.go @@ -108,6 +108,7 @@ func Detail(c *gin.Context) { ginH["comments"] = hh.formatComment(commentss, 1, d) ginH["next"] = next ginH["user"] = user + ginH["scene"] = plugins.Detail } type Comment struct { diff --git a/internal/actions/index.go b/internal/actions/index.go index b7c82b6..87aa0b1 100644 --- a/internal/actions/index.go +++ b/internal/actions/index.go @@ -312,5 +312,6 @@ func Index(c *gin.Context) { ginH["totalPage"] = h.getTotalPage(totalRaw) ginH["currentPage"] = h.page ginH["title"] = h.getTitle() + ginH["scene"] = h.scene ginH["pagination"] = pagination.NewParsePagination(totalRaw, h.pageSize, h.page, h.paginationStep, q, c.Request.URL.Path) } diff --git a/internal/pkg/dao/postmeta.go b/internal/pkg/dao/postmeta.go index a8758ff..ec92134 100644 --- a/internal/pkg/dao/postmeta.go +++ b/internal/pkg/dao/postmeta.go @@ -2,14 +2,12 @@ package dao import ( "context" - "fmt" - "github.com/fthvgb1/wp-go/helper/maps" "github.com/fthvgb1/wp-go/helper/slice" "github.com/fthvgb1/wp-go/internal/pkg/logs" "github.com/fthvgb1/wp-go/internal/pkg/models" + "github.com/fthvgb1/wp-go/internal/plugins" "github.com/fthvgb1/wp-go/model" "strconv" - "strings" ) func GetPostMetaByPostIds(args ...any) (r map[uint64]map[string]any, err error) { @@ -64,35 +62,9 @@ func ToPostThumb(c context.Context, meta map[string]any, host string) (r models. if ok { metadata, ok := x.(models.WpAttachmentMetadata) if ok { - r = thumbnail(metadata, "post-thumbnail", host) + r = plugins.Thumbnail(metadata, "post-thumbnail", host, "thumbnail") } } } return } - -func thumbnail(metadata models.WpAttachmentMetadata, thumbType, host string) (r models.PostThumbnail) { - if _, ok := metadata.Sizes[thumbType]; ok { - r.Path = fmt.Sprintf("%s/wp-content/uploads/%s", host, metadata.File) - r.Width = metadata.Sizes[thumbType].Width - r.Height = metadata.Sizes[thumbType].Height - up := strings.Split(metadata.File, "/") - r.Srcset = strings.Join(maps.FilterToSlice[string](metadata.Sizes, func(s string, size models.MetaDataFileSize) (r string, ok bool) { - up[2] = size.File - if s == "post-thumbnail" { - return - } - r = fmt.Sprintf("%s/wp-content/uploads/%s %dw", host, strings.Join(up, "/"), size.Width) - ok = true - return - }), ", ") - r.Sizes = fmt.Sprintf("(max-width: %dpx) 100vw, %dpx", r.Width, r.Width) - if r.Width >= 740 && r.Width < 767 { - r.Sizes = "(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px" - } else if r.Width >= 767 { - r.Sizes = "(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" - } - r.OriginAttachmentData = metadata - } - return -} diff --git a/internal/pkg/dao/posts.go b/internal/pkg/dao/posts.go index 089c586..92a4e4f 100644 --- a/internal/pkg/dao/posts.go +++ b/internal/pkg/dao/posts.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/fthvgb1/wp-go/helper/slice" "github.com/fthvgb1/wp-go/internal/pkg/models" + "github.com/fthvgb1/wp-go/internal/plugins" "github.com/fthvgb1/wp-go/internal/wpconfig" "github.com/fthvgb1/wp-go/model" "strings" @@ -68,7 +69,7 @@ func GetPostsByIds(ids ...any) (m map[uint64]models.Posts, err error) { pp.Thumbnail = thumb } } else if pp.PostType == "attachment" && pp.AttachmentMetadata.File != "" { - thumb := thumbnail(pp.AttachmentMetadata, "thumbnail", host) + thumb := plugins.Thumbnail(pp.AttachmentMetadata, "thumbnail", host, "thumbnail", "post-thumbnail") if thumb.Path != "" { pp.Thumbnail = thumb } diff --git a/internal/plugins/thumbnail.go b/internal/plugins/thumbnail.go new file mode 100644 index 0000000..a124589 --- /dev/null +++ b/internal/plugins/thumbnail.go @@ -0,0 +1,36 @@ +package plugins + +import ( + "fmt" + "github.com/fthvgb1/wp-go/helper/maps" + "github.com/fthvgb1/wp-go/internal/pkg/models" + "strings" +) + +func Thumbnail(metadata models.WpAttachmentMetadata, Type, host string, except ...string) (r models.PostThumbnail) { + if _, ok := metadata.Sizes[Type]; ok { + r.Path = fmt.Sprintf("%s/wp-content/uploads/%s", host, metadata.File) + r.Width = metadata.Sizes[Type].Width + r.Height = metadata.Sizes[Type].Height + up := strings.Split(metadata.File, "/") + r.Srcset = strings.Join(maps.FilterToSlice[string](metadata.Sizes, func(s string, size models.MetaDataFileSize) (r string, ok bool) { + up[2] = size.File + for _, s2 := range except { + if s == s2 { + return + } + } + r = fmt.Sprintf("%s/wp-content/uploads/%s %dw", host, strings.Join(up, "/"), size.Width) + ok = true + return + }), ", ") + r.Sizes = fmt.Sprintf("(max-width: %dpx) 100vw, %dpx", r.Width, r.Width) + if r.Width >= 740 && r.Width < 767 { + r.Sizes = "(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px" + } else if r.Width >= 767 { + r.Sizes = "(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" + } + r.OriginAttachmentData = metadata + } + return +} diff --git a/internal/theme/twentyseventeen/layout/base.gohtml b/internal/theme/twentyseventeen/layout/base.gohtml index 3c35463..d4d3f32 100644 --- a/internal/theme/twentyseventeen/layout/base.gohtml +++ b/internal/theme/twentyseventeen/layout/base.gohtml @@ -6,7 +6,7 @@ {{block "head" .}} {{end}} -
+ {{template "svg"}}