Start minimalist UI
This commit is contained in:
parent
5598d78e16
commit
cce72978bf
3
app.go
3
app.go
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
"github.com/nemunaire/minifaas/engine/docker"
|
"github.com/nemunaire/minifaas/engine/docker"
|
||||||
|
"github.com/nemunaire/minifaas/ui"
|
||||||
)
|
)
|
||||||
|
|
||||||
type App struct {
|
type App struct {
|
||||||
@ -23,6 +24,8 @@ func NewApp() App {
|
|||||||
gin.ForceConsoleColor()
|
gin.ForceConsoleColor()
|
||||||
router := gin.Default()
|
router := gin.Default()
|
||||||
|
|
||||||
|
ui.DeclareRoutes(router)
|
||||||
|
|
||||||
router.GET("/api/version", func(c *gin.Context) {
|
router.GET("/api/version", func(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, gin.H{"version": 0.1})
|
c.JSON(http.StatusOK, gin.H{"version": 0.1})
|
||||||
})
|
})
|
||||||
|
18
ui/assets.go
Normal file
18
ui/assets.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build !dev
|
||||||
|
|
||||||
|
package ui
|
||||||
|
|
||||||
|
import (
|
||||||
|
"embed"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed *
|
||||||
|
|
||||||
|
var _assets embed.FS
|
||||||
|
|
||||||
|
var Assets http.FileSystem
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Assets = http.FS(_assets)
|
||||||
|
}
|
9
ui/assets_dev.go
Normal file
9
ui/assets_dev.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// +build dev
|
||||||
|
|
||||||
|
package ui
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Assets = http.Dir("./ui")
|
7
ui/css/bootstrap.min.css
vendored
Normal file
7
ui/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
0
ui/css/vepilepsie.css
Normal file
0
ui/css/vepilepsie.css
Normal file
33
ui/index.html
Normal file
33
ui/index.html
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Minifaas</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
<link href="/css/bootstrap.min.css" type="text/css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body class="container">
|
||||||
|
<div class="mt-2 jumbotron">
|
||||||
|
<h1>This will launch a docker container</h1>
|
||||||
|
<hr>
|
||||||
|
<form onsubmit="return runctnr()">
|
||||||
|
<button type="submit" class="btn btn-primary" id="btnlaunch">
|
||||||
|
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true" id="btnlaunchspinner" style="display: none"></span>
|
||||||
|
Launch!
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="logs-card" class="card" style="display: none;">
|
||||||
|
<h5 class="card-header">
|
||||||
|
Here is your container logs output:
|
||||||
|
</h5>
|
||||||
|
<pre id="logs" class="card-body bg-dark text-light">
|
||||||
|
test
|
||||||
|
test
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="/js/minifass.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
26
ui/js/minifass.js
Normal file
26
ui/js/minifass.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
function getVersion() {
|
||||||
|
fetch('/api/version')
|
||||||
|
.then(function(response) {
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(function(version) {
|
||||||
|
document.getElementById("version").innerHTML = "v" + version.version;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function runctnr() {
|
||||||
|
document.getElementById("btnlaunch").disabled = true;
|
||||||
|
document.getElementById("btnlaunchspinner").style.display = "inline-block";
|
||||||
|
|
||||||
|
fetch('/api/run')
|
||||||
|
.then(function(response) {
|
||||||
|
document.getElementById("btnlaunch").disabled = false;
|
||||||
|
document.getElementById("btnlaunchspinner").style.display = "none";
|
||||||
|
return response.text();
|
||||||
|
})
|
||||||
|
.then(function(logs) {
|
||||||
|
document.getElementById("logs").textContent = logs;
|
||||||
|
document.getElementById("logs-card").style.display = "block";
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
}
|
27
ui/routes.go
Normal file
27
ui/routes.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package ui
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DeclareRoutes(router *gin.Engine) {
|
||||||
|
router.GET("/", serveOrReverse("/"))
|
||||||
|
router.GET("/favicon.ico", serveOrReverse("/favicon.ico"))
|
||||||
|
router.GET("/manifest.json", serveOrReverse("/manifest.json"))
|
||||||
|
router.GET("/css/*path", serveOrReverse(""))
|
||||||
|
router.GET("/fonts/*path", serveOrReverse(""))
|
||||||
|
router.GET("/img/*path", serveOrReverse(""))
|
||||||
|
router.GET("/js/*path", serveOrReverse(""))
|
||||||
|
}
|
||||||
|
|
||||||
|
func serveOrReverse(forced_url string) gin.HandlerFunc {
|
||||||
|
if forced_url != "" {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
c.FileFromFS(forced_url, Assets)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
c.FileFromFS(c.Request.URL.Path, Assets)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user