forked from External/greenlight
improvements to active meetings
This commit is contained in:
@ -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']]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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()) {
|
||||
|
Reference in New Issue
Block a user