blob: b84630c2b10e2ecb1d831369d3877d120a8f25df [file] [log] [blame]
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:path/path.dart' as p;
import '../templates.dart';
import 'common.dart' as common;
/// A generator for a uber-simple web application.
class WebGenerator extends DefaultGenerator {
WebGenerator()
: super(
'web',
'Bare-bones Web App',
'A web app that uses only core Dart libraries.',
alternateId: 'web-simple',
categories: const ['dart', 'web'],
) {
addFile('.gitignore', common.gitignore);
addFile('analysis_options.yaml', common.analysisOptions);
addFile('CHANGELOG.md', common.changelog);
addFile('pubspec.yaml', _pubspec);
addFile('README.md', _readme);
addFile('web/index.html', _index);
setEntrypoint(
addFile('web/main.dart', _main),
);
addFile('web/styles.css', _styles);
}
@override
String getInstallInstructions(
String directory, {
String? scriptPath,
}) =>
' cd ${p.relative(directory)}\n'
' dart pub global activate webdev\n'
' webdev serve';
}
final String _pubspec = '''
name: __projectName__
description: An absolute bare-bones web app.
version: 1.0.0
# repository: https://github.com/my_org/my_repo
environment:
${common.sdkConstraint}
# Add regular dependencies here.
dependencies:
web: ^0.5.1
dev_dependencies:
build_runner: ^2.4.8
build_web_compilers: ^4.0.9
lints: ^4.0.0
''';
final String _readme = '''
A bare-bones Dart web app.
Uses [`package:web`](https://pub.dev/packages/web)
to interop with JS and the DOM.
## Running and building
To run the app,
activate and use [`package:webdev`](https://dart.dev/tools/webdev):
```
dart pub global activate webdev
webdev serve
```
To build a production version ready for deployment,
use the `webdev build` command:
```
webdev build
```
To learn how to interop with web APIs and other JS libraries,
check out https://dart.dev/interop/js-interop.
''';
final String _index = '''
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="scaffolded-by" content="https://github.com/dart-lang/sdk">
<title>__projectName__</title>
<link rel="stylesheet" href="styles.css">
<script defer src="main.dart.js"></script>
</head>
<body>
<div id="output"></div>
</body>
</html>
''';
final String _main = '''
import 'package:web/web.dart' as web;
void main() {
final now = DateTime.now();
final element = web.document.querySelector('#output') as web.HTMLDivElement;
element.text = 'The time is \${now.hour}:\${now.minute} '
'and your Dart web app is running!';
}
''';
final String _styles = '''
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
font-family: 'Roboto', sans-serif;
}
#output {
padding: 20px;
text-align: center;
}
''';