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

Unified Diff: lib/dom/scripts/systemhtml.py

Issue 10332144: Move html events generation to domimpl. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: lib/dom/scripts/systemhtml.py
diff --git a/lib/dom/scripts/systemhtml.py b/lib/dom/scripts/systemhtml.py
index 24dae45acaf688f1b9dc8a8cca641f6f7575e552..9937cd7fa327c83a602570664e3db437e51b6fb2 100644
--- a/lib/dom/scripts/systemhtml.py
+++ b/lib/dom/scripts/systemhtml.py
@@ -448,7 +448,7 @@ def _OnAttributeToEventName(on_method):
else:
return event_name
-def _DomToHtmlEvents(interface_id, events):
+def DomToHtmlEvents(interface_id, events):
event_names = set(map(_OnAttributeToEventName, events))
if interface_id in _html_manual_events:
for manual_event_name in _html_manual_events[interface_id]:
@@ -456,6 +456,11 @@ def _DomToHtmlEvents(interface_id, events):
return sorted(event_names, key=lambda name: _html_event_names[name])
+def DomToHtmlEvent(event_name):
+ assert event_name in _html_event_names, \
+ 'No known html event name for event: ' + event_name
Anton Muhin 2012/05/16 13:17:57 nit: something like 'No html event with name %s' %
+ return _html_event_names[event_name]
+
# ------------------------------------------------------------------------------
class HtmlSystemShared(object):
@@ -778,7 +783,7 @@ class HtmlDartInterfaceGenerator(DartInterfaceGenerator):
self._EmitConstant(self._members_emitter, constant)
def AddEventAttributes(self, event_attrs):
- event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs)
+ event_attrs = DomToHtmlEvents(self._interface.id, event_attrs)
self._shared._event_classes.add(self._interface.id)
events_interface = self._interface.id + 'Events'
self._EmitEventGetter(events_interface)
@@ -1065,7 +1070,7 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
lambda type_name: self._NarrowInputType(type_name)))
def AddEventAttributes(self, event_attrs):
- event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs)
+ event_attrs = DomToHtmlEvents(self._interface.id, event_attrs)
events_class = '_' + self._interface.id + 'EventsImpl'
events_interface = self._interface.id + 'Events'
self._EmitEventGetter(events_class)
@@ -1319,13 +1324,11 @@ class HtmlDartiumInterfaceGenerator(object):
self._EmitFactoryProvider(interface_name, constructor_info)
emit_events, events = self._shared.GetEventAttributes(self._interface)
- if not emit_events:
- return
- elif events:
- self.AddEventAttributes(events)
- else:
- parent_events_class = self._shared.GetParentEventsClass(self._interface)
- self._EmitEventGetter('_' + parent_events_class + 'Impl')
+ if emit_events:
+ self._members_emitter.Emit(
+ '\n'
+ ' Events get on() => $THIS.on;\n',
+ THIS=self.DomObjectName())
def _EmitFactoryProvider(self, interface_name, constructor_info):
template_file = 'factoryprovider_%s.darttemplate' % interface_name
@@ -1430,45 +1433,6 @@ class HtmlDartiumInterfaceGenerator(object):
self._SecondaryContext(interface)
self.AddOperation(info)
- def AddEventAttributes(self, event_attrs):
- event_attrs = _DomToHtmlEvents(self._interface.id, event_attrs)
- events_class = '_' + self._interface.id + 'EventsImpl'
- events_interface = self._interface.id + 'Events'
- self._EmitEventGetter(events_class)
-
- self._shared._event_classes.add(self._interface.id)
-
- parent_event_class = self._shared.GetParentEventsClass(self._interface)
-
- # TODO(jacobr): specify the type of _ptr as EventTarget
- events_members = self._dart_code.Emit(
- '\n'
- 'class $CLASSNAME extends $SUPER implements $INTERFACE {\n'
- ' $CLASSNAME(_ptr) : super(_ptr);\n'
- '$!MEMBERS}\n',
- CLASSNAME=events_class,
- INTERFACE=events_interface,
- SUPER='_' + parent_event_class + 'Impl')
-
- for event_name in event_attrs:
- if event_name in _html_event_names:
- events_members.Emit(
- "\n"
- " EventListenerList get $NAME() => _get('$RAWNAME');\n",
- RAWNAME=event_name,
- NAME=_html_event_names[event_name])
- else:
- raise Exception('No known html even name for event: ' + event_name)
-
- def _EmitEventGetter(self, events_class):
- self._members_emitter.Emit(
- '\n'
- ' $TYPE get on() {\n'
- ' if (_on == null) _on = new $TYPE(this);\n'
- ' return _on;\n'
- ' }\n',
- TYPE=events_class)
-
def _SecondaryContext(self, interface):
if interface is not self._current_secondary_parent:
self._current_secondary_parent = interface

Powered by Google App Engine
This is Rietveld 408576698