improvements to active meetings

This commit is contained in:
Josh
2017-07-04 11:52:35 -04:00
parent 44e2cb7027
commit 27f6076954
8 changed files with 162 additions and 39 deletions

View File

@ -18,6 +18,7 @@
// the landing page using custom Actioncable events.
var MEETINGS = {}
var WAITING = {}
var LOADING_DELAY = 1750 // milliseconds.
var updatePreviousMeetings = function(){
@ -29,19 +30,44 @@ var updatePreviousMeetings = function(){
});
}
var handleUser = function(data, n){
var addUser = function(data){
if(data['role'] == 'MODERATOR'){
MEETINGS[data['meeting']]['moderators'] += n
MEETINGS[data['meeting']]['moderators'].push(data['user'])
} else {
MEETINGS[data['meeting']]['participants'] += n
MEETINGS[data['meeting']]['participants'].push(data['user'])
}
updateMeetingText(MEETINGS[data['meeting']])
}
var updateMeetingText = function(meeting){
$('#' + meeting['name'].replace(' ', '_')).html('<a>' + meeting['name'] + '</a> <i>(' +
meeting['participants'] + ((meeting['participants'] == 1) ? ' user, ' : ' users, ') +
meeting['moderators'] + ((meeting['moderators'] == 1) ? ' mod)' : ' mods)'))
var removeUser = function(data){
if(data['role'] == 'MODERATOR'){
MEETINGS[data['meeting']]['moderators'].splice(MEETINGS[data['meeting']]['moderators'].indexOf(data['user']), 1);
} else {
MEETINGS[data['meeting']]['participants'].splice(MEETINGS[data['meeting']]['participants'].indexOf(data['user']), 1);
}
updateMeetingText(MEETINGS[data['meeting']])
}
var updateMeetingText = function(m){
if(m.hasOwnProperty('moderators')){
var body = '<a>' + m['name'] + '</a><i>: ' + m['moderators'].join('(mod), ') + (m['moderators'].length > 0 ? '(mod)' : '') +
(m['participants'].length > 0 && m['moderators'].length != 0 ? ', ' : '') + m['participants'].join(', ') + '</i>'
} else {
var body = '<a>' + m['name'] + '</a><i> (not yet started): ' +
m['users'].join(', ') + '</i>'
}
if($('#' + m['name'].replace(' ', '_')).length == 0){
var meeting_item = $('<li id = ' + m['name'].replace(' ', '_') + '>' + body + '</li>')
$('.actives').append(meeting_item);
// Set up join on click.
meeting_item.click(function(){
joinMeeting(m['name']);
});
} else {
$('#' + m['name'].replace(' ', '_')).html(body)
}
}
var initialPopulate = function(){
@ -49,21 +75,48 @@ var initialPopulate = function(){
var chopped = window.location.href.split('/')
if (!window.location.href.includes('rooms') || chopped[chopped.length - 2] == $('body').data('current-user')) { return; }
$.get((window.location.href + '/request').replace('#', ''), function(data){
var meetings = data['meetings']
var meetings = data['active']['meetings']
var waiting = data['waiting']
jQuery.each(waiting[$('body').data('current-user')], function(name, users){
WAITING[name] = {'name': name,
'users': users}
updateMeetingText(WAITING[name])
});
for(var i = 0; i < meetings.length; i++){
// Make sure the meeting actually belongs to the current user.
if(meetings[i]['metadata']['room-id'] != $('body').data('current-user')) { continue; }
var name = meetings[i]['meetingName']
var participants = parseInt(meetings[i]['participantCount'])
var moderators = parseInt(meetings[i]['moderatorCount'])
var participants = []
var moderators = []
var attendees;
if(meetings[i]['attendees']['attendee'] instanceof Array){
attendees = meetings[i]['attendees']['attendee']
} else {
attendees = [meetings[i]['attendees']['attendee']]
}
jQuery.each(attendees, function(i, attendee){
if(attendee['role'] == "MODERATOR"){
moderators.push(attendee['fullName'])
} else {
participants.push(attendee['fullName'])
}
});
// Create meeting.
MEETINGS[name] = {'name': name,
'participants': participants - moderators,
'participants': participants,
'moderators': moderators}
if(isPreviouslyJoined(name)){
renderActiveMeeting(MEETINGS[name])
updateMeetingText(MEETINGS[name])
}
}
}).done(function(){
// Remove from previous meetings if they are active.
updatePreviousMeetings();
@ -81,18 +134,6 @@ var isPreviouslyJoined = function(meeting){
return joinedMeetings.split(',').indexOf(meeting) >= 0
}
var renderActiveMeeting = function(m){
var meeting_item = $('<li id = ' + m['name'].replace(' ', '_') + '><a>' + m['name'] + '</a>' +
' <i>(' + m['participants'] + ((m['participants'] == 1) ? ' user, ' : ' users, ') +
m['moderators'] + ((m['moderators'] == 1) ? ' mod)' : ' mods)') + '</i>' + '</li>')
$('.actives').append(meeting_item);
// Set up join on click.
meeting_item.click(function(){
joinMeeting(m['name']);
});
}
var removeActiveMeeting = function(meeting){
if(meeting){
$('#' + meeting['name'].replace(' ', '_')).remove()
@ -137,20 +178,36 @@ $(document).on('turbolinks:load', function(){
if(data['method'] == 'create'){
// Create an empty meeting.
MEETINGS[data['meeting']] = {'name': data['meeting'],
'participants': 0,
'moderators': 0}
renderActiveMeeting(MEETINGS[data['meeting']])
'participants': [],
'moderators': []}
updateMeetingText(MEETINGS[data['meeting']])
updatePreviousMeetings();
if (WAITING.hasOwnProperty(data['meeting'])){ delete WAITING[data['meeting']]; }
} else if(data['method'] == 'destroy'){
removeActiveMeeting(MEETINGS[data['meeting']])
PreviousMeetings.uniqueAdd([data['meeting']])
delete MEETINGS[data['meeting']]
} else if(data['method'] == 'join'){
handleUser(data, 1)
updateMeetingText(MEETINGS[data['meeting']])
addUser(data)
} else if(data['method'] == 'leave'){
handleUser(data, -1)
removeUser(data)
} else if(data['method'] == 'waiting'){
// Handle waiting meeting.
if(WAITING.hasOwnProperty(data['meeting'])){
WAITING[data['meeting']]['users'].push(data['user'])
updateMeetingText(WAITING[data['meeting']])
} else {
WAITING[data['meeting']] = {'name': data['meeting'],
'users': [data['user']]}
updateMeetingText(WAITING[data['meeting']])
}
} else if((data['method'] == 'no_longer_waiting') && (WAITING.hasOwnProperty(data['meeting']))){
WAITING[data['meeting']]['users'].splice(WAITING[data['meeting']]['users'].indexOf(data['user']), 1)
updateMeetingText(WAITING[data['meeting']])
if(WAITING[data['meeting']]['users'].length == 0){
removeActiveMeeting(WAITING[data['meeting']])
delete WAITING[data['meeting']]
}
}
}
}

View File

@ -17,7 +17,8 @@
(function() {
var waitForModerator = function(url) {
$.get(url + "/wait", function(html) {
localStorage.setItem("waitingName", $('.meeting-user-name').val());
$.post(url + "/wait", {name: $('.meeting-user-name').val()}, function(html) {
$(".center-panel-wrapper").html(html);
});
if (!Meeting.getInstance().getWaitingForMod()) {