8个版本 (破坏性变更)
0.8.0 | 2024年5月7日 |
---|---|
0.7.0 | 2024年4月2日 |
0.6.0 | 2024年3月17日 |
0.5.0 | 2024年3月17日 |
0.1.0 | 2024年3月13日 |
#102 in #html-templating
66KB
1.5K SLoC
Toph
Rust的HTML模板服务器端。
以下是一个示例以激发你的兴趣
use toph::component::{stack, cluster};
use toph::tag::{div_, body_, button_, head_, html_, doctype_};
use toph::{Node, attr};
const BUTTON: &str = "
button {
padding: 0.5rem 1.25rem;
font-weight: bold;
border: 2px solid black;
box-shadow: 2px 2px black;
}";
const CARD: &str = ".card { padding: 1rem; border: 5px solid black; }";
pub fn custom_card<I: IntoIterator<Item = N>, N>(children: I) -> Node
where
N: Into<Node>,
{
div_.with(attr![class = "card"])
.stylesheet(CARD)
.set(children)
}
fn main() {
let button = |text: &str| button_.set([text]).stylesheet(BUTTON);
let left = custom_card([stack(3, [button("Hello"), button("World")])]);
let right = custom_card([stack(3, [button("Goodbye"), button("World")])]);
let html = [
doctype_,
html_.set([head_, body_.set([cluster(3, [left, right])])]),
];
std::fs::write("components.html", Node::render(html)).unwrap();
}
依赖项
~1.5MB
~48K SLoC