diff --git a/animation.go b/animation.go index e6a5f72..6a075e6 100644 --- a/animation.go +++ b/animation.go @@ -926,7 +926,7 @@ func (session *sessionData) registerAnimation(props []AnimatedProperty) string { } cssBuilder.startAnimationFrame("from") - NewViewStyle(fromParams).cssViewStyle(&cssBuilder, session) + writeViewStyleCSS(NewViewStyle(fromParams), &cssBuilder, session) cssBuilder.endAnimationFrame() if len(frames) > 0 { @@ -942,14 +942,14 @@ func (session *sessionData) registerAnimation(props []AnimatedProperty) string { if len(params) > 0 { cssBuilder.startAnimationFrame(strconv.Itoa(frame) + "%") - NewViewStyle(params).cssViewStyle(&cssBuilder, session) + writeViewStyleCSS(NewViewStyle(params), &cssBuilder, session) cssBuilder.endAnimationFrame() } } } cssBuilder.startAnimationFrame("to") - NewViewStyle(toParams).cssViewStyle(&cssBuilder, session) + writeViewStyleCSS(NewViewStyle(toParams), &cssBuilder, session) cssBuilder.endAnimationFrame() cssBuilder.endAnimation() diff --git a/button.go b/button.go index 5e1f840..3dccdb8 100644 --- a/button.go +++ b/button.go @@ -1,5 +1,7 @@ package rui +import "strings" + // Button represent a Button view type Button interface { ListLayout @@ -35,6 +37,15 @@ func (button *buttonData) Focusable() bool { return true } +func (button *buttonData) htmlSubviews(self View, buffer *strings.Builder) { + if button.views != nil { + for _, view := range button.views { + view.addToCSSStyle(map[string]string{`flex`: `0 0 auto`}) + viewHTML(view, buffer, "") + } + } +} + // GetButtonVerticalAlign returns the vertical align of a Button subview: // TopAlign (0), BottomAlign (1), CenterAlign (2), or StretchAlign (3) // diff --git a/customView.go b/customView.go index c5a3fbb..58e0fae 100644 --- a/customView.go +++ b/customView.go @@ -128,10 +128,6 @@ func (customView *CustomViewData) Clear() { customView.superView.Clear() } -func (customView *CustomViewData) cssViewStyle(buffer cssBuilder, session Session) { - customView.superView.cssViewStyle(buffer, session) -} - // Session returns a current Session interface func (customView *CustomViewData) Session() Session { return customView.superView.Session() diff --git a/listView.go b/listView.go index ebec4da..eeed2e1 100644 --- a/listView.go +++ b/listView.go @@ -802,21 +802,7 @@ func (listView *listViewData) cssStyle(self View, builder cssBuilder) { } */ -func (listView *listViewData) htmlSubviews(self View, buffer *strings.Builder) { - adapter := listView.getAdapter() - if adapter == nil { - return - } - - if listSize := adapter.ListSize(); listSize == 0 { - return - } - - if !listView.session.ignoreViewUpdates() { - listView.session.setIgnoreViewUpdates(true) - defer listView.session.setIgnoreViewUpdates(false) - } - +func listDiv(listView View, buffer *strings.Builder) { buffer.WriteString(`
`) +} + +func (listView *listViewData) htmlSubviews(self View, buffer *strings.Builder) { + adapter := listView.getAdapter() + if adapter == nil { + return + } + + if listSize := adapter.ListSize(); listSize == 0 { + return + } + + if !listView.session.ignoreViewUpdates() { + listView.session.setIgnoreViewUpdates(true) + defer listView.session.setIgnoreViewUpdates(false) + } + + listDiv(listView, buffer) checkbox := GetListViewCheckbox(listView) if checkbox == NoneCheckbox { diff --git a/tableView.go b/tableView.go index 2bbac70..8013c09 100644 --- a/tableView.go +++ b/tableView.go @@ -1616,7 +1616,7 @@ func tableViewCurrent(view View) CellIndex { func (table *tableViewData) cssStyle(self View, builder cssBuilder) { session := table.Session() - table.viewData.cssViewStyle(builder, session) + writeViewStyleCSS(table, builder, session) gap, ok := sizeProperty(table, Gap, session) if !ok || gap.Type == Auto || gap.Value <= 0 { diff --git a/tableViewUtils.go b/tableViewUtils.go index e2b0b94..315d07b 100644 --- a/tableViewUtils.go +++ b/tableViewUtils.go @@ -18,7 +18,7 @@ func (cell *tableCellView) init(session Session) { func (cell *tableCellView) cssStyle(self View, builder cssBuilder) { session := cell.Session() - cell.viewData.cssViewStyle(builder, session) + writeViewStyleCSS(cell, builder, session) if value, ok := enumProperty(cell, TableVerticalAlign, session, 0); ok { builder.add("vertical-align", enumProperties[TableVerticalAlign].values[value]) diff --git a/theme.go b/theme.go index f4a7854..e8938d5 100644 --- a/theme.go +++ b/theme.go @@ -661,7 +661,7 @@ func (theme *theme) cssText(session Session) string { for _, tag := range styleList(theme.styles) { if style := theme.styles[tag]; style != nil { builder.startStyle(tag) - style.cssViewStyle(&builder, session) + writeViewStyleCSS(style, &builder, session) builder.endStyle() } } @@ -671,7 +671,7 @@ func (theme *theme) cssText(session Session) string { for _, tag := range styleList(media.styles) { if style := media.styles[tag]; style != nil { builder.startStyle(tag) - style.cssViewStyle(&builder, session) + writeViewStyleCSS(style, &builder, session) builder.endStyle() } } diff --git a/transform.go b/transform.go index e9dd169..80e7296 100644 --- a/transform.go +++ b/transform.go @@ -556,7 +556,7 @@ func (transform *transformPropertyData) transformCSS(session Session) string { return result[:length-1] } -func (style *viewStyle) writeViewTransformCSS(builder cssBuilder, session Session) { +func writeViewTransformCSS(style Properties, builder cssBuilder, session Session) { x, y := getPerspectiveOrigin(style, session) z := AutoSize() if css := transformOriginCSS(x, y, z, session); css != "" { diff --git a/view.go b/view.go index 7cba79a..16d4465 100644 --- a/view.go +++ b/view.go @@ -1094,7 +1094,7 @@ func (view *viewData) addToCSSStyle(addCSS map[string]string) { } func (view *viewData) cssStyle(self View, builder cssBuilder) { - view.viewStyle.cssViewStyle(builder, view.session) + writeViewStyleCSS(view, builder, view.session) if view.addCSS != nil { for tag, value := range view.addCSS { builder.add(tag, value) diff --git a/viewStyle.go b/viewStyle.go index 316d932..c364d2a 100644 --- a/viewStyle.go +++ b/viewStyle.go @@ -22,8 +22,6 @@ type ViewStyle interface { // removes the transition animation of the property if "animation" argument is nil. // The "tag" argument is the property name. SetTransition(tag PropertyName, animation AnimationProperty) - - cssViewStyle(buffer cssBuilder, session Session) } type viewStyle struct { @@ -109,7 +107,7 @@ func split4Values(text string) []string { return []string{} } -func (style *viewStyle) cssListStyle(builder cssBuilder, session Session) { +func writeListStyleCSS(style Properties, builder cssBuilder, session Session) { wrap, _ := enumProperty(style, ListWrap, session, 0) orientation, ok := valueToOrientation(style.Get(Orientation), session) if ok || wrap > 0 { @@ -189,7 +187,7 @@ func (style *viewStyle) cssListStyle(builder cssBuilder, session Session) { } -func (style *viewStyle) cssViewStyle(builder cssBuilder, session Session) { +func writeViewStyleCSS(style Properties, builder cssBuilder, session Session) { if visibility, ok := enumProperty(style, Visibility, session, Visible); ok { switch visibility { @@ -355,7 +353,7 @@ func (style *viewStyle) cssViewStyle(builder cssBuilder, session Session) { builder.add("text-shadow", css) } - if value, ok := style.properties[ColumnSeparator]; ok { + if value := style.getRaw(ColumnSeparator); value != nil { if separator, ok := value.(ColumnSeparatorProperty); ok { if css := separator.cssValue(session); css != "" { builder.add("column-rule", css) @@ -371,7 +369,7 @@ func (style *viewStyle) cssViewStyle(builder cssBuilder, session Session) { } } - style.cssListStyle(builder, session) + writeListStyleCSS(style, builder, session) if r, ok := rangeProperty(style, Row, session); ok { builder.add("grid-row", fmt.Sprintf("%d / %d", r.First+1, r.Last+2)) @@ -386,7 +384,7 @@ func (style *viewStyle) cssViewStyle(builder cssBuilder, session Session) { builder.add(`grid-template-rows`, text) } - style.writeViewTransformCSS(builder, session) + writeViewTransformCSS(style, builder, session) if clip := getClipShapeProperty(style, Clip, session); clip != nil && clip.valid(session) { builder.add(`clip-path`, clip.cssStyle(session))