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

Side by Side Diff: lib/html/scripts/htmleventgenerator.py

Issue 11034022: Make event renames optional, not mandatory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 2 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 | « no previous file | no next file » | 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
9
10 _logger = logging.getLogger('dartgenerator')
11
8 # Events without onEventName attributes in the IDL we want to support. 12 # Events without onEventName attributes in the IDL we want to support.
9 # We can automatically extract most event names by checking for 13 # We can automatically extract most event names by checking for
10 # onEventName methods in the IDL but some events aren't listed so we need 14 # onEventName methods in the IDL but some events aren't listed so we need
11 # to manually add them here so that they are easy for users to find. 15 # to manually add them here so that they are easy for users to find.
12 _html_manual_events = { 16 _html_manual_events = {
13 'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'], 17 'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'],
14 'Window': ['DOMContentLoaded'] 18 'Window': ['DOMContentLoaded']
15 } 19 }
16 20
17 # These event names must be camel case when attaching event listeners 21 # These event names must be camel case when attaching event listeners
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 INTERFACE=events_interface, 227 INTERFACE=events_interface,
224 SUPER='_%sImpl' % parent_events_interface) 228 SUPER='_%sImpl' % parent_events_interface)
225 229
226 dom_event_names = set() 230 dom_event_names = set()
227 for event in events: 231 for event in events:
228 dom_name = event.id[2:] 232 dom_name = event.id[2:]
229 dom_name = _on_attribute_to_event_name_mapping.get(dom_name, dom_name) 233 dom_name = _on_attribute_to_event_name_mapping.get(dom_name, dom_name)
230 dom_event_names.add(dom_name) 234 dom_event_names.add(dom_name)
231 if html_interface_name in _html_manual_events: 235 if html_interface_name in _html_manual_events:
232 dom_event_names.update(_html_manual_events[html_interface_name]) 236 dom_event_names.update(_html_manual_events[html_interface_name])
233 dom_event_names = sorted(dom_event_names, 237 for dom_name in sorted(dom_event_names):
podivilov 2012/10/02 15:26:54 Doesn't it change the events order?
Anton Muhin 2012/10/02 15:31:46 It might a bit, but I am not sure it's principal:
podivilov 2012/10/02 15:39:17 Looks like ordering is broken now. I vote for not
234 key=lambda name: _html_event_names[name])
235 for dom_name in dom_event_names:
236 if dom_name not in _html_event_names: 238 if dom_name not in _html_event_names:
237 raise Exception('No known html even name for event: ' + dom_name) 239 _logger.warn('omitting %s event as there is no HTML name for it' % dom_n ame)
240 continue
241
238 html_name = _html_event_names[dom_name] 242 html_name = _html_event_names[dom_name]
239 interface_events_members.Emit('\n EventListenerList get $NAME;\n', 243 interface_events_members.Emit('\n EventListenerList get $NAME;\n',
240 NAME=html_name) 244 NAME=html_name)
241 full_event_name = '%sEvents.%s' % (html_interface_name, html_name) 245 full_event_name = '%sEvents.%s' % (html_interface_name, html_name)
242 if not full_event_name in custom_events: 246 if not full_event_name in custom_events:
243 implementation_events_members.Emit( 247 implementation_events_members.Emit(
244 "\n" 248 "\n"
245 " EventListenerList get $NAME => this['$DOM_NAME'];\n", 249 " EventListenerList get $NAME => this['$DOM_NAME'];\n",
246 NAME=html_name, 250 NAME=html_name,
247 DOM_NAME=dom_name) 251 DOM_NAME=dom_name)
248 252
249 return events_interface 253 return events_interface
250 254
251 # TODO(jacobr): this isn't quite right.... 255 # TODO(jacobr): this isn't quite right....
252 def _GetParentEventsInterface(self, interface): 256 def _GetParentEventsInterface(self, interface):
253 # Ugly hack as we don't specify that Document and DocumentFragment inherit 257 # Ugly hack as we don't specify that Document and DocumentFragment inherit
254 # from Element in our IDL. 258 # from Element in our IDL.
255 if interface.id == 'Document' or interface.id == 'DocumentFragment': 259 if interface.id == 'Document' or interface.id == 'DocumentFragment':
256 return 'ElementEvents' 260 return 'ElementEvents'
257 261
258 parent_events_interface = 'Events' 262 parent_events_interface = 'Events'
259 interfaces_with_events = set() 263 interfaces_with_events = set()
260 for parent in self._database.Hierarchy(interface): 264 for parent in self._database.Hierarchy(interface):
261 if parent != interface and parent.id in self._event_classes: 265 if parent != interface and parent.id in self._event_classes:
262 parent_events_interface = parent.id + 'Events' 266 parent_events_interface = parent.id + 'Events'
263 interfaces_with_events.add(parent) 267 interfaces_with_events.add(parent)
264 if len(interfaces_with_events) > 1: 268 if len(interfaces_with_events) > 1:
265 raise Exception('Only one parent event class allowed ' + interface.id) 269 raise Exception('Only one parent event class allowed ' + interface.id)
266 return parent_events_interface 270 return parent_events_interface
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698