document.execCommand("defaultParagraphSeparator", false, "br"); var socket; var tid = setInterval( function () { if ( document.readyState !== 'complete' ) return; clearInterval( tid ); document.getElementById('chatWindow').scrollTop = document.getElementById('chatWindow').scrollHeight; socket = io.connect('https://' + document.domain + ':' + location.port); socket.on('connect', function() { socket.emit('joined', {room: room_id}); }); socket.on('message', function(data) { let msg_str = '
' + data.name + ' '; msg_str += '' + strftime(data.date) + '
'; msg_str += '
' + data.message + '

'; let mbox = document.getElementById('chatWindow'); mbox.innerHTML = mbox.innerHTML + msg_str; mbox.scrollTop = mbox.scrollHeight; }); socket.on('new_post', function(data) { deactivate_post(); let qposts = document.getElementById('questPosts'); let post_str = '
'; } else if (data.post_type == 'dice') { post_str += 'dicePost active_post">'; } else if (data.post_type == 'poll') { post_str += 'pollPost active_post">'; } post_str += '
' + strftime(data.date); post_str += '
'; if (data.post_type == 'text') { post_str += data.post; } else if (data.post_type == 'dice') { post_str += '

' + data.post + ' - Open

'; } else if (data.post_type == 'poll') { post_str += '

' + data.post + ' - Open

'; post_str += ''; post_str += ''; for (i = 0; i < data.options.length; i++) { post_str += ''; post_str += ''; post_str += ''; post_str += ''; } post_str += '
'; post_str += '' + data.options[i][1] + '0
'; } post_str += '

'; qposts.innerHTML = qposts.innerHTML + post_str; }); socket.on('update_post', function(data) { let post_id = data.post_id; let post = document.getElementById('questPostData-' + post_id); if (data.post_type === 'text') { post.innerHTML = data.post; } else if (data.post_type === 'dice') { post.innerHTML += '' + data.post + '
'; } else if (data.post_type === 'poll') { let row = post.children[1].insertRow(-1); let cell = row.insertCell(0); cell.className = 'pollCheckBox'; cell.innerHTML = ''; cell.innerHTML += ''; cell = row.insertCell(1); cell.className = 'option_text'; cell.innerHTML = data.option_text; cell = row.insertCell(2); cell.className = "optionVotes"; cell.innerHTML = "0"; } }); socket.on('close_post', function(data) { let post = document.getElementById('questPostData-' + data.post_id); post.children[0].textContent = post.children[0].textContent.replace('Open', 'Closed'); document.getElementById('close_post_id-' + data.post_id).style.display = 'none'; document.getElementById('open_post_id-' + data.post_id).style.display = 'initial'; if (post.parentElement.classList.contains('pollPost')) { let table = document.getElementById('poll-' + data.post_id); table.getElementsByTagName("col")[0].style.visibility = 'collapse'; let writein = document.getElementById('writeinContainer'); if (writein) { writein.style.display = 'none'; } } }); socket.on('open_post', function(data) { let post = document.getElementById('questPostData-' + data.post_id); post.firstElementChild.textContent = post.firstElementChild.textContent.replace('Closed', 'Open'); document.getElementById('close_post_id-' + data.post_id).style.display = 'initial'; document.getElementById('open_post_id-' + data.post_id).style.display = 'none'; if (post.parentElement.classList.contains('pollPost')) { table = document.getElementById('poll-' + data.post_id); table.getElementsByTagName("col")[0].style.visibility = ''; let writein = document.getElementById('writeinContainer'); if (writein) { writein.style.display = 'initial'; } } }); socket.on('vote', function(data) { let row = document.getElementById('optionRow-' + data.option_id); if (data.polarity) { row.cells[2].textContent = Number(row.cells[2].textContent) + 1; } else { row.cells[2].textContent = Number(row.cells[2].textContent) - 1; } let table = row.parentElement.parentElement; arr = Array.prototype.slice.call(table.rows); arr.sort(sort_by_votes); let new_tbody = document.createElement('tbody'); for (let i = 0; i < arr.length; i++) { new_tbody.appendChild(arr[i]); } table.replaceChild(new_tbody, table.children[1]); }); socket.on('toggle_option_box', function(data) { document.getElementById('pollInput-' + data.option_id).checked = data.polarity; }); let mtarea = document.getElementById('messageTextArea'); mtarea.addEventListener('keypress', function(event) { if (event.key == 'Enter' && !event.shiftKey) { let text = mtarea.value.trim(); mtarea.value = ''; if (text == '') { return; } socket.emit('message', {message: text, name: 'Anonymous', room: room_id}); } }); }, 100 ); function padToTwo(number) { if (number<=99) { number = ("0"+number).slice(-2); } return number; } function strftime(date) { date = new Date(date * 1000); let date_str = date.getFullYear() + '-' + padToTwo(date.getMonth()+1) + '-' + padToTwo(date.getDate()) + ' '; date_str += padToTwo(date.getHours()) + ':' + padToTwo(date.getMinutes()) + ':' + padToTwo(date.getSeconds()); return date_str; } function sort_by_votes(a, b) { return b.cells[2].textContent.localeCompare(a.cells[2].textContent); } function pollVote(post_id, option_id) { let polarity = document.getElementById('pollInput-' + option_id).checked; socket.emit('vote', {post_id: post_id, option_id: option_id, polarity: polarity, room: room_id}); } function submitWritein(post_id) { let writeinInput = document.getElementById('writeinInput'); if (!writeinInput) { return; } let option_text = writeinInput.value; writeinInput.value = ''; if (!option_text) { return; } socket.emit('write_in', {option_text: option_text, post_id: post_id, room: room_id}); } function deactivate_post() { let post = document.getElementsByClassName('active_post'); if (post.length == 0) { return; } post = post[0]; post.children[1].children[0].textContent = post.children[1].children[0].textContent.replace('Open', 'Closed'); post.classList.remove("active_post"); let writein = document.getElementById('writeinContainer'); if (writein) { writein.outerHTML = ''; } }