重构列表文档页插件 优化日志及去掉一些无用代码
This commit is contained in:
parent
df7bd8c1c6
commit
e505ee2e03
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
.idea
|
||||
wp-go.iml
|
||||
config.yaml
|
||||
err.log
|
||||
|
@ -12,8 +12,10 @@ import (
|
||||
)
|
||||
|
||||
var logs = safety.NewVar[*log.Logger](nil)
|
||||
var logFile = safety.NewVar[*os.File](nil)
|
||||
|
||||
func InitLogger() error {
|
||||
preFD := logFile.Load()
|
||||
l := &log.Logger{}
|
||||
c := config.GetConfig()
|
||||
if c.LogOutput == "" {
|
||||
@ -31,6 +33,10 @@ func InitLogger() error {
|
||||
return err
|
||||
}
|
||||
out = file
|
||||
logFile.Store(file)
|
||||
}
|
||||
if preFD != nil {
|
||||
_ = preFD.Close()
|
||||
}
|
||||
logs.Store(l)
|
||||
l.SetFlags(log.Ldate | log.Ltime)
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/constraints"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/constraints/widgets"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/logs"
|
||||
"github.com/fthvgb1/wp-go/internal/plugins"
|
||||
"github.com/fthvgb1/wp-go/internal/plugins/wphandle"
|
||||
"github.com/fthvgb1/wp-go/internal/theme/wp"
|
||||
"github.com/fthvgb1/wp-go/internal/theme/wp/components"
|
||||
@ -62,12 +63,15 @@ func data(next wp.HandleFn[*wp.Handle], h *wp.Handle) {
|
||||
}
|
||||
|
||||
func configs(h *wp.Handle) {
|
||||
conf := config.GetConfig()
|
||||
h.PushComponentFilterFn(widgets.Search, func(h *wp.Handle, s string, args ...any) string {
|
||||
return strings.ReplaceAll(s, `class="search-submit"`, `class="search-submit screen-reader-text"`)
|
||||
})
|
||||
wphandle.RegisterPlugins(h, config.GetConfig().Plugins...)
|
||||
h.Index.SetPageEle(plugins.TwentyFifteenPagination())
|
||||
wphandle.RegisterPlugins(h, conf.Plugins...)
|
||||
h.PushCacheGroupHeadScript("CalCustomBackGround", 10, CalCustomBackGround, colorSchemeCss)
|
||||
h.CommonComponents()
|
||||
h.Index.SetListPlugin(wp.PostsPlugins(wp.PostPlugin(), wp.GetListPostPlugins(conf.ListPagePlugins, wp.ListPostPlugins())...))
|
||||
h.PushHandleFn(constraints.Ok, wp.NewHandleFn(components.WidgetArea, 20))
|
||||
h.PushHandleFn(constraints.AllStats, wp.NewHandleFn(customHeader, 10))
|
||||
h.PushHandleFn(constraints.AllStats, wp.NewHandleFn(wp.IndexRender, 50))
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/fthvgb1/wp-go/helper"
|
||||
"github.com/fthvgb1/wp-go/helper/maps"
|
||||
str "github.com/fthvgb1/wp-go/helper/strings"
|
||||
"github.com/fthvgb1/wp-go/internal/cmd/reload"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/config"
|
||||
@ -50,7 +49,8 @@ func Hook(h *wp.Handle) {
|
||||
}
|
||||
|
||||
func configs(h *wp.Handle) {
|
||||
wphandle.RegisterPlugins(h, config.GetConfig().Plugins...)
|
||||
conf := config.GetConfig()
|
||||
wphandle.RegisterPlugins(h, conf.Plugins...)
|
||||
h.PushHandleFn(constraints.AllStats, wp.NewHandleFn(calClass, 20))
|
||||
h.PushCacheGroupHeadScript("colorScheme-customHeader", 10, colorScheme, customHeader)
|
||||
components.WidgetArea(h)
|
||||
@ -64,6 +64,8 @@ func configs(h *wp.Handle) {
|
||||
})
|
||||
h.PushGroupHandleFn(constraints.AllStats, 90, wp.PreTemplate, errorsHandle)
|
||||
h.CommonComponents()
|
||||
h.Index.SetPageEle(paginate)
|
||||
h.Index.SetListPlugin(wp.PostsPlugins(wp.PostPlugin(postThumbnail), wp.GetListPostPlugins(conf.ListPagePlugins, wp.ListPostPlugins())...))
|
||||
wp.SetComponentsArgsForMap(h, widgets.Search, "{$form}", searchForm)
|
||||
h.PushHandleFn(constraints.AllStats, wp.NewHandleFn(wp.IndexRender, 10))
|
||||
h.PushHandleFn(constraints.Detail, wp.NewHandleFn(wp.DetailRender, 10))
|
||||
@ -85,12 +87,6 @@ var searchForm = `<form role="search" method="get" class="search-form" action="/
|
||||
</button>
|
||||
</form>`
|
||||
|
||||
var listPostsPlugins = func() map[string]wp.Plugin[models.Posts, *wp.Handle] {
|
||||
return maps.Merge(wp.ListPostPlugins(), map[string]wp.Plugin[models.Posts, *wp.Handle]{
|
||||
"twentyseventeen_postThumbnail": postThumbnail,
|
||||
})
|
||||
}()
|
||||
|
||||
func errorsHandle(h *wp.Handle) {
|
||||
switch h.Stats {
|
||||
case constraints.Error404, constraints.InternalErr, constraints.ParamError:
|
||||
@ -120,8 +116,6 @@ func index(h *wp.Handle) {
|
||||
i.SetErr(err)
|
||||
}
|
||||
h.SetData("scene", h.Scene())
|
||||
i.SetPageEle(paginate)
|
||||
i.SetPostsPlugins(listPostsPlugins)
|
||||
}
|
||||
|
||||
func detail(h *wp.Handle) {
|
||||
@ -159,14 +153,13 @@ func (c comment) FormatLi(ctx *gin.Context, m models.Comments, depth int, isTls
|
||||
return plugins.FormatLi(templ, ctx, m, depth, isTls, eo, parent)
|
||||
}
|
||||
|
||||
func postThumbnail(next wp.Fn[models.Posts], h *wp.Handle, t models.Posts) models.Posts {
|
||||
if t.Thumbnail.Path != "" {
|
||||
t.Thumbnail.Sizes = "(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px"
|
||||
func postThumbnail(h *wp.Handle, posts *models.Posts) {
|
||||
if posts.Thumbnail.Path != "" {
|
||||
posts.Thumbnail.Sizes = "(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px"
|
||||
if h.Scene() == constraints.Detail {
|
||||
t.Thumbnail.Sizes = "100vw"
|
||||
posts.Thumbnail.Sizes = "100vw"
|
||||
}
|
||||
}
|
||||
return next(t)
|
||||
}
|
||||
|
||||
var header = reload.Vars(models.PostThumbnail{})
|
||||
|
@ -100,21 +100,6 @@ func (d *DetailHandle) ContextPost() {
|
||||
d.ginH["prev"] = prev
|
||||
}
|
||||
|
||||
func (d *DetailHandle) Render() {
|
||||
d.PushHandleFn(constraints.Ok, NewHandleFn(func(h *Handle) {
|
||||
d.PasswordProject()
|
||||
d.RenderComment()
|
||||
d.ginH["post"] = d.Post
|
||||
reply := ""
|
||||
if d.Post.CommentStatus == "open" && wpconfig.GetOption("thread_comments") == "1" {
|
||||
reply = `<script src='/wp-includes/js/comment-reply.min.js' id='comment-reply-js'></script>`
|
||||
}
|
||||
d.PushGroupFooterScript(10, reply)
|
||||
}, 10))
|
||||
|
||||
d.Handle.Render()
|
||||
}
|
||||
|
||||
func DetailRender(h *Handle) {
|
||||
if h.Stats != constraints.Ok {
|
||||
return
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
"github.com/fthvgb1/wp-go/helper/number"
|
||||
"github.com/fthvgb1/wp-go/helper/slice"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/cache"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/config"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/constraints"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
||||
"github.com/fthvgb1/wp-go/internal/plugins"
|
||||
@ -17,11 +16,19 @@ import (
|
||||
|
||||
type IndexHandle struct {
|
||||
*Handle
|
||||
Param *IndexParams
|
||||
Posts []models.Posts
|
||||
pageEle pagination.Elements
|
||||
TotalRows int
|
||||
postsPlugins map[string]Plugin[models.Posts, *Handle]
|
||||
Param *IndexParams
|
||||
Posts []models.Posts
|
||||
pageEle pagination.Elements
|
||||
TotalRows int
|
||||
postsPlugin PostsPlugin
|
||||
}
|
||||
|
||||
func (i *IndexHandle) ListPlugin() func(*Handle, *models.Posts) {
|
||||
return i.postsPlugin
|
||||
}
|
||||
|
||||
func (i *IndexHandle) SetListPlugin(listPlugin func(*Handle, *models.Posts)) {
|
||||
i.postsPlugin = listPlugin
|
||||
}
|
||||
|
||||
func (i *IndexHandle) PageEle() pagination.Elements {
|
||||
@ -32,14 +39,6 @@ func (i *IndexHandle) SetPageEle(pageEle pagination.Elements) {
|
||||
i.pageEle = pageEle
|
||||
}
|
||||
|
||||
func (i *IndexHandle) PostsPlugins() map[string]Plugin[models.Posts, *Handle] {
|
||||
return i.postsPlugins
|
||||
}
|
||||
|
||||
func (i *IndexHandle) SetPostsPlugins(postsPlugins map[string]Plugin[models.Posts, *Handle]) {
|
||||
i.postsPlugins = postsPlugins
|
||||
}
|
||||
|
||||
func NewIndexHandle(handle *Handle) *IndexHandle {
|
||||
return &IndexHandle{Handle: handle}
|
||||
}
|
||||
@ -126,34 +125,16 @@ func (i *IndexHandle) BuildIndexData(parm *IndexParams) (err error) {
|
||||
}
|
||||
i.Posts = posts
|
||||
i.TotalRows = totalRows
|
||||
|
||||
i.ginH["totalPage"] = number.CalTotalPage(totalRows, i.Param.PageSize)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (i *IndexHandle) ExecPostsPlugin(calls ...func(*models.Posts)) {
|
||||
|
||||
pluginConf := config.GetConfig().ListPagePlugins
|
||||
|
||||
postsPlugins := i.postsPlugins
|
||||
if postsPlugins == nil {
|
||||
postsPlugins = pluginFns
|
||||
func (i *IndexHandle) ExecPostsPlugin() {
|
||||
if i.postsPlugin != nil {
|
||||
for j := range i.Posts {
|
||||
i.postsPlugin(i.Handle, &i.Posts[j])
|
||||
}
|
||||
}
|
||||
plugin := GetListPostPlugins(pluginConf, postsPlugins)
|
||||
|
||||
i.Posts = slice.Map(i.Posts, PluginFn[models.Posts](plugin, i.Handle, Defaults(calls...)))
|
||||
|
||||
}
|
||||
|
||||
func (i *IndexHandle) Render() {
|
||||
i.PushHandleFn(constraints.Ok, NewHandleFn(func(h *Handle) {
|
||||
i.ExecPostsPlugin()
|
||||
i.Pagination()
|
||||
i.ginH["posts"] = i.Posts
|
||||
}, 10))
|
||||
|
||||
i.Handle.Render()
|
||||
}
|
||||
|
||||
func IndexRender(h *Handle) {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package wp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"github.com/fthvgb1/wp-go/helper/maps"
|
||||
"github.com/fthvgb1/wp-go/helper/slice"
|
||||
@ -13,47 +12,53 @@ import (
|
||||
"github.com/fthvgb1/wp-go/internal/plugins/wpposts"
|
||||
)
|
||||
|
||||
type Fn[T any] func(T) T
|
||||
type Plugin[T, H any] func(initialFn Fn[T], h H, t T) T
|
||||
type PostsPlugin func(*Handle, *models.Posts)
|
||||
|
||||
func PluginFn[T, H any](a []Plugin[T, H], h H, fn Fn[T]) Fn[T] {
|
||||
return slice.ReverseReduce(a, func(next Plugin[T, H], fn Fn[T]) Fn[T] {
|
||||
return func(t T) T {
|
||||
return next(fn, h, t)
|
||||
func PostsPlugins(initial PostsPlugin, calls ...func(PostsPlugin, *Handle, *models.Posts)) PostsPlugin {
|
||||
return slice.ReverseReduce(calls, func(t func(PostsPlugin, *Handle, *models.Posts), r PostsPlugin) PostsPlugin {
|
||||
return func(handle *Handle, posts *models.Posts) {
|
||||
t(r, handle, posts)
|
||||
}
|
||||
}, fn)
|
||||
}, initial)
|
||||
}
|
||||
|
||||
var pluginFns = map[string]Plugin[models.Posts, *Handle]{
|
||||
var pluginFns = map[string]func(PostsPlugin, *Handle, *models.Posts){
|
||||
"passwordProject": PasswordProject,
|
||||
"digest": Digest,
|
||||
}
|
||||
|
||||
// PasswordProject 标题和内容密码保护
|
||||
func PasswordProject(next Fn[models.Posts], h *Handle, post models.Posts) (r models.Posts) {
|
||||
r = post
|
||||
func PasswordProject(next PostsPlugin, h *Handle, post *models.Posts) {
|
||||
r := post
|
||||
if post.PostPassword != "" {
|
||||
wpposts.PasswordProjectTitle(&r)
|
||||
wpposts.PasswordProjectTitle(r)
|
||||
if h.password != post.PostPassword {
|
||||
wpposts.PasswdProjectContent(&r)
|
||||
wpposts.PasswdProjectContent(r)
|
||||
return
|
||||
}
|
||||
}
|
||||
r = next(r)
|
||||
return
|
||||
next(h, r)
|
||||
}
|
||||
|
||||
// Digest 生成摘要 注意放到最后,不继续往下执行
|
||||
func Digest(next Fn[models.Posts], h *Handle, post models.Posts) models.Posts {
|
||||
// Digest 生成摘要
|
||||
func Digest(next PostsPlugin, h *Handle, post *models.Posts) {
|
||||
if post.PostExcerpt != "" {
|
||||
plugins.PostExcerpt(&post)
|
||||
plugins.PostExcerpt(post)
|
||||
} else {
|
||||
plugins.Digest(h.C, &post, config.GetConfig().DigestWordCount)
|
||||
plugins.Digest(h.C, post, config.GetConfig().DigestWordCount)
|
||||
}
|
||||
return post
|
||||
next(h, post)
|
||||
}
|
||||
|
||||
func ListPostPlugins() map[string]Plugin[models.Posts, *Handle] {
|
||||
func PostPlugin(calls ...func(h *Handle, posts *models.Posts)) PostsPlugin {
|
||||
return func(h *Handle, posts *models.Posts) {
|
||||
for _, call := range calls {
|
||||
call(h, posts)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func ListPostPlugins() map[string]func(PostsPlugin, *Handle, *models.Posts) {
|
||||
return maps.Copy(pluginFns)
|
||||
}
|
||||
|
||||
@ -64,8 +69,8 @@ func ProjectTitle(t models.Posts) models.Posts {
|
||||
return t
|
||||
}
|
||||
|
||||
func GetListPostPlugins(name []string, m map[string]Plugin[models.Posts, *Handle]) []Plugin[models.Posts, *Handle] {
|
||||
return slice.FilterAndMap(name, func(t string) (Plugin[models.Posts, *Handle], bool) {
|
||||
func GetListPostPlugins(name []string, m map[string]func(PostsPlugin, *Handle, *models.Posts)) []func(PostsPlugin, *Handle, *models.Posts) {
|
||||
return slice.FilterAndMap(name, func(t string) (func(PostsPlugin, *Handle, *models.Posts), bool) {
|
||||
v, ok := m[t]
|
||||
if ok {
|
||||
return v, true
|
||||
@ -74,38 +79,3 @@ func GetListPostPlugins(name []string, m map[string]Plugin[models.Posts, *Handle
|
||||
return nil, false
|
||||
})
|
||||
}
|
||||
|
||||
func DigestsAndOthers(ctx context.Context, calls ...func(*models.Posts)) Fn[models.Posts] {
|
||||
return func(post models.Posts) models.Posts {
|
||||
if post.PostExcerpt != "" {
|
||||
plugins.PostExcerpt(&post)
|
||||
} else {
|
||||
plugins.Digest(ctx, &post, config.GetConfig().DigestWordCount)
|
||||
}
|
||||
if len(calls) > 0 {
|
||||
for _, call := range calls {
|
||||
call(&post)
|
||||
}
|
||||
}
|
||||
return post
|
||||
}
|
||||
}
|
||||
|
||||
func (i *IndexHandle) ExecListPagePlugin(m map[string]Plugin[models.Posts, *Handle], calls ...func(*models.Posts)) {
|
||||
|
||||
pluginConf := config.GetConfig().ListPagePlugins
|
||||
|
||||
plugin := GetListPostPlugins(pluginConf, m)
|
||||
|
||||
i.ginH["posts"] = slice.Map(i.Posts, PluginFn[models.Posts, *Handle](plugin, i.Handle, Defaults(calls...)))
|
||||
|
||||
}
|
||||
|
||||
func Defaults(call ...func(*models.Posts)) Fn[models.Posts] {
|
||||
return func(posts models.Posts) models.Posts {
|
||||
for _, fn := range call {
|
||||
fn(&posts)
|
||||
}
|
||||
return posts
|
||||
}
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ type HandleCall struct {
|
||||
}
|
||||
|
||||
func InitThemeArgAndConfig(fn func(*Handle), h *Handle) {
|
||||
var inited = false
|
||||
hh := reload.GetAnyValBys("themeArgAndConfig", h, func(h *Handle) Handle {
|
||||
h.components = make(map[string][]Components[string])
|
||||
h.handleFns = make(map[int][]HandleCall)
|
||||
@ -73,6 +74,7 @@ func InitThemeArgAndConfig(fn func(*Handle), h *Handle) {
|
||||
h.componentFilterFn = make(map[string][]func(*Handle, string, ...any) string)
|
||||
h.ginH = gin.H{}
|
||||
fn(h)
|
||||
inited = true
|
||||
return *h
|
||||
})
|
||||
m := make(map[string][]Components[string])
|
||||
@ -82,10 +84,16 @@ func InitThemeArgAndConfig(fn func(*Handle), h *Handle) {
|
||||
m[k] = vv
|
||||
}
|
||||
h.components = m
|
||||
h.ginH = maps.Copy(hh.ginH)
|
||||
if inited {
|
||||
return
|
||||
}
|
||||
h.Index.postsPlugin = hh.Index.postsPlugin
|
||||
h.Index.pageEle = hh.Index.pageEle
|
||||
h.Detail.CommentRender = hh.Detail.CommentRender
|
||||
h.handleFns = hh.handleFns
|
||||
h.componentsArgs = hh.componentsArgs
|
||||
h.componentFilterFn = hh.componentFilterFn
|
||||
h.ginH = maps.Copy(hh.ginH)
|
||||
}
|
||||
|
||||
func (h *Handle) ComponentFilterFn(name string) ([]func(*Handle, string, ...any) string, bool) {
|
||||
@ -430,12 +438,3 @@ func ExecuteHandleFn(h *Handle) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Render(h *Handle) {
|
||||
switch h.scene {
|
||||
case constraints.Detail:
|
||||
h.Detail.Render()
|
||||
default:
|
||||
h.Index.Render()
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user