| 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 from generator import FindCommonAnnotations, FormatAnnotations | 
|    9  |   10  | 
|   10 _logger = logging.getLogger('dartgenerator') |   11 _logger = logging.getLogger('dartgenerator') | 
|   11  |   12  | 
|   12 # Events without onEventName attributes in the  IDL we want to support. |   13 # Events without onEventName attributes in the  IDL we want to support. | 
|   13 # We can automatically extract most event names by checking for |   14 # We can automatically extract most event names by checking for | 
|   14 # onEventName methods in the IDL but some events aren't listed so we need |   15 # onEventName methods in the IDL but some events aren't listed so we need | 
|   15 # to manually add them here so that they are easy for users to find. |   16 # to manually add them here so that they are easy for users to find. | 
|   16 _html_manual_events = { |   17 _html_manual_events = { | 
|   17   'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'], |   18   'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'], | 
|   18   'Window': ['DOMContentLoaded'] |   19   'Window': ['DOMContentLoaded'] | 
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  386     if not events: |  387     if not events: | 
|  387       return |  388       return | 
|  388  |  389  | 
|  389     for event_info in events: |  390     for event_info in events: | 
|  390       (dom_name, html_name, event_type) = event_info |  391       (dom_name, html_name, event_type) = event_info | 
|  391  |  392  | 
|  392       # If we're using a different provider, then don't declare one. |  393       # If we're using a different provider, then don't declare one. | 
|  393       if self._GetEventRedirection(interface, html_name, event_type): |  394       if self._GetEventRedirection(interface, html_name, event_type): | 
|  394         continue |  395         continue | 
|  395  |  396  | 
 |  397       annotations = FormatAnnotations( | 
 |  398           FindCommonAnnotations(interface.id, dom_name), '  ') | 
 |  399  | 
|  396       members_emitter.Emit( |  400       members_emitter.Emit( | 
|  397           "\n" |  401           "\n" | 
|  398           "  static const EventStreamProvider<$TYPE> $(NAME)Event = " |  402           "  $(ANNOTATIONS)static const EventStreamProvider<$TYPE> " | 
|  399           "const EventStreamProvider<$TYPE>('$DOM_NAME');\n", |  403           "$(NAME)Event = const EventStreamProvider<$TYPE>('$DOM_NAME');\n", | 
 |  404           ANNOTATIONS=annotations, | 
|  400           NAME=html_name, |  405           NAME=html_name, | 
|  401           DOM_NAME=dom_name, |  406           DOM_NAME=dom_name, | 
|  402           TYPE=event_type) |  407           TYPE=event_type) | 
|  403  |  408  | 
|  404   def EmitStreamGetters(self, interface, custom_events, |  409   def EmitStreamGetters(self, interface, custom_events, | 
|  405       members_emitter): |  410       members_emitter): | 
|  406     events = self._GetEvents(interface, custom_events) |  411     events = self._GetEvents(interface, custom_events) | 
|  407     if not events: |  412     if not events: | 
|  408       return |  413       return | 
|  409  |  414  | 
|  410     for event_info in events: |  415     for event_info in events: | 
|  411       (dom_name, html_name, event_type) = event_info |  416       (dom_name, html_name, event_type) = event_info | 
|  412       getter_name = 'on%s%s' % (html_name[:1].upper(), html_name[1:]) |  417       getter_name = 'on%s%s' % (html_name[:1].upper(), html_name[1:]) | 
|  413  |  418  | 
|  414       # If the provider is declared elsewhere, point to that. |  419       # If the provider is declared elsewhere, point to that. | 
|  415       redirection = self._GetEventRedirection(interface, html_name, event_type) |  420       redirection = self._GetEventRedirection(interface, html_name, event_type) | 
|  416       if redirection: |  421       if redirection: | 
|  417         provider = '%s.%sEvent' % (redirection, html_name) |  422         provider = '%s.%sEvent' % (redirection, html_name) | 
|  418       else: |  423       else: | 
|  419         provider = html_name + 'Event' |  424         provider = html_name + 'Event' | 
|  420  |  425  | 
 |  426       annotations = FormatAnnotations( | 
 |  427           FindCommonAnnotations(interface.id, dom_name), '  ') | 
 |  428  | 
|  421       members_emitter.Emit( |  429       members_emitter.Emit( | 
|  422           "\n" |  430           "\n" | 
|  423           "  Stream<$TYPE> get $(NAME) => $PROVIDER.forTarget(this);\n", |  431           "  $(ANNOTATIONS)Stream<$TYPE> get $(NAME) => " | 
 |  432           "$PROVIDER.forTarget(this);\n", | 
 |  433           ANNOTATIONS=annotations, | 
|  424           NAME=getter_name, |  434           NAME=getter_name, | 
|  425           PROVIDER=provider, |  435           PROVIDER=provider, | 
|  426           TYPE=event_type) |  436           TYPE=event_type) | 
|  427  |  437  | 
|  428   def _GetEvents(self, interface, custom_events): |  438   def _GetEvents(self, interface, custom_events): | 
|  429     """ Gets a list of all of the events for the specified interface. |  439     """ Gets a list of all of the events for the specified interface. | 
|  430     """ |  440     """ | 
|  431     events = set([attr for attr in interface.attributes |  441     events = set([attr for attr in interface.attributes | 
|  432                   if attr.type.id == 'EventListener']) |  442                   if attr.type.id == 'EventListener']) | 
|  433     if not events and interface.id not in _html_explicit_event_classes: |  443     if not events and interface.id not in _html_explicit_event_classes: | 
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  575     parent_events_class_name = 'Events' |  585     parent_events_class_name = 'Events' | 
|  576     interfaces_with_events = set() |  586     interfaces_with_events = set() | 
|  577     for parent in self._database.Hierarchy(interface): |  587     for parent in self._database.Hierarchy(interface): | 
|  578       if parent != interface and parent.id in self._event_classes: |  588       if parent != interface and parent.id in self._event_classes: | 
|  579         parent_name = self._renamer.RenameInterface(parent) |  589         parent_name = self._renamer.RenameInterface(parent) | 
|  580         parent_events_class_name = parent_name + 'Events' |  590         parent_events_class_name = parent_name + 'Events' | 
|  581         interfaces_with_events.add(parent) |  591         interfaces_with_events.add(parent) | 
|  582     if len(interfaces_with_events) > 1: |  592     if len(interfaces_with_events) > 1: | 
|  583       raise Exception('Only one parent event class allowed ' + interface.id) |  593       raise Exception('Only one parent event class allowed ' + interface.id) | 
|  584     return parent_events_class_name |  594     return parent_events_class_name | 
| OLD | NEW |