2.3 KiB
html
A plug-in that allows you to return html_builder AST's from request handlers, and have them sent as HTML automatically.
package:html_builder
is a simple virtual DOM library
(without diffing, you can find that
here), with a handy Dart DSL that makes it easy to build HTML
AST's:
import 'package:html_builder/elements.dart';
Node myDom = html(lang: 'en', c: [
head(c: [
meta(name: 'viewport', content: 'width=device-width, initial-scale=1'),
title(c: [
text('html_builder example page')
]),
]),
body(c: [
h1(c: [
text('Hello world!'),
]),
]),
]);
This plug-in means that you can now return
these AST's, and Angel will automatically send them to
clients. Ultimately, the implication is that you can use html_builder
as a substitute for a
templating system within Dart. With hot reloading, you won't
even need to reload your server (as it should be).
Installation
In your pubspec.yaml
:
dependencies:
angel_html: ^1.0.0
Usage
The renderHtml
function does all the magic for you.
configureServer(Angel app) async {
// Wire it up!
app.before.add(renderHtml());
// You can pass a custom StringRenderer if you need more control over the output.
app.before.add(renderHtml(renderer: new StringRenderer(html5: false)));
app.get('/greet/:name', (RequestContext req) {
return html(lang: 'en', c: [
head(c: [
meta(name: 'viewport', content: 'width=device-width, initial-scale=1'),
title(c: [
text('Greetings!')
]),
]),
body(c: [
h1(c: [
text('Hello, ${req.params['id']}!'),
]),
]),
]);
});
}
By default, renderHtml
will ignore the client's Accept
header. However, if you pass
enforceAcceptHeader
as true
, then a 406 Not Acceptable
error will be thrown if the
client doesn't accept */*
or text/html
.
configureServer(Angel app) async {
// Wire it up!
app.before.add(renderHtml(enforceAcceptHeader: true));
// ...
}