Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(714)

Side by Side Diff: tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate

Issue 1321613005: Dartium w/ JsInterop enabled (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // WARNING: Do not edit - generated code. 5 // WARNING: Do not edit - generated code.
6 6
7 part of $LIBRARYNAME; 7 part of $LIBRARYNAME;
8 8
9 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { 9 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
10 $!MEMBERS 10 $!MEMBERS
11 11
12 $if DART2JS 12 $if DART2JS
13 @DomName('Document.body') 13 @DomName('Document.body')
14 BodyElement body; 14 BodyElement body;
15 $else 15 $else
16 @DomName('Document.body') 16 @DomName('Document.body')
17 BodyElement get body => _body; 17 BodyElement get body => _body;
18 18
19 @DomName('Document.body') 19 @DomName('Document.body')
20 void set body(BodyElement value) { 20 set body(BodyElement value) {
21 _body = value; 21 _body = value;
22 } 22 }
23 $endif 23 $endif
24 24
25 @DomName('Document.caretRangeFromPoint') 25 @DomName('Document.caretRangeFromPoint')
26 Range caretRangeFromPoint(int x, int y) { 26 Range caretRangeFromPoint(int x, int y) {
27 return _caretRangeFromPoint(x, y); 27 return _caretRangeFromPoint(x, y);
28 } 28 }
29 29
30 @DomName('Document.elementFromPoint') 30 @DomName('Document.elementFromPoint')
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 String get lastModified => _lastModified; 83 String get lastModified => _lastModified;
84 84
85 @DomName('Document.preferredStylesheetSet') 85 @DomName('Document.preferredStylesheetSet')
86 String get preferredStylesheetSet => _preferredStylesheetSet; 86 String get preferredStylesheetSet => _preferredStylesheetSet;
87 87
88 @DomName('Document.referrer') 88 @DomName('Document.referrer')
89 String get referrer => _referrer; 89 String get referrer => _referrer;
90 90
91 @DomName('Document.selectedStylesheetSet') 91 @DomName('Document.selectedStylesheetSet')
92 String get selectedStylesheetSet => _selectedStylesheetSet; 92 String get selectedStylesheetSet => _selectedStylesheetSet;
93 void set selectedStylesheetSet(String value) { 93 set selectedStylesheetSet(String value) {
94 _selectedStylesheetSet = value; 94 _selectedStylesheetSet = value;
95 } 95 }
96 96
97 @DomName('Document.styleSheets') 97 @DomName('Document.styleSheets')
98 List<StyleSheet> get styleSheets => _styleSheets; 98 List<StyleSheet> get styleSheets => _styleSheets;
99 99
100 @DomName('Document.title') 100 @DomName('Document.title')
101 String get title => _title; 101 String get title => _title;
102 102
103 @DomName('Document.title') 103 @DomName('Document.title')
104 void set title(String value) { 104 set title(String value) {
105 _title = value; 105 _title = value;
106 } 106 }
107 107
108 /** 108 /**
109 * Returns page to standard layout. 109 * Returns page to standard layout.
110 * 110 *
111 * Has no effect if the page is not in fullscreen mode. 111 * Has no effect if the page is not in fullscreen mode.
112 * 112 *
113 * ## Other resources 113 * ## Other resources
114 * 114 *
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 @SupportedBrowser(SupportedBrowser.FIREFOX) 180 @SupportedBrowser(SupportedBrowser.FIREFOX)
181 @SupportedBrowser(SupportedBrowser.IE, '10') 181 @SupportedBrowser(SupportedBrowser.IE, '10')
182 @Experimental() 182 @Experimental()
183 $if DART2JS 183 $if DART2JS
184 String get visibilityState => JS('String', 184 String get visibilityState => JS('String',
185 '(#.visibilityState || #.mozVisibilityState || #.msVisibilityState ||' 185 '(#.visibilityState || #.mozVisibilityState || #.msVisibilityState ||'
186 '#.webkitVisibilityState)', this, this, this, this); 186 '#.webkitVisibilityState)', this, this, this, this);
187 $else 187 $else
188 String get visibilityState => _webkitVisibilityState; 188 String get visibilityState => _webkitVisibilityState;
189 $endif 189 $endif
190 $if DARTIUM
191
192 /**
193 * Internal routine to find the DOM JS class name being extended for custom
194 * elements.
195 */
196 String _getJSClassName(ClassMirror classMirror) {
197 var jsClassName = null;
198 var isElement = false;
199
200 while (classMirror.superclass != null) {
201 var fullName = classMirror.superclass.qualifiedName;
202 isElement = isElement || (fullName == #dart.dom.html.Element);
203
204 var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.');
205 if (jsClassName == null && domLibrary) {
206 // Lookup JS class name (if not found).
207 var metadatas = classMirror.metadata;
208 for (var metadata in metadatas) {
209 var metaDataMirror = metadata.reflectee;
210 var metaType = reflectClass(metaDataMirror.runtimeType);
211 if (MirrorSystem.getName(metaType.simpleName) == 'DomName' &&
212 metaDataMirror.name.startsWith('HTML')) {
213 jsClassName = metadata.reflectee.name;
214 }
215 }
216 }
217
218 classMirror = classMirror.superclass;
219 }
220
221 // If we're an element then everything is okay.
222 return isElement ? jsClassName : null;
223 }
224 $endif
190 225
191 @Experimental() 226 @Experimental()
192 /** 227 /**
193 * Register a custom subclass of Element to be instantiatable by the DOM. 228 * Register a custom subclass of Element to be instantiatable by the DOM.
194 * 229 *
195 * This is necessary to allow the construction of any custom elements. 230 * This is necessary to allow the construction of any custom elements.
196 * 231 *
197 * The class being registered must either subclass HtmlElement or SvgElement. 232 * The class being registered must either subclass HtmlElement or SvgElement.
198 * If they subclass these directly then they can be used as: 233 * If they subclass these directly then they can be used as:
199 * 234 *
(...skipping 29 matching lines...) Expand all
229 * This custom element can also be instantiated via HTML using the syntax 264 * This custom element can also be instantiated via HTML using the syntax
230 * `<input is="x-bar"></input>` 265 * `<input is="x-bar"></input>`
231 * 266 *
232 */ 267 */
233 void registerElement(String tag, Type customElementClass, 268 void registerElement(String tag, Type customElementClass,
234 {String extendsTag}) { 269 {String extendsTag}) {
235 $if DART2JS 270 $if DART2JS
236 _registerCustomElement(JS('', 'window'), this, tag, customElementClass, 271 _registerCustomElement(JS('', 'window'), this, tag, customElementClass,
237 extendsTag); 272 extendsTag);
238 $else 273 $else
239 _Utils.register(this, tag, customElementClass, extendsTag); 274 // TODO(terry): Need to handle the extendsTag.
275
276 // Figure out which DOM class is being extended from the user's Dart class.
277 var classMirror = reflectClass(customElementClass);
278 var jsClassName = _getJSClassName(classMirror);
279 if (jsClassName == null) {
280 // Only components derived from HTML* can be extended.
281 throw new DomException.jsInterop("HierarchyRequestError: Only HTML element s can be customized.");
282 }
283
284 // Start the hookup the JS way create an <x-foo> element that extends the
285 // <x-base> custom element. Inherit its prototype and signal what tag is
286 // inherited:
287 //
288 // var myProto = Object.create(HTMLElement.prototype);
289 // var myElement = document.registerElement('x-foo', {prototype: myProto });
290 var baseElement = js.context[jsClassName];
291 if (baseElement == null) {
292 // Couldn't find the HTML element so use a generic one.
293 baseElement = js.context['HTMLElement'];
294 }
295 var elemProto = js.context['Object'].callMethod("create", [baseElement['prot otype']]);
296
297 // TODO(terry): Hack to stop recursion re-creating custom element when the
298 // created() constructor of the custom element does e.g.,
299 //
300 // MyElement.created() : super.created() {
301 // this.innerHtml = "<b>I'm an x-foo-with-markup!</b>";
302 // }
303 //
304 // sanitizing causes custom element to created recursively
305 // until stack overflow.
306 //
307 // See https://github.com/dart-lang/sdk/issues/23666
308 int creating = 0;
309 elemProto['createdCallback'] = new js.JsFunction.withThis(($this) {
310 if (_getJSClassName(reflectClass(customElementClass).superclass) != null & & creating < 2) {
311 creating++;
312
313 var dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
314
315 // Need to remember the Dart class that was created for this custom so
316 // return it and setup the blink_jsObject to the $this that we'll be wor king
317 // with as we talk to blink.
318 $this['dart_class'] = dartClass;
319
320 creating--;
321 }
322 });
323 elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, a ttrName, oldVal, newVal) {
324 if ($this["dart_class"] != null && $this['dart_class'].attributeChanged != null) {
325 $this['dart_class'].attributeChanged(attrName, oldVal, newVal);
326 }
327 });
328 elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) {
329 if ($this["dart_class"] != null && $this['dart_class'].attached != null) {
330 $this['dart_class'].attached();
331 }
332 });
333 elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) {
334 if ($this["dart_class"] != null && $this['dart_class'].detached != null) {
335 $this['dart_class'].detached();
336 }
337 });
338 // document.registerElement('x-foo', {prototype: elemProto, extends: extends Tag});
339 var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': extend sTag});
340 js.context['document'].callMethod('registerElement', [tag, jsMap]);
240 $endif 341 $endif
241 } 342 }
242 343
243 /** *Deprecated*: use [registerElement] instead. */ 344 /** *Deprecated*: use [registerElement] instead. */
244 @deprecated 345 @deprecated
245 @Experimental() 346 @Experimental()
246 void register(String tag, Type customElementClass, {String extendsTag}) { 347 void register(String tag, Type customElementClass, {String extendsTag}) {
247 return registerElement(tag, customElementClass, extendsTag: extendsTag); 348 return registerElement(tag, customElementClass, extendsTag: extendsTag);
248 } 349 }
249 350
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 /// parameter must be provided. 398 /// parameter must be provided.
298 @Experimental() 399 @Experimental()
299 ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) { 400 ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) {
300 $if DART2JS 401 $if DART2JS
301 return new _JSElementUpgrader(this, type, extendsTag); 402 return new _JSElementUpgrader(this, type, extendsTag);
302 $else 403 $else
303 return new _VMElementUpgrader(this, type, extendsTag); 404 return new _VMElementUpgrader(this, type, extendsTag);
304 $endif 405 $endif
305 } 406 }
306 } 407 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698