diff --git a/internal/plugins/wphandle/enlightjs/enlighterjs.go b/internal/plugins/wphandle/enlightjs/enlighterjs.go
index bd911be..435732d 100644
--- a/internal/plugins/wphandle/enlightjs/enlighterjs.go
+++ b/internal/plugins/wphandle/enlightjs/enlighterjs.go
@@ -37,7 +37,7 @@ type Selectors struct {
}
func EnlighterJS(h *wp.Handle) {
- h.PushGroupHeadScript(20, ``)
+ h.PushGroupHeadScript("enlighterjs-css", 20, ``)
h.PushCacheGroupFooterScript("enlighterJs", 10, func(h *wp.Handle) string {
op := wpconfig.GetOption("enlighter-options")
diff --git a/internal/theme/twentyfifteen/twentyfifteen.go b/internal/theme/twentyfifteen/twentyfifteen.go
index 22da18a..4373f53 100644
--- a/internal/theme/twentyfifteen/twentyfifteen.go
+++ b/internal/theme/twentyfifteen/twentyfifteen.go
@@ -67,6 +67,7 @@ func configs(h *wp.Handle) {
h.CommonComponents()
h.Index.SetListPlugin(wp.PostsPlugins(wp.PostPlugin(), wp.GetListPostPlugins(conf.ListPagePlugins, wp.ListPostPlugins())...))
components.WidgetArea(h)
+ wp.ReplyCommentJs(h)
h.SetData("customHeader", customHeader(h))
h.PushRender(constraints.AllStats, wp.NewHandleFn(wp.IndexRender, 50, "wp.IndexRender"))
h.PushRender(constraints.Detail, wp.NewHandleFn(wp.DetailRender, 50, "wp.DetailRender"))
diff --git a/internal/theme/twentyseventeen/script.go b/internal/theme/twentyseventeen/script.go
index f62e538..ce3ce79 100644
--- a/internal/theme/twentyseventeen/script.go
+++ b/internal/theme/twentyseventeen/script.go
@@ -7,14 +7,14 @@ import (
)
func pushScripts(h *wp.Handle) {
- h.PushCacheGroupHeadScript("head", 30, func(h *wp.Handle) string {
+ h.PushCacheGroupHeadScript("{theme}.head", 30, func(h *wp.Handle) string {
head := headScript
if "dark" == wpconfig.GetThemeModsVal(ThemeName, "colorscheme", "light") {
head = fmt.Sprintf("%s\n%s", headScript, ` `)
}
return head
})
- h.PushGroupFooterScript(20, footerScript)
+ h.PushGroupFooterScript("{theme}.footer", 20, footerScript)
}
diff --git a/internal/theme/wp/components.go b/internal/theme/wp/components.go
new file mode 100644
index 0000000..3cf9f0b
--- /dev/null
+++ b/internal/theme/wp/components.go
@@ -0,0 +1,200 @@
+package wp
+
+import (
+ "github.com/fthvgb1/wp-go/helper/maps"
+ "github.com/fthvgb1/wp-go/helper/slice"
+ str "github.com/fthvgb1/wp-go/helper/strings"
+ "github.com/fthvgb1/wp-go/internal/cmd/reload"
+ "github.com/fthvgb1/wp-go/internal/pkg/constraints"
+ "strings"
+)
+
+func (h *Handle) DeleteComponents(scene, name string) {
+ h.componentHook[scene] = append(h.componentHook[scene], func(c Components[string]) (Components[string], bool) {
+ return c, c.Name != name
+ })
+}
+func (h *Handle) ReplaceComponents(scene, name string, components Components[string]) {
+ h.componentHook[scene] = append(h.componentHook[scene], func(c Components[string]) (Components[string], bool) {
+ if c.Name == name {
+ c = components
+ }
+ return c, true
+ })
+}
+func (h *Handle) HookComponents(scene string, fn func(Components[string]) (Components[string], bool)) {
+ h.componentHook[scene] = append(h.componentHook[scene], fn)
+}
+
+func CalComponents(h *Handle) {
+ for k, components := range h.components {
+ key := str.Join("calComponents-", k)
+ key = h.ComponentFilterFnHook("calComponents", key, k)
+ ss := reload.GetAnyValMapBy("calComponents", key, h, func(h *Handle) []Components[string] {
+ r := slice.FilterAndMap(components, func(t Components[string]) (Components[string], bool) {
+ fns, ok := h.componentHook[k]
+ if !ok {
+ return t, true
+ }
+ for _, fn := range fns {
+ c, ok := fn(t)
+ if !ok {
+ return c, false
+ }
+ t = c
+ }
+ return t, true
+ })
+ slice.Sort(r, func(i, j Components[string]) bool {
+ return i.Order > j.Order
+ })
+ return r
+ })
+ var s = make([]string, 0, len(ss))
+ for _, component := range ss {
+ if component.Val != "" {
+ s = append(s, component.Val)
+ continue
+ }
+ if component.Fn != nil {
+ v := ""
+ if component.Cached {
+ v = reload.GetAnyValMapBy("cacheComponents", component.Name, h, component.Fn)
+ } else {
+ v = component.Fn(h)
+ }
+ if v != "" {
+ s = append(s, v)
+ }
+ }
+ }
+ h.ginH[k] = strings.Join(s, "\n")
+ }
+}
+
+func (h *Handle) PushComponents(name string, components ...Components[string]) {
+ h.components[name] = append(h.components[name], components...)
+}
+
+func (h *Handle) PushGroupComponentStr(componentType, name string, order int, strs ...string) {
+ var calls []Components[string]
+ for _, val := range strs {
+ calls = append(calls, Components[string]{
+ Val: val,
+ Order: order,
+ Name: name,
+ })
+ }
+ h.components[componentType] = append(h.components[componentType], calls...)
+}
+
+func (h *Handle) PushCacheGroupHeadScript(key string, order int, fns ...func(*Handle) string) {
+ h.PushGroupCacheComponentFn(constraints.HeadScript, key, order, fns...)
+}
+
+func (h *Handle) PushFooterScript(components ...Components[string]) {
+ h.PushComponents(constraints.FooterScript, components...)
+}
+
+func (h *Handle) PushGroupFooterScript(name string, order int, strs ...string) {
+ h.PushGroupComponentStr(constraints.FooterScript, name, order, strs...)
+}
+
+func (h *Handle) PushCacheGroupFooterScript(name string, order int, fns ...func(*Handle) string) {
+ h.PushGroupCacheComponentFn(constraints.FooterScript, name, order, fns...)
+}
+func (h *Handle) PushGroupCacheComponentFn(componentType, name string, order int, fns ...func(*Handle) string) {
+ h.PushComponents(componentType, h.NewComponent(name, true, order, func(h *Handle) string {
+ return strings.Join(slice.Map(fns, func(t func(*Handle) string) string {
+ return t(h)
+ }), "\n")
+ }))
+}
+
+func (h *Handle) NewComponent(name string, cached bool, order int, fn func(handle *Handle) string) Components[string] {
+ return Components[string]{Fn: fn, Name: name, Cached: cached, Order: order}
+}
+
+func (h *Handle) AddCacheComponent(componentType, name string, order int, fn func(*Handle) string) {
+ h.components[componentType] = append(h.components[componentType], h.NewComponent(name, true, order, fn))
+}
+
+func (h *Handle) PushHeadScript(components ...Components[string]) {
+ h.PushComponents(constraints.HeadScript, components...)
+}
+func (h *Handle) PushGroupHeadScript(name string, order int, str ...string) {
+ h.PushGroupComponentStr(constraints.HeadScript, name, order, str...)
+}
+
+func GetComponentsArgs[T any](h *Handle, k string, defaults T) T {
+ v, ok := h.componentsArgs[k]
+ if ok {
+ vv, ok := v.(T)
+ if ok {
+ return vv
+ }
+ }
+ return defaults
+}
+
+func PushComponentsArgsForSlice[T any](h *Handle, name string, v ...T) {
+ val, ok := h.componentsArgs[name]
+ if !ok {
+ var vv []T
+ vv = append(vv, v...)
+ h.componentsArgs[name] = vv
+ return
+ }
+ vv, ok := val.([]T)
+ if ok {
+ vv = append(vv, v...)
+ h.componentsArgs[name] = vv
+ }
+}
+func SetComponentsArgsForMap[K comparable, V any](h *Handle, name string, key K, v V) {
+ val, ok := h.componentsArgs[name]
+ if !ok {
+ vv := make(map[K]V)
+ vv[key] = v
+ h.componentsArgs[name] = vv
+ return
+ }
+ vv, ok := val.(map[K]V)
+ if ok {
+ vv[key] = v
+ h.componentsArgs[name] = vv
+ }
+}
+func MergeComponentsArgsForMap[K comparable, V any](h *Handle, name string, m map[K]V) {
+ val, ok := h.componentsArgs[name]
+ if !ok {
+ h.componentsArgs[name] = m
+ return
+ }
+ vv, ok := val.(map[K]V)
+ if ok {
+ h.componentsArgs[name] = maps.Merge(vv, m)
+ }
+}
+
+func (h *Handle) SetComponentsArgs(key string, value any) {
+ h.componentsArgs[key] = value
+}
+
+func (h *Handle) ComponentFilterFn(name string) ([]func(*Handle, string, ...any) string, bool) {
+ fn, ok := h.componentFilterFn[name]
+ return fn, ok
+}
+
+func (h *Handle) PushComponentFilterFn(name string, fns ...func(*Handle, string, ...any) string) {
+ h.componentFilterFn[name] = append(h.componentFilterFn[name], fns...)
+}
+func (h *Handle) ComponentFilterFnHook(name, s string, args ...any) string {
+ calls, ok := h.componentFilterFn[name]
+ if ok {
+ return slice.Reduce(calls, func(fn func(*Handle, string, ...any) string, r string) string {
+ return fn(h, r, args...)
+ }, s)
+ }
+ return s
+}
diff --git a/internal/theme/wp/components/widgetareadata.go b/internal/theme/wp/components/widgetareadata.go
index d414dd9..9ec97fa 100644
--- a/internal/theme/wp/components/widgetareadata.go
+++ b/internal/theme/wp/components/widgetareadata.go
@@ -10,17 +10,18 @@ import (
)
var widgetFn = map[string]widgetComponent{
- "search": {fn: widget.Search},
- "recent-posts": {fn: widget.RecentPosts},
- "recent-comments": {fn: widget.RecentComments},
- "archives": {fn: widget.Archive},
- "categories": {fn: widget.Category},
- "meta": {fn: widget.Meta, cacheKey: "widgetMeta"},
+ "search": {fn: widget.Search, name: "search"},
+ "recent-posts": {fn: widget.RecentPosts, name: "recent-posts"},
+ "recent-comments": {fn: widget.RecentComments, name: "recent-comments"},
+ "archives": {fn: widget.Archive, name: "archives"},
+ "categories": {fn: widget.Category, name: "categories"},
+ "meta": {fn: widget.Meta, name: "meta", cached: true},
}
type widgetComponent struct {
- fn func(h *wp.Handle, id string) string
- cacheKey string
+ fn func(h *wp.Handle, id string) string
+ cached bool
+ name string
}
func WidgetArea(h *wp.Handle) {
@@ -47,7 +48,8 @@ func sidebars() []wp.Components[string] {
component.Fn = fn
} else {
component.Fn = widget.Fn(id, widgetComponents.fn)
- component.CacheKey = widgetComponents.cacheKey
+ component.Name = widgetComponents.name
+ component.Cached = widgetComponents.cached
}
component.Order = 10
return component, true
diff --git a/internal/theme/wp/detail.go b/internal/theme/wp/detail.go
index 632bd84..3cd1512 100644
--- a/internal/theme/wp/detail.go
+++ b/internal/theme/wp/detail.go
@@ -107,13 +107,18 @@ func DetailRender(h *Handle) {
d.PasswordProject()
d.RenderComment()
d.ginH["post"] = d.Post
- reply := ""
- if d.Post.CommentStatus == "open" && wpconfig.GetOption("thread_comments") == "1" {
- reply = ``
- }
- d.PushGroupFooterScript(10, reply)
}
func Details(h *Handle) {
_ = h.Detail.BuildDetailData()
}
+
+func ReplyCommentJs(h *Handle) {
+ h.PushFooterScript(h.NewComponent("comment-reply.js", false, 10, func(h *Handle) string {
+ reply := ""
+ if h.Detail.Post.CommentStatus == "open" && wpconfig.GetOption("thread_comments") == "1" {
+ reply = ``
+ }
+ return reply
+ }))
+}
diff --git a/internal/theme/wp/indexparams.go b/internal/theme/wp/indexparams.go
index c6f11fe..8233344 100644
--- a/internal/theme/wp/indexparams.go
+++ b/internal/theme/wp/indexparams.go
@@ -93,17 +93,17 @@ func NewIndexParams(ctx *gin.Context) *IndexParams {
PostStatus: []any{"publish"},
BlogName: wpconfig.GetOption("blogname"),
}
- i.ParseSearch = i.parseSearch
- i.ParseArchive = i.parseArchive
- i.ParseCategory = i.parseCategory
- i.ParseTag = i.parseTag
- i.CategoryCondition = i.categoryCondition
- i.ParseAuthor = i.parseAuthor
- i.ParseParams = i.parseParams
+ i.ParseSearch = i.ParseSearchs
+ i.ParseArchive = i.ParseArchives
+ i.ParseCategory = i.ParseCategorys
+ i.ParseTag = i.ParseTags
+ i.CategoryCondition = i.CategoryConditions
+ i.ParseAuthor = i.ParseAuthors
+ i.ParseParams = i.ParseParamss
return i
}
-func (i *IndexParams) parseSearch() {
+func (i *IndexParams) ParseSearchs() {
s := i.Ctx.Query("s")
if s != "" {
q := str.Join("%", s, "%")
@@ -118,7 +118,7 @@ func (i *IndexParams) parseSearch() {
i.Search = s
}
}
-func (i *IndexParams) parseArchive() error {
+func (i *IndexParams) ParseArchives() error {
year := i.Ctx.Param("year")
if year != "" {
y := str.ToInteger(year, -1)
@@ -148,7 +148,7 @@ func (i *IndexParams) parseArchive() error {
return nil
}
-func (i *IndexParams) parseCategory() error {
+func (i *IndexParams) ParseCategorys() error {
category := i.Ctx.Param("category")
if category != "" {
if !maps.IsExists(cache.AllCategoryTagsNames(i.Ctx, constraints.Category), category) {
@@ -161,7 +161,7 @@ func (i *IndexParams) parseCategory() error {
}
return nil
}
-func (i *IndexParams) parseTag() error {
+func (i *IndexParams) ParseTags() error {
tag := i.Ctx.Param("tag")
if tag != "" {
if !maps.IsExists(cache.AllCategoryTagsNames(i.Ctx, constraints.Tag), tag) {
@@ -175,7 +175,7 @@ func (i *IndexParams) parseTag() error {
return nil
}
-func (i *IndexParams) categoryCondition() {
+func (i *IndexParams) CategoryConditions() {
if i.Category != "" {
i.Where = append(i.Where, []string{
"d.name", i.Category,
@@ -190,7 +190,7 @@ func (i *IndexParams) categoryCondition() {
i.setTitleLR(i.Category, i.BlogName)
}
}
-func (i *IndexParams) parseAuthor() (err error) {
+func (i *IndexParams) ParseAuthors() (err error) {
username := i.Ctx.Param("author")
if username != "" {
allUsername, er := cache.GetAllUsername(i.Ctx)
@@ -215,7 +215,7 @@ func (i *IndexParams) parseAuthor() (err error) {
return
}
-func (i *IndexParams) parseParams() {
+func (i *IndexParams) ParseParamss() {
i.Order = i.Ctx.Query("Order")
if !maps.IsExists(orders, i.Order) {
order := config.GetConfig().PostOrder
diff --git a/internal/theme/wp/pipe.go b/internal/theme/wp/pipe.go
index c87b826..1ee5c87 100644
--- a/internal/theme/wp/pipe.go
+++ b/internal/theme/wp/pipe.go
@@ -1,8 +1,8 @@
package wp
import (
- "fmt"
"github.com/fthvgb1/wp-go/helper/slice"
+ str "github.com/fthvgb1/wp-go/helper/strings"
"github.com/fthvgb1/wp-go/internal/cmd/reload"
"github.com/fthvgb1/wp-go/internal/pkg/constraints"
)
@@ -65,7 +65,8 @@ func PipeHandle(pipeScene string, keyFn func(*Handle, string) string, fn func(*H
}
func PipeKey(h *Handle, pipScene string) string {
- return fmt.Sprintf("pipekey-%s-%s-%s", pipScene, h.scene, h.scene)
+ key := str.Join("pipekey", "-", pipScene, "-", h.scene, "-", h.Stats)
+ return h.ComponentFilterFnHook("pipeKey", key, pipScene)
}
func PipeDataHandle(h *Handle, dataHandlers map[string][]HandleCall) (handlers []HandleCall) {
diff --git a/internal/theme/wp/wp.go b/internal/theme/wp/wp.go
index 9e4be2d..d3086d5 100644
--- a/internal/theme/wp/wp.go
+++ b/internal/theme/wp/wp.go
@@ -2,7 +2,6 @@ package wp
import (
"github.com/fthvgb1/wp-go/helper/maps"
- "github.com/fthvgb1/wp-go/helper/slice"
str "github.com/fthvgb1/wp-go/helper/strings"
"github.com/fthvgb1/wp-go/internal/cmd/reload"
"github.com/fthvgb1/wp-go/internal/pkg/constraints"
@@ -12,7 +11,6 @@ import (
"github.com/gin-gonic/gin"
"html/template"
"net/http"
- "strings"
)
type Handle struct {
@@ -28,6 +26,7 @@ type Handle struct {
Stats string
templ string
components map[string][]Components[string]
+ componentHook map[string][]func(Components[string]) (Components[string], bool)
themeMods wpconfig.ThemeMods
handlers map[string]map[string][]HandleCall
handleHook map[string][]func(HandleCall) (HandleCall, bool)
@@ -39,6 +38,22 @@ type Handle struct {
template *template.Template
}
+func (h *Handle) Components() map[string][]Components[string] {
+ return h.components
+}
+
+func (h *Handle) ComponentHook() map[string][]func(Components[string]) (Components[string], bool) {
+ return h.componentHook
+}
+
+func (h *Handle) Handlers() map[string]map[string][]HandleCall {
+ return h.handlers
+}
+
+func (h *Handle) HandleHook() map[string][]func(HandleCall) (HandleCall, bool) {
+ return h.handleHook
+}
+
func (h *Handle) SetTemplate(template *template.Template) {
h.template = template
}
@@ -51,10 +66,11 @@ type HandlePlugins map[string]HandleFn[*Handle]
// Components Order 为执行顺序,降序执行
type Components[T any] struct {
- Val T
- Fn func(*Handle) T
- Order int
- CacheKey string
+ Name string
+ Val T
+ Fn func(*Handle) T
+ Order int
+ Cached bool
}
type HandleFn[T any] func(T)
@@ -78,13 +94,6 @@ func InitThemeArgAndConfig(fn func(*Handle), h *Handle) {
inited = true
return *h
})
- m := make(map[string][]Components[string])
- for k, v := range hh.components {
- vv := make([]Components[string], len(v))
- copy(vv, v)
- m[k] = vv
- }
- h.components = m
h.ginH = maps.Copy(hh.ginH)
h.ginH["calPostClass"] = postClass(h)
h.ginH["calBodyClass"] = bodyClass(h)
@@ -92,33 +101,17 @@ func InitThemeArgAndConfig(fn func(*Handle), h *Handle) {
if inited {
return
}
+ h.components = hh.components
h.Index.postsPlugin = hh.Index.postsPlugin
h.Index.pageEle = hh.Index.pageEle
h.Detail.CommentRender = hh.Detail.CommentRender
h.handlers = hh.handlers
h.handleHook = hh.handleHook
+ h.componentHook = hh.componentHook
h.componentsArgs = hh.componentsArgs
h.componentFilterFn = hh.componentFilterFn
}
-func (h *Handle) ComponentFilterFn(name string) ([]func(*Handle, string, ...any) string, bool) {
- fn, ok := h.componentFilterFn[name]
- return fn, ok
-}
-
-func (h *Handle) PushComponentFilterFn(name string, fns ...func(*Handle, string, ...any) string) {
- h.componentFilterFn[name] = append(h.componentFilterFn[name], fns...)
-}
-func (h *Handle) ComponentFilterFnHook(name, s string, args ...any) string {
- calls, ok := h.componentFilterFn[name]
- if ok {
- return slice.Reduce(calls, func(fn func(*Handle, string, ...any) string, r string) string {
- return fn(h, r, args...)
- }, s)
- }
- return s
-}
-
func (h *Handle) Abort() {
h.abort = true
}
@@ -157,61 +150,6 @@ func (h *Handle) SetData(k string, v any) {
h.ginH[k] = v
}
-func GetComponentsArgs[T any](h *Handle, k string, defaults T) T {
- v, ok := h.componentsArgs[k]
- if ok {
- vv, ok := v.(T)
- if ok {
- return vv
- }
- }
- return defaults
-}
-
-func PushComponentsArgsForSlice[T any](h *Handle, name string, v ...T) {
- val, ok := h.componentsArgs[name]
- if !ok {
- var vv []T
- vv = append(vv, v...)
- h.componentsArgs[name] = vv
- return
- }
- vv, ok := val.([]T)
- if ok {
- vv = append(vv, v...)
- h.componentsArgs[name] = vv
- }
-}
-func SetComponentsArgsForMap[K comparable, V any](h *Handle, name string, key K, v V) {
- val, ok := h.componentsArgs[name]
- if !ok {
- vv := make(map[K]V)
- vv[key] = v
- h.componentsArgs[name] = vv
- return
- }
- vv, ok := val.(map[K]V)
- if ok {
- vv[key] = v
- h.componentsArgs[name] = vv
- }
-}
-func MergeComponentsArgsForMap[K comparable, V any](h *Handle, name string, m map[K]V) {
- val, ok := h.componentsArgs[name]
- if !ok {
- h.componentsArgs[name] = m
- return
- }
- vv, ok := val.(map[K]V)
- if ok {
- h.componentsArgs[name] = maps.Merge(vv, m)
- }
-}
-
-func (h *Handle) SetComponentsArgs(key string, value any) {
- h.componentsArgs[key] = value
-}
-
func NewHandle(c *gin.Context, scene string, theme string) *Handle {
mods, err := wpconfig.GetThemeMods(theme)
logs.IfError(err, "获取mods失败")
@@ -225,43 +163,6 @@ func NewHandle(c *gin.Context, scene string, theme string) *Handle {
}
}
-func (h *Handle) NewCacheComponent(name string, order int, fn func(handle *Handle) string) Components[string] {
- return Components[string]{Fn: fn, CacheKey: name, Order: order}
-}
-
-func (h *Handle) AddCacheComponent(name string, fn func(*Handle) string) {
- h.components[name] = append(h.components[name], h.NewCacheComponent(name, 10, fn))
-}
-
-func (h *Handle) PushHeadScript(fn ...Components[string]) {
- h.PushComponents(constraints.HeadScript, fn...)
-}
-func (h *Handle) PushGroupHeadScript(order int, str ...string) {
- h.PushGroupComponentStrs(constraints.HeadScript, order, str...)
-}
-func (h *Handle) PushCacheGroupHeadScript(key string, order int, fns ...func(*Handle) string) {
- h.PushGroupCacheComponentFn(constraints.HeadScript, key, order, fns...)
-}
-
-func (h *Handle) PushFooterScript(fn ...Components[string]) {
- h.PushComponents(constraints.FooterScript, fn...)
-}
-
-func (h *Handle) PushGroupFooterScript(order int, fns ...string) {
- h.PushGroupComponentStrs(constraints.FooterScript, order, fns...)
-}
-
-func (h *Handle) PushCacheGroupFooterScript(key string, order int, fns ...func(*Handle) string) {
- h.PushGroupCacheComponentFn(constraints.FooterScript, key, order, fns...)
-}
-func (h *Handle) PushGroupCacheComponentFn(name, key string, order int, fns ...func(*Handle) string) {
- h.PushComponents(name, h.NewCacheComponent(key, order, func(h *Handle) string {
- return strings.Join(slice.Map(fns, func(t func(*Handle) string) string {
- return t(h)
- }), "\n")
- }))
-}
-
func (h *Handle) GetPassword() {
pw := h.Session.Get("post_password")
if pw != nil {
@@ -302,58 +203,6 @@ func RenderTemplate(h *Handle) {
h.StopPipe()
}
-func (h *Handle) PushComponents(name string, components ...Components[string]) {
- h.components[name] = append(h.components[name], components...)
-}
-
-func (h *Handle) PushGroupComponentStrs(name string, order int, str ...string) {
- var calls []Components[string]
- for _, fn := range str {
- calls = append(calls, Components[string]{
- Val: fn,
- Order: order,
- })
- }
- h.components[name] = append(h.components[name], calls...)
-}
-func (h *Handle) PushGroupComponentFns(name string, order int, fns ...func(*Handle) string) {
- var calls []Components[string]
- for _, fn := range fns {
- calls = append(calls, Components[string]{
- Fn: fn,
- Order: order,
- })
- }
- h.components[name] = append(h.components[name], calls...)
-}
-
-func CalComponents(h *Handle) {
- for k, ss := range h.components {
- slice.Sort(ss, func(i, j Components[string]) bool {
- return i.Order > j.Order
- })
- var s []string
- for _, component := range ss {
- if component.Val != "" {
- s = append(s, component.Val)
- continue
- }
- if component.Fn != nil {
- v := ""
- if component.CacheKey != "" {
- v = reload.GetAnyValMapBy("calComponent", component.CacheKey, h, component.Fn)
- } else {
- v = component.Fn(h)
- }
- if v != "" {
- s = append(s, v)
- }
- }
- }
- h.ginH[k] = strings.Join(s, "\n")
- }
-}
-
func NewHandleFn(fn HandleFn[*Handle], order int, name string) HandleCall {
return HandleCall{Fn: fn, Order: order, Name: name}
}