Index: lams_learning/web/includes/javascript/kumalive.js =================================================================== diff -u -ra6756ff12e2b1eaa3c06a2456c87daea872397f2 -r00c630a99ddb827c772bd0fc0d8d903cc0079f7e --- lams_learning/web/includes/javascript/kumalive.js (.../kumalive.js) (revision a6756ff12e2b1eaa3c06a2456c87daea872397f2) +++ lams_learning/web/includes/javascript/kumalive.js (.../kumalive.js) (revision 00c630a99ddb827c772bd0fc0d8d903cc0079f7e) @@ -191,6 +191,7 @@ } else { $('#raiseHandButton').click(raiseHand); $('#downHandButton').click(downHand); + $('#pollRunVoteButton').click(votePoll); } // set dialog name @@ -344,41 +345,24 @@ // init poll fields or make them read only after voting if (poll.id != pollId || (poll.finished && $('#pollRunVoteButton').is(':visible'))) { - pollId = poll.id; - $('#pollRun button').hide(); - $('#pollRunQuestion').text(poll.name); - var radioList = $('#pollRunAnswerRadios').empty(), - answerList = $('#pollRunAnswerList').empty(); - // teachers can't vote; learner can't vote twice; learner can't vote for finished poll - if (roleTeacher || poll.voted || poll.finished) { - // build simple list of answers - $.each(poll.answers, function(index, answer){ - var answerElement = $('
  • ').addClass('list-group-item').text(pollAnswerBullets[index] + ') ' + answer) - .appendTo(answerList); - if (poll.votes) { - // show votes if user is teacher or votes were released - $('').addClass('badge').text(poll.votes[index]).appendTo(answerElement); - } - }); - $('#pollRunAnswerList').show(); - // extra options for teacher - if (roleTeacher) { - if (poll.finished) { - $('#pollRunCloseButton').show(); - } else { - $('#pollRunFinishButton').show(); - } + initPoll(poll); + } + if (poll.votes) { + // show votes if user is teacher or votes were released + $.each(poll.votes, function(index, count) { + var answerElement = $('#pollAnswer' + index), + badge = $('.badge', answerElement); + // missing badge means that votes were made available just now + if (badge.length === 0) { + badge = $('').addClass('badge').appendTo(answerElement); } - } else { - // learner can vote, build radio buttons - $.each(poll.answers, function(index, answer){ - $('#pollRunAnswerRadioTemplate').clone().attr('id', null).appendTo(radioList) - .find('label').append($('').text(pollAnswerBullets[index] + ') ' + answer)) - .find('input').val(index); - }); - $('#pollRunVoteButton').show(); - } + badge.text(count); + }); } + if (poll.voted != null) { + // highlight the answer user voted for + $('#pollAnswer' + poll.voted).addClass('active'); + } } /** @@ -708,6 +692,49 @@ } /** + * Create poll widgets: answer list, radio buttons etc. + */ +function initPoll(poll) { + pollId = poll.id; + $('#pollRun button').hide(); + $('#pollRunQuestion').text(poll.name); + var radioList = $('#pollRunAnswerRadios').empty(), + answerList = $('#pollRunAnswerList').empty(); + + // teachers can't vote; learner can't vote twice; learner can't vote for finished poll + if (roleTeacher || (poll.voted != null) || poll.finished) { + // build simple list of answers + $.each(poll.answers, function(index, answer){ + var answerElement = $('
  • ').addClass('list-group-item').attr('id', 'pollAnswer' + index) + .text(pollAnswerBullets[index] + ') ' + answer) + .appendTo(answerList); + if (poll.votes) { + // show votes if user is teacher or votes were released + $('').addClass('badge').text(poll.votes[index]).appendTo(answerElement); + } + }); + $('#pollRunAnswerList').show(); + // extra options for teacher + + if (roleTeacher) { + if (poll.finished) { + $('#pollRunCloseButton').show(); + } else { + $('#pollRunFinishButton').show(); + } + } + } else { + // learner can vote, build radio buttons + $.each(poll.answers, function(index, answer){ + $('#pollRunAnswerRadioTemplate').clone().attr('id', null).appendTo(radioList) + .find('label').append($('').text(pollAnswerBullets[index] + ') ' + answer)) + .find('input').val(index); + }); + $('#pollRunVoteButton').show(); + } +} + +/** * Create a poll with parameters set up in form */ function startPoll(){ @@ -794,6 +821,21 @@ } /** + * Send vote to the server + */ +function votePoll() { + var checkedAnswer = $('#pollRunAnswerRadios input[name="pollAnswer"]:checked'); + if (checkedAnswer.length !== 1) { + return; + } + pollId = null; + kumaliveWebsocket.send(JSON.stringify({ + 'type' : 'votePoll', + 'answerIndex' : checkedAnswer.val() + })); +} + +/** * Prevent learners from voting */ function finishPoll() {