From 7d27668159bad2cc48070facbc15dcce00371c38 Mon Sep 17 00:00:00 2001 From: xing Date: Tue, 28 Feb 2023 23:38:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/theme/common/bodyclass.go | 14 +- internal/theme/common/common.go | 134 +++++++++++------- internal/theme/common/customcss.go | 4 +- internal/theme/common/customheader.go | 4 +- internal/theme/common/customlogo.go | 2 +- internal/theme/common/detail.go | 26 ++-- internal/theme/common/index.go | 16 +-- internal/theme/common/listpostplugins.go | 4 +- internal/theme/common/template.gohtml | 6 + internal/theme/common/widgetareadata.go | 8 +- .../theme/twentyfifteen/colorschemecss.go | 16 ++- .../theme/twentyfifteen/custombackground.go | 17 +-- internal/theme/twentyfifteen/customheader.go | 2 +- .../theme/twentyfifteen/layout/footer.gohtml | 5 +- internal/theme/twentyfifteen/twentyfifteen.go | 2 +- internal/theme/twentyseventeen/colorscheme.go | 4 +- .../theme/twentyseventeen/customheader.go | 5 +- .../twentyseventeen/layout/footer.gohtml | 5 +- .../theme/twentyseventeen/twentyseventeen.go | 41 +++--- 19 files changed, 183 insertions(+), 132 deletions(-) diff --git a/internal/theme/common/bodyclass.go b/internal/theme/common/bodyclass.go index a90a252..45006e3 100644 --- a/internal/theme/common/bodyclass.go +++ b/internal/theme/common/bodyclass.go @@ -12,14 +12,14 @@ import ( ) func (h *Handle) CalBodyClass() { - h.GinH["bodyClass"] = h.BodyClass(h.Class...) + h.ginH["bodyClass"] = h.BodyClass(h.class...) } func (h *Handle) BodyClass(class ...string) string { if constraints.Ok != h.Stats { class = append(class, "error404") } - switch h.Scene { + switch h.scene { case constraints.Home: class = append(class, "home", "blog") @@ -36,7 +36,7 @@ func (h *Handle) BodyClass(class ...string) string { case constraints.Category, constraints.Tag: class = append(class, "archive", "category") cat := h.Index.Param.Category - _, cate := slice.SearchFirst(cache.CategoriesTags(h.C, h.Scene), func(my models.TermsMy) bool { + _, cate := slice.SearchFirst(cache.CategoriesTags(h.C, h.scene), func(my models.TermsMy) bool { return my.Name == cat }) if cate.Slug[0] != '%' { @@ -56,17 +56,17 @@ func (h *Handle) BodyClass(class ...string) string { case constraints.Detail: class = append(class, "post-template-default", "single", "single-post") class = append(class, str.Join("postid-", number.ToString(h.Detail.Post.Id))) - if len(h.ThemeMods.ThemeSupport.PostFormats) > 0 { + if len(h.themeMods.ThemeSupport.PostFormats) > 0 { class = append(class, "single-format-standard") } } - if wpconfig.IsCustomBackground(h.Theme) { + if wpconfig.IsCustomBackground(h.theme) { class = append(class, "custom-background") } - if h.ThemeMods.CustomLogo > 0 || str.ToInteger(wpconfig.GetOption("site_logo"), 0) > 0 { + if h.themeMods.CustomLogo > 0 || str.ToInteger(wpconfig.GetOption("site_logo"), 0) > 0 { class = append(class, "wp-custom-logo") } - if h.ThemeMods.ThemeSupport.ResponsiveEmbeds { + if h.themeMods.ThemeSupport.ResponsiveEmbeds { class = append(class, "wp-embed-responsive") } return strings.Join(class, " ") diff --git a/internal/theme/common/common.go b/internal/theme/common/common.go index 94ae61e..b904aab 100644 --- a/internal/theme/common/common.go +++ b/internal/theme/common/common.go @@ -1,6 +1,7 @@ package common 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" @@ -17,35 +18,23 @@ type Handle struct { Index *IndexHandle Detail *DetailHandle C *gin.Context - Theme string + theme string Session sessions.Session - GinH gin.H - Password string - Scene int + ginH gin.H + password string + scene int Code int Stats int - Templ string - Class []string - Components map[string][]Components - ThemeMods wpconfig.ThemeMods - HandleFns map[int][]HandleCall - Error error + templ string + class []string + components map[string][]Components + themeMods wpconfig.ThemeMods + handleFns map[int][]HandleCall + err error } -func NewHandle(c *gin.Context, scene int, theme string) *Handle { - mods, err := wpconfig.GetThemeMods(theme) - logs.ErrPrintln(err, "获取mods失败") - return &Handle{ - C: c, - Theme: theme, - Session: sessions.Default(c), - GinH: gin.H{}, - Scene: scene, - Stats: constraints.Ok, - ThemeMods: mods, - Components: make(map[string][]Components), - HandleFns: make(map[int][]HandleCall), - } +func (h *Handle) CommonThemeMods() wpconfig.ThemeMods { + return h.themeMods } // Components Order 为执行顺序,降序执行 @@ -54,12 +43,68 @@ type Components struct { Order int } +type HandleFn[T any] func(T) + +type HandlePipeFn[T any] func(HandleFn[T], T) + +type HandleCall struct { + Fn HandleFn[*Handle] + Order int +} + +func (h *Handle) Err() error { + return h.err +} + +func (h *Handle) SetErr(err error) { + h.err = err +} + +func (h *Handle) Password() string { + return h.password +} + +func (h *Handle) SetTempl(templ string) { + h.templ = templ +} + +func (h *Handle) Scene() int { + return h.scene +} + +func (h *Handle) SetDatas(GinH gin.H) { + maps.Merge(h.ginH, GinH) +} +func (h *Handle) SetData(k string, v any) { + h.ginH[k] = v +} + +func (h *Handle) PushClass(class ...string) { + h.class = append(h.class, class...) +} + +func NewHandle(c *gin.Context, scene int, theme string) *Handle { + mods, err := wpconfig.GetThemeMods(theme) + logs.ErrPrintln(err, "获取mods失败") + return &Handle{ + C: c, + theme: theme, + Session: sessions.Default(c), + ginH: gin.H{}, + scene: scene, + Stats: constraints.Ok, + themeMods: mods, + components: make(map[string][]Components), + handleFns: make(map[int][]HandleCall), + } +} + func NewComponents(fn func(*Handle) string, order int) Components { return Components{Fn: fn, Order: order} } func (h *Handle) PushHandleFn(stats int, fns ...HandleCall) { - h.HandleFns[stats] = append(h.HandleFns[stats], fns...) + h.handleFns[stats] = append(h.handleFns[stats], fns...) } func (h *Handle) AddComponent(name string, fn func(*Handle) string) { @@ -68,25 +113,25 @@ func (h *Handle) AddComponent(name string, fn func(*Handle) string) { v = fn(h) reload.SetStr(name, v) } - h.GinH[name] = v + h.ginH[name] = v } func (h *Handle) PushHeadScript(fn ...Components) { - h.Components[constraints.HeadScript] = append(h.Components[constraints.HeadScript], fn...) + h.components[constraints.HeadScript] = append(h.components[constraints.HeadScript], fn...) } func (h *Handle) PushFooterScript(fn ...Components) { - h.Components[constraints.FooterScript] = append(h.Components[constraints.FooterScript], fn...) + h.components[constraints.FooterScript] = append(h.components[constraints.FooterScript], fn...) } func (h *Handle) GetPassword() { pw := h.Session.Get("post_password") if pw != nil { - h.Password = pw.(string) + h.password = pw.(string) } } func (h *Handle) ExecHandleFns() { - calls, ok := h.HandleFns[h.Stats] + calls, ok := h.handleFns[h.Stats] if ok { slice.SortSelf(calls, func(i, j HandleCall) bool { return i.Order > j.Order @@ -95,7 +140,7 @@ func (h *Handle) ExecHandleFns() { call.Fn(h) } } - fns, ok := h.HandleFns[constraints.AllStats] + fns, ok := h.handleFns[constraints.AllStats] if ok { for _, fn := range fns { fn.Fn(h) @@ -105,10 +150,10 @@ func (h *Handle) ExecHandleFns() { } func (h *Handle) PreTemplate() { - if h.Templ == "" { - h.Templ = str.Join(h.Theme, "/posts/index.gohtml") - if h.Scene == constraints.Detail { - h.Templ = str.Join(h.Theme, "/posts/detail.gohtml") + if h.templ == "" { + h.templ = str.Join(h.theme, "/posts/index.gohtml") + if h.scene == constraints.Detail { + h.templ = str.Join(h.theme, "/posts/detail.gohtml") } } } @@ -134,15 +179,15 @@ func (h *Handle) Render() { h.AddComponent("customLogo", CalCustomLogo) h.CalMultipleComponents() h.CalBodyClass() - h.C.HTML(h.Code, h.Templ, h.GinH) + h.C.HTML(h.Code, h.templ, h.ginH) } func (h *Handle) PushComponents(name string, components ...Components) { - h.Components[name] = append(h.Components[name], components...) + h.components[name] = append(h.components[name], components...) } func (h *Handle) CalMultipleComponents() { - for k, ss := range h.Components { + for k, ss := range h.components { v, ok := reload.GetStr(k) if !ok { slice.SortSelf(ss, func(i, j Components) bool { @@ -154,19 +199,10 @@ func (h *Handle) CalMultipleComponents() { }), "\n") reload.SetStr(k, v) } - h.GinH[k] = v + h.ginH[k] = v } } -type HandleFn[T any] func(T) - -type HandlePipeFn[T any] func(HandleFn[T], T) - -type HandleCall struct { - Fn HandleFn[*Handle] - Order int -} - func NewHandleFn(fn HandleFn[*Handle], order int) HandleCall { return HandleCall{Fn: fn, Order: order} } @@ -181,7 +217,7 @@ func HandlePipe[T any](initial func(T), fns ...HandlePipeFn[T]) HandleFn[T] { } func Render(h *Handle) { - switch h.Scene { + switch h.scene { case constraints.Detail: h.Detail.Render() default: diff --git a/internal/theme/common/customcss.go b/internal/theme/common/customcss.go index 226e156..4217c9d 100644 --- a/internal/theme/common/customcss.go +++ b/internal/theme/common/customcss.go @@ -7,10 +7,10 @@ import ( ) func CalCustomCss(h *Handle) (r string) { - if h.ThemeMods.CustomCssPostId < 1 { + if h.themeMods.CustomCssPostId < 1 { return } - post, err := cache.GetPostById(h.C, uint64(h.ThemeMods.CustomCssPostId)) + post, err := cache.GetPostById(h.C, uint64(h.themeMods.CustomCssPostId)) if err != nil || post.Id < 1 { return } diff --git a/internal/theme/common/customheader.go b/internal/theme/common/customheader.go index e5f7e80..38a7e0f 100644 --- a/internal/theme/common/customheader.go +++ b/internal/theme/common/customheader.go @@ -8,11 +8,11 @@ import ( ) func (h *Handle) DisplayHeaderText() bool { - return h.ThemeMods.ThemeSupport.CustomHeader.HeaderText && "blank" != h.ThemeMods.HeaderTextcolor + return h.themeMods.ThemeSupport.CustomHeader.HeaderText && "blank" != h.themeMods.HeaderTextcolor } func (h *Handle) GetCustomHeader() (r models.PostThumbnail, isRand bool) { - hs, err := cache.GetHeaderImages(h.C, h.Theme) + hs, err := cache.GetHeaderImages(h.C, h.theme) if err != nil { logs.ErrPrintln(err, "获取页眉背景图失败") return diff --git a/internal/theme/common/customlogo.go b/internal/theme/common/customlogo.go index a0d66b7..6a5b74c 100644 --- a/internal/theme/common/customlogo.go +++ b/internal/theme/common/customlogo.go @@ -9,7 +9,7 @@ import ( ) func CalCustomLogo(h *Handle) (r string) { - id := uint64(h.ThemeMods.CustomLogo) + id := uint64(h.themeMods.CustomLogo) if id < 1 { id = str.ToInteger[uint64](wpconfig.GetOption("site_logo"), 0) if id < 1 { diff --git a/internal/theme/common/detail.go b/internal/theme/common/detail.go index 4047a12..b640ae1 100644 --- a/internal/theme/common/detail.go +++ b/internal/theme/common/detail.go @@ -24,7 +24,7 @@ func NewDetailHandle(handle *Handle) *DetailHandle { } func (d *DetailHandle) BuildDetailData() (err error) { - d.GinH["title"] = wpconfig.GetOption("blogname") + d.ginH["title"] = wpconfig.GetOption("blogname") err = d.CheckAndGetPost() if err != nil { return @@ -41,7 +41,7 @@ func (d *DetailHandle) CheckAndGetPost() (err error) { if id > maxId || id <= 0 { d.Stats = constraints.ParamError err = errors.New("无效的文档id") - d.Class = append(d.Class, "error404") + d.class = append(d.class, "error404") } if err != nil { return @@ -55,24 +55,24 @@ func (d *DetailHandle) CheckAndGetPost() (err error) { } d.Post = post - d.GinH["user"] = cache.GetUserById(d.C, post.PostAuthor) - d.GinH["title"] = fmt.Sprintf("%s-%s", post.PostTitle, wpconfig.GetOption("blogname")) + d.ginH["user"] = cache.GetUserById(d.C, post.PostAuthor) + d.ginH["title"] = fmt.Sprintf("%s-%s", post.PostTitle, wpconfig.GetOption("blogname")) return } func (d *DetailHandle) PasswordProject() { if d.Post.PostPassword != "" { plugins.PasswordProjectTitle(&d.Post) - if d.Password != d.Post.PostPassword { + if d.password != d.Post.PostPassword { plugins.PasswdProjectContent(&d.Post) } - d.GinH["post"] = d.Post + d.ginH["post"] = d.Post } } func (d *DetailHandle) Comment() { comments, err := cache.PostComments(d.C, d.Post.Id) logs.ErrPrintln(err, "get d.Post comment", d.Post.Id) - d.GinH["comments"] = comments + d.ginH["comments"] = comments d.Comments = comments } @@ -83,27 +83,27 @@ func (d *DetailHandle) RenderComment() { } ableComment := true if d.Post.CommentStatus != "open" || - (d.Post.PostPassword != "" && d.Password != d.Post.PostPassword) { + (d.Post.PostPassword != "" && d.password != d.Post.PostPassword) { ableComment = false } - d.GinH["showComment"] = ableComment + d.ginH["showComment"] = ableComment if len(d.Comments) > 0 && ableComment { dep := str.ToInteger(wpconfig.GetOption("thread_comments_depth"), 5) - d.GinH["comments"] = plugins.FormatComments(d.C, d.CommentRender, d.Comments, dep) + d.ginH["comments"] = plugins.FormatComments(d.C, d.CommentRender, d.Comments, dep) } } func (d *DetailHandle) ContextPost() { prev, next, err := cache.GetContextPost(d.C, d.Post.Id, d.Post.PostDate) logs.ErrPrintln(err, "get pre and next post", d.Post.Id, d.Post.PostDate) - d.GinH["next"] = next - d.GinH["prev"] = prev + d.ginH["next"] = next + d.ginH["prev"] = prev } func (d *DetailHandle) Render() { d.PasswordProject() d.RenderComment() - d.GinH["post"] = d.Post + d.ginH["post"] = d.Post d.Handle.Render() } diff --git a/internal/theme/common/index.go b/internal/theme/common/index.go index 9a5ec30..02dc4cd 100644 --- a/internal/theme/common/index.go +++ b/internal/theme/common/index.go @@ -29,7 +29,7 @@ func NewIndexHandle(handle *Handle) *IndexHandle { func (i *IndexHandle) ParseIndex(parm *IndexParams) (err error) { i.Param = parm - switch i.Scene { + switch i.scene { case constraints.Home, constraints.Search: i.Param.ParseSearch() case constraints.Category: @@ -47,9 +47,9 @@ func (i *IndexHandle) ParseIndex(parm *IndexParams) (err error) { } i.Param.ParseParams() i.Param.CacheKey = i.Param.getSearchKey() - i.GinH["title"] = i.Param.getTitle() - i.GinH["search"] = i.Param.Search - i.GinH["header"] = i.Param.Header + i.ginH["title"] = i.Param.getTitle() + i.ginH["search"] = i.Param.Search + i.ginH["header"] = i.Param.Header return } @@ -61,7 +61,7 @@ func (i *IndexHandle) GetIndexData() (posts []models.Posts, totalRaw int, err er Join: i.Param.Join, In: [][]any{i.Param.PostType, i.Param.PostStatus}, } - switch i.Scene { + switch i.scene { case constraints.Home, constraints.Category, constraints.Tag, constraints.Author: posts, totalRaw, err = cache.PostLists(i.C, i.Param.CacheKey, i.C, q, i.Param.Page, i.Param.PageSize) @@ -88,7 +88,7 @@ func (i *IndexHandle) Pagination() { q = fmt.Sprintf("?%s", q) } paginations := pagination.NewParsePagination(i.TotalRows, i.Param.PageSize, i.Param.Page, i.Param.PaginationStep, q, i.C.Request.URL.Path) - i.GinH["pagination"] = pagination.Paginate(i.PageEle, paginations) + i.ginH["pagination"] = pagination.Paginate(i.PageEle, paginations) } @@ -106,7 +106,7 @@ func (i *IndexHandle) BuildIndexData(parm *IndexParams) (err error) { i.Posts = posts i.TotalRows = totalRows - i.GinH["totalPage"] = number.CalTotalPage(totalRows, i.Param.PageSize) + i.ginH["totalPage"] = number.CalTotalPage(totalRows, i.Param.PageSize) return } @@ -121,7 +121,7 @@ func (i *IndexHandle) ExecPostsPlugin(calls ...func(*models.Posts)) { } plugin := GetListPostPlugins(pluginConf, postsPlugins) - i.GinH["posts"] = slice.Map(i.Posts, PluginFn[models.Posts](plugin, i.Handle, Defaults(calls...))) + i.ginH["posts"] = slice.Map(i.Posts, PluginFn[models.Posts](plugin, i.Handle, Defaults(calls...))) } diff --git a/internal/theme/common/listpostplugins.go b/internal/theme/common/listpostplugins.go index f1b9658..f20ecc3 100644 --- a/internal/theme/common/listpostplugins.go +++ b/internal/theme/common/listpostplugins.go @@ -33,7 +33,7 @@ func PasswordProject(next Fn[models.Posts], h *Handle, post models.Posts) (r mod r = post if post.PostPassword != "" { plugins.PasswordProjectTitle(&r) - if h.Password != post.PostPassword { + if h.password != post.PostPassword { plugins.PasswdProjectContent(&r) return } @@ -96,7 +96,7 @@ func (i *IndexHandle) ExecListPagePlugin(m map[string]Plugin[models.Posts, *Hand plugin := GetListPostPlugins(pluginConf, m) - i.GinH["posts"] = slice.Map(i.Posts, PluginFn[models.Posts, *Handle](plugin, i.Handle, Defaults(calls...))) + i.ginH["posts"] = slice.Map(i.Posts, PluginFn[models.Posts, *Handle](plugin, i.Handle, Defaults(calls...))) } diff --git a/internal/theme/common/template.gohtml b/internal/theme/common/template.gohtml index 1148039..af4522f 100644 --- a/internal/theme/common/template.gohtml +++ b/internal/theme/common/template.gohtml @@ -12,6 +12,12 @@ {{end}} {{end}} +{{define "common/footer"}} + {{if .footerScript}} + {{.footerScript|unescaped}} + {{end}} +{{end}} + {{define "common/customLogo"}} {{if .customLogo}} {{.customLogo|unescaped}} diff --git a/internal/theme/common/widgetareadata.go b/internal/theme/common/widgetareadata.go index 7181ea7..ff3fa8a 100644 --- a/internal/theme/common/widgetareadata.go +++ b/internal/theme/common/widgetareadata.go @@ -7,8 +7,8 @@ import ( ) func (h *Handle) WidgetAreaData() { - h.GinH["archives"] = cache.Archives(h.C) - h.GinH["recentPosts"] = slice.Map(cache.RecentPosts(h.C, 5), ProjectTitle) - h.GinH["categories"] = cache.CategoriesTags(h.C, constraints.Category) - h.GinH["recentComments"] = cache.RecentComments(h.C, 5) + h.ginH["archives"] = cache.Archives(h.C) + h.ginH["recentPosts"] = slice.Map(cache.RecentPosts(h.C, 5), ProjectTitle) + h.ginH["categories"] = cache.CategoriesTags(h.C, constraints.Category) + h.ginH["recentComments"] = cache.RecentComments(h.C, 5) } diff --git a/internal/theme/twentyfifteen/colorschemecss.go b/internal/theme/twentyfifteen/colorschemecss.go index d63416c..6fc7c95 100644 --- a/internal/theme/twentyfifteen/colorschemecss.go +++ b/internal/theme/twentyfifteen/colorschemecss.go @@ -19,7 +19,7 @@ func colorSchemeCss(h *common.Handle) string { } func calColorSchemeCss(h *common.Handle) (r string) { color := getColorScheme(h) - if "default" == h.ThemeMods.ColorScheme || len(color) < 1 { + if "default" == h.CommonThemeMods().ColorScheme || len(color) < 1 { return } textColorRgb := slice.ToAnySlice(Hex2RgbUint8(color[3])) @@ -48,29 +48,31 @@ func calColorSchemeCss(h *common.Handle) (r string) { func calSidebarTextColorCss(h *common.Handle) (r string) { colors := getColorScheme(h) - if h.ThemeMods.SidebarTextcolor == "" || h.ThemeMods.SidebarTextcolor == colors[4] { + themeMods := h.CommonThemeMods() + if themeMods.SidebarTextcolor == "" || themeMods.SidebarTextcolor == colors[4] { return } - linkColorRgb := Hex2RgbUint8(h.ThemeMods.SidebarTextcolor) + linkColorRgb := Hex2RgbUint8(themeMods.SidebarTextcolor) color := slice.ToAnySlice(linkColorRgb) textColor := fmt.Sprintf(`rgba( %[1]v, %[2]v, %[3]v, 0.7)`, color...) borderColor := fmt.Sprintf(`rgba( %[1]v, %[2]v, %[3]v, 0.1)`, color...) borderFocusColor := fmt.Sprintf(`rgba( %[1]v, %[2]v, %[3]v, 0.3)`, color...) - r = fmt.Sprintf(sidebarTextColorTemplate, h.ThemeMods.SidebarTextcolor, textColor, borderColor, borderFocusColor) + r = fmt.Sprintf(sidebarTextColorTemplate, themeMods.SidebarTextcolor, textColor, borderColor, borderFocusColor) return } func calHeaderBackgroundColorCss(h *common.Handle) (r string) { colors := getColorScheme(h) - if h.ThemeMods.HeaderBackgroundColor == "" || h.ThemeMods.HeaderBackgroundColor == colors[1] { + themeMods := h.CommonThemeMods() + if themeMods.HeaderBackgroundColor == "" || themeMods.HeaderBackgroundColor == colors[1] { return } - r = fmt.Sprintf(headerBackgroundColorCssTemplate, h.ThemeMods.HeaderBackgroundColor, h.ThemeMods.HeaderBackgroundColor) + r = fmt.Sprintf(headerBackgroundColorCssTemplate, themeMods.HeaderBackgroundColor, themeMods.HeaderBackgroundColor) return } func getColorScheme(h *common.Handle) (r []string) { - x, ok := colorscheme[h.ThemeMods.ColorScheme] + x, ok := colorscheme[h.CommonThemeMods().ColorScheme] if ok { r = x.Colors } diff --git a/internal/theme/twentyfifteen/custombackground.go b/internal/theme/twentyfifteen/custombackground.go index 62216a3..fdba529 100644 --- a/internal/theme/twentyfifteen/custombackground.go +++ b/internal/theme/twentyfifteen/custombackground.go @@ -31,29 +31,30 @@ var repeat = map[string]string{ } func CalCustomBackGround(h *common.Handle) (r string) { - if h.ThemeMods.BackgroundImage == "" && h.ThemeMods.BackgroundColor == themesupport.CustomBackground.DefaultColor { + themeMods := h.CommonThemeMods() + if themeMods.BackgroundImage == "" && themeMods.BackgroundColor == themesupport.CustomBackground.DefaultColor { return } s := str.NewBuilder() - if h.ThemeMods.BackgroundImage != "" { - s.Sprintf(` background-image: url("%s");`, helper.CutUrlHost(h.ThemeMods.BackgroundImage)) + if themeMods.BackgroundImage != "" { + s.Sprintf(` background-image: url("%s");`, helper.CutUrlHost(themeMods.BackgroundImage)) } - backgroundPositionX := helper.Defaults(h.ThemeMods.BackgroundPositionX, themesupport.CustomBackground.DefaultPositionX) + backgroundPositionX := helper.Defaults(themeMods.BackgroundPositionX, themesupport.CustomBackground.DefaultPositionX) backgroundPositionX = maps.WithDefaultVal(postx, backgroundPositionX, "left") - backgroundPositionY := helper.Defaults(h.ThemeMods.BackgroundPositionY, themesupport.CustomBackground.DefaultPositionY) + backgroundPositionY := helper.Defaults(themeMods.BackgroundPositionY, themesupport.CustomBackground.DefaultPositionY) backgroundPositionY = maps.WithDefaultVal(posty, backgroundPositionY, "top") positon := fmt.Sprintf(" background-position: %s %s;", backgroundPositionX, backgroundPositionY) - siz := helper.DefaultVal(h.ThemeMods.BackgroundSize, themesupport.CustomBackground.DefaultSize) + siz := helper.DefaultVal(themeMods.BackgroundSize, themesupport.CustomBackground.DefaultSize) siz = maps.WithDefaultVal(size, siz, "auto") siz = fmt.Sprintf(" background-size: %s;", siz) - repeats := helper.Defaults(h.ThemeMods.BackgroundRepeat, themesupport.CustomBackground.DefaultRepeat) + repeats := helper.Defaults(themeMods.BackgroundRepeat, themesupport.CustomBackground.DefaultRepeat) repeats = maps.WithDefaultVal(repeat, repeats, "repeat") repeats = fmt.Sprintf(" background-repeat: %s;", repeats) - attachment := helper.Defaults(h.ThemeMods.BackgroundAttachment, themesupport.CustomBackground.DefaultAttachment) + attachment := helper.Defaults(themeMods.BackgroundAttachment, themesupport.CustomBackground.DefaultAttachment) attachment = helper.Or(attachment == "fixed", "fixed", "scroll") attachment = fmt.Sprintf(" background-attachment: %s;", attachment) s.WriteString(positon, siz, repeats, attachment) diff --git a/internal/theme/twentyfifteen/customheader.go b/internal/theme/twentyfifteen/customheader.go index 3ee0560..c238df9 100644 --- a/internal/theme/twentyfifteen/customheader.go +++ b/internal/theme/twentyfifteen/customheader.go @@ -117,6 +117,6 @@ func customHeader(h *common.Handle) { header.Store(headers) } } - h.GinH["customHeader"] = headers + h.SetData("customHeader", headers) return } diff --git a/internal/theme/twentyfifteen/layout/footer.gohtml b/internal/theme/twentyfifteen/layout/footer.gohtml index 3094fdd..ec3cc11 100644 --- a/internal/theme/twentyfifteen/layout/footer.gohtml +++ b/internal/theme/twentyfifteen/layout/footer.gohtml @@ -12,6 +12,7 @@ - {{ block "footer" .}} - {{end}} + {{template "common/footer" .}} + {{ block "footer" .}} + {{end}} {{end}} \ No newline at end of file diff --git a/internal/theme/twentyfifteen/twentyfifteen.go b/internal/theme/twentyfifteen/twentyfifteen.go index bae98a3..e011489 100644 --- a/internal/theme/twentyfifteen/twentyfifteen.go +++ b/internal/theme/twentyfifteen/twentyfifteen.go @@ -42,7 +42,7 @@ func dispatch(next common.HandleFn[*common.Handle], h *common.Handle) { common.NewComponents(colorSchemeCss, 10), ) h.PushHandleFn(constraints.AllStats, common.NewHandleFn(customHeader, 10)) - switch h.Scene { + switch h.Scene() { case constraints.Detail: detail(next, h.Detail) default: diff --git a/internal/theme/twentyseventeen/colorscheme.go b/internal/theme/twentyseventeen/colorscheme.go index 668f3ee..38c254c 100644 --- a/internal/theme/twentyseventeen/colorscheme.go +++ b/internal/theme/twentyseventeen/colorscheme.go @@ -10,11 +10,11 @@ import ( ) func colorScheme(h *common.Handle) (r string) { - if "custom" != wpconfig.GetThemeModsVal(h.Theme, "colorscheme", "light") { + if "custom" != wpconfig.GetThemeModsVal(ThemeName, "colorscheme", "light") { return } s := str.NewBuilder() - hue := number.ToString(wpconfig.GetThemeModsVal[int64](h.Theme, "colorscheme_hue", 250)) + hue := number.ToString(wpconfig.GetThemeModsVal[int64](ThemeName, "colorscheme_hue", 250)) saturation := fmt.Sprintf("%d%%", int(.8*50)) css := customCss for k, v := range map[string]string{ diff --git a/internal/theme/twentyseventeen/customheader.go b/internal/theme/twentyseventeen/customheader.go index 366afb4..bdcc1c1 100644 --- a/internal/theme/twentyseventeen/customheader.go +++ b/internal/theme/twentyseventeen/customheader.go @@ -6,8 +6,9 @@ import ( ) func customHeader(h *common.Handle) (r string) { - headerTextColor := h.ThemeMods.HeaderTextcolor - if headerTextColor == "" || headerTextColor == h.ThemeMods.ThemeSupport.CustomHeader.DefaultTextColor { + themeMods := h.CommonThemeMods() + headerTextColor := themeMods.HeaderTextcolor + if headerTextColor == "" || headerTextColor == themeMods.ThemeSupport.CustomHeader.DefaultTextColor { return } css := ` diff --git a/internal/theme/twentyseventeen/layout/footer.gohtml b/internal/theme/twentyseventeen/layout/footer.gohtml index 3ccc3da..480ad5c 100644 --- a/internal/theme/twentyseventeen/layout/footer.gohtml +++ b/internal/theme/twentyseventeen/layout/footer.gohtml @@ -11,6 +11,7 @@ - {{ block "footer" .}} - {{end}} + {{template "common/footer" .}} + {{ block "footer" .}} + {{end}} {{end}} \ No newline at end of file diff --git a/internal/theme/twentyseventeen/twentyseventeen.go b/internal/theme/twentyseventeen/twentyseventeen.go index ebe8698..cc01983 100644 --- a/internal/theme/twentyseventeen/twentyseventeen.go +++ b/internal/theme/twentyseventeen/twentyseventeen.go @@ -41,13 +41,13 @@ func ready(next common.HandleFn[*common.Handle], h *common.Handle) { common.NewComponents(colorScheme, 10), common.NewComponents(customHeader, 10), ) - h.GinH["HeaderImage"] = getHeaderImage(h) - h.GinH["scene"] = h.Scene + h.SetData("HeaderImage", getHeaderImage(h)) + h.SetData("scene", h.Scene()) next(h) } func dispatch(next common.HandleFn[*common.Handle], h *common.Handle) { - switch h.Scene { + switch h.Scene() { case constraints.Detail: detail(next, h.Detail) default: @@ -64,7 +64,7 @@ var listPostsPlugins = func() map[string]common.Plugin[models.Posts, *common.Han func index(next common.HandleFn[*common.Handle], i *common.IndexHandle) { err := i.BuildIndexData(common.NewIndexParams(i.C)) if err != nil { - i.Templ = str.Join(ThemeName, "/posts/error.gohtml") + i.SetTempl(str.Join(ThemeName, "/posts/error.gohtml")) i.Render() return } @@ -76,7 +76,7 @@ func index(next common.HandleFn[*common.Handle], i *common.IndexHandle) { func detail(next common.HandleFn[*common.Handle], d *common.DetailHandle) { err := d.BuildDetailData() if err != nil { - d.Templ = str.Join(ThemeName, "/posts/error.gohtml") + d.SetTempl(str.Join(ThemeName, "/posts/error.gohtml")) d.Render() return } @@ -115,7 +115,7 @@ func (c comment) FormatLi(ctx *gin.Context, m models.Comments, depth int, isTls func postThumbnail(next common.Fn[models.Posts], h *common.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" - if h.Scene == constraints.Detail { + if h.Scene() == constraints.Detail { t.Thumbnail.Sizes = "100vw" } } @@ -138,7 +138,7 @@ func getHeaderImage(h *common.Handle) (r models.PostThumbnail) { } return } - r.Path = helper.CutUrlHost(h.ThemeMods.ThemeSupport.CustomHeader.DefaultImage) + r.Path = helper.CutUrlHost(h.CommonThemeMods().ThemeSupport.CustomHeader.DefaultImage) r.Width = 2000 r.Height = 1200 r.Sizes = "100vw" @@ -147,23 +147,26 @@ func getHeaderImage(h *common.Handle) (r models.PostThumbnail) { } func calClass(h *common.Handle) { - u := wpconfig.GetThemeModsVal(h.Theme, "header_image", h.ThemeMods.ThemeSupport.CustomHeader.DefaultImage) + themeMods := h.CommonThemeMods() + u := wpconfig.GetThemeModsVal(ThemeName, "header_image", themeMods.ThemeSupport.CustomHeader.DefaultImage) + var class []string if u != "" && u != "remove-header" { - h.Class = append(h.Class, "has-header-image") + class = append(class, "has-header-image") } - if len(h.ThemeMods.SidebarsWidgets.Data.Sidebar1) > 0 { - h.Class = append(h.Class, "has-sidebar") + if len(themeMods.SidebarsWidgets.Data.Sidebar1) > 0 { + class = append(class, "has-sidebar") } - if h.ThemeMods.HeaderTextcolor == "blank" { - h.Class = append(h.Class, "title-tagline-hidden") + if themeMods.HeaderTextcolor == "blank" { + class = append(class, "title-tagline-hidden") } - h.Class = append(h.Class, "hfeed") - h.Class = append(h.Class, str.Join("colors-", wpconfig.GetThemeModsVal(h.Theme, "colorscheme", "light"))) - if h.Scene == constraints.Archive { - if "one-column" == wpconfig.GetThemeModsVal(h.Theme, "page_layout", "") { - h.Class = append(h.Class, "page-one-column") + class = append(class, "hfeed") + class = append(class, str.Join("colors-", wpconfig.GetThemeModsVal(ThemeName, "colorscheme", "light"))) + if h.Scene() == constraints.Archive { + if "one-column" == wpconfig.GetThemeModsVal(ThemeName, "page_layout", "") { + class = append(class, "page-one-column") } else { - h.Class = append(h.Class, "page-two-column") + class = append(class, "page-two-column") } } + h.PushClass(class...) }