This commit is contained in:
maddalax 2024-11-09 12:02:10 -06:00
parent cd180a6d8c
commit 921881d980
4 changed files with 11 additions and 11 deletions

File diff suppressed because one or more lines are too long

View file

@ -46,7 +46,6 @@ function onUrlChange(newUrl: string) {
for (let [key, values] of url.searchParams) {
let eventName = "qs:" + key;
if (triggers.includes(eventName)) {
console.log("triggering", eventName);
htmx.trigger(element, eventName, null);
break;
}

View file

@ -1,6 +1,15 @@
import {ws} from "./ws";
window.onload = addWsEventHandlers;
window.onload = function () {
const elements = document.querySelectorAll("[hx-extension]");
for (let element of Array.from(elements)) {
const value = element.getAttribute("hx-extension");
if(value != null && value.split(" ").includes("ws")) {
addWsEventHandlers()
break;
}
}
};
function sendWs(message: Record<string, any>) {
if(ws != null && ws.readyState === WebSocket.OPEN) {
@ -16,20 +25,16 @@ function walk(node: Node, cb: (node: Node) => void) {
}
export function addWsEventHandlers() {
console.log('add ws event handlers')
const observer = new MutationObserver(register)
observer.observe(document.body, {childList: true, subtree: true})
let added = new Set<string>();
function register(mutations: MutationRecord[]) {
console.log(mutations)
for (let mutation of mutations) {
for (let removedNode of Array.from(mutation.removedNodes)) {
walk(removedNode, (node) => {
if (node instanceof HTMLElement) {
console.log('removing', node.innerHTML)
const handlerId = node.getAttribute("data-handler-id")
if(handlerId) {
added.delete(handlerId)
@ -53,11 +58,9 @@ export function addWsEventHandlers() {
ids.add(id);
if (added.has(id)) {
console.debug('already added, skipping', id)
return;
}
added.add(id);
console.debug('adding event listener for ws send', id, event)
element.addEventListener(event, (e) => {
sendWs({id, event})
});

View file

@ -54,7 +54,6 @@ function connectWs(ele: Element, url: string, attempt: number = 0) {
ws.addEventListener("close", function(event) {
htmx.trigger(ele, "htmx:wsClose", {event: event});
const delay = exponentialBackoff(attempt);
console.info(`ws closed, reconnecting in ${delay}ms`)
setTimeout(() => {
connectWs(ele, url, attempt + 1)
}, delay)
@ -69,7 +68,6 @@ function connectWs(ele: Element, url: string, attempt: number = 0) {
})
ws.addEventListener("message", function(event) {
console.debug('ws message:', event.data)
const settleInfo = api.makeSettleInfo(ele);
htmx.trigger(ele, "htmx:wsBeforeMessage", {event: event});
const response = event.data