render :: (r: ^http.Response, template: str, vars: any) {
s := reg->render_template(template, ^r.writer, .{ vars.data, vars.type });
r->status(200 if s == .None else 400);
+ r->end();
}
}
res->render("homepage", null);
}
+@http.route.{.GET, "/docs"}
+(req: ^Req, res: ^Res) {
+ res->render("docs", null);
+}
+
+@http.route.{.GET, "/news"}
+(req: ^Req, res: ^Res) {
+ if a := req.query->get_opt("a"); a {
+ filename := tprintf("www/news-articles/{}.html", a.value);
+ if os.file_exists(filename) {
+ article := os.get_contents(filename);
+ defer delete(^article);
+
+ res->render("news_article", ^.{
+ article = article
+ });
+ }
+
+ } else {
+ articles := make([..] str);
+
+ for os.list_directory("www/news-articles") {
+ name := it->name();
+ if string.ends_with(name, ".html") {
+ articles << string.temp_copy(name[0 .. name.length-5]);
+ }
+ }
+
+ res->render("news", ^.{
+ articles = articles
+ });
+ }
+}
+
main :: () {
reg = otmp.registry();
reg->load_directory("./www/templates", ".html");
router->collect_routes();
app->pipe(^router);
+ app->pipe((req, res) => {
+ if !res.completed {
+ res->render("404", null);
+ }
+ });
+
logger := http.logger();
app->pipe(^logger);
<a href="/"><span>Home</span></a>
<a href="/playground"><span>Try Online</span></a>
<a href="/docs"><span>Docs</span></a>
- <a href="/"><span>News</span></a>
+ <a href="/news"><span>News</span></a>
<a href="https://github.com/onyx-lang/onyx" target="_blank"><span>GitHub</span></a>
</div>
</navbar>