// Copyright (c) 2012, 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.

// Fake dart:html library for documentation.

/// The Dart HTML5 Library.
library dart.html;

part 'interface/AbstractWorker.dartdoc';
part 'interface/Element.dartdoc';
part 'interface/Event.dartdoc';
part 'interface/EventTarget.dartdoc';
part 'interface/HttpRequest.dartdoc';
part 'interface/MouseEvent.dartdoc';
part 'interface/Storage.dartdoc';
part 'interface/Node.dartdoc';
part 'interface/UIEvent.dartdoc';
part 'interface/WebSocket.dartdoc';

// Implementation files that appear to be necessary to load the sources.

//part 'nodoc-src/SomeFile.dart';

// Global definitions.

/**
 * The top-level Window object.
 */
Window get window() => null;

/**
 * The top-level Document object.
 */
Document get document() => null;

typedef void EventListener(Event event);
