JSEventTargetBase.cpp [plain text]
#include "config.h"
#include "JSEventTargetBase.h"
#include "JSEventTargetNode.h"
#include "JSEventTargetBase.lut.h"
using namespace KJS;
namespace WebCore {
JSValue* jsEventTargetAddEventListener(ExecState* exec, JSObject* thisObj, const List& args)
{
DOMExceptionTranslator exception(exec);
Node* eventNode = 0;
EventTarget* eventTarget = 0;
if (!retrieveEventTargetAndCorrespondingNode(exec, thisObj, eventNode, eventTarget))
return throwError(exec, TypeError);
Frame* frame = eventNode->document()->frame();
if (!frame)
return jsUndefined();
if (JSEventListener* listener = Window::retrieveWindow(frame)->findOrCreateJSEventListener(args[1]))
eventTarget->addEventListener(args[0]->toString(exec), listener, args[2]->toBoolean(exec));
return jsUndefined();
}
JSValue* jsEventTargetRemoveEventListener(ExecState* exec, JSObject* thisObj, const List& args)
{
DOMExceptionTranslator exception(exec);
Node* eventNode = 0;
EventTarget* eventTarget = 0;
if (!retrieveEventTargetAndCorrespondingNode(exec, thisObj, eventNode, eventTarget))
return throwError(exec, TypeError);
Frame* frame = eventNode->document()->frame();
if (!frame)
return jsUndefined();
if (JSEventListener* listener = Window::retrieveWindow(frame)->findJSEventListener(args[1]))
eventTarget->removeEventListener(args[0]->toString(exec), listener, args[2]->toBoolean(exec));
return jsUndefined();
}
JSValue* jsEventTargetDispatchEvent(ExecState* exec, JSObject* thisObj, const List& args)
{
Node* eventNode = 0;
EventTarget* eventTarget = 0;
if (!retrieveEventTargetAndCorrespondingNode(exec, thisObj, eventNode, eventTarget))
return throwError(exec, TypeError);
DOMExceptionTranslator exception(exec);
return jsBoolean(eventTarget->dispatchEvent(toEvent(args[0]), exception));
}
bool retrieveEventTargetAndCorrespondingNode(KJS::ExecState*, KJS::JSObject* thisObj, Node*& eventNode, EventTarget*& eventTarget)
{
if (!thisObj->inherits(&JSNode::info))
return false;
JSEventTargetNode* jsNode = static_cast<JSEventTargetNode*>(thisObj);
ASSERT(jsNode);
EventTargetNode* node = static_cast<EventTargetNode*>(jsNode->impl());
ASSERT(node);
eventNode = node;
eventTarget = node;
return true;
}
AtomicString eventNameForPropertyToken(int token)
{
switch (token) {
case JSEventTargetProperties::OnAbort:
return abortEvent;
case JSEventTargetProperties::OnBlur:
return blurEvent;
case JSEventTargetProperties::OnChange:
return changeEvent;
case JSEventTargetProperties::OnClick:
return clickEvent;
case JSEventTargetProperties::OnContextMenu:
return contextmenuEvent;
case JSEventTargetProperties::OnDblClick:
return dblclickEvent;
case JSEventTargetProperties::OnError:
return errorEvent;
case JSEventTargetProperties::OnFocus:
return focusEvent;
case JSEventTargetProperties::OnInput:
return inputEvent;
case JSEventTargetProperties::OnKeyDown:
return keydownEvent;
case JSEventTargetProperties::OnKeyPress:
return keypressEvent;
case JSEventTargetProperties::OnKeyUp:
return keyupEvent;
case JSEventTargetProperties::OnLoad:
return loadEvent;
case JSEventTargetProperties::OnMouseDown:
return mousedownEvent;
case JSEventTargetProperties::OnMouseMove:
return mousemoveEvent;
case JSEventTargetProperties::OnMouseOut:
return mouseoutEvent;
case JSEventTargetProperties::OnMouseOver:
return mouseoverEvent;
case JSEventTargetProperties::OnMouseUp:
return mouseupEvent;
case JSEventTargetProperties::OnMouseWheel:
return mousewheelEvent;
case JSEventTargetProperties::OnBeforeCut:
return beforecutEvent;
case JSEventTargetProperties::OnCut:
return cutEvent;
case JSEventTargetProperties::OnBeforeCopy:
return beforecopyEvent;
case JSEventTargetProperties::OnCopy:
return copyEvent;
case JSEventTargetProperties::OnBeforePaste:
return beforepasteEvent;
case JSEventTargetProperties::OnPaste:
return pasteEvent;
case JSEventTargetProperties::OnDragEnter:
return dragenterEvent;
case JSEventTargetProperties::OnDragOver:
return dragoverEvent;
case JSEventTargetProperties::OnDragLeave:
return dragleaveEvent;
case JSEventTargetProperties::OnDrop:
return dropEvent;
case JSEventTargetProperties::OnDragStart:
return dragstartEvent;
case JSEventTargetProperties::OnDrag:
return dragEvent;
case JSEventTargetProperties::OnDragEnd:
return dragendEvent;
case JSEventTargetProperties::OnReset:
return resetEvent;
case JSEventTargetProperties::OnResize:
return resizeEvent;
case JSEventTargetProperties::OnScroll:
return scrollEvent;
case JSEventTargetProperties::OnSearch:
return searchEvent;
case JSEventTargetProperties::OnSelect:
return selectEvent;
case JSEventTargetProperties::OnSelectStart:
return selectstartEvent;
case JSEventTargetProperties::OnSubmit:
return submitEvent;
case JSEventTargetProperties::OnUnload:
return unloadEvent;
}
return AtomicString();
}
}