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)
+