| 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 | 9 |
| 10 _logger = logging.getLogger('dartgenerator') | 10 _logger = logging.getLogger('dartgenerator') |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 self._event_classes.add(interface.id) | 469 self._event_classes.add(interface.id) |
| 470 events_class_name = html_interface_name + 'Events' | 470 events_class_name = html_interface_name + 'Events' |
| 471 parent_events_class_name = self._GetParentEventsClassName(interface) | 471 parent_events_class_name = self._GetParentEventsClassName(interface) |
| 472 | 472 |
| 473 if not event_names: | 473 if not event_names: |
| 474 return parent_events_class_name | 474 return parent_events_class_name |
| 475 | 475 |
| 476 template_file = 'impl_%s.darttemplate' % events_class_name | 476 template_file = 'impl_%s.darttemplate' % events_class_name |
| 477 template = (self._template_loader.TryLoad(template_file) or | 477 template = (self._template_loader.TryLoad(template_file) or |
| 478 '\n' | 478 '\n' |
| 479 '/// @docsEditable true\n' | 479 '@DocsEditable\n' |
| 480 'class $CLASSNAME extends $SUPER {\n' | 480 'class $CLASSNAME extends $SUPER {\n' |
| 481 ' /// @docsEditable true\n' | 481 ' @DocsEditable\n' |
| 482 ' $CLASSNAME(EventTarget _ptr) : super(_ptr);\n' | 482 ' $CLASSNAME(EventTarget _ptr) : super(_ptr);\n' |
| 483 '$!MEMBERS}\n') | 483 '$!MEMBERS}\n') |
| 484 | 484 |
| 485 # TODO(jacobr): specify the type of _ptr as EventTarget | 485 # TODO(jacobr): specify the type of _ptr as EventTarget |
| 486 implementation_events_members = events_implementation_emitter.Emit( | 486 implementation_events_members = events_implementation_emitter.Emit( |
| 487 template, | 487 template, |
| 488 CLASSNAME=events_class_name, | 488 CLASSNAME=events_class_name, |
| 489 SUPER='%s' % parent_events_class_name) | 489 SUPER='%s' % parent_events_class_name) |
| 490 | 490 |
| 491 dom_event_names = set() | 491 dom_event_names = set() |
| 492 for event in event_names: | 492 for event in event_names: |
| 493 dom_name = event | 493 dom_name = event |
| 494 dom_name = _on_attribute_to_event_name_mapping.get(dom_name, dom_name) | 494 dom_name = _on_attribute_to_event_name_mapping.get(dom_name, dom_name) |
| 495 dom_event_names.add(dom_name) | 495 dom_event_names.add(dom_name) |
| 496 if html_interface_name in _html_manual_events: | 496 if html_interface_name in _html_manual_events: |
| 497 dom_event_names.update(_html_manual_events[html_interface_name]) | 497 dom_event_names.update(_html_manual_events[html_interface_name]) |
| 498 for dom_name in sorted(dom_event_names): | 498 for dom_name in sorted(dom_event_names): |
| 499 if dom_name not in _html_event_names: | 499 if dom_name not in _html_event_names: |
| 500 _logger.warn('omitting %s event as there is no HTML name for it' % dom_n
ame) | 500 _logger.warn('omitting %s event as there is no HTML name for it' % dom_n
ame) |
| 501 continue | 501 continue |
| 502 | 502 |
| 503 html_name = _html_event_names[dom_name] | 503 html_name = _html_event_names[dom_name] |
| 504 full_event_name = '%sEvents.%s' % (html_interface_name, html_name) | 504 full_event_name = '%sEvents.%s' % (html_interface_name, html_name) |
| 505 if not full_event_name in custom_events: | 505 if not full_event_name in custom_events: |
| 506 implementation_events_members.Emit( | 506 implementation_events_members.Emit( |
| 507 "\n" | 507 "\n" |
| 508 " /// @docsEditable true\n" | 508 " @DocsEditable\n" |
| 509 " EventListenerList get $NAME => this['$DOM_NAME'];\n", | 509 " EventListenerList get $NAME => this['$DOM_NAME'];\n", |
| 510 NAME=html_name, | 510 NAME=html_name, |
| 511 DOM_NAME=dom_name) | 511 DOM_NAME=dom_name) |
| 512 | 512 |
| 513 return events_class_name | 513 return events_class_name |
| 514 | 514 |
| 515 # TODO(jacobr): this isn't quite right.... | 515 # TODO(jacobr): this isn't quite right.... |
| 516 def _GetParentEventsClassName(self, interface): | 516 def _GetParentEventsClassName(self, interface): |
| 517 # Ugly hack as we don't specify that Document and DocumentFragment inherit | 517 # Ugly hack as we don't specify that Document and DocumentFragment inherit |
| 518 # from Element in our IDL. | 518 # from Element in our IDL. |
| 519 if interface.id == 'Document' or interface.id == 'DocumentFragment': | 519 if interface.id == 'Document' or interface.id == 'DocumentFragment': |
| 520 return 'ElementEvents' | 520 return 'ElementEvents' |
| 521 | 521 |
| 522 parent_events_class_name = 'Events' | 522 parent_events_class_name = 'Events' |
| 523 interfaces_with_events = set() | 523 interfaces_with_events = set() |
| 524 for parent in self._database.Hierarchy(interface): | 524 for parent in self._database.Hierarchy(interface): |
| 525 if parent != interface and parent.id in self._event_classes: | 525 if parent != interface and parent.id in self._event_classes: |
| 526 parent_name = self._renamer.RenameInterface(parent) | 526 parent_name = self._renamer.RenameInterface(parent) |
| 527 parent_events_class_name = parent_name + 'Events' | 527 parent_events_class_name = parent_name + 'Events' |
| 528 interfaces_with_events.add(parent) | 528 interfaces_with_events.add(parent) |
| 529 if len(interfaces_with_events) > 1: | 529 if len(interfaces_with_events) > 1: |
| 530 raise Exception('Only one parent event class allowed ' + interface.id) | 530 raise Exception('Only one parent event class allowed ' + interface.id) |
| 531 return parent_events_class_name | 531 return parent_events_class_name |
| OLD | NEW |