Add 'packages/jinja/' from commit '2a5abb684b7b68f0da4775e9ceaa22cb295d58da'
git-subtree-dir: packages/jinja git-subtree-mainline:4e69153e3e
git-subtree-split:2a5abb684b
This commit is contained in:
commit
834de0300f
11 changed files with 210 additions and 0 deletions
11
packages/jinja/.gitignore
vendored
Normal file
11
packages/jinja/.gitignore
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# Files and directories created by pub
|
||||||
|
.dart_tool/
|
||||||
|
.packages
|
||||||
|
# Remove the following pattern if you wish to check in your lock file
|
||||||
|
pubspec.lock
|
||||||
|
|
||||||
|
# Conventional directory for build outputs
|
||||||
|
build/
|
||||||
|
|
||||||
|
# Directory created by dartdoc
|
||||||
|
doc/api/
|
3
packages/jinja/CHANGELOG.md
Normal file
3
packages/jinja/CHANGELOG.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
## 1.0.0
|
||||||
|
|
||||||
|
- Initial version, created by Stagehand
|
21
packages/jinja/LICENSE
Normal file
21
packages/jinja/LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Tobe Osakwe
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
45
packages/jinja/README.md
Normal file
45
packages/jinja/README.md
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# jinja
|
||||||
|
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
packages/jinja/analysis_options.yaml
Normal file
4
packages/jinja/analysis_options.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
include: package:pedantic/analysis_options.yaml
|
||||||
|
analyzer:
|
||||||
|
strong-mode:
|
||||||
|
implicit-casts: false
|
37
packages/jinja/example/main.dart
Normal file
37
packages/jinja/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
packages/jinja/example/views/hello.html
Normal file
5
packages/jinja/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
packages/jinja/example/views/index.html
Normal file
6
packages/jinja/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
packages/jinja/example/views/layout.html
Normal file
10
packages/jinja/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
packages/jinja/lib/angel_jinja.dart
Normal file
53
packages/jinja/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
packages/jinja/pubspec.yaml
Normal file
15
packages/jinja/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