diff --git a/events.py b/events.py index 0ff3fd6..b9b6122 100644 --- a/events.py +++ b/events.py @@ -85,12 +85,10 @@ def message(data): if message.startswith("/dice") or message.startswith("/roll"): roll_msg = handle_dice(data) if roll_msg: - roll_msg += '
' + roll_msg + "" + message += '
' + roll_msg + "" date = int(time.time()) message_id = db.log_chat_message(message, date, room, user_id) - if roll_msg: - message += roll_msg data = {} data["date"] = date @@ -101,22 +99,21 @@ def message(data): emit("message", data, room=room) if roll_msg: - dice_call_id = db.get_quest_meta(data["room"])[4] - if dice_call_id: - dice_call = db.get_dice_call(dice_call_id) + open_post_id = db.get_quest_meta(room)[3] + if open_post_id: + dice_call = db.get_dice_call(open_post_id) dice_roll = re.search(r"(\d+d\d+(?:[+-]\d+)?)", message).group(1) if dice_call[2] and dice_roll != dice_call[1]: return roll_results = re.search(r"Rolled (.+) =", roll_msg).group(1) - roll_total = int(re.search(r"= (\d+)$", roll_msg).group(1)) + roll_total = int(re.search(r"= (\d+)", roll_msg).group(1)) roll_data = (dice_roll, roll_results, roll_total) - db.insert_quest_roll(message_id, room, dice_call_id, roll_data) + db.insert_quest_roll(message_id, room, open_post_id, roll_data) - if len(db.get_dice_rolls(post_id=dice_call_id)) == dice_call[4]: + if len(db.get_dice_rolls(post_id=open_post_id)) == dice_call[4]: db.set_post_closed(room) - emit("close_dice_call", {"post_id": dice_call_id}, room=room) + emit("close_post", {"post_id": open_post_id}, room=room) - room = data["room"] data = {} data["post"] = roll_msg + " (" + dice_roll + ")" if dice_call[3]: @@ -125,7 +122,7 @@ def message(data): else: data["post"] += " - Fail" data["post_type"] = "dice" - data["post_id"] = dice_call_id + data["post_id"] = open_post_id emit("update_post", data, room=room) diff --git a/static/anonkunQM.js b/static/anonkunQM.js index be34a39..2871498 100644 --- a/static/anonkunQM.js +++ b/static/anonkunQM.js @@ -1,207 +1,86 @@ -document.execCommand("defaultParagraphSeparator", false, "br"); -var socket; -var tid = setInterval( function () { - if ( document.readyState !== 'complete' ) return; - clearInterval( tid ); +socket.removeListener('new_post'); +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); + /* QM only */ + if (data.post_type == 'text') { + post_str += '
Edit'; + post_str += ''; + } else if (data.post_type == 'dice' || data.post_type == 'poll') { + post_str += '
Close'; + post_str += '' + } + /* end QM only */ + 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
'; + if (data.allow_writein) { + post_str += '
'; + post_str += 'Write-in:
'; + post_str += '
'; + } + } + post_str += '

