1.1 --- a/libxml2dom/events.py Sun Mar 25 01:57:53 2007 +0000
1.2 +++ b/libxml2dom/events.py Sun Mar 25 01:59:19 2007 +0000
1.3 @@ -1,7 +1,8 @@
1.4 #!/usr/bin/env python
1.5
1.6 """
1.7 -DOM events support.
1.8 +DOM Level 3 Events support, with SVG Tiny 1.2 implementation additions.
1.9 +See: http://www.w3.org/TR/DOM-Level-3-Events/events.html
1.10
1.11 Copyright (C) 2007 Paul Boddie <paul@boddie.org.uk>
1.12
1.13 @@ -20,39 +21,63 @@
1.14 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
1.15 """
1.16
1.17 +import time
1.18 +
1.19 +XML_EVENTS_NAMESPACE = "http://www.w3.org/2001/xml-events"
1.20 +
1.21 class EventException(Exception):
1.22
1.23 UNSPECIFIED_EVENT_TYPE_ERR = 0
1.24 DISPATCH_REQUEST_ERR = 1
1.25
1.26 +class DocumentEvent:
1.27 +
1.28 + "An event interface supportable by documents."
1.29 +
1.30 + def canDispatch(self, namespaceURI, type):
1.31 + raise NotImplementedError, "canDispatch"
1.32 +
1.33 + def createEvent(self, eventType):
1.34 + raise NotImplementedError, "createEvent"
1.35 +
1.36 class Event:
1.37
1.38 + "An event class."
1.39 +
1.40 CAPTURING_PHASE = 1
1.41 AT_TARGET = 2
1.42 BUBBLING_PHASE = 3
1.43
1.44 - def __init__(self):
1.45 - type
1.46 - target
1.47 - currentTarget
1.48 - eventPhase
1.49 - bubbles
1.50 - cancelable
1.51 - timeStamp
1.52 - namespaceURI
1.53 - defaultPrevented
1.54 + def __init__(self, target, currentTarget):
1.55 +
1.56 + "Initialise the event."
1.57 +
1.58 + self.target = target
1.59 + self.currentTarget = currentTarget
1.60 + self.defaultPrevented = 0
1.61 +
1.62 + # Initialised later:
1.63 +
1.64 + self.type = None
1.65 + self.namespaceURI = None
1.66 +
1.67 + # DOM Level 3 Events:
1.68 +
1.69 + self.bubbles = None
1.70 + self.eventPhase = self.CAPTURING_PHASE
1.71 + self.timeStamp = time.time()
1.72
1.73 def initEvent(self, eventTypeArg, canBubbleArg, cancelableArg):
1.74 - pass
1.75 -
1.76 - def initEvent(self, eventTypeArg, canBubbleArg, cancelableArg):
1.77 - pass
1.78 + self.initEventNS(None, eventTypeArg, canBubbleArg, cancelableArg)
1.79
1.80 def initEventNS(self, namespaceURIArg, eventTypeArg, canBubbleArg, cancelableArg):
1.81 - pass
1.82 + self.namespaceURI = namespaceURIArg
1.83 + self.type = eventTypeArg
1.84 + self.bubbles = canBubbleArg
1.85 + self.cancelable = cancelableArg
1.86
1.87 def preventDefault(self):
1.88 - pass
1.89 + self.defaultPrevented = 1
1.90
1.91 def stopPropagation(self):
1.92 pass
1.93 @@ -78,7 +103,10 @@
1.94 def dispatchEvent(self, evt):
1.95 if not evt.type:
1.96 raise EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR)
1.97 - # NOTE: Dispatch on namespaceURI, type...
1.98 + # Dispatch on namespaceURI, type.
1.99 + for listener in self.listeners.get((evt.namespaceURI, evt.type), []):
1.100 + listener.handleEvent(evt)
1.101 + return evt.defaultPrevented
1.102
1.103 def removeEventListener(self, type, listener, useCapture):
1.104 self.removeEventListenerNS(None, type, listener, useCapture)