Spaces:
Sleeping
Sleeping
let myRoomId = prompt("Room ID:") | |
const DELAYTIME = 500 | |
let DATA; | |
function createRoom(roomId=myRoomId, url="https://jacobinathanialpeterson-chatbox2.hf.space/createRoom") { | |
const controller = new AbortController(); | |
const abortSignal = controller.signal; | |
fetch(url, { | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/json' | |
}, | |
body: JSON.stringify({roomIdInput: roomId}), | |
signal: abortSignal | |
}) | |
.then(response => { if (!response.ok) { throw new Error('Network response was not ok.') } return response.json() }) | |
.then(data => { | |
controller.abort(); | |
}) | |
.catch(error => { if (error.name === 'AbortError') { console.log('Fetch aborted:', error.message) } else { console.error('Error fetching data:', error.message) }}); | |
} | |
function postMessage(roomId=myRoomId, url="https://jacobinathanialpeterson-chatbox2.hf.space/postMessage") { | |
const controller = new AbortController(); | |
const abortSignal = controller.signal; | |
fetch(url, { | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/json' | |
}, | |
body: JSON.stringify({nameInput: document.getElementById("nameInputBox").value, messageInput: document.getElementById("messageInputBox").value, roomIdInput: roomId}), | |
signal: abortSignal | |
}) | |
.then(response => { if (!response.ok) { throw new Error('Network response was not ok.') } return response.json() }) | |
.then(data => { | |
controller.abort(); | |
}) | |
.catch(error => { if (error.name === 'AbortError') { console.log('Fetch aborted:', error.message) } else { console.error('Error fetching data:', error.message) }}); | |
} | |
function getMessages(roomId=myRoomId, url="https://jacobinathanialpeterson-chatbox2.hf.space/messages") { | |
const controller = new AbortController(); | |
const abortSignal = controller.signal; | |
fetch(url, { | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/json' | |
}, | |
body: JSON.stringify({roomIdInput: roomId}), | |
signal: abortSignal | |
}) | |
.then(response => { if (!response.ok) { throw new Error('Network response was not ok.') } return response.json() }) | |
.then(data => { | |
if (!data.message) { | |
// Get the keys of the object | |
const keys = Object.keys(data); | |
// Sort the keys based on their natural order | |
keys.sort((a, b) => { | |
// Extract numeric part of keys | |
const numA = parseInt(a.match(/\d+/)[0]); | |
const numB = parseInt(b.match(/\d+/)[0]); | |
return numA - numB; | |
}); | |
// Create a new object with sorted keys | |
DATA = {}; | |
keys.forEach(key => { | |
DATA[key] = data[key]; | |
}); | |
controller.abort(); | |
} | |
}) | |
.catch(error => { if (error.name === 'AbortError') { console.log('Fetch aborted:', error.message) } else { console.error('Error fetching data:', error.message) }}); | |
} | |
let atBottom = true; | |
function updateUI() { | |
const messagesContainer = document.getElementById("messages"); | |
const isAtBottom = messagesContainer.scrollHeight - messagesContainer.scrollTop === messagesContainer.clientHeight; | |
let elementValue = ''; | |
if (DATA) { | |
Object.entries(DATA).forEach(([key, value]) => { | |
elementValue += | |
`<div class="msgc" id="${key}"> | |
<div class="nme">${value.name}: </div> | |
<div class="msg">${value.message}</div> | |
</div>`; | |
}); | |
} | |
messagesContainer.innerHTML = elementValue; | |
if (atBottom || isAtBottom) { | |
messagesContainer.scrollTop = messagesContainer.scrollHeight; | |
} | |
atBottom = isAtBottom; | |
} | |
setInterval(getMessages, 100); | |
setTimeout(() => { | |
setInterval(updateUI, 100); | |
}, DELAYTIME); | |
document.getElementById("messages").addEventListener("scroll", () => { | |
const messagesContainer = document.getElementById("messages"); | |
const isAtBottom = messagesContainer.scrollHeight - messagesContainer.scrollTop === messagesContainer.clientHeight; | |
atBottom = isAtBottom; | |
}); | |
function handleKeyPress(event) { | |
if (event.keyCode === 13) { | |
event.preventDefault(); | |
postMessage(); | |
} | |
} | |
document.getElementById("messageInputBox").addEventListener("keypress", handleKeyPress); | |