paisley 0.1.4 copy "paisley: ^0.1.4" to clipboard
paisley: ^0.1.4 copied to clipboard

SPA engine that sends HTML to clients and handles events via WebSocket.

example/main.dart

import 'dart:async';
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_framework/http.dart';
import 'package:logging/logging.dart';
import 'package:paisley/paisley.dart';
import 'package:paisley/server.dart';

main() async {
  var app = Angel();
  var http = AngelHttp(app);
  app.logger = Logger('paisley')..onRecord.listen(print);

  /// Render a default page when we hit the index.
  app.get('/', paisleySsr((req, res) {
    return PaisleyApp(
      'ws://localhost:3000/paisley',
      Hello(req),

      // Add some styles, etc. to handle disconnects gracefully
      // by modifying the UI.
      head: '''
      <style>
        body:not(.paisley-disconnected) #disconnected {
          display: none;
        }

        #disconnected {
          color: red;
          font-weight: bold;
        }
      </style>
      ''',
      beforeRoot: '''
      <i id="disconnected">Disconnected. Trying to reconnect...</i>
      ''',
    );
  }));

  /// Serve WebSockets for Paisley.
  app.get('/paisley', paisley((req, res) => Hello(req)));

  // 404 otherwise.
  app.fallback((req, res) => throw AngelHttpException.notFound());

  await http.startServer('127.0.0.1', 3000);
  print('Listening at ${http.uri}');
}

class Hello extends Component {
  final RequestContext req;
  var _clicks = 0;

  Hello(this.req);

  @override
  void afterCreate([PaisleyServer server, Map<String, String> localStorage]) {
    if (server != null) {
      server.eval('console.info("Hello, Paisley!!!")');

      // Restore past click amount, if any.
      if (localStorage.containsKey('clicks'))
        _clicks = int.parse(localStorage['clicks']);

      listen('click', (_) async {
        server.pushHtml('button', 'Clicked ${++_clicks} time(s)!');
        await server.localStorage.setItem('clicks', _clicks);
      });
    }
  }

  @override
  FutureOr<String> render() {
    return '''
    <h1>Session ID: ${req.session.id}</h1>
    <button onclick="fire('click')">Click me!</button>
    ''';
  }
}
1
likes
40
pub points
0%
popularity

Publisher

unverified uploader

SPA engine that sends HTML to clients and handles events via WebSocket.

Repository (GitHub)
View/report issues

License

MIT (LICENSE)

Dependencies

angel_framework, angel_serialize, html_builder, http_parser, json_god, json_rpc_2, stream_channel, web_socket_channel

More

Packages that depend on paisley