mirror of https://github.com/anoshenko/rui.git
Optimisation
This commit is contained in:
parent
76413c931a
commit
f8d797a4c1
|
@ -624,8 +624,8 @@ func (view *viewData) SetAnimated(tag string, value any, animation Animation) bo
|
|||
htmlID := view.htmlID()
|
||||
session.startUpdateScript(htmlID)
|
||||
|
||||
updateProperty(htmlID, "ontransitionend", "transitionEndEvent(this, event)", view.session)
|
||||
updateProperty(htmlID, "ontransitioncancel", "transitionCancelEvent(this, event)", view.session)
|
||||
session.updateProperty(htmlID, "ontransitionend", "transitionEndEvent(this, event)")
|
||||
session.updateProperty(htmlID, "ontransitioncancel", "transitionCancelEvent(this, event)")
|
||||
|
||||
if prevAnimation, ok := view.transitions[tag]; ok {
|
||||
view.singleTransition[tag] = prevAnimation
|
||||
|
@ -701,7 +701,7 @@ func (style *viewStyle) transitionCSS(session Session) string {
|
|||
}
|
||||
|
||||
func (view *viewData) updateTransitionCSS() {
|
||||
updateCSSProperty(view.htmlID(), "transition", view.transitionCSS(view.Session()), view.Session())
|
||||
view.session.updateCSSProperty(view.htmlID(), "transition", view.transitionCSS(view.session))
|
||||
}
|
||||
|
||||
func (style *viewStyle) Transition(tag string) Animation {
|
||||
|
@ -732,7 +732,7 @@ func (style *viewStyle) SetTransition(tag string, animation Animation) {
|
|||
func (view *viewData) SetTransition(tag string, animation Animation) {
|
||||
view.viewStyle.SetTransition(tag, animation)
|
||||
if view.created {
|
||||
updateCSSProperty(view.htmlID(), "transition", view.transitionCSS(view.Session()), view.Session())
|
||||
view.session.updateCSSProperty(view.htmlID(), "transition", view.transitionCSS(view.session))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ func (view *viewData) setTransitionListener(tag string, value any) bool {
|
|||
} else if js, ok := transitionEvents[tag]; ok {
|
||||
view.properties[tag] = listeners
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)", view.Session())
|
||||
view.session.updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)")
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
|
@ -82,7 +82,7 @@ func (view *viewData) removeTransitionListener(tag string) {
|
|||
delete(view.properties, tag)
|
||||
if view.created {
|
||||
if js, ok := transitionEvents[tag]; ok {
|
||||
removeProperty(view.htmlID(), js.jsEvent, view.Session())
|
||||
view.session.removeProperty(view.htmlID(), js.jsEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ func (view *viewData) setAnimationListener(tag string, value any) bool {
|
|||
} else if js, ok := animationEvents[tag]; ok {
|
||||
view.properties[tag] = listeners
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)", view.Session())
|
||||
view.session.updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)")
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
|
@ -148,7 +148,7 @@ func (view *viewData) removeAnimationListener(tag string) {
|
|||
delete(view.properties, tag)
|
||||
if view.created {
|
||||
if js, ok := animationEvents[tag]; ok {
|
||||
removeProperty(view.htmlID(), js.jsEvent, view.Session())
|
||||
view.session.removeProperty(view.htmlID(), js.jsEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
10
checkbox.go
10
checkbox.go
|
@ -98,7 +98,7 @@ func (button *checkboxData) set(tag string, value any) bool {
|
|||
return false
|
||||
}
|
||||
if button.created {
|
||||
updateCSSProperty(button.htmlID()+"content", "align-items", button.cssVerticalAlign(), button.session)
|
||||
button.session.updateCSSProperty(button.htmlID()+"content", "align-items", button.cssVerticalAlign())
|
||||
}
|
||||
|
||||
case HorizontalAlign:
|
||||
|
@ -106,7 +106,7 @@ func (button *checkboxData) set(tag string, value any) bool {
|
|||
return false
|
||||
}
|
||||
if button.created {
|
||||
updateCSSProperty(button.htmlID()+"content", "justify-items", button.cssHorizontalAlign(), button.session)
|
||||
button.session.updateCSSProperty(button.htmlID()+"content", "justify-items", button.cssHorizontalAlign())
|
||||
}
|
||||
|
||||
case CellVerticalAlign, CellHorizontalAlign, CellWidth, CellHeight:
|
||||
|
@ -159,13 +159,13 @@ func (button *checkboxData) remove(tag string) {
|
|||
case VerticalAlign:
|
||||
delete(button.properties, tag)
|
||||
if button.created {
|
||||
updateCSSProperty(button.htmlID()+"content", "align-items", button.cssVerticalAlign(), button.session)
|
||||
button.session.updateCSSProperty(button.htmlID()+"content", "align-items", button.cssVerticalAlign())
|
||||
}
|
||||
|
||||
case HorizontalAlign:
|
||||
delete(button.properties, tag)
|
||||
if button.created {
|
||||
updateCSSProperty(button.htmlID()+"content", "justify-items", button.cssHorizontalAlign(), button.session)
|
||||
button.session.updateCSSProperty(button.htmlID()+"content", "justify-items", button.cssHorizontalAlign())
|
||||
}
|
||||
|
||||
default:
|
||||
|
@ -189,7 +189,7 @@ func (button *checkboxData) changedCheckboxState(state bool) {
|
|||
defer freeStringBuilder(buffer)
|
||||
|
||||
button.htmlCheckbox(buffer, state)
|
||||
button.Session().runFunc("updateInnerHTML", button.htmlID()+"checkbox", buffer.String())
|
||||
button.Session().updateInnerHTML(button.htmlID()+"checkbox", buffer.String())
|
||||
}
|
||||
|
||||
func checkboxClickListener(view View) {
|
||||
|
|
|
@ -89,10 +89,10 @@ func (columnLayout *columnLayoutData) remove(tag string) {
|
|||
if columnLayout.created {
|
||||
switch tag {
|
||||
case ColumnCount, ColumnWidth, ColumnGap:
|
||||
updateCSSProperty(columnLayout.htmlID(), tag, "", columnLayout.Session())
|
||||
columnLayout.session.updateCSSProperty(columnLayout.htmlID(), tag, "")
|
||||
|
||||
case ColumnSeparator:
|
||||
updateCSSProperty(columnLayout.htmlID(), "column-rule", "", columnLayout.Session())
|
||||
columnLayout.session.updateCSSProperty(columnLayout.htmlID(), "column-rule", "")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -120,14 +120,14 @@ func (columnLayout *columnLayoutData) set(tag string, value any) bool {
|
|||
separator := val.(ColumnSeparatorProperty)
|
||||
css = separator.cssValue(columnLayout.Session())
|
||||
}
|
||||
updateCSSProperty(columnLayout.htmlID(), "column-rule", css, session)
|
||||
session.updateCSSProperty(columnLayout.htmlID(), "column-rule", css)
|
||||
|
||||
case ColumnCount:
|
||||
session := columnLayout.Session()
|
||||
if count, ok := intProperty(columnLayout, tag, session, 0); ok && count > 0 {
|
||||
updateCSSProperty(columnLayout.htmlID(), tag, strconv.Itoa(count), session)
|
||||
session.updateCSSProperty(columnLayout.htmlID(), tag, strconv.Itoa(count))
|
||||
} else {
|
||||
updateCSSProperty(columnLayout.htmlID(), tag, "auto", session)
|
||||
session.updateCSSProperty(columnLayout.htmlID(), tag, "auto")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,19 +77,19 @@ func (picker *datePickerData) remove(tag string) {
|
|||
case DatePickerMin:
|
||||
delete(picker.properties, DatePickerMin)
|
||||
if picker.created {
|
||||
removeProperty(picker.htmlID(), Min, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Min)
|
||||
}
|
||||
|
||||
case DatePickerMax:
|
||||
delete(picker.properties, DatePickerMax)
|
||||
if picker.created {
|
||||
removeProperty(picker.htmlID(), Max, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Max)
|
||||
}
|
||||
|
||||
case DatePickerStep:
|
||||
delete(picker.properties, DatePickerStep)
|
||||
if picker.created {
|
||||
removeProperty(picker.htmlID(), Step, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Step)
|
||||
}
|
||||
|
||||
case DatePickerValue:
|
||||
|
@ -183,7 +183,7 @@ func (picker *datePickerData) set(tag string, value any) bool {
|
|||
if date, ok := setTimeValue(DatePickerMin); ok {
|
||||
if !oldOK || date != old {
|
||||
if picker.created {
|
||||
updateProperty(picker.htmlID(), Min, date.Format(dateFormat), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Min, date.Format(dateFormat))
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ func (picker *datePickerData) set(tag string, value any) bool {
|
|||
if date, ok := setTimeValue(DatePickerMax); ok {
|
||||
if !oldOK || date != old {
|
||||
if picker.created {
|
||||
updateProperty(picker.htmlID(), Max, date.Format(dateFormat), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Max, date.Format(dateFormat))
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -208,9 +208,9 @@ func (picker *datePickerData) set(tag string, value any) bool {
|
|||
if step := GetDatePickerStep(picker); oldStep != step {
|
||||
if picker.created {
|
||||
if step > 0 {
|
||||
updateProperty(picker.htmlID(), Step, strconv.Itoa(step), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Step, strconv.Itoa(step))
|
||||
} else {
|
||||
removeProperty(picker.htmlID(), Step, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Step)
|
||||
}
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
|
|
|
@ -63,7 +63,7 @@ func (detailsView *detailsViewData) remove(tag string) {
|
|||
updateInnerHTML(detailsView.htmlID(), detailsView.Session())
|
||||
|
||||
case Expanded:
|
||||
removeProperty(detailsView.htmlID(), "open", detailsView.Session())
|
||||
detailsView.session.removeProperty(detailsView.htmlID(), "open")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -111,9 +111,9 @@ func (detailsView *detailsViewData) set(tag string, value any) bool {
|
|||
}
|
||||
if detailsView.created {
|
||||
if IsDetailsExpanded(detailsView) {
|
||||
updateProperty(detailsView.htmlID(), "open", "", detailsView.Session())
|
||||
detailsView.session.updateProperty(detailsView.htmlID(), "open", "")
|
||||
} else {
|
||||
removeProperty(detailsView.htmlID(), "open", detailsView.Session())
|
||||
detailsView.session.removeProperty(detailsView.htmlID(), "open")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
34
editView.go
34
editView.go
|
@ -100,7 +100,7 @@ func (edit *editViewData) remove(tag string) {
|
|||
if exists {
|
||||
delete(edit.properties, Hint)
|
||||
if edit.created {
|
||||
removeProperty(edit.htmlID(), "placeholder", edit.session)
|
||||
edit.session.removeProperty(edit.htmlID(), "placeholder")
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ func (edit *editViewData) remove(tag string) {
|
|||
if exists {
|
||||
delete(edit.properties, MaxLength)
|
||||
if edit.created {
|
||||
removeProperty(edit.htmlID(), "maxlength", edit.session)
|
||||
edit.session.removeProperty(edit.htmlID(), "maxlength")
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ func (edit *editViewData) remove(tag string) {
|
|||
if exists {
|
||||
delete(edit.properties, tag)
|
||||
if edit.created {
|
||||
updateBoolProperty(edit.htmlID(), tag, false, edit.session)
|
||||
edit.session.updateBoolProperty(edit.htmlID(), tag, false)
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ func (edit *editViewData) remove(tag string) {
|
|||
delete(edit.properties, tag)
|
||||
if oldText != "" {
|
||||
if edit.created {
|
||||
removeProperty(edit.htmlID(), Pattern, edit.session)
|
||||
edit.session.removeProperty(edit.htmlID(), Pattern)
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -173,9 +173,9 @@ func (edit *editViewData) remove(tag string) {
|
|||
if wrap := IsEditViewWrap(edit); wrap != oldWrap {
|
||||
if edit.created {
|
||||
if wrap {
|
||||
updateProperty(edit.htmlID(), "wrap", "soft", edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), "wrap", "soft")
|
||||
} else {
|
||||
updateProperty(edit.htmlID(), "wrap", "off", edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), "wrap", "off")
|
||||
}
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
|
@ -225,9 +225,9 @@ func (edit *editViewData) set(tag string, value any) bool {
|
|||
if text = GetHint(edit); oldText != text {
|
||||
if edit.created {
|
||||
if text != "" {
|
||||
updateProperty(edit.htmlID(), "placeholder", text, edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), "placeholder", text)
|
||||
} else {
|
||||
removeProperty(edit.htmlID(), "placeholder", edit.session)
|
||||
edit.session.removeProperty(edit.htmlID(), "placeholder")
|
||||
}
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
|
@ -242,9 +242,9 @@ func (edit *editViewData) set(tag string, value any) bool {
|
|||
if maxLength := GetMaxLength(edit); maxLength != oldMaxLength {
|
||||
if edit.created {
|
||||
if maxLength > 0 {
|
||||
updateProperty(edit.htmlID(), "maxlength", strconv.Itoa(maxLength), edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), "maxlength", strconv.Itoa(maxLength))
|
||||
} else {
|
||||
removeProperty(edit.htmlID(), "maxlength", edit.session)
|
||||
edit.session.removeProperty(edit.htmlID(), "maxlength")
|
||||
}
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
|
@ -257,9 +257,9 @@ func (edit *editViewData) set(tag string, value any) bool {
|
|||
if edit.setBoolProperty(ReadOnly, value) {
|
||||
if edit.created {
|
||||
if IsReadOnly(edit) {
|
||||
updateProperty(edit.htmlID(), ReadOnly, "", edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), ReadOnly, "")
|
||||
} else {
|
||||
removeProperty(edit.htmlID(), ReadOnly, edit.session)
|
||||
edit.session.removeProperty(edit.htmlID(), ReadOnly)
|
||||
}
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
|
@ -270,7 +270,7 @@ func (edit *editViewData) set(tag string, value any) bool {
|
|||
case Spellcheck:
|
||||
if edit.setBoolProperty(Spellcheck, value) {
|
||||
if edit.created {
|
||||
updateBoolProperty(edit.htmlID(), Spellcheck, IsSpellcheck(edit), edit.session)
|
||||
edit.session.updateBoolProperty(edit.htmlID(), Spellcheck, IsSpellcheck(edit))
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
return true
|
||||
|
@ -284,9 +284,9 @@ func (edit *editViewData) set(tag string, value any) bool {
|
|||
if text = GetEditViewPattern(edit); oldText != text {
|
||||
if edit.created {
|
||||
if text != "" {
|
||||
updateProperty(edit.htmlID(), Pattern, text, edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), Pattern, text)
|
||||
} else {
|
||||
removeProperty(edit.htmlID(), Pattern, edit.session)
|
||||
edit.session.removeProperty(edit.htmlID(), Pattern)
|
||||
}
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
|
@ -315,9 +315,9 @@ func (edit *editViewData) set(tag string, value any) bool {
|
|||
if wrap := IsEditViewWrap(edit); wrap != oldWrap {
|
||||
if edit.created {
|
||||
if wrap {
|
||||
updateProperty(edit.htmlID(), "wrap", "soft", edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), "wrap", "soft")
|
||||
} else {
|
||||
updateProperty(edit.htmlID(), "wrap", "off", edit.session)
|
||||
edit.session.updateProperty(edit.htmlID(), "wrap", "off")
|
||||
}
|
||||
}
|
||||
edit.propertyChangedEvent(tag)
|
||||
|
|
|
@ -129,7 +129,7 @@ func (picker *filePickerData) remove(tag string) {
|
|||
case Accept:
|
||||
delete(picker.properties, tag)
|
||||
if picker.created {
|
||||
removeProperty(picker.htmlID(), "accept", picker.Session())
|
||||
picker.session.removeProperty(picker.htmlID(), "accept")
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
|
||||
|
@ -196,9 +196,9 @@ func (picker *filePickerData) set(tag string, value any) bool {
|
|||
|
||||
if picker.created {
|
||||
if css := picker.acceptCSS(); css != "" {
|
||||
updateProperty(picker.htmlID(), "accept", css, picker.Session())
|
||||
picker.session.updateProperty(picker.htmlID(), "accept", css)
|
||||
} else {
|
||||
removeProperty(picker.htmlID(), "accept", picker.Session())
|
||||
picker.session.removeProperty(picker.htmlID(), "accept")
|
||||
}
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
|
|
|
@ -108,7 +108,7 @@ func (view *viewData) setFocusListener(tag string, value any) bool {
|
|||
} else if js, ok := focusEvents[tag]; ok {
|
||||
view.properties[tag] = listeners
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)", view.Session())
|
||||
view.session.updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)")
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
|
@ -120,7 +120,7 @@ func (view *viewData) removeFocusListener(tag string) {
|
|||
delete(view.properties, tag)
|
||||
if view.created {
|
||||
if js, ok := focusEvents[tag]; ok {
|
||||
removeProperty(view.htmlID(), js.jsEvent, view.Session())
|
||||
view.session.removeProperty(view.htmlID(), js.jsEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -230,12 +230,12 @@ func (gridLayout *gridLayoutData) remove(tag string) {
|
|||
if gridLayout.created {
|
||||
switch tag {
|
||||
case CellWidth:
|
||||
updateCSSProperty(gridLayout.htmlID(), `grid-template-columns`,
|
||||
gridLayout.gridCellSizesCSS(CellWidth, gridLayout.session), gridLayout.session)
|
||||
gridLayout.session.updateCSSProperty(gridLayout.htmlID(), `grid-template-columns`,
|
||||
gridLayout.gridCellSizesCSS(CellWidth, gridLayout.session))
|
||||
|
||||
case CellHeight:
|
||||
updateCSSProperty(gridLayout.htmlID(), `grid-template-rows`,
|
||||
gridLayout.gridCellSizesCSS(CellHeight, gridLayout.session), gridLayout.session)
|
||||
gridLayout.session.updateCSSProperty(gridLayout.htmlID(), `grid-template-rows`,
|
||||
gridLayout.gridCellSizesCSS(CellHeight, gridLayout.session))
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -259,12 +259,12 @@ func (gridLayout *gridLayoutData) set(tag string, value any) bool {
|
|||
if gridLayout.created {
|
||||
switch tag {
|
||||
case CellWidth:
|
||||
updateCSSProperty(gridLayout.htmlID(), `grid-template-columns`,
|
||||
gridLayout.gridCellSizesCSS(CellWidth, gridLayout.session), gridLayout.session)
|
||||
gridLayout.session.updateCSSProperty(gridLayout.htmlID(), `grid-template-columns`,
|
||||
gridLayout.gridCellSizesCSS(CellWidth, gridLayout.session))
|
||||
|
||||
case CellHeight:
|
||||
updateCSSProperty(gridLayout.htmlID(), `grid-template-rows`,
|
||||
gridLayout.gridCellSizesCSS(CellHeight, gridLayout.session), gridLayout.session)
|
||||
gridLayout.session.updateCSSProperty(gridLayout.htmlID(), `grid-template-rows`,
|
||||
gridLayout.gridCellSizesCSS(CellHeight, gridLayout.session))
|
||||
|
||||
}
|
||||
}
|
||||
|
|
10
imageView.go
10
imageView.go
|
@ -102,8 +102,8 @@ func (imageView *imageViewData) remove(tag string) {
|
|||
if imageView.created {
|
||||
switch tag {
|
||||
case Source:
|
||||
updateProperty(imageView.htmlID(), "src", "", imageView.session)
|
||||
removeProperty(imageView.htmlID(), "srcset", imageView.session)
|
||||
imageView.session.updateProperty(imageView.htmlID(), "src", "")
|
||||
imageView.session.removeProperty(imageView.htmlID(), "srcset")
|
||||
|
||||
case AltText:
|
||||
updateInnerHTML(imageView.htmlID(), imageView.session)
|
||||
|
@ -133,11 +133,11 @@ func (imageView *imageViewData) set(tag string, value any) bool {
|
|||
if src != "" && src[0] == '@' {
|
||||
src, _ = imageProperty(imageView, Source, imageView.session)
|
||||
}
|
||||
updateProperty(imageView.htmlID(), "src", src, imageView.session)
|
||||
imageView.session.updateProperty(imageView.htmlID(), "src", src)
|
||||
if srcset := imageView.srcSet(src); srcset != "" {
|
||||
updateProperty(imageView.htmlID(), "srcset", srcset, imageView.session)
|
||||
imageView.session.updateProperty(imageView.htmlID(), "srcset", srcset)
|
||||
} else {
|
||||
removeProperty(imageView.htmlID(), "srcset", imageView.session)
|
||||
imageView.session.removeProperty(imageView.htmlID(), "srcset")
|
||||
}
|
||||
}
|
||||
imageView.propertyChangedEvent(Source)
|
||||
|
|
|
@ -210,7 +210,7 @@ func (view *viewData) setKeyListener(tag string, value any) bool {
|
|||
} else if js, ok := keyEvents[tag]; ok {
|
||||
view.properties[tag] = listeners
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)", view.Session())
|
||||
view.session.updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)")
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
|
@ -222,7 +222,7 @@ func (view *viewData) removeKeyListener(tag string) {
|
|||
delete(view.properties, tag)
|
||||
if view.created {
|
||||
if js, ok := keyEvents[tag]; ok {
|
||||
removeProperty(view.htmlID(), js.jsEvent, view.Session())
|
||||
view.session.removeProperty(view.htmlID(), js.jsEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -837,7 +837,7 @@ func (listView *listViewData) updateCheckboxItem(index int, checked bool) {
|
|||
}
|
||||
}
|
||||
buffer.WriteString(`</div></div>`)
|
||||
session.runFunc("updateInnerHTML", listView.htmlID()+"-"+strconv.Itoa(index), buffer.String())
|
||||
session.updateInnerHTML(listView.htmlID()+"-"+strconv.Itoa(index), buffer.String())
|
||||
}
|
||||
|
||||
func (listView *listViewData) htmlProperties(self View, buffer *strings.Builder) {
|
||||
|
|
|
@ -463,21 +463,21 @@ func (player *mediaPlayerData) propertyChanged(tag string) {
|
|||
if player.created {
|
||||
switch tag {
|
||||
case Controls, Loop:
|
||||
value, _ := boolProperty(player, tag, player.Session())
|
||||
value, _ := boolProperty(player, tag, player.session)
|
||||
if value {
|
||||
updateBoolProperty(player.htmlID(), tag, value, player.Session())
|
||||
player.session.updateBoolProperty(player.htmlID(), tag, value)
|
||||
} else {
|
||||
removeProperty(player.htmlID(), tag, player.Session())
|
||||
player.session.removeProperty(player.htmlID(), tag)
|
||||
}
|
||||
|
||||
case Muted:
|
||||
value, _ := boolProperty(player, tag, player.Session())
|
||||
player.Session().runFunc("setMediaMuted", player.htmlID(), value)
|
||||
value, _ := boolProperty(player, tag, player.session)
|
||||
player.session.runFunc("setMediaMuted", player.htmlID(), value)
|
||||
|
||||
case Preload:
|
||||
value, _ := enumProperty(player, tag, player.Session(), 0)
|
||||
value, _ := enumProperty(player, tag, player.session, 0)
|
||||
values := enumProperties[Preload].values
|
||||
updateProperty(player.htmlID(), tag, values[value], player.Session())
|
||||
player.session.updateProperty(player.htmlID(), tag, values[value])
|
||||
|
||||
case AbortEvent, CanPlayEvent, CanPlayThroughEvent, CompleteEvent, EmptiedEvent,
|
||||
EndedEvent, LoadedDataEvent, LoadedMetadataEvent, PauseEvent, PlayEvent, PlayingEvent, ProgressEvent,
|
||||
|
@ -490,53 +490,53 @@ func (player *mediaPlayerData) propertyChanged(tag string) {
|
|||
case []func(MediaPlayer):
|
||||
if len(value) > 0 {
|
||||
fn := fmt.Sprintf(`playerEvent(this, "%s")`, event.tag)
|
||||
updateProperty(player.htmlID(), event.cssTag, fn, player.Session())
|
||||
player.session.updateProperty(player.htmlID(), event.cssTag, fn)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
updateProperty(player.htmlID(), tag, "", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), tag, "")
|
||||
break
|
||||
}
|
||||
|
||||
}
|
||||
case TimeUpdateEvent:
|
||||
if value := player.getRaw(tag); value != nil {
|
||||
updateProperty(player.htmlID(), "ontimeupdate", "playerTimeUpdatedEvent(this)", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "ontimeupdate", "playerTimeUpdatedEvent(this)")
|
||||
} else {
|
||||
updateProperty(player.htmlID(), "ontimeupdate", "", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "ontimeupdate", "")
|
||||
}
|
||||
|
||||
case VolumeChangedEvent:
|
||||
if value := player.getRaw(tag); value != nil {
|
||||
updateProperty(player.htmlID(), "onvolumechange", "playerVolumeChangedEvent(this)", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "onvolumechange", "playerVolumeChangedEvent(this)")
|
||||
} else {
|
||||
updateProperty(player.htmlID(), "onvolumechange", "", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "onvolumechange", "")
|
||||
}
|
||||
|
||||
case DurationChangedEvent:
|
||||
if value := player.getRaw(tag); value != nil {
|
||||
updateProperty(player.htmlID(), "ondurationchange", "playerDurationChangedEvent(this)", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "ondurationchange", "playerDurationChangedEvent(this)")
|
||||
} else {
|
||||
updateProperty(player.htmlID(), "ondurationchange", "", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "ondurationchange", "")
|
||||
}
|
||||
|
||||
case RateChangedEvent:
|
||||
if value := player.getRaw(tag); value != nil {
|
||||
updateProperty(player.htmlID(), "onratechange", "playerRateChangedEvent(this)", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "onratechange", "playerRateChangedEvent(this)")
|
||||
} else {
|
||||
updateProperty(player.htmlID(), "onratechange", "", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "onratechange", "")
|
||||
}
|
||||
|
||||
case PlayerErrorEvent:
|
||||
if value := player.getRaw(tag); value != nil {
|
||||
updateProperty(player.htmlID(), "onerror", "playerErrorEvent(this)", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "onerror", "playerErrorEvent(this)")
|
||||
} else {
|
||||
updateProperty(player.htmlID(), "onerror", "", player.Session())
|
||||
player.session.updateProperty(player.htmlID(), "onerror", "")
|
||||
}
|
||||
|
||||
case Source:
|
||||
updateInnerHTML(player.htmlID(), player.Session())
|
||||
updateInnerHTML(player.htmlID(), player.session)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -544,7 +544,7 @@ func (player *mediaPlayerData) propertyChanged(tag string) {
|
|||
func (player *mediaPlayerData) htmlSubviews(self View, buffer *strings.Builder) {
|
||||
if value := player.getRaw(Source); value != nil {
|
||||
if sources, ok := value.([]MediaSource); ok && len(sources) > 0 {
|
||||
session := player.Session()
|
||||
session := player.session
|
||||
for _, src := range sources {
|
||||
if url, ok := session.resolveConstants(src.Url); ok && url != "" {
|
||||
buffer.WriteString(`<source src="`)
|
||||
|
@ -565,13 +565,13 @@ func (player *mediaPlayerData) htmlSubviews(self View, buffer *strings.Builder)
|
|||
func (player *mediaPlayerData) htmlProperties(self View, buffer *strings.Builder) {
|
||||
player.viewData.htmlProperties(self, buffer)
|
||||
for _, tag := range []string{Controls, Loop, Muted, Preload} {
|
||||
if value, _ := boolProperty(player, tag, player.Session()); value {
|
||||
if value, _ := boolProperty(player, tag, player.session); value {
|
||||
buffer.WriteRune(' ')
|
||||
buffer.WriteString(tag)
|
||||
}
|
||||
}
|
||||
|
||||
if value, ok := enumProperty(player, Preload, player.Session(), 0); ok {
|
||||
if value, ok := enumProperty(player, Preload, player.session, 0); ok {
|
||||
values := enumProperties[Preload].values
|
||||
buffer.WriteString(` preload="`)
|
||||
buffer.WriteString(values[value])
|
||||
|
@ -667,7 +667,7 @@ func (player *mediaPlayerData) SetCurrentTime(seconds float64) {
|
|||
}
|
||||
|
||||
func (player *mediaPlayerData) getFloatPlayerProperty(tag string) (float64, bool) {
|
||||
value := player.Session().htmlPropertyValue(player.htmlID(), tag)
|
||||
value := player.session.htmlPropertyValue(player.htmlID(), tag)
|
||||
if value != "" {
|
||||
result, err := strconv.ParseFloat(value, 32)
|
||||
if err == nil {
|
||||
|
@ -718,7 +718,7 @@ func (player *mediaPlayerData) Volume() float64 {
|
|||
}
|
||||
|
||||
func (player *mediaPlayerData) getBoolPlayerProperty(tag string) (bool, bool) {
|
||||
switch value := player.Session().htmlPropertyValue(player.htmlID(), tag); strings.ToLower(value) {
|
||||
switch value := player.session.htmlPropertyValue(player.htmlID(), tag); strings.ToLower(value) {
|
||||
case "0", "false", "off":
|
||||
return false, true
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ func (view *viewData) setMouseListener(tag string, value any) bool {
|
|||
} else if js, ok := mouseEvents[tag]; ok {
|
||||
view.properties[tag] = listeners
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)", view.Session())
|
||||
view.session.updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)")
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
|
@ -179,7 +179,7 @@ func (view *viewData) removeMouseListener(tag string) {
|
|||
delete(view.properties, tag)
|
||||
if view.created {
|
||||
if js, ok := mouseEvents[tag]; ok {
|
||||
removeProperty(view.htmlID(), js.jsEvent, view.Session())
|
||||
view.session.removeProperty(view.htmlID(), js.jsEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,24 +140,24 @@ func (picker *numberPickerData) propertyChanged(tag string) {
|
|||
switch tag {
|
||||
case NumberPickerType:
|
||||
if GetNumberPickerType(picker) == NumberSlider {
|
||||
updateProperty(picker.htmlID(), "type", "range", picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), "type", "range")
|
||||
} else {
|
||||
updateProperty(picker.htmlID(), "type", "number", picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), "type", "number")
|
||||
}
|
||||
|
||||
case NumberPickerMin:
|
||||
min, _ := GetNumberPickerMinMax(picker)
|
||||
updateProperty(picker.htmlID(), Min, strconv.FormatFloat(min, 'f', -1, 32), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Min, strconv.FormatFloat(min, 'f', -1, 32))
|
||||
|
||||
case NumberPickerMax:
|
||||
_, max := GetNumberPickerMinMax(picker)
|
||||
updateProperty(picker.htmlID(), Max, strconv.FormatFloat(max, 'f', -1, 32), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Max, strconv.FormatFloat(max, 'f', -1, 32))
|
||||
|
||||
case NumberPickerStep:
|
||||
if step := GetNumberPickerStep(picker); step > 0 {
|
||||
updateProperty(picker.htmlID(), Step, strconv.FormatFloat(step, 'f', -1, 32), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Step, strconv.FormatFloat(step, 'f', -1, 32))
|
||||
} else {
|
||||
updateProperty(picker.htmlID(), Step, "any", picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Step, "any")
|
||||
}
|
||||
|
||||
case NumberPickerValue:
|
||||
|
|
|
@ -108,7 +108,7 @@ func (view *viewData) setPointerListener(tag string, value any) bool {
|
|||
} else if js, ok := pointerEvents[tag]; ok {
|
||||
view.properties[tag] = listeners
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)", view.Session())
|
||||
view.session.updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)")
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
|
@ -120,7 +120,7 @@ func (view *viewData) removePointerListener(tag string) {
|
|||
delete(view.properties, tag)
|
||||
if view.created {
|
||||
if js, ok := pointerEvents[tag]; ok {
|
||||
removeProperty(view.htmlID(), js.jsEvent, view.Session())
|
||||
view.session.removeProperty(view.htmlID(), js.jsEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
14
popup.go
14
popup.go
|
@ -610,7 +610,7 @@ func ShowPopup(view View, param Params) Popup {
|
|||
func (manager *popupManager) updatePopupLayerInnerHTML(session Session) {
|
||||
if manager.popups == nil {
|
||||
manager.popups = []Popup{}
|
||||
session.runFunc("updateInnerHTML", "ruiPopupLayer", "")
|
||||
session.updateInnerHTML("ruiPopupLayer", "")
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -620,7 +620,7 @@ func (manager *popupManager) updatePopupLayerInnerHTML(session Session) {
|
|||
for _, popup := range manager.popups {
|
||||
popup.html(buffer)
|
||||
}
|
||||
session.runFunc("updateInnerHTML", "ruiPopupLayer", buffer.String())
|
||||
session.updateInnerHTML("ruiPopupLayer", buffer.String())
|
||||
}
|
||||
|
||||
func (manager *popupManager) showPopup(popup Popup) {
|
||||
|
@ -637,8 +637,8 @@ func (manager *popupManager) showPopup(popup Popup) {
|
|||
|
||||
session.runFunc("blurCurrent")
|
||||
manager.updatePopupLayerInnerHTML(session)
|
||||
updateCSSProperty("ruiPopupLayer", "visibility", "visible", session)
|
||||
updateCSSProperty("ruiRoot", "pointer-events", "none", session)
|
||||
session.updateCSSProperty("ruiPopupLayer", "visibility", "visible")
|
||||
session.updateCSSProperty("ruiRoot", "pointer-events", "none")
|
||||
}
|
||||
|
||||
func (manager *popupManager) dismissPopup(popup Popup) {
|
||||
|
@ -656,9 +656,9 @@ func (manager *popupManager) dismissPopup(popup Popup) {
|
|||
if manager.popups[count-1] == popup {
|
||||
if count == 1 {
|
||||
manager.popups = []Popup{}
|
||||
updateCSSProperty("ruiRoot", "pointer-events", "auto", session)
|
||||
updateCSSProperty("ruiPopupLayer", "visibility", "hidden", session)
|
||||
session.runFunc("updateInnerHTML", "ruiPopupLayer", "")
|
||||
session.updateCSSProperty("ruiRoot", "pointer-events", "auto")
|
||||
session.updateCSSProperty("ruiPopupLayer", "visibility", "hidden")
|
||||
session.updateInnerHTML("ruiPopupLayer", "")
|
||||
} else {
|
||||
manager.popups = manager.popups[:count-1]
|
||||
manager.updatePopupLayerInnerHTML(session)
|
||||
|
|
|
@ -65,10 +65,12 @@ func (progress *progressBarData) propertyChanged(tag string) {
|
|||
if progress.created {
|
||||
switch tag {
|
||||
case ProgressBarMax:
|
||||
updateProperty(progress.htmlID(), Max, strconv.FormatFloat(GetProgressBarMax(progress), 'f', -1, 32), progress.session)
|
||||
progress.session.updateProperty(progress.htmlID(), Max,
|
||||
strconv.FormatFloat(GetProgressBarMax(progress), 'f', -1, 32))
|
||||
|
||||
case ProgressBarValue:
|
||||
updateProperty(progress.htmlID(), Value, strconv.FormatFloat(GetProgressBarValue(progress), 'f', -1, 32), progress.session)
|
||||
progress.session.updateProperty(progress.htmlID(), Value,
|
||||
strconv.FormatFloat(GetProgressBarValue(progress), 'f', -1, 32))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -334,8 +334,8 @@ func (resizable *resizableData) updateResizeBorderWidth() {
|
|||
session := resizable.Session()
|
||||
column, row := resizable.cellSizeCSS()
|
||||
|
||||
updateCSSProperty(htmlID, "grid-template-columns", column, session)
|
||||
updateCSSProperty(htmlID, "grid-template-rows", row, session)
|
||||
session.updateCSSProperty(htmlID, "grid-template-columns", column)
|
||||
session.updateCSSProperty(htmlID, "grid-template-rows", row)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
79
session.go
79
session.go
|
@ -9,6 +9,11 @@ import (
|
|||
|
||||
type webBrige interface {
|
||||
runFunc(funcName string, args ...any) bool
|
||||
updateInnerHTML(htmlID, html string)
|
||||
appendToInnerHTML(htmlID, html string)
|
||||
updateCSSProperty(htmlID, property, value string)
|
||||
updateProperty(htmlID, property, value any)
|
||||
removeProperty(htmlID, property string)
|
||||
readMessage() (string, bool)
|
||||
writeMessage(text string) bool
|
||||
canvasTextMetrics(htmlID, font, text string) TextMetrics
|
||||
|
@ -99,6 +104,12 @@ type Session interface {
|
|||
setBrige(events chan DataObject, brige webBrige)
|
||||
writeInitScript(writer *strings.Builder)
|
||||
runFunc(funcName string, args ...any)
|
||||
updateInnerHTML(htmlID, html string)
|
||||
appendToInnerHTML(htmlID, html string)
|
||||
updateCSSProperty(htmlID, property, value string)
|
||||
updateProperty(htmlID, property, value string)
|
||||
updateBoolProperty(htmlID, property string, value bool)
|
||||
removeProperty(htmlID, property string)
|
||||
runScript(script string)
|
||||
canvasTextMetrics(htmlID, font, text string) TextMetrics
|
||||
htmlPropertyValue(htmlID, name string) string
|
||||
|
@ -333,6 +344,74 @@ func (session *sessionData) runFunc(funcName string, args ...any) {
|
|||
}
|
||||
}
|
||||
|
||||
func (session *sessionData) updateInnerHTML(htmlID, html string) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if session.brige != nil {
|
||||
session.brige.updateInnerHTML(htmlID, html)
|
||||
} else {
|
||||
ErrorLog("No connection")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (session *sessionData) appendToInnerHTML(htmlID, html string) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if session.brige != nil {
|
||||
session.brige.appendToInnerHTML(htmlID, html)
|
||||
} else {
|
||||
ErrorLog("No connection")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (session *sessionData) updateCSSProperty(htmlID, property, value string) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if buffer := session.updateScript(htmlID); buffer != nil {
|
||||
buffer.WriteString(fmt.Sprintf(`element.style['%v'] = '%v';`, property, value))
|
||||
buffer.WriteRune('\n')
|
||||
} else {
|
||||
session.runFunc("updateCSSProperty", htmlID, property, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (session *sessionData) updateProperty(htmlID, property, value string) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if buffer := session.updateScript(htmlID); buffer != nil {
|
||||
buffer.WriteString(fmt.Sprintf(`element.setAttribute('%v', '%v');`, property, value))
|
||||
buffer.WriteRune('\n')
|
||||
} else {
|
||||
session.runFunc("updateProperty", htmlID, property, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (session *sessionData) updateBoolProperty(htmlID, property string, value bool) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if buffer := session.updateScript(htmlID); buffer != nil {
|
||||
if value {
|
||||
buffer.WriteString(fmt.Sprintf(`element.setAttribute('%v', true);`, property))
|
||||
} else {
|
||||
buffer.WriteString(fmt.Sprintf(`element.setAttribute('%v', false);`, property))
|
||||
}
|
||||
buffer.WriteRune('\n')
|
||||
} else {
|
||||
session.runFunc("updateProperty", htmlID, property, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (session *sessionData) removeProperty(htmlID, property string) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if buffer := session.updateScript(htmlID); buffer != nil {
|
||||
buffer.WriteString(fmt.Sprintf(`if (element.hasAttribute('%v')) { element.removeAttribute('%v');}`, property, property))
|
||||
buffer.WriteRune('\n')
|
||||
} else {
|
||||
session.runFunc("removeProperty", htmlID, property)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (session *sessionData) runScript(script string) {
|
||||
if session.brige != nil {
|
||||
session.brige.writeMessage(script)
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package rui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
|
@ -60,19 +59,12 @@ func updateInnerHTML(htmlID string, session Session) {
|
|||
|
||||
script.Grow(32 * 1024)
|
||||
view.htmlSubviews(view, script)
|
||||
session.runFunc("updateInnerHTML", view.htmlID(), script.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func appendToInnerHTML(htmlID, content string, session Session) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if view := session.viewByHTMLID(htmlID); view != nil {
|
||||
session.runFunc("appendToInnerHTML", view.htmlID(), content)
|
||||
session.updateInnerHTML(view.htmlID(), script.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
func updateProperty(htmlID, property, value string, session Session) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
if buffer := session.updateScript(htmlID); buffer != nil {
|
||||
|
@ -120,7 +112,7 @@ func removeProperty(htmlID, property string, session Session) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
/*
|
||||
func setDisabled(htmlID string, disabled bool, session Session) {
|
||||
if !session.ignoreViewUpdates() {
|
||||
|
|
|
@ -122,11 +122,11 @@ func (layout *stackLayoutData) set(tag string, value any) bool {
|
|||
setCurrent := func(index int) {
|
||||
if index != layout.peek {
|
||||
if layout.peek < len(layout.views) {
|
||||
updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(layout.peek), "visibility", "hidden", layout.Session())
|
||||
layout.Session().updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(layout.peek), "visibility", "hidden")
|
||||
}
|
||||
|
||||
layout.peek = index
|
||||
updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(index), "visibility", "visible", layout.Session())
|
||||
layout.Session().updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(index), "visibility", "visible")
|
||||
layout.propertyChangedEvent(Current)
|
||||
}
|
||||
}
|
||||
|
@ -204,11 +204,11 @@ func (layout *stackLayoutData) MoveToFront(view View) bool {
|
|||
if view2.htmlID() == htmlID {
|
||||
if i != peek {
|
||||
if peek < len(layout.views) {
|
||||
updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(peek), "visibility", "hidden", layout.Session())
|
||||
layout.Session().updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(peek), "visibility", "hidden")
|
||||
}
|
||||
|
||||
layout.peek = i
|
||||
updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(i), "visibility", "visible", layout.Session())
|
||||
layout.Session().updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(i), "visibility", "visible")
|
||||
layout.propertyChangedEvent(Current)
|
||||
}
|
||||
return true
|
||||
|
@ -225,11 +225,11 @@ func (layout *stackLayoutData) MoveToFrontByID(viewID string) bool {
|
|||
if view.ID() == viewID {
|
||||
if i != peek {
|
||||
if peek < len(layout.views) {
|
||||
updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(peek), "visibility", "hidden", layout.Session())
|
||||
layout.Session().updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(peek), "visibility", "hidden")
|
||||
}
|
||||
|
||||
layout.peek = i
|
||||
updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(i), "visibility", "visible", layout.Session())
|
||||
layout.Session().updateCSSProperty(layout.htmlID()+"page"+strconv.Itoa(i), "visibility", "visible")
|
||||
layout.propertyChangedEvent(Current)
|
||||
}
|
||||
return true
|
||||
|
@ -319,8 +319,8 @@ func (layout *stackLayoutData) Push(view View, animation int, onPushFinished fun
|
|||
viewHTML(layout.pushView, buffer)
|
||||
buffer.WriteString(`</div>`)
|
||||
|
||||
appendToInnerHTML(htmlID, buffer.String(), session)
|
||||
updateCSSProperty(htmlID+"push", "transform", "translate(0px, 0px)", layout.session)
|
||||
session.appendToInnerHTML(htmlID, buffer.String())
|
||||
layout.session.updateCSSProperty(htmlID+"push", "transform", "translate(0px, 0px)")
|
||||
|
||||
layout.views = append(layout.views, view)
|
||||
view.setParentID(htmlID)
|
||||
|
@ -357,7 +357,7 @@ func (layout *stackLayoutData) Pop(animation int, onPopFinished func(View)) bool
|
|||
viewHTML(layout.popView, buffer)
|
||||
buffer.WriteString(`</div>`)
|
||||
|
||||
appendToInnerHTML(htmlID, buffer.String(), session)
|
||||
session.appendToInnerHTML(htmlID, buffer.String())
|
||||
|
||||
var value string
|
||||
switch layout.animationType {
|
||||
|
@ -374,7 +374,7 @@ func (layout *stackLayoutData) Pop(animation int, onPopFinished func(View)) bool
|
|||
value = fmt.Sprintf("translate(%gpx, 0px)", layout.frame.Width)
|
||||
}
|
||||
|
||||
updateCSSProperty(htmlID+"pop", "transform", value, layout.session)
|
||||
layout.session.updateCSSProperty(htmlID+"pop", "transform", value)
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
53
tableView.go
53
tableView.go
|
@ -593,11 +593,11 @@ func (table *tableViewData) propertyChanged(tag string) {
|
|||
session := table.Session()
|
||||
gap, ok := sizeProperty(table, Gap, session)
|
||||
if !ok || gap.Type == Auto || gap.Value <= 0 {
|
||||
updateCSSProperty(htmlID, "border-spacing", "0", session)
|
||||
updateCSSProperty(htmlID, "border-collapse", "collapse", session)
|
||||
session.updateCSSProperty(htmlID, "border-spacing", "0")
|
||||
session.updateCSSProperty(htmlID, "border-collapse", "collapse")
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "border-spacing", gap.cssString("0", session), session)
|
||||
updateCSSProperty(htmlID, "border-collapse", "separate", session)
|
||||
session.updateCSSProperty(htmlID, "border-spacing", gap.cssString("0", session))
|
||||
session.updateCSSProperty(htmlID, "border-collapse", "separate")
|
||||
}
|
||||
|
||||
case SelectionMode:
|
||||
|
@ -606,38 +606,38 @@ func (table *tableViewData) propertyChanged(tag string) {
|
|||
|
||||
switch GetTableSelectionMode(table) {
|
||||
case CellSelection:
|
||||
updateProperty(htmlID, "tabindex", "0", session)
|
||||
updateProperty(htmlID, "onfocus", "tableViewFocusEvent(this, event)", session)
|
||||
updateProperty(htmlID, "onblur", "tableViewBlurEvent(this, event)", session)
|
||||
updateProperty(htmlID, "data-selection", "cell", session)
|
||||
updateProperty(htmlID, "data-focusitemstyle", table.currentStyle(), session)
|
||||
updateProperty(htmlID, "data-bluritemstyle", table.currentInactiveStyle(), session)
|
||||
session.updateProperty(htmlID, "tabindex", "0")
|
||||
session.updateProperty(htmlID, "onfocus", "tableViewFocusEvent(this, event)")
|
||||
session.updateProperty(htmlID, "onblur", "tableViewBlurEvent(this, event)")
|
||||
session.updateProperty(htmlID, "data-selection", "cell")
|
||||
session.updateProperty(htmlID, "data-focusitemstyle", table.currentStyle())
|
||||
session.updateProperty(htmlID, "data-bluritemstyle", table.currentInactiveStyle())
|
||||
|
||||
if table.current.Row >= 0 && table.current.Column >= 0 {
|
||||
updateProperty(htmlID, "data-current", table.cellID(table.current.Row, table.current.Column), session)
|
||||
session.updateProperty(htmlID, "data-current", table.cellID(table.current.Row, table.current.Column))
|
||||
} else {
|
||||
removeProperty(htmlID, "data-current", session)
|
||||
session.removeProperty(htmlID, "data-current")
|
||||
}
|
||||
updateProperty(htmlID, "onkeydown", "tableViewCellKeyDownEvent(this, event)", session)
|
||||
session.updateProperty(htmlID, "onkeydown", "tableViewCellKeyDownEvent(this, event)")
|
||||
|
||||
case RowSelection:
|
||||
updateProperty(htmlID, "tabindex", "0", session)
|
||||
updateProperty(htmlID, "onfocus", "tableViewFocusEvent(this, event)", session)
|
||||
updateProperty(htmlID, "onblur", "tableViewBlurEvent(this, event)", session)
|
||||
updateProperty(htmlID, "data-selection", "row", session)
|
||||
updateProperty(htmlID, "data-focusitemstyle", table.currentStyle(), session)
|
||||
updateProperty(htmlID, "data-bluritemstyle", table.currentInactiveStyle(), session)
|
||||
session.updateProperty(htmlID, "tabindex", "0")
|
||||
session.updateProperty(htmlID, "onfocus", "tableViewFocusEvent(this, event)")
|
||||
session.updateProperty(htmlID, "onblur", "tableViewBlurEvent(this, event)")
|
||||
session.updateProperty(htmlID, "data-selection", "row")
|
||||
session.updateProperty(htmlID, "data-focusitemstyle", table.currentStyle())
|
||||
session.updateProperty(htmlID, "data-bluritemstyle", table.currentInactiveStyle())
|
||||
|
||||
if table.current.Row >= 0 {
|
||||
updateProperty(htmlID, "data-current", table.rowID(table.current.Row), session)
|
||||
session.updateProperty(htmlID, "data-current", table.rowID(table.current.Row))
|
||||
} else {
|
||||
removeProperty(htmlID, "data-current", session)
|
||||
session.removeProperty(htmlID, "data-current")
|
||||
}
|
||||
updateProperty(htmlID, "onkeydown", "tableViewRowKeyDownEvent(this, event)", session)
|
||||
session.updateProperty(htmlID, "onkeydown", "tableViewRowKeyDownEvent(this, event)")
|
||||
|
||||
default: // NoneSelection
|
||||
for _, prop := range []string{"tabindex", "data-current", "onfocus", "onblur", "onkeydown", "data-selection"} {
|
||||
removeProperty(htmlID, prop, session)
|
||||
session.removeProperty(htmlID, prop)
|
||||
}
|
||||
}
|
||||
updateInnerHTML(htmlID, session)
|
||||
|
@ -1335,11 +1335,12 @@ func (table *tableViewData) cssStyle(self View, builder cssBuilder) {
|
|||
|
||||
func (table *tableViewData) ReloadTableData() {
|
||||
session := table.Session()
|
||||
htmlID := table.htmlID()
|
||||
if content := table.content(); content != nil {
|
||||
updateProperty(table.htmlID(), "data-rows", strconv.Itoa(content.RowCount()), session)
|
||||
updateProperty(table.htmlID(), "data-columns", strconv.Itoa(content.ColumnCount()), session)
|
||||
session.updateProperty(htmlID, "data-rows", strconv.Itoa(content.RowCount()))
|
||||
session.updateProperty(htmlID, "data-columns", strconv.Itoa(content.ColumnCount()))
|
||||
}
|
||||
updateInnerHTML(table.htmlID(), session)
|
||||
updateInnerHTML(htmlID, session)
|
||||
}
|
||||
|
||||
func (table *tableViewData) onItemResize(self View, index string, x, y, width, height float64) {
|
||||
|
|
|
@ -161,8 +161,8 @@ func (tabsLayout *tabsLayoutData) remove(tag string) {
|
|||
delete(tabsLayout.properties, Tabs)
|
||||
if tabsLayout.created {
|
||||
htmlID := tabsLayout.htmlID()
|
||||
updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle(), tabsLayout.session)
|
||||
updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle(), tabsLayout.session)
|
||||
tabsLayout.session.updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle())
|
||||
tabsLayout.session.updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle())
|
||||
updateCSSStyle(htmlID, tabsLayout.session)
|
||||
updateInnerHTML(htmlID, tabsLayout.session)
|
||||
}
|
||||
|
@ -171,8 +171,8 @@ func (tabsLayout *tabsLayoutData) remove(tag string) {
|
|||
delete(tabsLayout.properties, tag)
|
||||
if tabsLayout.created {
|
||||
htmlID := tabsLayout.htmlID()
|
||||
updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle(), tabsLayout.session)
|
||||
updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle(), tabsLayout.session)
|
||||
tabsLayout.session.updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle())
|
||||
tabsLayout.session.updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle())
|
||||
updateInnerHTML(htmlID, tabsLayout.session)
|
||||
}
|
||||
|
||||
|
@ -247,8 +247,8 @@ func (tabsLayout *tabsLayoutData) set(tag string, value any) bool {
|
|||
}
|
||||
if tabsLayout.created {
|
||||
htmlID := tabsLayout.htmlID()
|
||||
updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle(), tabsLayout.session)
|
||||
updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle(), tabsLayout.session)
|
||||
tabsLayout.session.updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle())
|
||||
tabsLayout.session.updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle())
|
||||
updateCSSStyle(htmlID, tabsLayout.session)
|
||||
updateInnerHTML(htmlID, tabsLayout.session)
|
||||
}
|
||||
|
@ -267,8 +267,8 @@ func (tabsLayout *tabsLayoutData) set(tag string, value any) bool {
|
|||
|
||||
if tabsLayout.created {
|
||||
htmlID := tabsLayout.htmlID()
|
||||
updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle(), tabsLayout.session)
|
||||
updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle(), tabsLayout.session)
|
||||
tabsLayout.session.updateProperty(htmlID, inactiveTabStyle, tabsLayout.inactiveTabStyle())
|
||||
tabsLayout.session.updateProperty(htmlID, activeTabStyle, tabsLayout.activeTabStyle())
|
||||
updateInnerHTML(htmlID, tabsLayout.session)
|
||||
}
|
||||
|
||||
|
|
|
@ -125,14 +125,14 @@ func (textView *textViewData) set(tag string, value any) bool {
|
|||
|
||||
func (textView *textViewData) textOverflowUpdated() {
|
||||
session := textView.Session()
|
||||
if n, ok := enumProperty(textView, TextOverflow, textView.session, 0); ok {
|
||||
if n, ok := enumProperty(textView, TextOverflow, session, 0); ok {
|
||||
values := enumProperties[TextOverflow].cssValues
|
||||
if n >= 0 && n < len(values) {
|
||||
updateCSSProperty(textView.htmlID(), TextOverflow, values[n], session)
|
||||
session.updateCSSProperty(textView.htmlID(), TextOverflow, values[n])
|
||||
return
|
||||
}
|
||||
}
|
||||
updateCSSProperty(textView.htmlID(), TextOverflow, "", session)
|
||||
session.updateCSSProperty(textView.htmlID(), TextOverflow, "")
|
||||
}
|
||||
|
||||
func (textView *textViewData) htmlSubviews(self View, buffer *strings.Builder) {
|
||||
|
|
|
@ -77,19 +77,19 @@ func (picker *timePickerData) remove(tag string) {
|
|||
case TimePickerMin:
|
||||
delete(picker.properties, TimePickerMin)
|
||||
if picker.created {
|
||||
removeProperty(picker.htmlID(), Min, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Min)
|
||||
}
|
||||
|
||||
case TimePickerMax:
|
||||
delete(picker.properties, TimePickerMax)
|
||||
if picker.created {
|
||||
removeProperty(picker.htmlID(), Max, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Max)
|
||||
}
|
||||
|
||||
case TimePickerStep:
|
||||
delete(picker.properties, TimePickerStep)
|
||||
if picker.created {
|
||||
removeProperty(picker.htmlID(), Step, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Step)
|
||||
}
|
||||
|
||||
case TimePickerValue:
|
||||
|
@ -171,7 +171,7 @@ func (picker *timePickerData) set(tag string, value any) bool {
|
|||
if time, ok := setTimeValue(TimePickerMin); ok {
|
||||
if !oldOK || time != old {
|
||||
if picker.created {
|
||||
updateProperty(picker.htmlID(), Min, time.Format(timeFormat), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Min, time.Format(timeFormat))
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ func (picker *timePickerData) set(tag string, value any) bool {
|
|||
if time, ok := setTimeValue(TimePickerMax); ok {
|
||||
if !oldOK || time != old {
|
||||
if picker.created {
|
||||
updateProperty(picker.htmlID(), Max, time.Format(timeFormat), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Max, time.Format(timeFormat))
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
}
|
||||
|
@ -196,9 +196,9 @@ func (picker *timePickerData) set(tag string, value any) bool {
|
|||
if step := GetTimePickerStep(picker); oldStep != step {
|
||||
if picker.created {
|
||||
if step > 0 {
|
||||
updateProperty(picker.htmlID(), Step, strconv.Itoa(step), picker.session)
|
||||
picker.session.updateProperty(picker.htmlID(), Step, strconv.Itoa(step))
|
||||
} else {
|
||||
removeProperty(picker.htmlID(), Step, picker.session)
|
||||
picker.session.removeProperty(picker.htmlID(), Step)
|
||||
}
|
||||
}
|
||||
picker.propertyChangedEvent(tag)
|
||||
|
|
|
@ -109,7 +109,7 @@ func (view *viewData) setTouchListener(tag string, value any) bool {
|
|||
} else if js, ok := touchEvents[tag]; ok {
|
||||
view.properties[tag] = listeners
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)", view.Session())
|
||||
view.session.updateProperty(view.htmlID(), js.jsEvent, js.jsFunc+"(this, event)")
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
|
@ -121,7 +121,7 @@ func (view *viewData) removeTouchListener(tag string) {
|
|||
delete(view.properties, tag)
|
||||
if view.created {
|
||||
if js, ok := touchEvents[tag]; ok {
|
||||
removeProperty(view.htmlID(), js.jsEvent, view.Session())
|
||||
view.session.removeProperty(view.htmlID(), js.jsEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,15 +61,15 @@ func (player *videoPlayerData) remove(tag string) {
|
|||
|
||||
case VideoWidth:
|
||||
delete(player.properties, tag)
|
||||
removeProperty(player.htmlID(), "width", player.Session())
|
||||
player.session.removeProperty(player.htmlID(), "width")
|
||||
|
||||
case VideoHeight:
|
||||
delete(player.properties, tag)
|
||||
removeProperty(player.htmlID(), "height", player.Session())
|
||||
player.session.removeProperty(player.htmlID(), "height")
|
||||
|
||||
case Poster:
|
||||
delete(player.properties, tag)
|
||||
removeProperty(player.htmlID(), Poster, player.Session())
|
||||
player.session.removeProperty(player.htmlID(), Poster)
|
||||
|
||||
default:
|
||||
player.mediaPlayerData.remove(tag)
|
||||
|
@ -91,9 +91,9 @@ func (player *videoPlayerData) set(tag string, value any) bool {
|
|||
updateSize := func(cssTag string) {
|
||||
if size, ok := floatTextProperty(player, tag, session, 0); ok {
|
||||
if size != "0" {
|
||||
updateProperty(player.htmlID(), cssTag, size, session)
|
||||
session.updateProperty(player.htmlID(), cssTag, size)
|
||||
} else {
|
||||
removeProperty(player.htmlID(), cssTag, session)
|
||||
session.removeProperty(player.htmlID(), cssTag)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ func (player *videoPlayerData) set(tag string, value any) bool {
|
|||
|
||||
case Poster:
|
||||
if url, ok := stringProperty(player, Poster, session); ok {
|
||||
updateProperty(player.htmlID(), Poster, url, session)
|
||||
session.updateProperty(player.htmlID(), Poster, url)
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
|
120
view.go
120
view.go
|
@ -193,7 +193,7 @@ func (view *viewData) remove(tag string) {
|
|||
case Style, StyleDisabled:
|
||||
if _, ok := view.properties[tag]; ok {
|
||||
delete(view.properties, tag)
|
||||
updateProperty(view.htmlID(), "class", view.htmlClass(IsDisabled(view)), view.session)
|
||||
view.session.updateProperty(view.htmlID(), "class", view.htmlClass(IsDisabled(view)))
|
||||
}
|
||||
|
||||
case FocusEvent, LostFocusEvent:
|
||||
|
@ -323,7 +323,7 @@ func (view *viewData) set(tag string, value any) bool {
|
|||
}
|
||||
view.properties[tag] = text
|
||||
if view.created {
|
||||
updateProperty(view.htmlID(), "class", view.htmlClass(IsDisabled(view)), view.session)
|
||||
view.session.updateProperty(view.htmlID(), "class", view.htmlClass(IsDisabled(view)))
|
||||
}
|
||||
|
||||
case FocusEvent, LostFocusEvent:
|
||||
|
@ -379,21 +379,21 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
case Visibility:
|
||||
switch GetVisibility(view) {
|
||||
case Invisible:
|
||||
updateCSSProperty(htmlID, Visibility, "hidden", session)
|
||||
updateCSSProperty(htmlID, "display", "", session)
|
||||
session.updateCSSProperty(htmlID, Visibility, "hidden")
|
||||
session.updateCSSProperty(htmlID, "display", "")
|
||||
|
||||
case Gone:
|
||||
updateCSSProperty(htmlID, Visibility, "hidden", session)
|
||||
updateCSSProperty(htmlID, "display", "none", session)
|
||||
session.updateCSSProperty(htmlID, Visibility, "hidden")
|
||||
session.updateCSSProperty(htmlID, "display", "none")
|
||||
|
||||
default:
|
||||
updateCSSProperty(htmlID, Visibility, "visible", session)
|
||||
updateCSSProperty(htmlID, "display", "", session)
|
||||
session.updateCSSProperty(htmlID, Visibility, "visible")
|
||||
session.updateCSSProperty(htmlID, "display", "")
|
||||
}
|
||||
return
|
||||
|
||||
case Background:
|
||||
updateCSSProperty(htmlID, Background, view.backgroundCSS(session), session)
|
||||
session.updateCSSProperty(htmlID, Background, view.backgroundCSS(session))
|
||||
return
|
||||
|
||||
case Border:
|
||||
|
@ -402,9 +402,9 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
if buffer == nil {
|
||||
session.startUpdateScript(htmlID)
|
||||
}
|
||||
updateCSSProperty(htmlID, BorderWidth, "", session)
|
||||
updateCSSProperty(htmlID, BorderColor, "", session)
|
||||
updateCSSProperty(htmlID, BorderStyle, "none", session)
|
||||
session.updateCSSProperty(htmlID, BorderWidth, "")
|
||||
session.updateCSSProperty(htmlID, BorderColor, "")
|
||||
session.updateCSSProperty(htmlID, BorderStyle, "none")
|
||||
if buffer == nil {
|
||||
session.finishUpdateScript(htmlID)
|
||||
}
|
||||
|
@ -418,9 +418,9 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
if buffer == nil {
|
||||
session.startUpdateScript(htmlID)
|
||||
}
|
||||
updateCSSProperty(htmlID, BorderWidth, border.cssWidthValue(session), session)
|
||||
updateCSSProperty(htmlID, BorderColor, border.cssColorValue(session), session)
|
||||
updateCSSProperty(htmlID, BorderStyle, border.cssStyleValue(session), session)
|
||||
session.updateCSSProperty(htmlID, BorderWidth, border.cssWidthValue(session))
|
||||
session.updateCSSProperty(htmlID, BorderColor, border.cssColorValue(session))
|
||||
session.updateCSSProperty(htmlID, BorderStyle, border.cssStyleValue(session))
|
||||
if buffer == nil {
|
||||
session.finishUpdateScript(htmlID)
|
||||
}
|
||||
|
@ -429,32 +429,32 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
|
||||
case BorderStyle, BorderLeftStyle, BorderRightStyle, BorderTopStyle, BorderBottomStyle:
|
||||
if border := getBorder(view, Border); border != nil {
|
||||
updateCSSProperty(htmlID, BorderStyle, border.cssStyleValue(session), session)
|
||||
session.updateCSSProperty(htmlID, BorderStyle, border.cssStyleValue(session))
|
||||
}
|
||||
return
|
||||
|
||||
case BorderColor, BorderLeftColor, BorderRightColor, BorderTopColor, BorderBottomColor:
|
||||
if border := getBorder(view, Border); border != nil {
|
||||
updateCSSProperty(htmlID, BorderColor, border.cssColorValue(session), session)
|
||||
session.updateCSSProperty(htmlID, BorderColor, border.cssColorValue(session))
|
||||
}
|
||||
return
|
||||
|
||||
case BorderWidth, BorderLeftWidth, BorderRightWidth, BorderTopWidth, BorderBottomWidth:
|
||||
if border := getBorder(view, Border); border != nil {
|
||||
updateCSSProperty(htmlID, BorderWidth, border.cssWidthValue(session), session)
|
||||
session.updateCSSProperty(htmlID, BorderWidth, border.cssWidthValue(session))
|
||||
}
|
||||
return
|
||||
|
||||
case Outline, OutlineColor, OutlineStyle, OutlineWidth:
|
||||
updateCSSProperty(htmlID, Outline, GetOutline(view).cssString(session), session)
|
||||
session.updateCSSProperty(htmlID, Outline, GetOutline(view).cssString(session))
|
||||
return
|
||||
|
||||
case Shadow:
|
||||
updateCSSProperty(htmlID, "box-shadow", shadowCSS(view, Shadow, session), session)
|
||||
session.updateCSSProperty(htmlID, "box-shadow", shadowCSS(view, Shadow, session))
|
||||
return
|
||||
|
||||
case TextShadow:
|
||||
updateCSSProperty(htmlID, "text-shadow", shadowCSS(view, TextShadow, session), session)
|
||||
session.updateCSSProperty(htmlID, "text-shadow", shadowCSS(view, TextShadow, session))
|
||||
return
|
||||
|
||||
case Radius, RadiusX, RadiusY, RadiusTopLeft, RadiusTopLeftX, RadiusTopLeftY,
|
||||
|
@ -462,44 +462,44 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
RadiusBottomLeft, RadiusBottomLeftX, RadiusBottomLeftY,
|
||||
RadiusBottomRight, RadiusBottomRightX, RadiusBottomRightY:
|
||||
radius := GetRadius(view)
|
||||
updateCSSProperty(htmlID, "border-radius", radius.cssString(session), session)
|
||||
session.updateCSSProperty(htmlID, "border-radius", radius.cssString(session))
|
||||
return
|
||||
|
||||
case Margin, MarginTop, MarginRight, MarginBottom, MarginLeft,
|
||||
"top-margin", "right-margin", "bottom-margin", "left-margin":
|
||||
margin := GetMargin(view)
|
||||
updateCSSProperty(htmlID, Margin, margin.cssString(session), session)
|
||||
session.updateCSSProperty(htmlID, Margin, margin.cssString(session))
|
||||
return
|
||||
|
||||
case Padding, PaddingTop, PaddingRight, PaddingBottom, PaddingLeft,
|
||||
"top-padding", "right-padding", "bottom-padding", "left-padding":
|
||||
padding := GetPadding(view)
|
||||
updateCSSProperty(htmlID, Padding, padding.cssString(session), session)
|
||||
session.updateCSSProperty(htmlID, Padding, padding.cssString(session))
|
||||
return
|
||||
|
||||
case AvoidBreak:
|
||||
if avoid, ok := boolProperty(view, AvoidBreak, session); ok {
|
||||
if avoid {
|
||||
updateCSSProperty(htmlID, "break-inside", "avoid", session)
|
||||
session.updateCSSProperty(htmlID, "break-inside", "avoid")
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "break-inside", "auto", session)
|
||||
session.updateCSSProperty(htmlID, "break-inside", "auto")
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
case Clip:
|
||||
if clip := getClipShape(view, Clip, session); clip != nil && clip.valid(session) {
|
||||
updateCSSProperty(htmlID, `clip-path`, clip.cssStyle(session), session)
|
||||
session.updateCSSProperty(htmlID, `clip-path`, clip.cssStyle(session))
|
||||
} else {
|
||||
updateCSSProperty(htmlID, `clip-path`, "none", session)
|
||||
session.updateCSSProperty(htmlID, `clip-path`, "none")
|
||||
}
|
||||
return
|
||||
|
||||
case ShapeOutside:
|
||||
if clip := getClipShape(view, ShapeOutside, session); clip != nil && clip.valid(session) {
|
||||
updateCSSProperty(htmlID, ShapeOutside, clip.cssStyle(session), session)
|
||||
session.updateCSSProperty(htmlID, ShapeOutside, clip.cssStyle(session))
|
||||
} else {
|
||||
updateCSSProperty(htmlID, ShapeOutside, "none", session)
|
||||
session.updateCSSProperty(htmlID, ShapeOutside, "none")
|
||||
}
|
||||
return
|
||||
|
||||
|
@ -510,7 +510,7 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
text = filter.cssStyle(session)
|
||||
}
|
||||
}
|
||||
updateCSSProperty(htmlID, tag, text, session)
|
||||
session.updateCSSProperty(htmlID, tag, text)
|
||||
return
|
||||
|
||||
case BackdropFilter:
|
||||
|
@ -524,8 +524,8 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
if buffer == nil {
|
||||
session.startUpdateScript(htmlID)
|
||||
}
|
||||
updateCSSProperty(htmlID, "-webkit-backdrop-filter", text, session)
|
||||
updateCSSProperty(htmlID, tag, text, session)
|
||||
session.updateCSSProperty(htmlID, "-webkit-backdrop-filter", text)
|
||||
session.updateCSSProperty(htmlID, tag, text)
|
||||
if buffer == nil {
|
||||
session.finishUpdateScript(htmlID)
|
||||
}
|
||||
|
@ -533,38 +533,38 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
|
||||
case FontName:
|
||||
if font, ok := stringProperty(view, FontName, session); ok {
|
||||
updateCSSProperty(htmlID, "font-family", font, session)
|
||||
session.updateCSSProperty(htmlID, "font-family", font)
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "font-family", "", session)
|
||||
session.updateCSSProperty(htmlID, "font-family", "")
|
||||
}
|
||||
return
|
||||
|
||||
case Italic:
|
||||
if state, ok := boolProperty(view, tag, session); ok {
|
||||
if state {
|
||||
updateCSSProperty(htmlID, "font-style", "italic", session)
|
||||
session.updateCSSProperty(htmlID, "font-style", "italic")
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "font-style", "normal", session)
|
||||
session.updateCSSProperty(htmlID, "font-style", "normal")
|
||||
}
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "font-style", "", session)
|
||||
session.updateCSSProperty(htmlID, "font-style", "")
|
||||
}
|
||||
return
|
||||
|
||||
case SmallCaps:
|
||||
if state, ok := boolProperty(view, tag, session); ok {
|
||||
if state {
|
||||
updateCSSProperty(htmlID, "font-variant", "small-caps", session)
|
||||
session.updateCSSProperty(htmlID, "font-variant", "small-caps")
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "font-variant", "normal", session)
|
||||
session.updateCSSProperty(htmlID, "font-variant", "normal")
|
||||
}
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "font-variant", "", session)
|
||||
session.updateCSSProperty(htmlID, "font-variant", "")
|
||||
}
|
||||
return
|
||||
|
||||
case Strikethrough, Overline, Underline:
|
||||
updateCSSProperty(htmlID, "text-decoration", view.cssTextDecoration(session), session)
|
||||
session.updateCSSProperty(htmlID, "text-decoration", view.cssTextDecoration(session))
|
||||
for _, tag2 := range []string{TextLineColor, TextLineStyle, TextLineThickness} {
|
||||
viewPropertyChanged(view, tag2)
|
||||
}
|
||||
|
@ -575,29 +575,29 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
return
|
||||
|
||||
case AnimationTag:
|
||||
updateCSSProperty(htmlID, AnimationTag, view.animationCSS(session), session)
|
||||
session.updateCSSProperty(htmlID, AnimationTag, view.animationCSS(session))
|
||||
return
|
||||
|
||||
case AnimationPaused:
|
||||
paused, ok := boolProperty(view, AnimationPaused, session)
|
||||
if !ok {
|
||||
updateCSSProperty(htmlID, `animation-play-state`, ``, session)
|
||||
session.updateCSSProperty(htmlID, `animation-play-state`, ``)
|
||||
} else if paused {
|
||||
updateCSSProperty(htmlID, `animation-play-state`, `paused`, session)
|
||||
session.updateCSSProperty(htmlID, `animation-play-state`, `paused`)
|
||||
} else {
|
||||
updateCSSProperty(htmlID, `animation-play-state`, `running`, session)
|
||||
session.updateCSSProperty(htmlID, `animation-play-state`, `running`)
|
||||
}
|
||||
return
|
||||
|
||||
case ZIndex, TabSize:
|
||||
if i, ok := intProperty(view, tag, session, 0); ok {
|
||||
updateCSSProperty(htmlID, tag, strconv.Itoa(i), session)
|
||||
session.updateCSSProperty(htmlID, tag, strconv.Itoa(i))
|
||||
}
|
||||
return
|
||||
|
||||
case Row, Column:
|
||||
if parent := view.parentHTMLID(); parent != "" {
|
||||
updateInnerHTML(parent, session)
|
||||
if parentID := view.parentHTMLID(); parentID != "" {
|
||||
updateInnerHTML(parentID, session)
|
||||
}
|
||||
return
|
||||
|
||||
|
@ -608,15 +608,15 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
}
|
||||
if userSelect, ok := boolProperty(view, UserSelect, session); ok {
|
||||
if userSelect {
|
||||
updateCSSProperty(htmlID, "-webkit-user-select", "auto", session)
|
||||
updateCSSProperty(htmlID, "user-select", "auto", session)
|
||||
session.updateCSSProperty(htmlID, "-webkit-user-select", "auto")
|
||||
session.updateCSSProperty(htmlID, "user-select", "auto")
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "-webkit-user-select", "none", session)
|
||||
updateCSSProperty(htmlID, "user-select", "none", session)
|
||||
session.updateCSSProperty(htmlID, "-webkit-user-select", "none")
|
||||
session.updateCSSProperty(htmlID, "user-select", "none")
|
||||
}
|
||||
} else {
|
||||
updateCSSProperty(htmlID, "-webkit-user-select", "", session)
|
||||
updateCSSProperty(htmlID, "user-select", "", session)
|
||||
session.updateCSSProperty(htmlID, "-webkit-user-select", "")
|
||||
session.updateCSSProperty(htmlID, "user-select", "")
|
||||
}
|
||||
if buffer == nil {
|
||||
session.finishUpdateScript(htmlID)
|
||||
|
@ -626,7 +626,7 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
|
||||
if cssTag, ok := sizeProperties[tag]; ok {
|
||||
size, _ := sizeProperty(view, tag, session)
|
||||
updateCSSProperty(htmlID, cssTag, size.cssString("", session), session)
|
||||
session.updateCSSProperty(htmlID, cssTag, size.cssString("", session))
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -639,23 +639,23 @@ func viewPropertyChanged(view *viewData, tag string) {
|
|||
}
|
||||
if cssTag, ok := colorTags[tag]; ok {
|
||||
if color, ok := colorProperty(view, tag, session); ok {
|
||||
updateCSSProperty(htmlID, cssTag, color.cssString(), session)
|
||||
session.updateCSSProperty(htmlID, cssTag, color.cssString())
|
||||
} else {
|
||||
updateCSSProperty(htmlID, cssTag, "", session)
|
||||
session.updateCSSProperty(htmlID, cssTag, "")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if valuesData, ok := enumProperties[tag]; ok && valuesData.cssTag != "" {
|
||||
n, _ := enumProperty(view, tag, session, 0)
|
||||
updateCSSProperty(htmlID, valuesData.cssTag, valuesData.cssValues[n], session)
|
||||
session.updateCSSProperty(htmlID, valuesData.cssTag, valuesData.cssValues[n])
|
||||
return
|
||||
}
|
||||
|
||||
for _, floatTag := range []string{Opacity, ScaleX, ScaleY, ScaleZ, RotateX, RotateY, RotateZ} {
|
||||
if tag == floatTag {
|
||||
if f, ok := floatTextProperty(view, floatTag, session, 0); ok {
|
||||
updateCSSProperty(htmlID, floatTag, f, session)
|
||||
session.updateCSSProperty(htmlID, floatTag, f)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -250,15 +250,15 @@ func (view *viewData) updateTransformProperty(tag string) bool {
|
|||
if x.Type != Auto || y.Type != Auto {
|
||||
value = x.cssString("50%", session) + " " + y.cssString("50%", session)
|
||||
}
|
||||
updateCSSProperty(htmlID, "perspective-origin", value, session)
|
||||
session.updateCSSProperty(htmlID, "perspective-origin", value)
|
||||
}
|
||||
|
||||
case BackfaceVisible:
|
||||
if getTransform3D(view, session) {
|
||||
if GetBackfaceVisible(view) {
|
||||
updateCSSProperty(htmlID, BackfaceVisible, "visible", session)
|
||||
session.updateCSSProperty(htmlID, BackfaceVisible, "visible")
|
||||
} else {
|
||||
updateCSSProperty(htmlID, BackfaceVisible, "hidden", session)
|
||||
session.updateCSSProperty(htmlID, BackfaceVisible, "hidden")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -274,10 +274,10 @@ func (view *viewData) updateTransformProperty(tag string) bool {
|
|||
value = x.cssString("50%", session) + " " + y.cssString("50%", session)
|
||||
}
|
||||
}
|
||||
updateCSSProperty(htmlID, "transform-origin", value, session)
|
||||
session.updateCSSProperty(htmlID, "transform-origin", value)
|
||||
|
||||
case SkewX, SkewY, TranslateX, TranslateY, TranslateZ, ScaleX, ScaleY, ScaleZ, Rotate, RotateX, RotateY, RotateZ:
|
||||
updateCSSProperty(htmlID, "transform", view.transform(session), session)
|
||||
session.updateCSSProperty(htmlID, "transform", view.transform(session))
|
||||
|
||||
default:
|
||||
return false
|
||||
|
|
20
webBrige.go
20
webBrige.go
|
@ -134,6 +134,26 @@ func (brige *wsBrige) runFunc(funcName string, args ...any) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (brige *wsBrige) updateInnerHTML(htmlID, html string) {
|
||||
brige.runFunc("updateInnerHTML", htmlID, html)
|
||||
}
|
||||
|
||||
func (brige *wsBrige) appendToInnerHTML(htmlID, html string) {
|
||||
brige.runFunc("appendToInnerHTML", htmlID, html)
|
||||
}
|
||||
|
||||
func (brige *wsBrige) updateCSSProperty(htmlID, property, value string) {
|
||||
brige.runFunc("updateCSSProperty", htmlID, property, value)
|
||||
}
|
||||
|
||||
func (brige *wsBrige) updateProperty(htmlID, property, value any) {
|
||||
brige.runFunc("updateProperty", htmlID, property, value)
|
||||
}
|
||||
|
||||
func (brige *wsBrige) removeProperty(htmlID, property string) {
|
||||
brige.runFunc("removeProperty", htmlID, property)
|
||||
}
|
||||
|
||||
func (brige *wsBrige) readMessage() (string, bool) {
|
||||
_, p, err := brige.conn.ReadMessage()
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in New Issue