rui_orig/application.go

105 lines
3.2 KiB
Go
Raw Normal View History

2021-09-07 17:36:50 +03:00
package rui
import (
_ "embed"
"strings"
2021-09-07 17:36:50 +03:00
)
//go:embed app_scripts.js
var defaultScripts string
//go:embed app_styles.css
var appStyles string
//go:embed defaultTheme.rui
var defaultThemeText string
// Application represent generic application interface, see also [Session]
2021-09-07 17:36:50 +03:00
type Application interface {
// Finish finishes the application
2021-09-07 17:36:50 +03:00
Finish()
// Params returns application parameters set by StartApp function
Params() AppParams
2021-09-07 17:36:50 +03:00
removeSession(id int)
}
// AppParams defines parameters of the app
type AppParams struct {
// Title - title of the app window/tab
Title string
// TitleColor - background color of the app window/tab (applied only for Safari and Chrome for Android)
TitleColor Color
// Icon - the icon file name
Icon string
// CertFile - path of a certificate for the server must be provided
// if neither the Server's TLSConfig.Certificates nor TLSConfig.GetCertificate are populated.
// If the certificate is signed by a certificate authority, the certFile should be the concatenation
// of the server's certificate, any intermediates, and the CA's certificate.
CertFile string
2024-06-11 15:03:13 +03:00
AutoCertDomain string
// KeyFile - path of a private key for the server must be provided
// if neither the Server's TLSConfig.Certificates nor TLSConfig.GetCertificate are populated.
KeyFile string
// Redirect80 - if true then the function of redirect from port 80 to 443 is created
Redirect80 bool
2024-03-12 19:32:22 +03:00
// NoSocket - if true then WebSockets will not be used and information exchange
// between the client and the server will be carried out only via http.
NoSocket bool
// SocketAutoClose - time in seconds after which the socket is automatically closed for an inactive session.
// The countdown begins after the OnPause event arrives.
// If the value of this property is less than or equal to 0 then the socket is not closed.
SocketAutoClose int
}
2024-03-12 19:32:22 +03:00
func getStartPage(buffer *strings.Builder, params AppParams) {
2022-10-27 16:14:30 +03:00
buffer.WriteString(`<head>
2021-09-07 17:36:50 +03:00
<meta charset="utf-8">
<title>`)
2022-10-27 16:14:30 +03:00
buffer.WriteString(params.Title)
2021-09-07 17:36:50 +03:00
buffer.WriteString("</title>")
2022-10-27 16:14:30 +03:00
if params.Icon != "" {
2021-09-07 17:36:50 +03:00
buffer.WriteString(`
<link rel="icon" href="`)
2022-10-27 16:14:30 +03:00
buffer.WriteString(params.Icon)
buffer.WriteString(`">`)
}
2022-10-27 16:14:30 +03:00
if params.TitleColor != 0 {
buffer.WriteString(`
<meta name="theme-color" content="`)
2022-10-27 16:14:30 +03:00
buffer.WriteString(params.TitleColor.cssString())
2021-09-07 17:36:50 +03:00
buffer.WriteString(`">`)
}
buffer.WriteString(`
<base target="_blank" rel="noopener">
<meta name="viewport" content="width=device-width">
<style>`)
buffer.WriteString(appStyles)
buffer.WriteString(`</style>
2022-11-08 16:31:21 +03:00
<style id="ruiAnimations"></style>
2024-03-12 19:32:22 +03:00
<script src="/script.js"></script>
2021-09-07 17:36:50 +03:00
</head>
2023-05-15 15:27:37 +03:00
<body id="body" onkeydown="keyDownEvent(this, event)">
2021-09-07 17:36:50 +03:00
<div class="ruiRoot" id="ruiRootView"></div>
2023-05-07 20:58:51 +03:00
<div class="ruiPopupLayer" id="ruiPopupLayer" style="visibility: hidden; isolation: isolate;"></div>
2023-04-25 17:20:47 +03:00
<div class="ruiTooltipLayer" id="ruiTooltipLayer" style="visibility: hidden; opacity: 0;">
<div id="ruiTooltipText" class="ruiTooltipText"></div>
<div id="ruiTooltipTopArrow" class="ruiTooltipTopArrow"></div>
<div id="ruiTooltipBottomArrow" class="ruiTooltipBottomArrow"></div>
</div>
2021-11-07 09:43:13 +03:00
<a id="ruiDownloader" download style="display: none;"></a>
2022-10-27 16:14:30 +03:00
</body>`)
2021-11-07 09:43:13 +03:00
}