| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 """This module provides functionality to generate dart:html event classes.""" | 6 """This module provides functionality to generate dart:html event classes.""" |
| 7 | 7 |
| 8 import logging | 8 import logging |
| 9 import monitored | 9 import monitored |
| 10 | 10 |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 members_emitter.Emit( | 265 members_emitter.Emit( |
| 266 "\n" | 266 "\n" |
| 267 " $(ANNOTATIONS)static const EventStreamProvider<$TYPE> " | 267 " $(ANNOTATIONS)static const EventStreamProvider<$TYPE> " |
| 268 "$(NAME)Event = const EventStreamProvider<$TYPE>('$DOM_NAME');\n", | 268 "$(NAME)Event = const EventStreamProvider<$TYPE>('$DOM_NAME');\n", |
| 269 ANNOTATIONS=annotations, | 269 ANNOTATIONS=annotations, |
| 270 NAME=html_name, | 270 NAME=html_name, |
| 271 DOM_NAME=dom_name, | 271 DOM_NAME=dom_name, |
| 272 TYPE=event_type) | 272 TYPE=event_type) |
| 273 | 273 |
| 274 def EmitStreamGetters(self, interface, custom_events, | 274 def EmitStreamGetters(self, interface, custom_events, |
| 275 members_emitter, library_name): | 275 members_emitter, library_name, stream_getter_signatures_emitter=None, |
| 276 element_stream_getters_emitter=None): |
| 276 events = self._GetEvents(interface, custom_events) | 277 events = self._GetEvents(interface, custom_events) |
| 277 if not events: | 278 if not events: |
| 278 return | 279 return |
| 279 | 280 |
| 280 for event_info in events: | 281 for event_info in events: |
| 281 (dom_name, html_name, event_type) = event_info | 282 (dom_name, html_name, event_type) = event_info |
| 282 getter_name = 'on%s%s' % (html_name[:1].upper(), html_name[1:]) | 283 getter_name = 'on%s%s' % (html_name[:1].upper(), html_name[1:]) |
| 283 annotation_name = 'on' + dom_name | 284 annotation_name = 'on' + dom_name |
| 284 | 285 |
| 285 # If the provider is declared elsewhere, point to that. | 286 # If the provider is declared elsewhere, point to that. |
| 286 redirection = self._GetEventRedirection(interface, html_name, event_type) | 287 redirection = self._GetEventRedirection(interface, html_name, event_type) |
| 287 if redirection: | 288 if redirection: |
| 288 provider = '%s.%sEvent' % (redirection, html_name) | 289 provider = '%s.%sEvent' % (redirection, html_name) |
| 289 else: | 290 else: |
| 290 provider = html_name + 'Event' | 291 provider = html_name + 'Event' |
| 291 | 292 |
| 292 annotations = self._metadata.GetFormattedMetadata( | 293 annotations = self._metadata.GetFormattedMetadata( |
| 293 library_name, interface, annotation_name, ' ') | 294 library_name, interface, annotation_name, ' ') |
| 294 | 295 |
| 295 members_emitter.Emit( | 296 isElement = False |
| 296 "\n" | 297 for parent in self._database.Hierarchy(interface): |
| 297 " $(ANNOTATIONS)Stream<$TYPE> get $(NAME) => " | 298 if parent.id == 'Element': |
| 298 "$PROVIDER.forTarget(this);\n", | 299 isElement = True |
| 299 ANNOTATIONS=annotations, | 300 # We add the same event stream getters Element, ElementList, and |
| 300 NAME=getter_name, | 301 # _FrozenElementList. So, in impl_Element.darttemplate, we have two |
| 301 PROVIDER=provider, | 302 # additional emitters to add the correct variation of the stream getter |
| 302 TYPE=event_type) | 303 # for that context. |
| 304 for emitter in [members_emitter, stream_getter_signatures_emitter, |
| 305 element_stream_getters_emitter]: |
| 306 if emitter == None: |
| 307 continue |
| 308 elem_type = 'Element' if isElement else '' |
| 309 call_name = 'forElement' if isElement else 'forTarget' |
| 310 if emitter == element_stream_getters_emitter: |
| 311 call_name = '_forElementList' |
| 312 emitter.Emit( |
| 313 "\n" |
| 314 " $(ANNOTATIONS)$(ELEM_TYPE)Stream<$TYPE> get $(NAME)$BODY;\n", |
| 315 ANNOTATIONS=annotations, |
| 316 ELEM_TYPE=elem_type, |
| 317 NAME=getter_name, |
| 318 BODY = ('' if emitter == stream_getter_signatures_emitter else |
| 319 ' => %s.%s(this)' % ((('' |
| 320 if emitter != element_stream_getters_emitter else 'Element.') |
| 321 + provider), call_name)), |
| 322 TYPE=event_type) |
| 303 | 323 |
| 304 def _GetRawEvents(self, interface): | 324 def _GetRawEvents(self, interface): |
| 305 all_interfaces = ([ interface ] + | 325 all_interfaces = ([ interface ] + |
| 306 self._database.TransitiveSecondaryParents(interface)) | 326 self._database.TransitiveSecondaryParents(interface)) |
| 307 events = set([]) | 327 events = set([]) |
| 308 for super_interface in all_interfaces: | 328 for super_interface in all_interfaces: |
| 309 events = events.union( | 329 events = events.union( |
| 310 set([attr.id for attr in super_interface.attributes | 330 set([attr.id for attr in super_interface.attributes |
| 311 if attr.type.id == 'EventListener'])) | 331 if attr.type.id == 'EventListener'])) |
| 312 return events | 332 return events |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 """ | 402 """ |
| 383 key = '%s.%s' % (html_interface_name, dom_event_name) | 403 key = '%s.%s' % (html_interface_name, dom_event_name) |
| 384 if key in _html_event_types: | 404 if key in _html_event_types: |
| 385 return _html_event_types[key] | 405 return _html_event_types[key] |
| 386 key = '*.%s' % dom_event_name | 406 key = '*.%s' % dom_event_name |
| 387 if key in _html_event_types: | 407 if key in _html_event_types: |
| 388 return _html_event_types[key] | 408 return _html_event_types[key] |
| 389 _logger.warn('Cannot resolve event type for %s.%s' % | 409 _logger.warn('Cannot resolve event type for %s.%s' % |
| 390 (html_interface_name, dom_event_name)) | 410 (html_interface_name, dom_event_name)) |
| 391 return None | 411 return None |
| OLD | NEW |