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

Side by Side Diff: tools/dom/scripts/htmleventgenerator.py

Issue 21607003: Add Event delegation to Elements and groups of elements. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/html/element_test.dart ('k') | tools/dom/scripts/systemhtml.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « tests/html/element_test.dart ('k') | tools/dom/scripts/systemhtml.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698