#html-templating #html #template #layout

已弃用 toph

简单的服务器端HTML生成

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

MIT 许可证

66KB
1.5K SLoC

Toph

Rust的HTML模板服务器端。

以下是一个示例以激发你的兴趣

HTML Output

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