async function jsonPost(url, data) { const options = { method: "POST", body: JSON.stringify(data) } try { const response = await fetch(url, options) const content = await response.json() return content } catch(e) { console.error('error ocurred', e) } } async function sendMessage(nick, message) { await jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick: nick, message: message}) } async function drawHistory(messageId=0) { let messages = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: messageId}) msgTotal = messages.nextMessageId for(let message of messages.data) { let msgDiv = document.createElement('div') msgDiv.insertAdjacentHTML('beforeend', ` ${new Date(message.timestamp).toLocaleString()}

${message.nick} :

${message.message}
`) msgDiv.style.width = '100%' msgDiv.style.borderBottom = '1px solid grey' msgDiv.style.marginBottom = '25px' msgScreen.prepend(msgDiv) } let newStuff = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: msgTotal-1}) } drawHistory() async function checkNewMessages() { let {nextMessageId} = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: msgTotal}) if(nextMessageId > msgTotal) { msgTotal = nextMessageId return true } return false } async function sendAndCheck() { sendMessage(nick, text) let oldMsgCount = msgTotal checkNewMessages() drawHistory(msgTotal - (msgTotal-oldMsgCount)) } async function checkLoop() { while(true) { await delay(5000) let oldMsgCount = msgTotal if(checkNewMessages()) { drawHistory(msgTotal - (msgTotal-oldMsgCount)) } } } checkLoop() function isFilled(field) { if(field !== '' && !/^[\s]*$/.test(field)) { return true } return false } async function delay(ms) { return new Promise(ok => setTimeout(() => ok(ms), ms)) } let msgScreen = document.getElementById('msgField') let msgTotal = 0 let nickInput = document.getElementById('nickbox') let msgInput = document.getElementById('msgbox') let sendBtn = document.getElementById('sendBtn') sendBtn.disabled = true let nick = '' let text = '' nickInput.oninput = () => { nick = nickInput.value; isFilled(nick) && isFilled(text)? sendBtn.disabled = false : sendBtn.disabled = true } msgInput.oninput = () => { text = msgInput.value; isFilled(nick) && isFilled(text)? sendBtn.disabled = false : sendBtn.disabled = true } sendBtn.onclick = () => sendAndCheck()