Titivillus/quest/static/questQM.js
2018-09-07 12:56:13 -04:00

170 lines
7.3 KiB
JavaScript

/* Websocket receive */
socket.events['new_post'] = function(data) {
let qposts = document.getElementById('questPosts');
let post_str = '<div class="questPost ';
if (data.post_type === 'text') {
post_str += 'textPost">';
} else if (data.post_type === 'dice') {
post_str += 'dicePost active_post">';
} else if (data.post_type === 'poll') {
post_str += 'pollPost active_post">';
}
post_str += '<div class="questPostMeta">' + data.date;
/* QM only */
if (data.post_type === 'text') {
post_str += '<br /><a href="javascript:void(0);" id="editPost-' + data.post_id + '"onclick="edit_post(\'' + data.post_id + '\')">Edit</a>';
post_str += '<a href="javascript:void(0);" id="savePost-' + data.post_id + '" onclick="save_post(\'' + data.post_id + '\')" style="display:none;">Save</a>';
} else if (data.post_type === 'dice' || data.post_type === 'poll') {
post_str += '<br /><a href="javascript:void(0);" id="closePost-' + data.post_id + '" onclick="close_post(' + data.post_id + ')">Close</a>';
post_str += '<a href="javascript:void(0);" id="openPost-' + data.post_id + '" onclick="open_post(' + data.post_id + ')" style="display:none;">Open</a>'
}
/* end QM only */
post_str += '</div><div class="questPostData" id="questPostData-' + data.post_id + '">';
if (data.post_type === 'text') {
post_str += data.post_text;
} else if (data.post_type === 'dice') {
post_str += '<h3>' + data.post_text + ' - Open</h3>';
} else if (data.post_type === 'poll') {
post_str += '<h3>' + data.post_text + ' - Open</h3>';
post_str += '<table class="poll" id="poll-' + data.post_id + '">';
for (i = 0; i < data.options.length; i++) {
post_str += '<tr id="optionRow-' + data.options[i][0] + '">';
post_str += '<td class="pollCheckBox"><input type="checkbox" id="pollInput-' + data.options[i][0] + '" onchange="vote(' + data.post_id + ',' + data.options[i][0] + ')"/>';
post_str += '<label for="pollInput-' + data.options[i][0] + '"></label></td>';
post_str += '<td class="option_text">' + data.options[i][1] + '</td>';
post_str += '<td class="optionVotes">0</td></tr>';
}
post_str += '</table>';
if (data.allow_writein) {
post_str += '<div id="writeinContainer">';
post_str += 'Write-in: <input type="text" id="writeinInput-' + data.post_id + '" placeholder="Custom choice..." maxlength="200" /><br />';
post_str += '<input type="submit" id="writeinSubmit-' + data.post_id + '" value="Submit" onclick="submitWritein(' + data.post_id + ');"/></div>';
}
}
post_str += '</div></div><br />';
qposts.innerHTML = qposts.innerHTML + post_str;
};
/* Websocket send */
function makePost() {
let qparea = document.getElementById('postTextArea');
let text = qparea.value.trim();
qparea.value = '';
if (text === '') { return; }
socket.send('text_post', {text: text, page_num: page_num, quest_id: quest_id});
}
function save_post(post_id) {
let post = document.getElementById('questPostData-' + post_id);
let post_text = post.firstElementChild.value.trim();
socket.send('edit_post', {post_text: post_text, post_id: post_id});
post_text = post_text.replace(/\n/g, '<br>')
post.innerHTML = post_text;
document.getElementById('savePost-' + post_id).style.display = 'none';
document.getElementById('editPost-' + post_id).style.display = 'initial';
}
function form_post(form_id, event) {
let formData = new FormData(document.getElementById(form_id));
let obj = {};
formData.forEach(function(value, key) {
obj[key] = value;
});
obj.quest_id = quest_id;
obj.page_num = page_num;
socket.send(event, obj);
document.getElementById(form_id).reset();
}
function close_post_send(post_id) {
data = {post_id: post_id, quest_id: quest_id}
let post = document.getElementById('questPostData-' + post_id);
if (post.parentElement.classList.contains('dicePost')) {
data.post_type = 'dice';
} else if (post.parentElement.classList.contains('pollPost')) {
data.post_type = 'poll';
}
socket.send('close_post', data);
}
function open_post_send(post_id) {
data = {post_id: post_id, quest_id: quest_id}
let post = document.getElementById('questPostData-' + post_id);
if (post.parentElement.classList.contains('dicePost')) {
data.post_type = 'dice';
} else if (post.parentElement.classList.contains('pollPost')) {
data.post_type = 'poll';
}
socket.send('open_post', data);
}
/* DOM editing */
function edit_post(post_id) {
let post = document.getElementById('questPostData-' + post_id);
let post_text = post.innerHTML.trim();
post_text = post_text.replace(/<br>/g, '\n');
post.innerHTML = '<textarea class="editPostText">' + post_text + '</textarea>';
post.firstElementChild.style.height = post.firstElementChild.scrollHeight + 'px';
document.getElementById('savePost-' + post_id).style.display = 'initial';
document.getElementById('editPost-' + post_id).style.display = 'none';
}
function close_post(post_id) {
let post = document.getElementById('questPostData-' + post_id);
post.children[0].textContent = post.children[0].textContent.replace('Open', 'Closed');
/* QM only */
document.getElementById('closePost-' + post_id).style.display = 'none';
document.getElementById('openPost-' + post_id).style.display = 'initial';
/* end QM only */
if (post.parentElement.classList.contains('pollPost')) {
let table = document.getElementById('poll-' + post_id);
let boxes = table.getElementsByTagName('input');
for (let i = 0; i < boxes.length; i++) {
boxes[i].disabled = true;
}
let writein = document.getElementById('writeinContainer-' + post_id);
if (writein) {
writein.style.display = 'none';
}
}
}
function open_post(post_id) {
let post = document.getElementById('questPostData-' + post_id);
post.firstElementChild.textContent = post.firstElementChild.textContent.replace('Closed', 'Open');
post.parentElement.className += ' activePost';
/* QM only */
document.getElementById('closePost-' + post_id).style.display = 'initial';
document.getElementById('openPost-' + post_id).style.display = 'none';
/* end QM only */
if (post.parentElement.classList.contains('pollPost')) {
let table = document.getElementById('poll-' + post_id);
let boxes = table.getElementsByTagName('input');
for (let i = 0; i < boxes.length; i++) {
boxes[i].disabled = false;
}
let writein = document.getElementById('writeinContainer-' + post_id);
if (writein) {
writein.style.display = 'initial';
}
}
}
function openPostTab(event, modeName) {
let QMPostTabContent = document.getElementsByClassName("QMPostTabContent");
for (let i = 0; i < QMPostTabContent.length; i++) {
QMPostTabContent[i].style.display = "none";
}
let QMPostTab = document.getElementsByClassName("QMPostTab");
for (let i = 0; i < QMPostTab.length; i++) {
QMPostTab[i].className = QMPostTab[i].className.replace(" active", "");
}
document.getElementById(modeName).style.display = "block";
event.currentTarget.className += " active";
}
function insertPollOption() {
let opts = document.getElementById('pollOptions');
let num = opts.children.length+1;
let temp = document.createElement('template');
temp.innerHTML = '<div><input type="text" name="pollOption-' + num + '" class="pollOption" placeholder="Option ' + num + '" maxlength="200" /></div>';
opts.appendChild(temp.content);
}
function removePollOption() {
let opts = document.getElementById('pollOptions');
if (opts.children.length == 0) { return; }
opts.children[opts.children.length-1].outerHTML = '';
}