* There's a reason 65% of webpages include jQuery
import 'dart:html';
main() {
  var msg = querySelector('#msg');
  var btn = new ButtonElement();
  btn.text = 'Click me!';
  btn.onClick.listen((e) => msg.text = 'Dart!');
  document.body.children.add(btn);
}
            
// Who needs a function keyword?
awesome(int num) {
  return "$num MILLION DOLLARS!!!";
};
// One liner callbacks are easy
// Notice, the return is implied
var some = (num) => "$num MILLION DOLLARS!!!";
print(awesome(5));  // 5 MILLION DOLLARS!!!
print(some(5));     // 5 MILLION DOLLARS!!!
            
awesome() {
  var a = "outside";
  print a;              // outside
  if (true) {
    var a = "inside";
    print a;            // inside
  }
  print a;              // outside
}
            
class Sauce {
  applyTo(meal) {
    print("$meal, with sauce.");
  }
}
class HotSauce {
  applyTo(meal) {
    print("$meal, with hot sauce. SPICY!");
  }
}
new Sauce().applyTo("Burger");      // Burger, with sauce.
new HotSauce().applyTo("Chips");    // Chips, with hot sauce. SPICY!
            
abstract class Sauce {
  applyTo(meal) => throw "implement this";
}
abstract class Spicy {
  warn() => print("Don't drink me!");
}
class HotSauce extends Sauce with Spicy {
  applyTo(meal) => print("$meal, with hot sauce. SPICY!");
}
new HotSauce()
  ..applyTo("Chips")    // Chips, with hot sauce. SPICY!
  ..warn();             // Don't drink me!
            
void main() {
  print("It's like writing C again!");
  print("No guessing which <script> tags are running code."); 
}
            
class SuperHero {
  _real_identity;
  SuperHero(real_identity) => _real_identity = real_identity;
}
// In another library
var super_man = new SuperHero("Clark Kent");
super_man._real_identity;                     // Private to library
            
setFlags({bool verbose: false, bool dry_run: false}) {
  // use verbose and dry_run here
}
log(message, [Logger logger]) {
  if (?logger) {
    logger.log(message);
  } else {
    print(message);
  }
}
void main() {
  setFlags(dry_run: true);
  log("Hello!");
}
            
typedef int Compare(int a, int b);
int sort(int a, int b) => a - b;
main() {
  assert(sort is Compare);  // True!
}
            
import 'dart:mirrors';
class MyAnnotation {
  final String note;
  const MyAnnotation(this.note);
}
@MyAnnotation('Go! Go! Gadget!')
class Annotated {
}
main() {
  ClassMirror mirror = reflectClass(Annotated);
  String note = mirror.metadata.
      where((a) => a.type.reflectedType == MyAnnotation).
        first.reflectee.note;
}
            
my_func() {
  a = 0;      // Doesn't define window.a
              // It just doesn't compile
}
            
i_have_no_class() {
  print("rolling without any hommies.");
}
            
class MyHandler {
  on_event_callback(e) {
    // When this is called, this != window
  }
}
main() {
  handler = new MyHandler();
  btn.onClick.listen(handler.on_event_callback);
}
            
class Person {
  String name;
  greet() => print("Hi, my name is $name!");
}
main() {
  Person bob = new Person()
    ..name = "Bob"
    ..greet();               // "Hi, my name is Bob!"
}
            
class Simple {
  _name;
  _description;
  Simple(this._name, this._description);
}
void main() {
  var simple = new Simple("Bob", "I'm awesome!");
}
            
class Simple {
  _name;
  _description;
  Simple(this._name, this._description);
  Simple.withDefaults() {
    _name = "Default";
    _description = "No magic here.";
  }
}
void main() {
  var simple = new Simple.withDefaults();
}
            
class Singleton {
  static Singleton _singleton;
  factory Singleton() {
    if (_singleton == null) {
      print("Creating singleton");      
      _singleton = new Singleton._internal();
    }
    return _singleton;
  }
  Singleton._internal() { }
}
void main() {
  var a = new Singleton(),    // Creating singleton
      b = new Singleton();    // Same as the first!
}
            
future_worker() {
  Completer completer = new Completer();
  new Timer(const Duration(seconds: 1), () {
    completer.complete("done!");
  });
  return completer.future;
}
main() {
  future_worker().then((data) => print("In the future!"));
}
            
my_file.openRead().transform(new Latin1Decoder()).
  listen((line) => print(line));
btn.onClick.listen((evt) => print("Button Click!"));
            
import 'dart:isolate';
runningInAnIsolate(SendPort replyTo) {
  replyTo.send("Hello from the isolate!");
}
main() {
  ReceivePort port = new ReceivePort();
  Isolate.spawn(runningInAnIsolate, port.sendPort);
  port.listen((msg) => print(msg),
              onDone: () => port.close());
}
            
// In ballgame.dart
library ballgame;   // Declare that this is a library named ballgame.
import 'dart:html'; // This app uses the HTML library.
// Include other files in the library
part 'ball.dart';
part 'util.dart';
// In ball.dart
part of ballgame;
// In your code
import "package:ballgame";
             
          
import 'dart:js' as js;
main() {
  // Bind a Dart function to a JavaScript name
  js.context["greeter"] = (name) => "Hello, from $name!";
  // Call the JavaScript function we just bound
  var greeting = js.context.callMethod("greeter", ["Dart"]);
  print(greeting);
  // Call the same Dart function we bound, in JavaScript
  // console.log(greeter("JavaScript"));
}