From d7cc08018bc9fb42c659122e94dcf300de16508e Mon Sep 17 00:00:00 2001 From: Alexei Anoshenko Date: Fri, 12 Apr 2024 15:34:42 +0300 Subject: [PATCH 1/4] Bug fixing --- appServer.go | 9 +-------- app_scripts.js | 4 ++++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/appServer.go b/appServer.go index 275567a..92d6b1b 100644 --- a/appServer.go +++ b/appServer.go @@ -156,14 +156,7 @@ func (app *application) socketReader(bridge webBridge) { 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) - } + bridge.writeMessage("restartSession();") case "answer": session.handleAnswer(obj) diff --git a/app_scripts.js b/app_scripts.js index f320470..318d96b 100644 --- a/app_scripts.js +++ b/app_scripts.js @@ -73,6 +73,10 @@ function sessionInfo() { return message + "}"; } +function restartSession() { + sendMessage( sessionInfo() ); +} + function getIntAttribute(element, tag) { let value = element.getAttribute(tag); if (value) { From 589b05ce183d56d4f706825a941807b101d6d891 Mon Sep 17 00:00:00 2001 From: Alexei Anoshenko Date: Fri, 12 Apr 2024 15:43:09 +0300 Subject: [PATCH 2/4] Bug fixing --- appServer.go | 2 +- app_scripts.js | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/appServer.go b/appServer.go index 92d6b1b..0d20e0e 100644 --- a/appServer.go +++ b/appServer.go @@ -288,7 +288,7 @@ func OpenBrowser(url string) bool { case "linux": for _, provider := range []string{"xdg-open", "x-www-browser", "www-browser"} { if _, err = exec.LookPath(provider); err == nil { - if exec.Command(provider, url).Start(); err == nil { + if err = exec.Command(provider, url).Start(); err == nil { return true } } diff --git a/app_scripts.js b/app_scripts.js index 318d96b..d7872cb 100644 --- a/app_scripts.js +++ b/app_scripts.js @@ -311,7 +311,11 @@ function keyEvent(element, event, tag) { message += ",timeStamp=" + event.timeStamp; } if (event.key) { - message += ",key=\"" + event.key + "\""; + if (event.key == '"') { + message += ",key=`" + event.key + "`"; + } else { + message += ",key=\"" + event.key + "\""; + } } if (event.code) { message += ",code=\"" + event.code + "\""; From 18e053693ca97d4427f10c2f5b9d8756388d1708 Mon Sep 17 00:00:00 2001 From: Alexei Anoshenko Date: Fri, 12 Apr 2024 16:10:45 +0300 Subject: [PATCH 3/4] Bug fixing --- app_scripts.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app_scripts.js b/app_scripts.js index d7872cb..b6d6246 100644 --- a/app_scripts.js +++ b/app_scripts.js @@ -311,10 +311,17 @@ function keyEvent(element, event, tag) { message += ",timeStamp=" + event.timeStamp; } if (event.key) { - if (event.key == '"') { - message += ",key=`" + event.key + "`"; - } else { - message += ",key=\"" + event.key + "\""; + switch (event.key) { + case '"': + message += ",key=`\"`"; + break + + case '\\': + message += ",key=`\\`"; + break + + default: + message += ",key=\"" + event.key + "\""; } } if (event.code) { From 8268d6ba3cb464cce209a245d1e39386265fcde0 Mon Sep 17 00:00:00 2001 From: Alexei Anoshenko Date: Fri, 12 Apr 2024 17:29:33 +0300 Subject: [PATCH 4/4] Create httpHandler.go --- httpHandler.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 httpHandler.go diff --git a/httpHandler.go b/httpHandler.go new file mode 100644 index 0000000..ea77943 --- /dev/null +++ b/httpHandler.go @@ -0,0 +1,55 @@ +package rui + +import ( + "net/http" + "strings" +) + +type httpHandler struct { + app *application + prefix string +} + +func (h *httpHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + switch req.Method { + case http.MethodGet: + path := `/` + strings.TrimPrefix(req.URL.Path, `/`) + req.URL.Path = `/` + strings.TrimPrefix(strings.TrimPrefix(path, h.prefix), `/`) + + h.app.ServeHTTP(w, req) + } +} + +/* +NewHandler is used to embed the rui application in third-party web frameworks (net/http, gin, echo...). +Example for echo: + + e := echo.New() + e.Any(`/ui/*`, func()echo.HandlerFunc{ + rui.AddEmbedResources(&resources) + + h := rui.NewHandler("/ui", CreateSessionContent, rui.AppParams{ + Title: `Awesome app`, + Icon: `favicon.png`, + }) + + return func(c echo.Context) error { + h.ServeHTTP(c.Response(), c.Request()) + return nil + } + }) +*/ +func NewHandler(urlPrefix string, createContentFunc func(Session) SessionContent, params AppParams) *httpHandler { + app := new(application) + app.params = params + app.sessions = map[int]Session{} + app.createContentFunc = createContentFunc + apps = append(apps, app) + + h := &httpHandler{ + app: app, + prefix: `/` + strings.Trim(urlPrefix, `/`), + } + + return h +}