| Index: client/dom/templates/html/frog/impl_Document.darttemplate
 | 
| diff --git a/client/dom/templates/html/frog/impl_Document.darttemplate b/client/dom/templates/html/frog/impl_Document.darttemplate
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..81f3d59c69dedc27f868d611646e6fc47c7cf5f4
 | 
| --- /dev/null
 | 
| +++ b/client/dom/templates/html/frog/impl_Document.darttemplate
 | 
| @@ -0,0 +1,47 @@
 | 
| +// 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.
 | 
| +
 | 
| +class $CLASSNAME extends _ElementJs
 | 
| +    implements Document
 | 
| +    native "*HTMLHtmlElement" {
 | 
| +$!MEMBERS
 | 
| +
 | 
| +  // We execute query selectors off the traditional document rather than the
 | 
| +  // HTMLHtmlElement to make the result of query and queryAll less surprising.
 | 
| +  // Note: this means that document.query('html') will return the Document.
 | 
| +  _ElementJs query(String selectors) native "return this.parentNode.querySelector(selectors);";
 | 
| +  ElementList queryAll(String selectors) native "return this.parentNode.querySelectorAll(selectors);";
 | 
| +
 | 
| +  // TODO(jacobr): remove these methods and let them be generated automatically
 | 
| +  // once dart supports defining fields with the same name in an interface and
 | 
| +  // its parent interface.
 | 
| +  String get title() native "return this.parentNode.title;";
 | 
| +  void set title(String value) native "this.parentNode.title = value;";
 | 
| +
 | 
| +
 | 
| +  // For efficiency and simplicity, we always use the HtmlElement as the
 | 
| +  // Document but sometimes internally we need the real JS document object.
 | 
| +  _NodeJs get _jsDocument() native "return this.parentNode;";
 | 
| +
 | 
| +  // The document doesn't have a parent element.
 | 
| +  _ElementJs get parent() => null;
 | 
| +}
 | 
| +
 | 
| +// This class should not be externally visible.  If a user ever gets access to
 | 
| +// a _SecretHtmlDocumentJs object that is a bug.  This object is hidden by
 | 
| +// adding checks to all methods that could an HTMLDocument.  We believe that
 | 
| +// list is limited to Event.target, and HTMLHtmlElement.parent.
 | 
| +class _SecretHtmlDocumentJs extends _NodeJs implements Node
 | 
| +    native "*HTMLDocument" {
 | 
| +  _DocumentJs get _documentElement() native "return this.documentElement;";
 | 
| +}
 | 
| +
 | 
| +EventTarget _FixHtmlDocumentReference(EventTarget eventTarget) {
 | 
| +  if (eventTarget is _SecretHtmlDocumentJs) {
 | 
| +    _SecretHtmlDocumentJs secretDocument = eventTarget;
 | 
| +    return secretDocument._documentElement;
 | 
| +  } else {
 | 
| +    return eventTarget;
 | 
| +  }
 | 
| +}
 | 
| 
 |