From de20200b5a3cde7bf373f4e06af300756c3a34d4 Mon Sep 17 00:00:00 2001 From: Josh Date: Wed, 7 Jun 2017 11:46:01 -0400 Subject: [PATCH] move active meeting js to it's own file --- app/assets/javascripts/active_meetings.js | 117 +++++++++++++++++ app/views/landing/_previously_joined.html.erb | 121 +----------------- config/initializers/assets.rb | 1 + 3 files changed, 119 insertions(+), 120 deletions(-) create mode 100644 app/assets/javascripts/active_meetings.js diff --git a/app/assets/javascripts/active_meetings.js b/app/assets/javascripts/active_meetings.js new file mode 100644 index 00000000..ac656fe7 --- /dev/null +++ b/app/assets/javascripts/active_meetings.js @@ -0,0 +1,117 @@ + +MEETINGS = {} + +// Only need to register for logged in users. +if($('body').data('current-user')){ + App.messages = App.cable.subscriptions.create('RefreshMeetingsChannel', { + received: function(data) { + console.log(data) + if(isPreviouslyJoined(data['meeting'])){ + if(data['method'] == 'create'){ + + // Create an empty meeting. + MEETINGS[data['meeting']] = {'name': data['meeting'], + 'participants': 0, + 'moderators': 0} + + renderActiveMeeting(MEETINGS[data['meeting']]) + } else if(data['method'] == 'destroy'){ + removeActiveMeeting(MEETINGS[data['meeting']]) + delete MEETINGS[data['meeting']] + } else if(data['method'] == 'join'){ + handleUser(data, 1) + updateMeetingText(MEETINGS[data['meeting']]) + } else if(data['method'] == 'leave'){ + handleUser(data, -1) + } + } + } + }); +} + +handleUser = function(data, n){ + if(data['role'] == 'MODERATOR'){ + MEETINGS[data['meeting']]['moderators'] += n + } else { + MEETINGS[data['meeting']]['participants'] += n + } + updateMeetingText(MEETINGS[data['meeting']]) +} + +updateMeetingText = function(meeting){ + $('#' + meeting['name']).html('' + meeting['name'] + ' (' + + meeting['participants'] + ((meeting['participants'] == 1) ? ' user, ' : ' users, ') + + meeting['moderators'] + ((meeting['moderators'] == 1) ? ' mod)' : ' mods)')) +} + +initialPopulate = function(){ + $.get(window.location.origin + '/rooms/' + $('body').data('current-user') + '/request', function(data){ + meetings = data['meetings'] + for(var i = 0; i < meetings.length; i++){ + name = meetings[i]['meetingName'] + participants = parseInt(meetings[i]['participantCount']) + moderators = parseInt(meetings[i]['moderatorCount']) + // Create meeting. + MEETINGS[name] = {'name': name, + 'participants': participants - moderators, + 'moderators': moderators} + if(isPreviouslyJoined(name)){ + renderActiveMeeting(MEETINGS[name]) + // remove it. + } + } + }); +} + +isPreviouslyJoined = function(meeting){ + joinedMeetings = localStorage.getItem('joinedRooms-' + $('body').data('current-user')).split(','); + return joinedMeetings.indexOf(meeting) >= 0 +} + +renderActiveMeeting = function(m){ + var meeting_item = $('
  • ' + m['name'] + '' + + ' (' + m['participants'] + ' users, ' + m['moderators'] + ' mods)' + '
  • ') + $('.actives').append(meeting_item); + + // Set up join on click. + meeting_item.click(function(){ + joinMeeting(name); + }); +} + +removeActiveMeeting = function(meeting){ + $('#' + meeting['name']).remove() + //$(".actives:contains('" + meeting['name'] + "')").remove() +} + +// Directly join a meeting from active meetings. +joinMeeting = function(meeting_name){ + var name = $('.meeting-user-name').val(); + Meeting.getInstance().setUserName(localStorage.getItem('lastJoinedName')); + Meeting.getInstance().setMeetingId(meeting_name); + + // a user name is set, join the user into the session + if (name !== undefined && name !== null) { + var jqxhr = Meeting.getInstance().getJoinMeetingResponse(); + if (jqxhr) { + jqxhr.done(function(data) { + if (data.messageKey === 'wait_for_moderator') { + waitForModerator(Meeting.getInstance().getURL()); + } else { + $(location).attr("href", data.response.join_url); + } + }); + jqxhr.fail(function(xhr, status, error) { + console.info("meeting join failed"); + }); + } else { + $('.meeting-user-name').parent().addClass('has-error'); + } + + // if not user name was set it means we must ask for a name + } else { + $(location).attr("href", Meeting.getInstance().getURL()); + } +} + +if($('body').data('current-user')){ console.log('Populating active meetings.'); initialPopulate() } diff --git a/app/views/landing/_previously_joined.html.erb b/app/views/landing/_previously_joined.html.erb index 67cd04d0..c9c6c2c0 100644 --- a/app/views/landing/_previously_joined.html.erb +++ b/app/views/landing/_previously_joined.html.erb @@ -32,123 +32,4 @@ <% end %> - +<%= javascript_include_tag "active_meetings.js" %> diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index e56f0bfe..b434024f 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -9,3 +9,4 @@ Rails.application.config.assets.version = '1.0' # Precompile additional assets. # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. Rails.application.config.assets.precompile += %w( fa/gl-fa.css ) +Rails.application.config.assets.precompile += %w( active_meetings.js )