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; |
+ } |
+} |