diff --git a/sui/core/build.go b/sui/core/build.go index f1efafaa..2cf25df0 100644 --- a/sui/core/build.go +++ b/sui/core/build.go @@ -180,7 +180,8 @@ func (page *Page) BuildAsComponent(sel *goquery.Selection, ctx *BuildContext, op first := body.Children().First() page.copyProps(ctx, sel, first, attrs...) - page.copySlots(ctx, sel, first) + page.copySlots(sel, first) + page.copyChildren(sel, first) page.buildComponents(doc, ctx, &opt) data := Data{"$props": page.Attrs} data.ReplaceSelectionUse(slotRe, first) @@ -222,7 +223,7 @@ func (page *Page) BuildAsComponent(sel *goquery.Selection, ctx *BuildContext, op return source, nil } -func (page *Page) copySlots(ctx *BuildContext, from *goquery.Selection, to *goquery.Selection) error { +func (page *Page) copySlots(from *goquery.Selection, to *goquery.Selection) error { slots := from.Find("slot") if slots.Length() == 0 { return nil @@ -236,25 +237,27 @@ func (page *Page) copySlots(ctx *BuildContext, from *goquery.Selection, to *goqu } // Get the slot - slotSel := to.Find(fmt.Sprintf("slot[name='%s']", name)) - + slotSel := to.Find(name) if slotSel.Length() == 0 { continue } - // Copy the slot - html, err := slot.Html() - if err != nil { - ctx.warnings = append(ctx.warnings, err.Error()) - setError(slotSel, err) - continue - } - slotSel.SetHtml(html) + slotSel.ReplaceWithSelection(slot.Children()) } return nil } +func (page *Page) copyChildren(from *goquery.Selection, to *goquery.Selection) error { + children := from.Children() + if children.Length() == 0 { + return nil + } + children.Find("slot").Remove() + to.Find("children").ReplaceWithSelection(children) + return nil +} + func (page *Page) copyProps(ctx *BuildContext, from *goquery.Selection, to *goquery.Selection, extra ...html.Attribute) error { attrs := from.Get(0).Attr prefix := "s:prop" diff --git a/sui/core/jit.go b/sui/core/jit.go index add3dd9f..a91bc397 100644 --- a/sui/core/jit.go +++ b/sui/core/jit.go @@ -93,7 +93,7 @@ func (parser *TemplateParser) RenderComponent(comp *JitComponent, props map[stri } // Find the slot - slotSel := root.Find(fmt.Sprintf("slot[name='%s']", name)) + slotSel := root.Find(name) if slotSel.Length() == 0 { return } diff --git a/sui/storages/local/local_test.go b/sui/storages/local/local_test.go index 68d90110..fa669f4b 100644 --- a/sui/storages/local/local_test.go +++ b/sui/storages/local/local_test.go @@ -57,9 +57,9 @@ func TestGetTemplates(t *testing.T) { assert.Equal(t, "default", webTmpls[0].(*Template).ID) assert.Equal(t, "Yao Startup Webapp", webTmpls[0].(*Template).Name) assert.Len(t, webTmpls[0].Themes(), 2) - assert.Len(t, webTmpls[0].Locales(), 4) + assert.Len(t, webTmpls[0].Locales(), 5) assert.Len(t, webTmpls[0].(*Template).Template.Themes, 2) - assert.Len(t, webTmpls[0].(*Template).Template.Locales, 4) + assert.Len(t, webTmpls[0].(*Template).Template.Locales, 5) } func TestGetTemplate(t *testing.T) {