package twentyseventeen import ( "context" "fmt" "github.com/fthvgb1/wp-go/app/pkg/constraints" "github.com/fthvgb1/wp-go/app/pkg/constraints/widgets" "github.com/fthvgb1/wp-go/app/pkg/logs" "github.com/fthvgb1/wp-go/app/pkg/models" "github.com/fthvgb1/wp-go/app/plugins" "github.com/fthvgb1/wp-go/app/theme/wp" "github.com/fthvgb1/wp-go/app/theme/wp/components" "github.com/fthvgb1/wp-go/app/theme/wp/middleware" "github.com/fthvgb1/wp-go/app/wpconfig" "github.com/fthvgb1/wp-go/cache/reload" "github.com/fthvgb1/wp-go/helper" str "github.com/fthvgb1/wp-go/helper/strings" "github.com/fthvgb1/wp-go/plugin/pagination" "strings" ) const ThemeName = "twentyseventeen" var paginate = func() plugins.PageEle { p := plugins.TwentyFifteenPagination() p.PrevEle = `` p.NextEle = strings.Replace(p.NextEle, "下一页", `下一页 `, 1) commentPageEle = plugins.PaginationNav{ Currents: p.Current, Prevs: p.Prev, Nexts: p.Next, Dotss: p.Dots, Middles: p.Middle, Urlss: plugins.TwentyFifteenCommentPagination().Urls, } return p }() var commentPageEle pagination.Render func Hook(h *wp.Handle) { wp.Run(h, configs) } func configs(h *wp.Handle) { wp.InitPipe(h) middleware.CommonMiddleware(h) h.AddActionFilter("bodyClass", calClass) h.PushCacheGroupHeadScript(constraints.AllScene, "colorScheme-customHeader", 10, colorScheme, customHeader) components.WidgetArea(h) pushScripts(h) h.PushRender(constraints.AllStats, wp.NewHandleFn(calCustomHeader, 10.005, "calCustomHeader")) wp.SetComponentsArgs(widgets.Widget, map[string]string{ "{$before_widget}": `
`, "{$after_widget}": `
`, }) h.PushRender(constraints.AllStats, wp.NewHandleFn(wp.PreTemplate, 70.005, "wp.PreTemplate"), wp.NewHandleFn(errorsHandle, 80.005, "errorsHandle"), ) videoHeader(h) h.SetData("colophon", colophon) setPaginationAndRender(h) h.CommonComponents() h.PushPostPlugin(postThumbnail) wp.SetComponentsArgsForMap(widgets.Search, "{$form}", searchForm) wp.PushIndexHandler(constraints.PipeRender, h, wp.NewHandleFn(wp.IndexRender, 10.005, "wp.IndexRender")) h.PushRender(constraints.Detail, wp.NewHandleFn(wp.DetailRender, 10.005, "wp.DetailRender")) h.PushDataHandler(constraints.Detail, wp.NewHandleFn(wp.Detail, 100.005, "wp.Detail"), wp.NewHandleFn(postThumb, 90.005, "{theme}.postThumb")) wp.PushIndexHandler(constraints.PipeData, h, wp.NewHandleFn(wp.Index, 100.005, "wp.Index")) h.PushDataHandler(constraints.AllScene, wp.NewHandleFn(wp.PreCodeAndStats, 90.005, "wp.PreCodeAndStats")) } func setPaginationAndRender(h *wp.Handle) { h.PushHandler(constraints.PipeRender, constraints.Detail, wp.NewHandleFn(func(hh *wp.Handle) { d := hh.GetDetailHandle() d.CommentRender = commentFormat d.CommentPageEle = commentPageEle d.CommentStep = 2 }, 150, "setPaginationAndRender")) wp.PushIndexHandler(constraints.PipeRender, h, wp.NewHandleFn(func(hh *wp.Handle) { i := hh.GetIndexHandle() i.SetPageEle(paginate) }, 150, "setPaginationAndRender")) } var searchForm = `` func errorsHandle(h *wp.Handle) { switch h.Stats { case constraints.Error404, constraints.InternalErr, constraints.ParamError: logs.IfError(h.Err(), "报错:") h.SetTempl("twentyseventeen/posts/error.gohtml") } } func postThumb(h *wp.Handle) { d := h.GetDetailHandle() if d.Post.Thumbnail.Path != "" { img := wpconfig.Thumbnail(d.Post.Thumbnail.OriginAttachmentData, "full", "", "thumbnail", "post-thumbnail") img.Sizes = "100vw" img.Srcset = fmt.Sprintf("%s %dw, %s", img.Path, img.Width, img.Srcset) d.Post.Thumbnail = img } } var commentFormat = comment{} type comment struct { plugins.CommonCommentFormat } var commentLi = plugins.CommonLi() var respondFn = plugins.Responds(respondStr) func (c comment) FormatLi(_ context.Context, m models.Comments, depth, maxDepth, page int, isTls, isThreadComments bool, eo, parent string) string { return plugins.FormatLi(commentLi, m, respondFn, depth, maxDepth, page, isTls, isThreadComments, eo, parent) } var colophon = `` var respondStr = `回复` 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 { posts.Thumbnail.Sizes = "100vw" } } } var header = reload.Vars(models.PostThumbnail{}, "twentyseventeen-headerImage") func calCustomHeader(h *wp.Handle) { h.SetData("HeaderImage", getHeaderImage(h)) } func getHeaderImage(h *wp.Handle) (r models.PostThumbnail) { img := header.Load() if img.Path != "" { return img } image, rand := h.GetCustomHeaderImg() if image.Path != "" { r = image r.Sizes = "100vw" if !rand { header.Store(r) } return } r.Path = helper.CutUrlHost(h.CommonThemeMods().ThemeSupport.CustomHeader.DefaultImage) r.Width = 2000 r.Height = 1200 header.Store(r) return } func calClass(h *wp.Handle, s string, _ ...any) string { class := strings.Split(s, " ") themeMods := h.CommonThemeMods() u := wpconfig.GetThemeModsVal(ThemeName, "header_image", themeMods.ThemeSupport.CustomHeader.DefaultImage) if u != "" && u != "remove-header" { class = append(class, "has-header-image") } if len(themeMods.SidebarsWidgets.Data.Sidebar1) > 0 { class = append(class, "has-sidebar") } if themeMods.HeaderTextcolor == "blank" { class = append(class, "title-tagline-hidden") } 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 { class = append(class, "page-two-column") } } return strings.Join(class, " ") } func videoHeader(h *wp.Handle) { h.AddActionFilter("videoSetting", videoPlay) wp.CustomVideo(h, constraints.Home) } func videoPlay(h *wp.Handle, _ string, a ...any) string { if len(a) < 1 { return "" } v, ok := a[0].(*wp.VideoSetting) if !ok { return "" } img := getHeaderImage(h) v.Width = img.Width v.Height = img.Height v.PosterUrl = img.Path v.L10n.Play = `播放背景视频` v.L10n.Pause = `暂停背景视频` return "" }