diff --git a/web/root/js/forum.js b/web/root/js/forum.js index 703b26b1d760eea371be29c98a412e187da348e7..77678b36ceffbb176887b168d13866f76bf42a32 100644 --- a/web/root/js/forum.js +++ b/web/root/js/forum.js @@ -125,6 +125,8 @@ function addNew(sub) { function submitPoll(sub) { + $('#newpoll-submit').attr('disabled', true); + if ($('input[name="newpoll-answers"]:checked').length !== 1) return; var subject = $('#newpoll-subject').val(); @@ -134,57 +136,91 @@ function submitPoll(sub) { if (answerCount == 2) answerCount = $('input[name="newpoll-answer-count"]').val(); if (answerCount < 0 || answerCount > 15) return; + var results = parseInt($('input[name="newpoll-results"]:checked').val()); + if (results < 0 || results > 3) return; + var answers = []; - for (var i = 0; i < 16; i++) { - if ($('#newpoll-answer-' + i).length < 1) continue; - var val = $('#newpoll-answer-' + i).val(); - if (val.length < 1) continue; - answers.push(val); - } + $('input[name="newpoll-answer-input"]').each( + function () { + var val = $(this).val(); + if (val !== '') answers.push(val); + } + ); if (answers.length < 1) return; + var comments = []; + $('input[name="newpoll-comment-input"]').each( + function () { + var val = $(this).val(); + if (val !== '') comments.push(val); + } + ); + + var url = + './api/forum.ssjs?call=submit-poll' + + '&sub=' + sub + + '&subject=' + subject + + '&votes=' + answerCount + + '&results=' + results + + '&answer=' + answers.join('&answer='); + + if (comments.length > 0) url += '&comment=' + comments.join('&comment='); + $.getJSON( - './api/forum.ssjs?call=submit-poll&sub=' + sub + '&subject=' + subject + '&votes=' + answerCount + '&answer=' + answers.join('&answer='), - function (data) { - console.log(data); - $('#newpoll').remove(); + url, function (data) { + $('#newpoll-submit').attr('disabled', false); + if (data.success) { + $('#newpoll').remove(); + insertParam('notice', 'Your poll has been posted.'); + } } ); } -function addQuestion(elem) { - var count = $('div[name="newpoll-answer"]').length; - if (count > 15) return; +function addPollField(type, elem) { + + var prefix = 'newpoll-' + type; + + var count = $('div[name="' + prefix + '"]').length; + if (type === 'answer' && count > 15) return; var number = count + 1; - $( '<div id="newpoll-answer-container-' + number + '" name="newpoll-answer" class="form-group">' + - '<label for="newpoll-answer-' + number + '" class="col-sm-2 control-label">Answer</label>' + + + $(elem).append( + '<div id="' + prefix + '-container-' + number + '" name="' + prefix + '" class="form-group">' + + '<label for="' + prefix + '-' + number + '" class="col-sm-2 control-label">' + + (type === 'answer' ? 'Answer' : 'Comment') + + '</label>' + '<div class="col-sm-9">' + - '<input id="newpoll-answer-' + number + '" class="form-control" type="text"> ' + + '<input id="' + prefix + '-' + number + '" class="form-control" name="' + prefix + '-input" type="text"> ' + '</div>' + '<div class="col-sm-1">' + - '<button type="button" class="btn btn-danger" onclick="$(\'#newpoll-answer-container-' + number + '\').remove()">' + + '<button type="button" class="btn btn-danger" onclick="$(\'#' + prefix + '-container-' + number + '\').remove()">' + '<span class="glyphicon glyphicon-remove"></span>' + '</button> ' + '</div>' + '</div>' - ).insertBefore(elem); - $('#newpoll-answer-' + number).keydown( + ); + + $('#' + prefix + '-' + number).keydown( function (evt) { evt.stopImmediatePropagation(); } ); + } function addPoll(sub) { + if ($('#newpoll').length > 0) return; $('#forum-list-container').append( '<li id="newpoll" class="list-group-item">' + '<strong>Add a new poll</strong>' + '<form id="newpoll-form" class="form-horizontal">' + '<div class="form-group">' + - '<label for="newpoll-subject" class="col-sm-2 control-label">Subject</label>' + + '<label for="newpoll-subject" class="col-sm-2 control-label">Question</label>' + '<div class="col-sm-10">' + - '<input id="newpoll-subject" class="form-control" type="text" placeholder="Subject">' + + '<input id="newpoll-subject" class="form-control" type="text" placeholder="Required">' + '</div>' + '</div>' + + '<div id="newpoll-comment-group"></div>' + '<div class="form-group">' + '<label for="newpoll-answers" class="col-sm-2 control-label">Selection</label>' + '<div class="col-sm-10">' + @@ -197,14 +233,35 @@ function addPoll(sub) { '</label>' + '</div>' + '</div>' + + '<div class="form-group">' + + '<label for="newpoll-results" class="col-sm-2 control-label">Show results</label>' + + '<div class="col-sm-10">' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="0" checked> Voters' + + '</label>' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="1"> Everyone' + + '</label>' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="2"> Me Only (Until closed) ' + + '</label>' + + '<label class="radio-inline">' + + '<input type="radio" name="newpoll-results" value="3"> Me Only ' + + '</label>' + + '</div>' + + '</div>' + + '<div id="newpoll-answer-group"></div>' + '<div id="newpoll-button" class="form-group">' + '<div class="col-sm-offset-2 col-sm-10">' + '<button id="newpoll-submit" type="button" class="btn btn-primary" onclick="submitPoll(\'' + sub + '\')">' + 'Submit' + '</button>' + '<div class="pull-right">' + - '<button type="button" class="btn btn-success" onclick="addQuestion(\'#newpoll-button\')">' + - '<span class="glypicon glyphicon-plus"></span>' + + '<button type="button" title="Add another comment" class="btn btn-success" onclick="addPollField(\'comment\', \'#newpoll-comment-group\')">' + + '<span class="glyphicon glyphicon-pencil"></span>' + + '</button> ' + + '<button type="button" title="Add another answer" class="btn btn-success" onclick="addPollField(\'answer\', \'#newpoll-answer-group\')">' + + '<span class="glyphicon glyphicon-plus"></span>' + '</button> ' + '</div>' + '</div>' + @@ -212,7 +269,9 @@ function addPoll(sub) { '</form>' + '</li>' ); - addQuestion('#newpoll-button'); + addPollField('comment', '#newpoll-comment-group'); + addPollField('answer', '#newpoll-answer-group'); + addPollField('answer', '#newpoll-answer-group'); window.location.hash = '#newpoll'; }