From ecbcda7a5399734b9138caaefe2cb988e5b1d1c4 Mon Sep 17 00:00:00 2001 From: anoshenko Date: Tue, 8 Nov 2022 16:31:21 +0300 Subject: [PATCH] Bug fixing --- README-ru.md | 8 +++--- animation.go | 3 +-- appWasm.go | 65 +++++++------------------------------------------ application.go | 3 +++ image.go | 3 ++- imageView.go | 2 +- path.go | 2 +- session.go | 27 ++++++++++++-------- sessionTheme.go | 4 --- wasmBridge.go | 55 ++++++++++++++++++++++++++--------------- webBridge.go | 14 +++++++++++ 11 files changed, 87 insertions(+), 99 deletions(-) diff --git a/README-ru.md b/README-ru.md index 9058210..784912c 100644 --- a/README-ru.md +++ b/README-ru.md @@ -4581,7 +4581,7 @@ onNo или onCancel (если она не nil). ### Интерфейс Animation -Для задания параметров анимации мспользуется интерфейс Animation. Он расширяет интерфейс Properties. +Для задания параметров анимации используется интерфейс Animation. Он расширяет интерфейс Properties. Интерфейс создается с помощью функции: func NewAnimation(params Params) Animation @@ -4751,7 +4751,7 @@ KeyFrames - промежуточные значения свойства (клю Обязательными являются поля Tag, From, To. Поле KeyFrames опционально, может быть nil. -Поле KeyFrames описывает ключавые кадры. В качестве ключа типа int используется процент времени +Поле KeyFrames описывает ключевые кадры. В качестве ключа типа int используется процент времени прошедший с начала анимации (именно начала самой анимации, время заданное свойством "delay" исключается). А значание это значение свойства в данный момент времени. Например @@ -4767,9 +4767,9 @@ KeyFrames - промежуточные значения свойства (клю В данном примере свойство "width" 90% времени будет увеличиваться со 100px до 220px. В оставшиеся 10% времени - будет уменьшаться с 220px до 200px. -Свойству "property" присваивается []AnimatedProperty, а значит можно анимаровать сразу несколько свойств. +Свойству "property" присваивается []AnimatedProperty, а значит можно анимировать сразу несколько свойств. -Вы должны задать хотя бы один эдемент "property", иначе анимация будет игнорироваться. +Вы должны задать хотя бы один элемент "property", иначе анимация будет игнорироваться. #### Свойство "id" diff --git a/animation.go b/animation.go index 8f6e595..20b8dd7 100644 --- a/animation.go +++ b/animation.go @@ -609,8 +609,7 @@ func (session *sessionData) registerAnimation(props []AnimatedProperty) string { style := cssBuilder.finish() session.animationCSS += style - style = strings.ReplaceAll(style, "\n", `\n`) - session.runScript(`document.querySelector('style').textContent += "` + style + `"`) + session.addAnimationCSS(style) return name } diff --git a/appWasm.go b/appWasm.go index d2e5bee..36e1adc 100644 --- a/appWasm.go +++ b/appWasm.go @@ -26,7 +26,7 @@ func (app *wasmApp) Finish() { } func wasmLog(text string) { - js.Global().Call("log", text) + js.Global().Get("console").Call("log", text) } func (app *wasmApp) handleMessage(this js.Value, args []js.Value) any { @@ -37,60 +37,9 @@ func (app *wasmApp) handleMessage(this js.Value, args []js.Value) any { } if obj := ParseDataText(text); obj != nil { switch command := obj.Tag(); command { - /* - case "startSession": - answer := "" - if session, answer = app.startSession(obj, events, bridge); session != nil { - if !bridge.writeMessage(answer) { - return - } - session.onStart() - go sessionEventHandler(session, events, bridge) - } + case "session-close": + app.close <- obj - case "reconnect": - if sessionText, ok := obj.PropertyValue("session"); ok { - if sessionID, err := strconv.Atoi(sessionText); err == nil { - if session = app.sessions[sessionID]; session != nil { - session.setBridge(events, bridge) - answer := allocStringBuilder() - defer freeStringBuilder(answer) - - session.writeInitScript(answer) - if !bridge.writeMessage(answer.String()) { - return - } - session.onReconnect() - go sessionEventHandler(session, events, bridge) - return - } - DebugLogF("Session #%d not exists", sessionID) - } else { - ErrorLog(`strconv.Atoi(sessionText) error: ` + err.Error()) - } - } else { - ErrorLog(`"session" key not found`) - } - - answer := "" - if session, answer = app.startSession(obj, events, bridge); session != nil { - if !bridge.writeMessage(answer) { - return - } - session.onStart() - go sessionEventHandler(session, events, bridge) - } - - case "disconnect": - session.onDisconnect() - return - - case "session-close": - session.onFinish() - session.App().removeSession(session.ID()) - bridge.close() - - */ case "answer": app.session.handleAnswer(obj) @@ -176,6 +125,10 @@ func (app *wasmApp) init(params AppParams) { style.Set("textContent", css) document.Call("querySelector", "head").Call("appendChild", style) + style = document.Call("createElement", "style") + style.Set("id", "ruiAnimations") + document.Call("querySelector", "head").Call("appendChild", style) + buffer := allocStringBuilder() defer freeStringBuilder(buffer) @@ -216,14 +169,14 @@ func StartApp(addr string, createContentFunc func(Session) SessionContent, param app := new(wasmApp) app.createContentFunc = createContentFunc - app.bridge = createWasmBridge() + app.close = make(chan DataObject) + app.bridge = createWasmBridge(app.close) app.init(params) <-app.close } func FinishApp() { - //app.Finish() } func OpenBrowser(url string) bool { diff --git a/application.go b/application.go index 7d2baf4..0e45e0a 100644 --- a/application.go +++ b/application.go @@ -5,6 +5,8 @@ import ( "strings" ) +var wasmMediaResources = false + //go:embed app_scripts.js var defaultScripts string @@ -66,6 +68,7 @@ func getStartPage(buffer *strings.Builder, params AppParams, addScripts string) +