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

Unified Diff: sdk/lib/html/scripts/htmleventgenerator.py

Issue 11691009: Moved most of html lib generating scripts into tools. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years 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
« no previous file with comments | « sdk/lib/html/scripts/htmldartgenerator.py ('k') | sdk/lib/html/scripts/htmlrenamer.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/html/scripts/htmleventgenerator.py
diff --git a/sdk/lib/html/scripts/htmleventgenerator.py b/sdk/lib/html/scripts/htmleventgenerator.py
deleted file mode 100644
index a99f8de6b86ee74ffd7d2800e8f775fc42d13cd9..0000000000000000000000000000000000000000
--- a/sdk/lib/html/scripts/htmleventgenerator.py
+++ /dev/null
@@ -1,276 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This module provides functionality to generate dart:html event classes."""
-
-import logging
-
-_logger = logging.getLogger('dartgenerator')
-
-# Events without onEventName attributes in the IDL we want to support.
-# We can automatically extract most event names by checking for
-# onEventName methods in the IDL but some events aren't listed so we need
-# to manually add them here so that they are easy for users to find.
-_html_manual_events = {
- 'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'],
- 'Window': ['DOMContentLoaded']
-}
-
-# These event names must be camel case when attaching event listeners
-# using addEventListener even though the onEventName properties in the DOM for
-# them are not camel case.
-_on_attribute_to_event_name_mapping = {
- 'webkitanimationend': 'webkitAnimationEnd',
- 'webkitanimationiteration': 'webkitAnimationIteration',
- 'webkitanimationstart': 'webkitAnimationStart',
- 'webkitspeechchange': 'webkitSpeechChange',
- 'webkittransitionend': 'webkitTransitionEnd',
-}
-
-# Mapping from raw event names to the pretty camelCase event names exposed as
-# properties in dart:html. If the DOM exposes a new event name, you will need
-# to add the lower case to camel case conversion for that event name here.
-_html_event_names = {
- 'DOMContentLoaded': 'contentLoaded',
- 'abort': 'abort',
- 'addstream': 'addStream',
- 'addtrack': 'addTrack',
- 'audioend': 'audioEnd',
- 'audioprocess': 'audioProcess',
- 'audiostart': 'audioStart',
- 'beforecopy': 'beforeCopy',
- 'beforecut': 'beforeCut',
- 'beforepaste': 'beforePaste',
- 'beforeunload': 'beforeUnload',
- 'blocked': 'blocked',
- 'blur': 'blur',
- 'cached': 'cached',
- 'canplay': 'canPlay',
- 'canplaythrough': 'canPlayThrough',
- 'change': 'change',
- 'chargingchange': 'chargingChange',
- 'chargingtimechange': 'chargingTimeChange',
- 'checking': 'checking',
- 'click': 'click',
- 'close': 'close',
- 'complete': 'complete',
- 'connect': 'connect',
- 'connecting': 'connecting',
- 'contextmenu': 'contextMenu',
- 'copy': 'copy',
- 'cuechange': 'cueChange',
- 'cut': 'cut',
- 'dblclick': 'doubleClick',
- 'devicemotion': 'deviceMotion',
- 'deviceorientation': 'deviceOrientation',
- 'dischargingtimechange': 'dischargingTimeChange',
- 'display': 'display',
- 'downloading': 'downloading',
- 'drag': 'drag',
- 'dragend': 'dragEnd',
- 'dragenter': 'dragEnter',
- 'dragleave': 'dragLeave',
- 'dragover': 'dragOver',
- 'dragstart': 'dragStart',
- 'drop': 'drop',
- 'durationchange': 'durationChange',
- 'emptied': 'emptied',
- 'end': 'end',
- 'ended': 'ended',
- 'enter': 'enter',
- 'error': 'error',
- 'exit': 'exit',
- 'focus': 'focus',
- 'hashchange': 'hashChange',
- 'icecandidate': 'iceCandidate',
- 'icechange': 'iceChange',
- 'input': 'input',
- 'invalid': 'invalid',
- 'keydown': 'keyDown',
- 'keypress': 'keyPress',
- 'keyup': 'keyUp',
- 'levelchange': 'levelChange',
- 'load': 'load',
- 'loadeddata': 'loadedData',
- 'loadedmetadata': 'loadedMetadata',
- 'loadend': 'loadEnd',
- 'loadstart': 'loadStart',
- 'message': 'message',
- 'mousedown': 'mouseDown',
- 'mousemove': 'mouseMove',
- 'mouseout': 'mouseOut',
- 'mouseover': 'mouseOver',
- 'mouseup': 'mouseUp',
- 'mousewheel': 'mouseWheel',
- 'mute': 'mute',
- 'negotiationneeded': 'negotiationNeeded',
- 'nomatch': 'noMatch',
- 'noupdate': 'noUpdate',
- 'obsolete': 'obsolete',
- 'offline': 'offline',
- 'online': 'online',
- 'open': 'open',
- 'pagehide': 'pageHide',
- 'pageshow': 'pageShow',
- 'paste': 'paste',
- 'pause': 'pause',
- 'play': 'play',
- 'playing': 'playing',
- 'popstate': 'popState',
- 'progress': 'progress',
- 'ratechange': 'rateChange',
- 'readystatechange': 'readyStateChange',
- 'removestream': 'removeStream',
- 'removetrack': 'removeTrack',
- 'reset': 'reset',
- 'resize': 'resize',
- 'result': 'result',
- 'resultdeleted': 'resultDeleted',
- 'scroll': 'scroll',
- 'search': 'search',
- 'seeked': 'seeked',
- 'seeking': 'seeking',
- 'select': 'select',
- 'selectionchange': 'selectionChange',
- 'selectstart': 'selectStart',
- 'show': 'show',
- 'soundend': 'soundEnd',
- 'soundstart': 'soundStart',
- 'speechend': 'speechEnd',
- 'speechstart': 'speechStart',
- 'stalled': 'stalled',
- 'start': 'start',
- 'statechange': 'stateChange',
- 'storage': 'storage',
- 'submit': 'submit',
- 'success': 'success',
- 'suspend': 'suspend',
- 'timeupdate': 'timeUpdate',
- 'touchcancel': 'touchCancel',
- 'touchend': 'touchEnd',
- 'touchenter': 'touchEnter',
- 'touchleave': 'touchLeave',
- 'touchmove': 'touchMove',
- 'touchstart': 'touchStart',
- 'unload': 'unload',
- 'upgradeneeded': 'upgradeNeeded',
- 'unmute': 'unmute',
- 'updateready': 'updateReady',
- 'versionchange': 'versionChange',
- 'volumechange': 'volumeChange',
- 'waiting': 'waiting',
- 'webkitAnimationEnd': 'animationEnd',
- 'webkitAnimationIteration': 'animationIteration',
- 'webkitAnimationStart': 'animationStart',
- 'webkitfullscreenchange': 'fullscreenChange',
- 'webkitfullscreenerror': 'fullscreenError',
- 'webkitkeyadded': 'keyAdded',
- 'webkitkeyerror': 'keyError',
- 'webkitkeymessage': 'keyMessage',
- 'webkitneedkey': 'needKey',
- 'webkitpointerlockchange': 'pointerLockChange',
- 'webkitpointerlockerror': 'pointerLockError',
- 'webkitSpeechChange': 'speechChange',
- 'webkitsourceclose': 'sourceClose',
- 'webkitsourceended': 'sourceEnded',
- 'webkitsourceopen': 'sourceOpen',
- 'webkitTransitionEnd': 'transitionEnd',
- 'write': 'write',
- 'writeend': 'writeEnd',
- 'writestart': 'writeStart'
-}
-
-# 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'])
-
-class HtmlEventGenerator(object):
-
- def __init__(self, database, renamer, template_loader):
- self._event_classes = set()
- self._database = database
- self._renamer = renamer
- self._template_loader = template_loader
-
- def ProcessInterface(self, interface, html_interface_name, custom_events,
- events_implementation_emitter):
- event_names = set([attr.id[2:] for attr in interface.attributes
- if attr.type.id == 'EventListener'])
-
- # Document and DocumentFragment actually derive from Element, so omit
- # any events which are duplicated with that.
- if interface.id == 'Document' or interface.id == 'DocumentFragment':
- element_interface = self._database.GetInterface('Element')
- for attr in element_interface.attributes:
- if attr.type.id == 'EventListener' and attr.id[2:] in event_names:
- event_names.remove(attr.id[2:])
-
- if not event_names and interface.id not in _html_explicit_event_classes:
- return None
-
- self._event_classes.add(interface.id)
- events_class_name = html_interface_name + 'Events'
- parent_events_class_name = self._GetParentEventsClassName(interface)
-
- if not event_names:
- return parent_events_class_name
-
- template_file = 'impl_%s.darttemplate' % events_class_name
- template = (self._template_loader.TryLoad(template_file) or
- '\n'
- '/// @docsEditable true\n'
- 'class $CLASSNAME extends $SUPER {\n'
- ' /// @docsEditable true\n'
- ' $CLASSNAME(EventTarget _ptr) : super(_ptr);\n'
- '$!MEMBERS}\n')
-
- # TODO(jacobr): specify the type of _ptr as EventTarget
- implementation_events_members = events_implementation_emitter.Emit(
- template,
- CLASSNAME=events_class_name,
- SUPER='%s' % parent_events_class_name)
-
- dom_event_names = set()
- for event in event_names:
- dom_name = event
- dom_name = _on_attribute_to_event_name_mapping.get(dom_name, dom_name)
- dom_event_names.add(dom_name)
- if html_interface_name in _html_manual_events:
- dom_event_names.update(_html_manual_events[html_interface_name])
- for dom_name in sorted(dom_event_names):
- if dom_name not in _html_event_names:
- _logger.warn('omitting %s event as there is no HTML name for it' % dom_name)
- continue
-
- html_name = _html_event_names[dom_name]
- full_event_name = '%sEvents.%s' % (html_interface_name, html_name)
- if not full_event_name in custom_events:
- implementation_events_members.Emit(
- "\n"
- " /// @docsEditable true\n"
- " EventListenerList get $NAME => this['$DOM_NAME'];\n",
- NAME=html_name,
- DOM_NAME=dom_name)
-
- return events_class_name
-
- # TODO(jacobr): this isn't quite right....
- def _GetParentEventsClassName(self, interface):
- # Ugly hack as we don't specify that Document and DocumentFragment inherit
- # from Element in our IDL.
- if interface.id == 'Document' or interface.id == 'DocumentFragment':
- return 'ElementEvents'
-
- parent_events_class_name = 'Events'
- interfaces_with_events = set()
- for parent in self._database.Hierarchy(interface):
- if parent != interface and parent.id in self._event_classes:
- parent_name = self._renamer.RenameInterface(parent)
- parent_events_class_name = parent_name + 'Events'
- interfaces_with_events.add(parent)
- if len(interfaces_with_events) > 1:
- raise Exception('Only one parent event class allowed ' + interface.id)
- return parent_events_class_name
« no previous file with comments | « sdk/lib/html/scripts/htmldartgenerator.py ('k') | sdk/lib/html/scripts/htmlrenamer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698