forked from External/greenlight
		
	wait for moderator with action cable
This commit is contained in:
		@@ -14,4 +14,5 @@
 | 
			
		||||
//= require jquery-ui
 | 
			
		||||
//= require bootstrap-sprockets
 | 
			
		||||
//= require turbolinks
 | 
			
		||||
//= require_self
 | 
			
		||||
//= require_tree .
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								app/assets/javascripts/channels/moderator_joins.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								app/assets/javascripts/channels/moderator_joins.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
(function() {
 | 
			
		||||
 | 
			
		||||
  var initRooms = function() {
 | 
			
		||||
    App.messages = App.cable.subscriptions.create({
 | 
			
		||||
      channel: 'ModeratorJoinsChannel',
 | 
			
		||||
      username: window.location.pathname.split('/').pop()
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      received: function(data) {
 | 
			
		||||
        if (!Meeting.getInstance().getModJoined()) {
 | 
			
		||||
          Meeting.getInstance().setModJoined(true);
 | 
			
		||||
          if (Meeting.getInstance().getWaitingForMod()) {
 | 
			
		||||
            loopJoin();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  $(document).on("turbolinks:load", function() {
 | 
			
		||||
    if ($("body[data-controller=landing]").get(0)) {
 | 
			
		||||
      if ($("body[data-action=rooms]").get(0)) {
 | 
			
		||||
        initRooms();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
}).call(this);
 | 
			
		||||
@@ -1,21 +1,35 @@
 | 
			
		||||
(function() {
 | 
			
		||||
  var waitForModerator = function(url) {
 | 
			
		||||
    $.get(url + "/wait", function(html) {
 | 
			
		||||
      $(".center-panel-wrapper").html(html);
 | 
			
		||||
    });
 | 
			
		||||
    if (!Meeting.getInstance().getWaitingForMod()) {
 | 
			
		||||
      Meeting.getInstance().setWaitingForMod(true);
 | 
			
		||||
      if (Meeting.getInstance().getModJoined()) {
 | 
			
		||||
        loopJoin();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var init = function() {
 | 
			
		||||
 | 
			
		||||
    $('.meeting-join').click (function (event) {
 | 
			
		||||
      var url = $('.meeting-url').val();
 | 
			
		||||
      var name = $('.meeting-user-name').val();
 | 
			
		||||
      $.ajax({
 | 
			
		||||
        url : url + "/join?name=" + name,
 | 
			
		||||
        dataType : "json",
 | 
			
		||||
        type : 'GET',
 | 
			
		||||
        success : function(data) {
 | 
			
		||||
      Meeting.getInstance().setURL(url);
 | 
			
		||||
      Meeting.getInstance().setName(name);
 | 
			
		||||
      var jqxhr = Meeting.getInstance().getjoinMeetingURL();
 | 
			
		||||
 | 
			
		||||
      jqxhr.done(function(data) {
 | 
			
		||||
        if (data.messageKey === 'wait_for_moderator') {
 | 
			
		||||
          waitForModerator(url);
 | 
			
		||||
        } else {
 | 
			
		||||
          $(location).attr("href", data.response.join_url);
 | 
			
		||||
        },
 | 
			
		||||
        error : function(xhr, status, error) {
 | 
			
		||||
        },
 | 
			
		||||
        complete : function(xhr, status) {
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      jqxhr.fail(function(xhr, status, error) {
 | 
			
		||||
        console.info("meeting join failed");
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $('.meeting-url-copy').click (function (e) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								app/assets/javascripts/shared.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								app/assets/javascripts/shared.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
var meetingInstance = null;
 | 
			
		||||
class Meeting {
 | 
			
		||||
  constructor(url, name) {
 | 
			
		||||
    this.url = url;
 | 
			
		||||
    this.name = name;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static getInstance() {
 | 
			
		||||
    if (meetingInstance) {
 | 
			
		||||
      return meetingInstance;
 | 
			
		||||
    }
 | 
			
		||||
    var url = $('.meeting-url').val();
 | 
			
		||||
    var name = $('.meeting-user-name').val();
 | 
			
		||||
    meetingInstance = new Meeting(url, name);
 | 
			
		||||
    return meetingInstance;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getjoinMeetingURL() {
 | 
			
		||||
    return $.get(this.url + "/join?name=" + this.name, function() {
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  setURL(url) {
 | 
			
		||||
    this.url = url;
 | 
			
		||||
  }
 | 
			
		||||
  setName(name) {
 | 
			
		||||
    this.name = name;
 | 
			
		||||
  }
 | 
			
		||||
  setModJoined(modJoined) {
 | 
			
		||||
    this.modJoined = modJoined;
 | 
			
		||||
  }
 | 
			
		||||
  getModJoined() {
 | 
			
		||||
    return this.modJoined;
 | 
			
		||||
  }
 | 
			
		||||
  setWaitingForMod(wMod) {
 | 
			
		||||
    this.waitingForMod = wMod;
 | 
			
		||||
  }
 | 
			
		||||
  getWaitingForMod() {
 | 
			
		||||
    return this.waitingForMod;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var loopJoin = function() {
 | 
			
		||||
  var jqxhr = Meeting.getInstance().getjoinMeetingURL();
 | 
			
		||||
  jqxhr.done(function(data) {
 | 
			
		||||
    if (data.messageKey === 'wait_for_moderator') {
 | 
			
		||||
      setTimeout(loopJoin, 5000);
 | 
			
		||||
    } else {
 | 
			
		||||
      $(location).attr("href", data.response.join_url);
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
  jqxhr.fail(function(xhr, status, error) {
 | 
			
		||||
    console.info("meeting join failed");
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user