1.0.0-rc.0
This commit is contained in:
parent
0dc2dfb287
commit
2a5abb684b
10 changed files with 181 additions and 7 deletions
10
.gitignore
vendored
10
.gitignore
vendored
|
@ -1,13 +1,11 @@
|
||||||
# See https://www.dartlang.org/guides/libraries/private-files
|
|
||||||
|
|
||||||
# Files and directories created by pub
|
# Files and directories created by pub
|
||||||
.dart_tool/
|
.dart_tool/
|
||||||
.packages
|
.packages
|
||||||
.pub/
|
# Remove the following pattern if you wish to check in your lock file
|
||||||
build/
|
|
||||||
# If you're building an application, you may want to check-in your pubspec.lock
|
|
||||||
pubspec.lock
|
pubspec.lock
|
||||||
|
|
||||||
|
# Conventional directory for build outputs
|
||||||
|
build/
|
||||||
|
|
||||||
# Directory created by dartdoc
|
# Directory created by dartdoc
|
||||||
# If you don't generate documentation locally you can remove this line.
|
|
||||||
doc/api/
|
doc/api/
|
||||||
|
|
3
CHANGELOG.md
Normal file
3
CHANGELOG.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
## 1.0.0
|
||||||
|
|
||||||
|
- Initial version, created by Stagehand
|
45
README.md
45
README.md
|
@ -1,2 +1,45 @@
|
||||||
# angel_jinja
|
# jinja
|
||||||
Angel support for the Jinja2 templating engine, ported from Python to Dart.
|
Angel support for the Jinja2 templating engine, ported from Python to Dart.
|
||||||
|
|
||||||
|
[![Pub](https://img.shields.io/pub/v/angel_jinja.svg)](https://pub.dartlang.org/packages/angel_jinja)
|
||||||
|
|
||||||
|
# Example
|
||||||
|
```dart
|
||||||
|
import 'dart:io';
|
||||||
|
import 'package:angel_framework/angel_framework.dart';
|
||||||
|
import 'package:angel_framework/http.dart';
|
||||||
|
import 'package:angel_jinja/angel_jinja.dart';
|
||||||
|
import 'package:path/path.dart' as p;
|
||||||
|
|
||||||
|
main() async {
|
||||||
|
var app = Angel();
|
||||||
|
var http = AngelHttp(app);
|
||||||
|
var viewsDir = p.join(
|
||||||
|
p.dirname(
|
||||||
|
p.fromUri(Platform.script),
|
||||||
|
),
|
||||||
|
'views',
|
||||||
|
);
|
||||||
|
|
||||||
|
// Enable Jinja2 views
|
||||||
|
await app.configure(jinja(path: viewsDir));
|
||||||
|
|
||||||
|
// Add routes.
|
||||||
|
// See: https://github.com/ykmnkmi/jinja.dart/blob/master/example/bin/server.dart
|
||||||
|
|
||||||
|
app
|
||||||
|
..get('/', (req, res) => res.render('index.html'))
|
||||||
|
..get('/hello', (req, res) => res.render('hello.html', {'name': 'user'}))
|
||||||
|
..get('/hello/:name', (req, res) => res.render('hello.html', req.params));
|
||||||
|
|
||||||
|
app.fallback((req, res) {
|
||||||
|
res
|
||||||
|
..statusCode = 404
|
||||||
|
..write('404 Not Found :(');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Start the server
|
||||||
|
await http.startServer('127.0.0.1', 3000);
|
||||||
|
print('Listening at ${http.uri}');
|
||||||
|
}
|
||||||
|
```
|
4
analysis_options.yaml
Normal file
4
analysis_options.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
include: package:pedantic/analysis_options.yaml
|
||||||
|
analyzer:
|
||||||
|
strong-mode:
|
||||||
|
implicit-casts: false
|
37
example/main.dart
Normal file
37
example/main.dart
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
import 'dart:io';
|
||||||
|
import 'package:angel_framework/angel_framework.dart';
|
||||||
|
import 'package:angel_framework/http.dart';
|
||||||
|
import 'package:angel_jinja/angel_jinja.dart';
|
||||||
|
import 'package:path/path.dart' as p;
|
||||||
|
|
||||||
|
main() async {
|
||||||
|
var app = Angel();
|
||||||
|
var http = AngelHttp(app);
|
||||||
|
var viewsDir = p.join(
|
||||||
|
p.dirname(
|
||||||
|
p.fromUri(Platform.script),
|
||||||
|
),
|
||||||
|
'views',
|
||||||
|
);
|
||||||
|
|
||||||
|
// Enable Jinja2 views
|
||||||
|
await app.configure(jinja(path: viewsDir));
|
||||||
|
|
||||||
|
// Add routes.
|
||||||
|
// See: https://github.com/ykmnkmi/jinja.dart/blob/master/example/bin/server.dart
|
||||||
|
|
||||||
|
app
|
||||||
|
..get('/', (req, res) => res.render('index.html'))
|
||||||
|
..get('/hello', (req, res) => res.render('hello.html', {'name': 'user'}))
|
||||||
|
..get('/hello/:name', (req, res) => res.render('hello.html', req.params));
|
||||||
|
|
||||||
|
app.fallback((req, res) {
|
||||||
|
res
|
||||||
|
..statusCode = 404
|
||||||
|
..write('404 Not Found :(');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Start the server
|
||||||
|
await http.startServer('127.0.0.1', 3000);
|
||||||
|
print('Listening at ${http.uri}');
|
||||||
|
}
|
5
example/views/hello.html
Normal file
5
example/views/hello.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block title %}hello {{ name }}!{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
<p>hello {{ name }}!</p>
|
||||||
|
{% endblock %}
|
6
example/views/index.html
Normal file
6
example/views/index.html
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block title %}Jinja.Dart!{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
<p>hello Jinja.Dart!</p>
|
||||||
|
<a href="/hello/Joe">hello Joe!</a>
|
||||||
|
{% endblock %}
|
10
example/views/layout.html
Normal file
10
example/views/layout.html
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>{% block title %}{% endblock %}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% block body %}{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
53
lib/angel_jinja.dart
Normal file
53
lib/angel_jinja.dart
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
import 'package:angel_framework/angel_framework.dart';
|
||||||
|
import 'package:jinja/jinja.dart';
|
||||||
|
|
||||||
|
/// Configures an Angel server to use Jinja2 to render templates.
|
||||||
|
///
|
||||||
|
/// By default, templates are loaded from the filesystem;
|
||||||
|
/// pass your own [createLoader] callback to override this.
|
||||||
|
///
|
||||||
|
/// All options other than [createLoader] are passed to either [FileSystemLoader]
|
||||||
|
/// or [Environment].
|
||||||
|
AngelConfigurer jinja({
|
||||||
|
Iterable<String> ext = const ['html'],
|
||||||
|
String path = 'lib/src/templates',
|
||||||
|
bool followLinks = true,
|
||||||
|
String stmtOpen = '{%',
|
||||||
|
String stmtClose = '%}',
|
||||||
|
String varOpen = '{{',
|
||||||
|
String varClose = '}}',
|
||||||
|
String commentOpen = '{#',
|
||||||
|
String commentClose = '#}',
|
||||||
|
defaultValue,
|
||||||
|
bool autoReload = true,
|
||||||
|
Map<String, Function> filters = const <String, Function>{},
|
||||||
|
Map<String, Function> tests = const <String, Function>{},
|
||||||
|
Loader Function() createLoader,
|
||||||
|
}) {
|
||||||
|
return (app) {
|
||||||
|
createLoader ??= () {
|
||||||
|
return FileSystemLoader(
|
||||||
|
ext: ext.toList(),
|
||||||
|
path: path,
|
||||||
|
followLinks: followLinks,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
var env = Environment(
|
||||||
|
loader: createLoader(),
|
||||||
|
stmtOpen: stmtOpen,
|
||||||
|
stmtClose: stmtClose,
|
||||||
|
varOpen: varOpen,
|
||||||
|
varClose: varClose,
|
||||||
|
commentOpen: commentOpen,
|
||||||
|
commentClose: commentClose,
|
||||||
|
defaultValue: defaultValue,
|
||||||
|
autoReload: autoReload,
|
||||||
|
filters: filters,
|
||||||
|
tests: tests,
|
||||||
|
);
|
||||||
|
|
||||||
|
app.viewGenerator = (path, [values]) {
|
||||||
|
return env.getTemplate(path).render(values);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
15
pubspec.yaml
Normal file
15
pubspec.yaml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
name: angel_jinja
|
||||||
|
description: Angel support for the Jinja2 templating engine, ported from Python to Dart.
|
||||||
|
version: 1.0.0-rc.0
|
||||||
|
homepage: https://github.com/angel-dart/jinja
|
||||||
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
|
environment:
|
||||||
|
sdk: '>=2.0.0-dev <3.0.0'
|
||||||
|
dependencies:
|
||||||
|
angel_framework: ^2.0.0-alpha
|
||||||
|
jinja: ^0.0.4
|
||||||
|
dev_dependencies:
|
||||||
|
angel_test: ^2.0.0
|
||||||
|
path: ^1.0.0
|
||||||
|
pedantic: ^1.0.0
|
||||||
|
test: ^1.0.0
|
Loading…
Reference in a new issue