Current section

Files

Jump to
gossamer src gossamer event_target.ffi.mjs
Raw

src/gossamer/event_target.ffi.mjs

// src/gossamer/event_target/listener_option.ts
import * as $option from "./event_target/listener_option.mjs";
function toListenerOption(options) {
const result = {};
for (const option of options) {
if ($option.ListenerOption$isCapture(option)) {
result.capture = $option.ListenerOption$Capture$0(option);
} else if ($option.ListenerOption$isOnce(option)) {
result.once = $option.ListenerOption$Once$0(option);
} else if ($option.ListenerOption$isPassive(option)) {
result.passive = $option.ListenerOption$Passive$0(option);
} else if ($option.ListenerOption$isSignal(option)) {
result.signal = $option.ListenerOption$Signal$0(option);
}
}
return result;
}
// src/utils/list.ts
import {
List$Empty,
List$isNonEmpty,
List$NonEmpty,
List$NonEmpty$first,
List$NonEmpty$rest
} from "../../prelude.mjs";
function toArray(list) {
const array = [];
let current = list;
while (List$isNonEmpty(current)) {
array.push(List$NonEmpty$first(current));
current = List$NonEmpty$rest(current);
}
return array;
}
// src/gossamer/event_target.ffi.ts
var new_ = () => {
return new EventTarget();
};
var add_event_listener = (target, type, listener) => {
target.addEventListener(type, listener);
};
var add_event_listener_with = (target, type, listener, options) => {
target.addEventListener(
type,
listener,
toListenerOption(toArray(options))
);
};
var remove_event_listener = (target, type, listener) => {
target.removeEventListener(type, listener);
};
var remove_event_listener_with = (target, type, listener, options) => {
target.removeEventListener(
type,
listener,
toListenerOption(toArray(options))
);
};
var dispatch_event = (target, event) => {
return target.dispatchEvent(event);
};
export {
add_event_listener,
add_event_listener_with,
dispatch_event,
new_,
remove_event_listener,
remove_event_listener_with
};