mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
js: DOM API. Part 1 (#12296)
This commit is contained in:
164
vlib/jsdom/events.js.v
Normal file
164
vlib/jsdom/events.js.v
Normal file
@@ -0,0 +1,164 @@
|
||||
module jsdom
|
||||
|
||||
pub interface IEvent {
|
||||
composed_path() []IEventTarget
|
||||
}
|
||||
|
||||
pub struct JS.Event {}
|
||||
|
||||
pub struct JS.MouseEvent {}
|
||||
|
||||
pub struct Event {
|
||||
event JS.Event [noinit]
|
||||
}
|
||||
|
||||
pub fn (ev Event) composed_path() []IEventTarget {
|
||||
mut composed := []IEventTarget{}
|
||||
#ev.event.composedPath().forEach((item) => {
|
||||
#array_push(composed, jsdom__dispatch_event())
|
||||
#})
|
||||
|
||||
return composed
|
||||
}
|
||||
|
||||
pub struct UIEvent {
|
||||
Event
|
||||
}
|
||||
|
||||
// detail returns `int` with detail about the event, depending on the event type.
|
||||
pub fn (ev UIEvent) detail() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.detail
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
pub struct MouseEvent {
|
||||
UIEvent
|
||||
}
|
||||
|
||||
// button returns the button number that was pressed (if applicable) when the mouse event was fired.
|
||||
pub fn (ev MouseEvent) button() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.button;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// alt_key returns `true` if the `alt` key was down when the mouse event was fired.
|
||||
pub fn (ev MouseEvent) alt_key() bool {
|
||||
ret := false
|
||||
#ret.val = ev.event.altKey;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// buttons returns the buttons being depressed (if any) when the mouse event was fired.
|
||||
pub fn (ev MouseEvent) buttons() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.buttons;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// client_x returns the X coordinate of the mouse pointer in local coordinates.
|
||||
pub fn (ev MouseEvent) client_x() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.clientX;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// client_y returns the Y coordinate of the mouse pointer in local coordinates.
|
||||
pub fn (ev MouseEvent) client_y() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.clientY;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// ctrl_key returns `true` if the `ctrl` key was down when the mouse event was fired.
|
||||
pub fn (ev MouseEvent) ctrl_key() bool {
|
||||
ret := false
|
||||
#ret.val = ev.event.ctrlKey;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// meta_key returns `true` if the `meta` key was down when the mouse event was fired.
|
||||
pub fn (ev MouseEvent) meta_key() bool {
|
||||
ret := false
|
||||
#ret.val = ev.event.metaKey;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// movenet_x reaturns the X coordinate of the mouse pointer relative to the position of the last `mousemove` event.
|
||||
pub fn (ev MouseEvent) movement_x() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.movementX;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// movenet_y reaturns the Y coordinate of the mouse pointer relative to the position of the last `mousemove` event.
|
||||
pub fn (ev MouseEvent) movement_y() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.movementY;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// offset_x returns the X coordinate of the mouse pointer relative to the position of the padding edge of the target node.
|
||||
pub fn (ev MouseEvent) offset_x() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.offsetX;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// offset_y reaturns the Y coordinate of the mouse pointer relative to the position of the padding edge of the target node.
|
||||
pub fn (ev MouseEvent) offset_y() int {
|
||||
ret := 0
|
||||
#ret.val = ev.event.offsetY;
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
pub fn (ev MouseEvent) composed_path() []IEventTarget {
|
||||
mut composed := []IEventTarget{}
|
||||
#ev.event.composedPath().forEach((item) => {
|
||||
#array_push(composed, jsdom__dispatch_event())
|
||||
#})
|
||||
|
||||
return composed
|
||||
}
|
||||
|
||||
pub struct AbortSignal {
|
||||
Event
|
||||
}
|
||||
|
||||
pub fn (ev AbortSignal) composed_path() []IEventTarget {
|
||||
mut composed := []IEventTarget{}
|
||||
#ev.event.composedPath().forEach((item) => {
|
||||
#array_push(composed, jsdom__dispatch_event(item))
|
||||
#})
|
||||
|
||||
return composed
|
||||
}
|
||||
|
||||
pub fn (sig AbortSignal) aborted() bool {
|
||||
res := false
|
||||
#res.val = sig.event.aborted;
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
fn dispatch_event(event JS.Event) IEvent {
|
||||
mut ret := IEvent(Event{})
|
||||
#if (event instanceof AbortSignal) { ret = new jsdom__AbortSignal({}); }
|
||||
#else if (event instanceof MouseEvent) { ret = new jsdom__MouseEvent({}); }
|
||||
#ret.event = event
|
||||
|
||||
return ret
|
||||
}
|
||||
Reference in New Issue
Block a user