mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-25 23:26:19 +00:00
Refactor web UI to be more readable
This commit is contained in:
114
src/web/ui.rs
114
src/web/ui.rs
@@ -4,7 +4,7 @@ use std::{sync::Arc, time::Duration};
|
|||||||
|
|
||||||
use futures::{future, Future};
|
use futures::{future, Future};
|
||||||
use hyper::{header, service::Service, Body, Method, Request, Response, StatusCode};
|
use hyper::{header, service::Service, Body, Method, Request, Response, StatusCode};
|
||||||
use ritz::html;
|
use ritz::{html, HtmlContent};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
imfs::ImfsFetcher,
|
imfs::ImfsFetcher,
|
||||||
@@ -34,8 +34,8 @@ impl<F: ImfsFetcher> Service for UiService<F> {
|
|||||||
(&Method::GET, "/") => self.handle_home(),
|
(&Method::GET, "/") => self.handle_home(),
|
||||||
(&Method::GET, "/logo.png") => self.handle_logo(),
|
(&Method::GET, "/logo.png") => self.handle_logo(),
|
||||||
(&Method::GET, "/icon.png") => self.handle_icon(),
|
(&Method::GET, "/icon.png") => self.handle_icon(),
|
||||||
(&Method::GET, "/visualize/rbx") => self.handle_visualize_rbx(),
|
(&Method::GET, "/show-instances") => self.handle_show_instances(),
|
||||||
(&Method::GET, "/visualize/imfs") => self.handle_visualize_imfs(),
|
(&Method::GET, "/show-imfs") => self.handle_show_imfs(),
|
||||||
(_method, path) => {
|
(_method, path) => {
|
||||||
return json(
|
return json(
|
||||||
ErrorResponse::not_found(format!("Route not found: {}", path)),
|
ErrorResponse::not_found(format!("Route not found: {}", path)),
|
||||||
@@ -80,7 +80,61 @@ impl<F: ImfsFetcher> UiService<F> {
|
|||||||
humantime::format_duration(elapsed).to_string()
|
humantime::format_duration(elapsed).to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
let page = html! {
|
let page = Self::page(html! {
|
||||||
|
<main class="main">
|
||||||
|
<header class="header">
|
||||||
|
<img class="main-logo" src="/logo.png" />
|
||||||
|
<div class="stats">
|
||||||
|
{ Self::stat_item("Server Version", SERVER_VERSION) }
|
||||||
|
{ Self::stat_item("Project", project_name) }
|
||||||
|
{ Self::stat_item("Server Uptime", uptime) }
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div class="button-list">
|
||||||
|
{ Self::button("Rojo Documentation", "https://rojo.space/docs") }
|
||||||
|
{ Self::button("View in-memory filesystem state", "/show-imfs") }
|
||||||
|
{ Self::button("View instance tree state", "/show-instances") }
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
});
|
||||||
|
|
||||||
|
Response::builder()
|
||||||
|
.header(header::CONTENT_TYPE, "text/html")
|
||||||
|
.body(Body::from(format!("<!DOCTYPE html>{}", page)))
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_show_instances(&self) -> Response<Body> {
|
||||||
|
Response::builder()
|
||||||
|
.header(header::CONTENT_TYPE, "text/plain")
|
||||||
|
.body(Body::from("TODO: /show-instances"))
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_show_imfs(&self) -> Response<Body> {
|
||||||
|
Response::builder()
|
||||||
|
.header(header::CONTENT_TYPE, "text/plain")
|
||||||
|
.body(Body::from("TODO: /show-imfs"))
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn stat_item<S: Into<String>>(name: &str, value: S) -> HtmlContent<'_> {
|
||||||
|
html! {
|
||||||
|
<span class="stat">
|
||||||
|
<span class="stat-name">{ name } ": "</span>
|
||||||
|
<span class="stat-value">{ value.into() }</span>
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn button<'a>(text: &'a str, href: &'a str) -> HtmlContent<'a> {
|
||||||
|
html! {
|
||||||
|
<a class="button" href={ href }>{ text }</a>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn page(body: HtmlContent<'_>) -> HtmlContent<'_> {
|
||||||
|
html! {
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>"Rojo Live Server"</title>
|
<title>"Rojo Live Server"</title>
|
||||||
@@ -91,57 +145,9 @@ impl<F: ImfsFetcher> UiService<F> {
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<main class="main">
|
{ body }
|
||||||
<header class="header">
|
|
||||||
<img class="main-logo" src="/logo.png" />
|
|
||||||
<div class="stats">
|
|
||||||
<span class="stat">
|
|
||||||
<span class="stat-name">"Server Version: "</span>
|
|
||||||
<span class="stat-value">{ SERVER_VERSION }</span>
|
|
||||||
</span>
|
|
||||||
<span class="stat">
|
|
||||||
<span class="stat-name">"Project: "</span>
|
|
||||||
<span class="stat-value">{ project_name }</span>
|
|
||||||
</span>
|
|
||||||
<span class="stat">
|
|
||||||
<span class="stat-name">"Server Uptime: "</span>
|
|
||||||
<span class="stat-value">{ uptime.to_string() }</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<div class="button-list">
|
|
||||||
<a class="button" href="https://rojo.space/docs">
|
|
||||||
"Rojo Documentation"
|
|
||||||
</a>
|
|
||||||
<a class="button" href="/visualize/imfs">
|
|
||||||
"View in-memory filesystem state"
|
|
||||||
</a>
|
|
||||||
<a class="button" href="/visualize/rbx">
|
|
||||||
"View instance tree state"
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
};
|
}
|
||||||
|
|
||||||
Response::builder()
|
|
||||||
.header(header::CONTENT_TYPE, "text/html")
|
|
||||||
.body(Body::from(format!("<!DOCTYPE html>{}", page)))
|
|
||||||
.unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_visualize_rbx(&self) -> Response<Body> {
|
|
||||||
Response::builder()
|
|
||||||
.header(header::CONTENT_TYPE, "text/plain")
|
|
||||||
.body(Body::from("TODO: /visualize/rbx"))
|
|
||||||
.unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_visualize_imfs(&self) -> Response<Body> {
|
|
||||||
Response::builder()
|
|
||||||
.header(header::CONTENT_TYPE, "text/plain")
|
|
||||||
.body(Body::from("TODO: /visualize/imfs"))
|
|
||||||
.unwrap()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user