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

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

Issue 12045076: Second half of HTML json docs. This reads the json file and inserts the docs. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes. Created 7 years, 10 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
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 from generator import FindCommonAnnotations, FormatAnnotations 9 from generator import GetAnnotationsAndComments, FormatAnnotationsAndComments
10 10
11 _logger = logging.getLogger('dartgenerator') 11 _logger = logging.getLogger('dartgenerator')
12 12
13 # Events without onEventName attributes in the IDL we want to support. 13 # Events without onEventName attributes in the IDL we want to support.
14 # We can automatically extract most event names by checking for 14 # We can automatically extract most event names by checking for
15 # 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
16 # 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.
17 _html_manual_events = { 17 _html_manual_events = {
18 'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'], 18 'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'],
19 'Window': ['DOMContentLoaded'] 19 'Window': ['DOMContentLoaded']
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 376
377 class HtmlEventGenerator(object): 377 class HtmlEventGenerator(object):
378 378
379 def __init__(self, database, renamer, template_loader): 379 def __init__(self, database, renamer, template_loader):
380 self._event_classes = set() 380 self._event_classes = set()
381 self._database = database 381 self._database = database
382 self._renamer = renamer 382 self._renamer = renamer
383 self._template_loader = template_loader 383 self._template_loader = template_loader
384 384
385 def EmitStreamProviders(self, interface, custom_events, 385 def EmitStreamProviders(self, interface, custom_events,
386 members_emitter): 386 members_emitter, library_name):
387 events = self._GetEvents(interface, custom_events) 387 events = self._GetEvents(interface, custom_events)
388 if not events: 388 if not events:
389 return 389 return
390 390
391 for event_info in events: 391 for event_info in events:
392 (dom_name, html_name, event_type) = event_info 392 (dom_name, html_name, event_type) = event_info
393 393
394 # If we're using a different provider, then don't declare one. 394 # If we're using a different provider, then don't declare one.
395 if self._GetEventRedirection(interface, html_name, event_type): 395 if self._GetEventRedirection(interface, html_name, event_type):
396 continue 396 continue
397 397
398 annotations = FormatAnnotations( 398 annotations = FormatAnnotationsAndComments(
399 FindCommonAnnotations(interface.id, dom_name), ' ') 399 GetAnnotationsAndComments(interface.id, dom_name, library_name), ' ')
400 400
401 members_emitter.Emit( 401 members_emitter.Emit(
402 "\n" 402 "\n"
403 " $(ANNOTATIONS)static const EventStreamProvider<$TYPE> " 403 " $(ANNOTATIONS)static const EventStreamProvider<$TYPE> "
404 "$(NAME)Event = const EventStreamProvider<$TYPE>('$DOM_NAME');\n", 404 "$(NAME)Event = const EventStreamProvider<$TYPE>('$DOM_NAME');\n",
405 ANNOTATIONS=annotations, 405 ANNOTATIONS=annotations,
406 NAME=html_name, 406 NAME=html_name,
407 DOM_NAME=dom_name, 407 DOM_NAME=dom_name,
408 TYPE=event_type) 408 TYPE=event_type)
409 409
410 def EmitStreamGetters(self, interface, custom_events, 410 def EmitStreamGetters(self, interface, custom_events,
411 members_emitter): 411 members_emitter, library_name):
412 events = self._GetEvents(interface, custom_events) 412 events = self._GetEvents(interface, custom_events)
413 if not events: 413 if not events:
414 return 414 return
415 415
416 for event_info in events: 416 for event_info in events:
417 (dom_name, html_name, event_type) = event_info 417 (dom_name, html_name, event_type) = event_info
418 getter_name = 'on%s%s' % (html_name[:1].upper(), html_name[1:]) 418 getter_name = 'on%s%s' % (html_name[:1].upper(), html_name[1:])
419 419
420 # If the provider is declared elsewhere, point to that. 420 # If the provider is declared elsewhere, point to that.
421 redirection = self._GetEventRedirection(interface, html_name, event_type) 421 redirection = self._GetEventRedirection(interface, html_name, event_type)
422 if redirection: 422 if redirection:
423 provider = '%s.%sEvent' % (redirection, html_name) 423 provider = '%s.%sEvent' % (redirection, html_name)
424 else: 424 else:
425 provider = html_name + 'Event' 425 provider = html_name + 'Event'
426 426
427 annotations = FormatAnnotations( 427 annotations = FormatAnnotationsAndComments(
428 FindCommonAnnotations(interface.id, dom_name), ' ') 428 GetAnnotationsAndComments(interface.id, dom_name, library_name), ' ')
429 429
430 members_emitter.Emit( 430 members_emitter.Emit(
431 "\n" 431 "\n"
432 " $(ANNOTATIONS)Stream<$TYPE> get $(NAME) => " 432 " $(ANNOTATIONS)Stream<$TYPE> get $(NAME) => "
433 "$PROVIDER.forTarget(this);\n", 433 "$PROVIDER.forTarget(this);\n",
434 ANNOTATIONS=annotations, 434 ANNOTATIONS=annotations,
435 NAME=getter_name, 435 NAME=getter_name,
436 PROVIDER=provider, 436 PROVIDER=provider,
437 TYPE=event_type) 437 TYPE=event_type)
438 438
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 parent_events_class_name = 'Events' 587 parent_events_class_name = 'Events'
588 interfaces_with_events = set() 588 interfaces_with_events = set()
589 for parent in self._database.Hierarchy(interface): 589 for parent in self._database.Hierarchy(interface):
590 if parent != interface and parent.id in self._event_classes: 590 if parent != interface and parent.id in self._event_classes:
591 parent_name = self._renamer.RenameInterface(parent) 591 parent_name = self._renamer.RenameInterface(parent)
592 parent_events_class_name = parent_name + 'Events' 592 parent_events_class_name = parent_name + 'Events'
593 interfaces_with_events.add(parent) 593 interfaces_with_events.add(parent)
594 if len(interfaces_with_events) > 1: 594 if len(interfaces_with_events) > 1:
595 raise Exception('Only one parent event class allowed ' + interface.id) 595 raise Exception('Only one parent event class allowed ' + interface.id)
596 return parent_events_class_name 596 return parent_events_class_name
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698