From ac5bd35000add03b6ae6b0ef0b4a3e3b70d7e25f Mon Sep 17 00:00:00 2001 From: wen Date: Fri, 21 Jun 2024 16:39:34 +0800 Subject: [PATCH] fix PageLayout --- .../page_builder_with_campaign.go | 19 +++++++++++++++---- pagebuilder/builder.go | 7 ++++++- pagebuilder/example/config.go | 1 - pagebuilder/page_layout.go | 2 +- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/docs/docsrc/examples/examples_admin/page_builder_with_campaign.go b/docs/docsrc/examples/examples_admin/page_builder_with_campaign.go index cce6a9644..b27a20025 100644 --- a/docs/docsrc/examples/examples_admin/page_builder_with_campaign.go +++ b/docs/docsrc/examples/examples_admin/page_builder_with_campaign.go @@ -155,12 +155,23 @@ func PageBuilderExample(b *presets.Builder, db *gorm.DB) http.Handler { b.Use(puBuilder) pb := pagebuilder.New(b.GetURIPrefix()+"/page_builder", db, b.I18n()). - Publisher(puBuilder) + Publisher(puBuilder).WrapPageLayout(func(v pagebuilder.PageLayoutFunc) pagebuilder.PageLayoutFunc { + return func(body HTMLComponent, input *pagebuilder.PageLayoutInput, ctx *web.EventContext) HTMLComponent { + input.FreeStyleCss = append(input.FreeStyleCss, `.test-div { width: 200px;background-color:#E1E1E1; }`) + input.FreeStyleTopJs = append(input.FreeStyleTopJs, `console.log("free style")`) + input.Footer = Components( + Style(`.test-div1 { width: 300px;background-color:blue; }`), + Style(`.test-div2 { width: 400px;background-color:red; }`), + Script("console.log('in footer')"), + ) + return v(body, input, ctx) + } + }) header := pb.RegisterContainer("MyContent").Group("Navigation"). RenderFunc(func(obj interface{}, input *pagebuilder.RenderInput, ctx *web.EventContext) HTMLComponent { c := obj.(*MyContent) - return Div().Text(c.Text).Style("height:200px") + return Div().Text(c.Text).Class("test-div") }).Cover("https://qor5.com/img/qor-logo.png") ed := header.Model(&MyContent{}).Editing("Text", "Color") @@ -183,7 +194,7 @@ func PageBuilderExample(b *presets.Builder, db *gorm.DB) http.Handler { pb.RegisterModelContainer("CampaignContent", campaignModelBuilder).Group("Campaign"). RenderFunc(func(obj interface{}, input *pagebuilder.RenderInput, ctx *web.EventContext) HTMLComponent { c := obj.(*CampaignContent) - return Div(Text(c.Title)).Style("height:200px") + return Div(Text(c.Title)).Class("test-div1") }).Model(&CampaignContent{}).Editing("Title", "Banner") campaignModelBuilder.Use(pb) @@ -202,7 +213,7 @@ func PageBuilderExample(b *presets.Builder, db *gorm.DB) http.Handler { pb.RegisterModelContainer("ProductContent", productModelBuilder).Group("CampaignProduct"). RenderFunc(func(obj interface{}, input *pagebuilder.RenderInput, ctx *web.EventContext) HTMLComponent { c := obj.(*ProductContent) - return Div(Text(c.Name)).Style("height:200px") + return Div(Text(c.Name)).Class("test-div2") }).Model(&ProductContent{}).Editing("Name") productModelBuilder.Use(pb) diff --git a/pagebuilder/builder.go b/pagebuilder/builder.go index f87153b58..f7540d524 100644 --- a/pagebuilder/builder.go +++ b/pagebuilder/builder.go @@ -140,6 +140,7 @@ create unique index if not exists uidx_page_builder_demo_containers_model_name_l r.templateInstall = r.defaultTemplateInstall r.categoryInstall = r.defaultCategoryInstall r.pageInstall = r.defaultPageInstall + r.pageLayoutFunc = defaultPageLayoutFunc r.ps = presets.New(). BrandTitle("Page Builder"). @@ -184,6 +185,11 @@ func (b *Builder) PageLayout(v PageLayoutFunc) (r *Builder) { return b } +func (b *Builder) WrapPageLayout(warp func(v PageLayoutFunc) PageLayoutFunc) (r *Builder) { + b.pageLayoutFunc = warp(b.pageLayoutFunc) + return b +} + func (b *Builder) SubPageTitle(v SubPageTitleFunc) (r *Builder) { b.subPageTitleFunc = v return b @@ -288,7 +294,6 @@ func (b *Builder) ModelInstall(pb *presets.Builder, mb *presets.ModelBuilder) (e b.configEditor(r) b.configPublish(r) b.configDetail(r) - b.pageLayoutFunc = DefaultPageLayoutFunc return nil } diff --git a/pagebuilder/example/config.go b/pagebuilder/example/config.go index 9ed870624..4514f8f1d 100644 --- a/pagebuilder/example/config.go +++ b/pagebuilder/example/config.go @@ -60,7 +60,6 @@ func ConfigPageBuilder(db *gorm.DB, prefix, style string, i18nB *i18n.Builder) * pb.GetPresetsBuilder().ExtraAsset("/redactor.js", "text/javascript", richeditor.JSComponentsPack()) pb.GetPresetsBuilder().ExtraAsset("/redactor.css", "text/css", richeditor.CSSComponentsPack()) - pb.PageLayout(pagebuilder.DefaultPageLayoutFunc) fSys, _ := fs.Sub(containerImages, "assets/images") imagePrefix := "/assets/images" pb.Images(http.StripPrefix(path.Join(prefix, imagePrefix), http.FileServer(http.FS(fSys))), imagePrefix) diff --git a/pagebuilder/page_layout.go b/pagebuilder/page_layout.go index eef828ff2..74476aac0 100644 --- a/pagebuilder/page_layout.go +++ b/pagebuilder/page_layout.go @@ -8,7 +8,7 @@ import ( h "github.com/theplant/htmlgo" ) -func DefaultPageLayoutFunc(body h.HTMLComponent, input *PageLayoutInput, ctx *web.EventContext) h.HTMLComponent { +func defaultPageLayoutFunc(body h.HTMLComponent, input *PageLayoutInput, ctx *web.EventContext) h.HTMLComponent { var freeStyleCss h.HTMLComponent if len(input.FreeStyleCss) > 0 { freeStyleCss = h.Style(strings.Join(input.FreeStyleCss, "\n"))