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

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

Issue 9623017: Refactor the event-generation code to locate it in systemhtml.py. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 9 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: client/dom/scripts/systemhtml.py
diff --git a/client/dom/scripts/systemhtml.py b/client/dom/scripts/systemhtml.py
index 4c4945780abf44ed016d8882e35531a62661add9..da6de23275d40a85edcea95a266fbea98e78a4e9 100644
--- a/client/dom/scripts/systemhtml.py
+++ b/client/dom/scripts/systemhtml.py
@@ -383,6 +383,11 @@ _html_event_names = {
'webkitTransitionEnd': 'transitionEnd'
}
+# These classes require an explicit declaration for the "on" method even though
+# they don't declare any unique events, because the concrete class hierarchy
+# doesn't match the interface hierarchy.
+_html_explicit_event_classes = set(['DocumentFragment'])
+
def _OnAttributeToEventName(on_method):
event_name = on_method.id[2:]
if event_name in _on_attribute_to_event_name_mapping:
@@ -496,6 +501,14 @@ class HtmlSystemShared(object):
def _ImplClassName(self, type_name):
return '_' + type_name + 'Impl'
+ def GetEventAttributes(self, interface):
+ events = set([attr for attr in interface.attributes
+ if self._generator._IsEventAttribute(interface, attr)])
+
+ # Hack to generate no-op Element events for DocumentFragment.
Jacob 2012/03/07 23:24:05 this comment can now be removed.
nweiz 2012/03/08 01:03:51 Done.
+ if events or interface.id in _html_explicit_event_classes:
+ return events
+
class HtmlSystem(System):
def __init__(self, templates, database, emitters, output_dir, generator):
@@ -628,6 +641,9 @@ class HtmlDartInterfaceGenerator(DartInterfaceGenerator):
CTOR=self._interface.id,
TYPE=DartType(element_type))
+ events = self._shared.GetEventAttributes(self._interface)
+ if events != None: self.AddEventAttributes(events)
Jacob 2012/03/07 23:24:05 I believe we're using the style of placing the if
nweiz 2012/03/08 01:03:51 Done.
+
def AddAttribute(self, getter, setter):
html_getter_name = self._shared.RenameInHtmlLibrary(
self._interface, getter.id, 'get:')
@@ -758,6 +774,9 @@ class HtmlFrogClassGenerator(FrogInterfaceGenerator):
if constructor_info:
self._EmitFactoryProvider(interface_name, constructor_info)
+ events = self._shared.GetEventAttributes(interface)
+ if events != None: self.AddEventAttributes(events)
Jacob 2012/03/07 23:24:05 why not just if events: self.AddEventAttributes(
nweiz 2012/03/08 01:03:51 Because we want to run AddEventAttributes even if
Jacob 2012/03/08 18:38:09 same comment as above for all cases where == set()
+
def _EmitFactoryProvider(self, interface_name, constructor_info):
template_file = 'factoryprovider_%s.darttemplate' % interface_name
template = self._system._templates.TryLoad(template_file)
@@ -1237,6 +1256,9 @@ class HtmlDartiumInterfaceGenerator(object):
if constructor_info:
self._EmitFactoryProvider(interface_name, constructor_info)
+ events = self._shared.GetEventAttributes(self._interface)
+ if events != None: self.AddEventAttributes(events)
+
def _EmitFactoryProvider(self, interface_name, constructor_info):
template_file = 'factoryprovider_%s.darttemplate' % interface_name
template = self._system._templates.TryLoad(template_file)

Powered by Google App Engine
This is Rietveld 408576698