diff --git a/animation.go b/animation.go index 21287ab..8f6e595 100644 --- a/animation.go +++ b/animation.go @@ -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)) } } diff --git a/animationEvents.go b/animationEvents.go index bdebde9..7432cce 100644 --- a/animationEvents.go +++ b/animationEvents.go @@ -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) } } } diff --git a/checkbox.go b/checkbox.go index 0bf554c..8a3605f 100644 --- a/checkbox.go +++ b/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) { diff --git a/columnLayout.go b/columnLayout.go index ec10221..d4a5bdf 100644 --- a/columnLayout.go +++ b/columnLayout.go @@ -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") } } } diff --git a/datePicker.go b/datePicker.go index 75b20be..e85e44c 100644 --- a/datePicker.go +++ b/datePicker.go @@ -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) diff --git a/detailsView.go b/detailsView.go index 8cf9307..af83dfd 100644 --- a/detailsView.go +++ b/detailsView.go @@ -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") } } diff --git a/editView.go b/editView.go index aaad03e..7a3e373 100644 --- a/editView.go +++ b/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) diff --git a/filePicker.go b/filePicker.go index ccb9218..e9ae4a3 100644 --- a/filePicker.go +++ b/filePicker.go @@ -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) diff --git a/focusEvents.go b/focusEvents.go index 963f159..dace937 100644 --- a/focusEvents.go +++ b/focusEvents.go @@ -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) } } } diff --git a/gridLayout.go b/gridLayout.go index 674d561..83bf227 100644 --- a/gridLayout.go +++ b/gridLayout.go @@ -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)) } } diff --git a/imageView.go b/imageView.go index b95df50..7a56072 100644 --- a/imageView.go +++ b/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) diff --git a/keyEvents.go b/keyEvents.go index 5778290..b65c43c 100644 --- a/keyEvents.go +++ b/keyEvents.go @@ -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) } } } diff --git a/listView.go b/listView.go index 2fbe15a..92dbe71 100644 --- a/listView.go +++ b/listView.go @@ -837,7 +837,7 @@ func (listView *listViewData) updateCheckboxItem(index int, checked bool) { } } buffer.WriteString(``) - 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) { diff --git a/mediaPlayer.go b/mediaPlayer.go index 26979a0..bb8d22f 100644 --- a/mediaPlayer.go +++ b/mediaPlayer.go @@ -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(` 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: diff --git a/pointerEvents.go b/pointerEvents.go index c565079..a362a28 100644 --- a/pointerEvents.go +++ b/pointerEvents.go @@ -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) } } } diff --git a/popup.go b/popup.go index fd971e7..8715825 100644 --- a/popup.go +++ b/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) diff --git a/progressBar.go b/progressBar.go index f93a372..f42b5e6 100644 --- a/progressBar.go +++ b/progressBar.go @@ -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)) } } } diff --git a/resizable.go b/resizable.go index 4a65741..b88f8fb 100644 --- a/resizable.go +++ b/resizable.go @@ -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) } } diff --git a/session.go b/session.go index 01248ba..fb268c4 100644 --- a/session.go +++ b/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) diff --git a/sessionUtils.go b/sessionUtils.go index cb40906..770fff4 100644 --- a/sessionUtils.go +++ b/sessionUtils.go @@ -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() { diff --git a/stackLayout.go b/stackLayout.go index e04bc5e..bdf79a1 100644 --- a/stackLayout.go +++ b/stackLayout.go @@ -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(``) - 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(``) - 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 } diff --git a/tableView.go b/tableView.go index 8f95587..ae29eb7 100644 --- a/tableView.go +++ b/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) { diff --git a/tabsLayout.go b/tabsLayout.go index ff781e5..18f55bf 100644 --- a/tabsLayout.go +++ b/tabsLayout.go @@ -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) } diff --git a/textView.go b/textView.go index 70d3336..90f2026 100644 --- a/textView.go +++ b/textView.go @@ -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) { diff --git a/timePicker.go b/timePicker.go index 954d652..b997246 100644 --- a/timePicker.go +++ b/timePicker.go @@ -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) diff --git a/touchEvents.go b/touchEvents.go index 09d4788..7c2be24 100644 --- a/touchEvents.go +++ b/touchEvents.go @@ -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) } } } diff --git a/videoPlayer.go b/videoPlayer.go index 94592e0..a67647c 100644 --- a/videoPlayer.go +++ b/videoPlayer.go @@ -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 diff --git a/view.go b/view.go index 59dbeeb..32c19d5 100644 --- a/view.go +++ b/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 } diff --git a/viewTransform.go b/viewTransform.go index d13f03a..6de024e 100644 --- a/viewTransform.go +++ b/viewTransform.go @@ -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 diff --git a/webBrige.go b/webBrige.go index ab33ace..7ac6d0d 100644 --- a/webBrige.go +++ b/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 {