'; + qposts.innerHTML = qposts.innerHTML + post_str; +}); +socket.removeListener('close_post'); +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'); + /* QM only */ + document.getElementById('close_post_id-' + data.post_id).style.display = 'none'; + document.getElementById('open_post_id-' + data.post_id).style.display = 'initial'; + /* end QM only */ + 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.removeListener('open_post'); +socket.on('open_post', function(data) { + let post = document.getElementById('questPostData-' + data.post_id); + post.firstElementChild.textContent = post.firstElementChild.textContent.replace('Closed', 'Open'); + /* QM only */ + document.getElementById('close_post_id-' + data.post_id).style.display = 'initial'; + document.getElementById('open_post_id-' + data.post_id).style.display = 'none'; + /* end QM only */ + 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'; + } + } +}); - 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 = '
'; - msg_str = '
' + data.name + ' '; - msg_str += '' + strftime(data.date) + ' '; - msg_str += 'No.' + data.message_id + '
'; - msg_str += '
' + data.message + '

'; - - let mbox = document.getElementById('chatWindow'); - mbox.innerHTML = mbox.innerHTML + msg_str; - if ((mbox.scrollTop + mbox.offsetHeight) >= (mbox.scrollHeight - mbox.clientHeight / 2)) { - 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); - /* QM only */ - if (data.post_type == 'text') { - post_str += '
Edit'; - post_str += ''; - } else if (data.post_type == 'dice' || data.post_type == 'poll') { - post_str += '
Close'; - post_str += '' - } - /* end QM only */ - 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
'; - if (data.allow_writein) { - post_str += '
'; - post_str += 'Write-in:
'; - post_str += '
'; - } - } - 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; } - document.getElementById('chatWindow').scrollTop = document.getElementById('chatWindow').scrollHeight; - 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 quote(message_id) { - let textbox = document.getElementById('messageTextArea'); - textbox.value += '>>' + message_id + '\n'; - textbox.focus(); -} -function scrollToMsg(message_id) { - let elem = document.getElementById('msg-' + message_id); - if (!elem) { return; } - elem.scrollIntoView(); -} -function showPreview(event, message_id) { - let elem = document.getElementById('msg-' + message_id); - if (!elem) { return; } - let preview = document.getElementById('preview'); - preview.innerHTML = elem.innerHTML; - preview.style.display = ''; - let x = event.clientX + 20 + 'px'; - let y = event.clientY + 20 + 'px'; - let maxWidth = window.innerWidth - event.clientX - 80 + 'px'; - preview.style.top = y; - preview.style.left = x; - preview.style.maxWidth = maxWidth; -} -function clearPreview() { - document.getElementById('preview').innerHTML = ''; - document.getElementById('preview').style.display = 'none'; -} function deactivate_post() { let post = document.getElementsByClassName('active_post'); if (post.length == 0) { return; } diff --git a/static/anonkunUser.js b/static/anonkunUser.js index 803f3d4..3e30015 100644 --- a/static/anonkunUser.js +++ b/static/anonkunUser.js @@ -1,141 +1,126 @@ document.execCommand("defaultParagraphSeparator", false, "br"); var socket; -var tid = setInterval( function () { - if ( document.readyState !== 'complete' ) return; - clearInterval( tid ); +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 = '
'; + msg_str = '
' + data.name + ' '; + msg_str += '' + strftime(data.date) + ' '; + msg_str += 'No.' + data.message_id + '
'; + msg_str += '
' + data.message + '

'; - 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 = '
'; - msg_str = '
' + data.name + ' '; - msg_str += '' + strftime(data.date) + ' '; - msg_str += 'No.' + data.message_id + '
'; - msg_str += '
' + data.message + '

'; + let mbox = document.getElementById('chatWindow'); + mbox.innerHTML = mbox.innerHTML + msg_str; + if ((mbox.scrollTop + mbox.offsetHeight) >= (mbox.scrollHeight - mbox.clientHeight / 2)) { + 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
'; + if (data.allow_writein) { + post_str += '
'; + post_str += 'Write-in:
'; + post_str += '
'; + } + } + 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 += ''; - let mbox = document.getElementById('chatWindow'); - mbox.innerHTML = mbox.innerHTML + msg_str; - if ((mbox.scrollTop + mbox.offsetHeight) >= (mbox.scrollHeight - mbox.clientHeight / 2)) { - 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(1); - cell.className = 'option_text'; - cell.innerHTML = data.option_text; - - cell = row.insertCell(2); - cell.className = "optionVotes"; - cell.innerHTML = "0"; + 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'); + 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('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'); + 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('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; } - document.getElementById('chatWindow').scrollTop = document.getElementById('chatWindow').scrollHeight; - socket.emit('message', {message: text, name: 'Anonymous', room: room_id}); - } - }); -}, 100 ); + } +}); +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; +}); function padToTwo(number) { if (number<=99) { number = ("0"+number).slice(-2); } return number; @@ -199,3 +184,16 @@ function deactivate_post() { writein.outerHTML = ''; } } +function load() { + document.getElementById('chatWindow').scrollTop = document.getElementById('chatWindow').scrollHeight; + 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; } + document.getElementById('chatWindow').scrollTop = document.getElementById('chatWindow').scrollHeight; + socket.emit('message', {message: text, name: 'Anonymous', room: room_id}); + } + }); +} diff --git a/templates/quest.html b/templates/quest.html index e74bf7d..91e46b6 100644 --- a/templates/quest.html +++ b/templates/quest.html @@ -3,11 +3,11 @@ {% block head %} + {% if session.get("user_id") == owner_id %} - {% else %} - {% endif %} + {% endblock %} {% block header %} {% if session.get("user_id") == owner_id %} @@ -58,7 +58,7 @@ {% endautoescape %} {% elif quest_post[3] == "dice" %}

{{ quest_post[4] }} - {% if quest_post[0] == open_post_id %}Open{% else %}Closed{% endif %}

- {% for dice_roll in dice_rolls[quest_post[0]] %} + {% for dice_roll in dice_rolls.get(quest_post[0], []) %}
Rolled {{ dice_roll[4] }} = {{ dice_roll[5] }} ({{ dice_roll[3] }}){% if quest_post[0]|dice_chal != 0 %} - {% if dice_roll[5] >= quest_post[0]|dice_chal %}Pass{% else %} Fail{% endif %}{% endif %}
diff --git a/views.py b/views.py index 24e21d6..9656ff9 100644 --- a/views.py +++ b/views.py @@ -55,7 +55,7 @@ def quest(quest_id, page_num=1): quest_id = room_id = data[0] quest_title = data[1] owner_id = data[2] - open_post_id = data[2] + open_post_id = data[3] ip_address = request.remote_addr pages = db.get_quest_pages(quest_id)