forked from External/greenlight
Merge pull request #34 from zach-chai/coffeescript_classes
coffeescript classes instead of es6
This commit is contained in:
commit
e5c31f81c2
|
@ -0,0 +1,62 @@
|
||||||
|
# Meeting class
|
||||||
|
|
||||||
|
_meetingInstance = null
|
||||||
|
|
||||||
|
class @Meeting
|
||||||
|
constructor: (@id, @url, @name) ->
|
||||||
|
|
||||||
|
# Gets the current instance or creates a new one
|
||||||
|
@getInstance: ->
|
||||||
|
if _meetingInstance
|
||||||
|
return _meetingInstance
|
||||||
|
id = $(".page-wrapper.rooms").data('room')
|
||||||
|
url = @buildURL()
|
||||||
|
name = $('.meeting-user-name').val()
|
||||||
|
_meetingInstance = new Meeting(id, url, name)
|
||||||
|
return _meetingInstance
|
||||||
|
|
||||||
|
@buildURL: ->
|
||||||
|
return location.protocol +
|
||||||
|
'//' +
|
||||||
|
location.hostname +
|
||||||
|
'/rooms/' +
|
||||||
|
$('.rooms').data('room')
|
||||||
|
|
||||||
|
# Sends the end meeting request
|
||||||
|
# Returns a response object
|
||||||
|
endMeeting: ->
|
||||||
|
return $.ajax({
|
||||||
|
url: @url + "/end",
|
||||||
|
type: 'DELETE'
|
||||||
|
})
|
||||||
|
|
||||||
|
# Makes a call to get the join meeting url
|
||||||
|
# Returns a response object
|
||||||
|
# The response object contains the URL to join the meeting
|
||||||
|
getJoinMeetingResponse: ->
|
||||||
|
return $.get @url + "/join?name=" + @name, ->
|
||||||
|
|
||||||
|
|
||||||
|
getId: ->
|
||||||
|
return @id
|
||||||
|
|
||||||
|
getURL: ->
|
||||||
|
return @url
|
||||||
|
|
||||||
|
getName: ->
|
||||||
|
return @name
|
||||||
|
|
||||||
|
setName: (name) ->
|
||||||
|
@name = name
|
||||||
|
|
||||||
|
getModJoined: ->
|
||||||
|
return @modJoined
|
||||||
|
|
||||||
|
setModJoined: (modJoined) ->
|
||||||
|
@modJoined = modJoined
|
||||||
|
|
||||||
|
getWaitingForMod: ->
|
||||||
|
return @waitingForMod
|
||||||
|
|
||||||
|
setWaitingForMod: (wMod) ->
|
||||||
|
@waitingForMod = wMod
|
|
@ -1,80 +0,0 @@
|
||||||
// Meeting class
|
|
||||||
|
|
||||||
var _meetingInstance = null;
|
|
||||||
|
|
||||||
class Meeting {
|
|
||||||
constructor(id, url, name) {
|
|
||||||
this.id = id;
|
|
||||||
this.url = url;
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets the current instance or creates a new one
|
|
||||||
static getInstance() {
|
|
||||||
if (_meetingInstance) {
|
|
||||||
return _meetingInstance;
|
|
||||||
}
|
|
||||||
var id = $(".page-wrapper.rooms").data('room');
|
|
||||||
var url = Meeting.buildURL();
|
|
||||||
var name = $('.meeting-user-name').val();
|
|
||||||
_meetingInstance = new Meeting(id, url, name);
|
|
||||||
return _meetingInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
static buildURL() {
|
|
||||||
return location.protocol +
|
|
||||||
'//' +
|
|
||||||
location.hostname +
|
|
||||||
'/rooms/' +
|
|
||||||
$('.rooms').data('room');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sends the end meeting request
|
|
||||||
// Returns a response object
|
|
||||||
endMeeting() {
|
|
||||||
return $.ajax({
|
|
||||||
url: this.url + "/end",
|
|
||||||
type: 'DELETE'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Makes a call to get the join meeting url
|
|
||||||
// Returns a response object
|
|
||||||
// The response object contains the URL to join the meeting
|
|
||||||
getJoinMeetingResponse() {
|
|
||||||
return $.get(this.url + "/join?name=" + this.name, function() {
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
getId() {
|
|
||||||
return this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
getURL() {
|
|
||||||
return this.url;
|
|
||||||
}
|
|
||||||
|
|
||||||
getName() {
|
|
||||||
return this.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
setName(name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
getModJoined() {
|
|
||||||
return this.modJoined;
|
|
||||||
}
|
|
||||||
|
|
||||||
setModJoined(modJoined) {
|
|
||||||
this.modJoined = modJoined;
|
|
||||||
}
|
|
||||||
|
|
||||||
getWaitingForMod() {
|
|
||||||
return this.waitingForMod;
|
|
||||||
}
|
|
||||||
|
|
||||||
setWaitingForMod(wMod) {
|
|
||||||
this.waitingForMod = wMod;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,137 @@
|
||||||
|
# Recordings class
|
||||||
|
|
||||||
|
_recordingsInstance = null
|
||||||
|
|
||||||
|
class @Recordings
|
||||||
|
constructor: ->
|
||||||
|
# configure the datatable for recordings
|
||||||
|
this.table = $('#recordings').dataTable({
|
||||||
|
data: [],
|
||||||
|
rowId: 'id',
|
||||||
|
paging: false,
|
||||||
|
searching: false,
|
||||||
|
info: false,
|
||||||
|
order: [[ 0, "desc" ]],
|
||||||
|
language: {
|
||||||
|
emptyTable: " "
|
||||||
|
},
|
||||||
|
columns: [
|
||||||
|
{ data: "start_time" },
|
||||||
|
{ data: "previews" },
|
||||||
|
{ data: "duration" },
|
||||||
|
{ data: "playbacks" },
|
||||||
|
{ data: "id" }
|
||||||
|
],
|
||||||
|
columnDefs: [
|
||||||
|
{
|
||||||
|
targets: 0,
|
||||||
|
render: (data, type, row) ->
|
||||||
|
if type == 'display'
|
||||||
|
return new Date(data)
|
||||||
|
.toLocaleString($('html').attr('lang'),
|
||||||
|
{month: 'long', day: 'numeric', year: 'numeric',
|
||||||
|
hour12: 'true', hour: '2-digit', minute: '2-digit'})
|
||||||
|
return data
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 1,
|
||||||
|
render: (data, type, row) ->
|
||||||
|
if type == 'display'
|
||||||
|
str = ''
|
||||||
|
for d in data
|
||||||
|
str += '<img height="50" width="50" src="'+d.url+'" alt="'+d.alt+'"></img> '
|
||||||
|
return str
|
||||||
|
return data
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 3,
|
||||||
|
render: (data, type, row) ->
|
||||||
|
if type == 'display'
|
||||||
|
str = ''
|
||||||
|
if row.published
|
||||||
|
for d in data
|
||||||
|
str += '<a href="'+d.url+'">'+d.type+'</a> '
|
||||||
|
return str
|
||||||
|
return data
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: -1,
|
||||||
|
render: (data, type, row) ->
|
||||||
|
if type == 'display'
|
||||||
|
roomName = Meeting.getInstance().getId()
|
||||||
|
published = row.published
|
||||||
|
eye = getPublishClass(published)
|
||||||
|
return '<button type="button" class="btn btn-default recording-update" data-published="'+published+'">' +
|
||||||
|
'<i class="fa '+eye+'" aria-hidden="true"></i></button> ' +
|
||||||
|
'<a tabindex="0" role="button" class="btn btn-default has-popover"' +
|
||||||
|
'data-toggle="popover" data-placement="top">' +
|
||||||
|
'<i class="fa fa-trash-o" aria-hidden="true"></i>' +
|
||||||
|
'</a>'
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
# Gets the current instance or creates a new one
|
||||||
|
@getInstance: ->
|
||||||
|
if _recordingsInstance && Recordings.initialized()
|
||||||
|
return _recordingsInstance
|
||||||
|
_recordingsInstance = new Recordings()
|
||||||
|
return _recordingsInstance
|
||||||
|
|
||||||
|
@initialize: ->
|
||||||
|
Recordings.getInstance()
|
||||||
|
|
||||||
|
@initialized: ->
|
||||||
|
return $.fn.DataTable.isDataTable('#recordings') && _recordingsInstance
|
||||||
|
|
||||||
|
# refresh the recordings from the server
|
||||||
|
refresh: ->
|
||||||
|
_this = this
|
||||||
|
table_api = this.table.api()
|
||||||
|
$.get "/rooms/"+Meeting.getInstance().getId()+"/recordings", (data) ->
|
||||||
|
if !data.is_owner
|
||||||
|
table_api.column(-1).visible(false)
|
||||||
|
for recording in data.recordings
|
||||||
|
totalMinutes = Math.round((new Date(recording.end_time) - new Date(recording.start_time)) / 1000 / 60)
|
||||||
|
recording.duration = totalMinutes
|
||||||
|
data.recordings.sort (a,b) ->
|
||||||
|
return new Date(b.start_time) - new Date(a.start_time)
|
||||||
|
table_api.clear()
|
||||||
|
table_api.rows.add(data.recordings)
|
||||||
|
table_api.columns.adjust().draw()
|
||||||
|
|
||||||
|
# setup click handlers for the action buttons
|
||||||
|
setupActionHandlers: ->
|
||||||
|
table_api = this.table.api()
|
||||||
|
this.table.on 'click', '.recording-update', (event) ->
|
||||||
|
btn = $(this)
|
||||||
|
row = table_api.row($(this).closest('tr')).data()
|
||||||
|
url = $('.meeting-url').val()
|
||||||
|
id = row.id
|
||||||
|
published = btn.data('published')
|
||||||
|
btn.prop('disabled', true)
|
||||||
|
$.ajax({
|
||||||
|
method: 'PATCH',
|
||||||
|
url: url+'/recordings/'+id,
|
||||||
|
data: {published: (!published).toString()}
|
||||||
|
}).done((data) ->
|
||||||
|
|
||||||
|
).fail((data) ->
|
||||||
|
btn.prop('disabled', false)
|
||||||
|
)
|
||||||
|
|
||||||
|
this.table.on 'click', '.recording-delete', (event) ->
|
||||||
|
btn = $(this)
|
||||||
|
row = table_api.row($(this).closest('tr')).data()
|
||||||
|
url = $('.meeting-url').val()
|
||||||
|
id = row.id
|
||||||
|
btn.prop('disabled', true)
|
||||||
|
$.ajax({
|
||||||
|
method: 'DELETE',
|
||||||
|
url: url+'/recordings/'+id
|
||||||
|
}).done((data) ->
|
||||||
|
|
||||||
|
).fail((data) ->
|
||||||
|
btn.prop('disabled', false)
|
||||||
|
)
|
|
@ -1,163 +0,0 @@
|
||||||
// Recordings class
|
|
||||||
|
|
||||||
var _recordingsInstance = null;
|
|
||||||
|
|
||||||
class Recordings {
|
|
||||||
constructor() {
|
|
||||||
// configure the datatable for recordings
|
|
||||||
this.table = $('#recordings').dataTable({
|
|
||||||
data: [],
|
|
||||||
rowId: 'id',
|
|
||||||
paging: false,
|
|
||||||
searching: false,
|
|
||||||
info: false,
|
|
||||||
order: [[ 0, "desc" ]],
|
|
||||||
language: {
|
|
||||||
emptyTable: " "
|
|
||||||
},
|
|
||||||
columns: [
|
|
||||||
{ data: "start_time" },
|
|
||||||
{ data: "previews" },
|
|
||||||
{ data: "duration" },
|
|
||||||
{ data: "playbacks" },
|
|
||||||
{ data: "id" }
|
|
||||||
],
|
|
||||||
columnDefs: [
|
|
||||||
{
|
|
||||||
targets: 0,
|
|
||||||
render: function(data, type, row) {
|
|
||||||
if (type === 'display') {
|
|
||||||
return new Date(data)
|
|
||||||
.toLocaleString($('html').attr('lang'),
|
|
||||||
{month: 'long', day: 'numeric', year: 'numeric',
|
|
||||||
hour12: 'true', hour: '2-digit', minute: '2-digit'});
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
targets: 1,
|
|
||||||
render: function(data, type, row) {
|
|
||||||
if (type === 'display') {
|
|
||||||
var str = '';
|
|
||||||
for(let i in data) {
|
|
||||||
str += '<img height="50" width="50" src="'+data[i].url+'" alt="'+data[i].alt+'"></img> ';
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
targets: 3,
|
|
||||||
render: function(data, type, row) {
|
|
||||||
if (type === 'display') {
|
|
||||||
var str = '';
|
|
||||||
if (row.published) {
|
|
||||||
for(let i in data) {
|
|
||||||
str += '<a href="'+data[i].url+'">'+data[i].type+'</a> ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
targets: -1,
|
|
||||||
render: function(data, type, row) {
|
|
||||||
if (type === 'display') {
|
|
||||||
var roomName = Meeting.getInstance().getId();
|
|
||||||
var published = row.published;
|
|
||||||
var eye = getPublishClass(published);
|
|
||||||
return '<button type="button" class="btn btn-default recording-update" data-published="'+published+'">' +
|
|
||||||
'<i class="fa '+eye+'" aria-hidden="true"></i></button> ' +
|
|
||||||
'<a tabindex="0" role="button" class="btn btn-default has-popover"' +
|
|
||||||
'data-toggle="popover" data-placement="top">' +
|
|
||||||
'<i class="fa fa-trash-o" aria-hidden="true"></i>' +
|
|
||||||
'</a>';
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets the current instance or creates a new one
|
|
||||||
static getInstance() {
|
|
||||||
if (_recordingsInstance && Recordings.initialized()) {
|
|
||||||
return _recordingsInstance;
|
|
||||||
}
|
|
||||||
_recordingsInstance = new Recordings();
|
|
||||||
return _recordingsInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
static initialize() {
|
|
||||||
Recordings.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
static initialized() {
|
|
||||||
return $.fn.DataTable.isDataTable('#recordings') && _recordingsInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
// refresh the recordings from the server
|
|
||||||
refresh() {
|
|
||||||
var _this = this;
|
|
||||||
var table_api = this.table.api();
|
|
||||||
$.get("/rooms/"+Meeting.getInstance().getId()+"/recordings", function(data) {
|
|
||||||
if (!data.is_owner) {
|
|
||||||
table_api.column(-1).visible(false);
|
|
||||||
}
|
|
||||||
var i;
|
|
||||||
for (i = 0; i < data.recordings.length; i++) {
|
|
||||||
var totalMinutes = Math.round((new Date(data.recordings[i].end_time) - new Date(data.recordings[i].start_time)) / 1000 / 60);
|
|
||||||
data.recordings[i].duration = totalMinutes;
|
|
||||||
}
|
|
||||||
data.recordings.sort(function(a,b) {
|
|
||||||
return new Date(b.start_time) - new Date(a.start_time);
|
|
||||||
});
|
|
||||||
table_api.clear();
|
|
||||||
table_api.rows.add(data.recordings);
|
|
||||||
table_api.columns.adjust().draw();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// setup click handlers for the action buttons
|
|
||||||
setupActionHandlers() {
|
|
||||||
var table_api = this.table.api();
|
|
||||||
this.table.on('click', '.recording-update', function(event) {
|
|
||||||
var btn = $(this);
|
|
||||||
var row = table_api.row($(this).closest('tr')).data();
|
|
||||||
var url = $('.meeting-url').val();
|
|
||||||
var id = row.id;
|
|
||||||
var published = btn.data('published');
|
|
||||||
btn.prop('disabled', true);
|
|
||||||
$.ajax({
|
|
||||||
method: 'PATCH',
|
|
||||||
url: url+'/recordings/'+id,
|
|
||||||
data: {published: (!published).toString()}
|
|
||||||
}).done(function(data) {
|
|
||||||
|
|
||||||
}).fail(function(data) {
|
|
||||||
btn.prop('disabled', false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.table.on('click', '.recording-delete', function(event) {
|
|
||||||
var btn = $(this);
|
|
||||||
var row = table_api.row($(this).closest('tr')).data();
|
|
||||||
var url = $('.meeting-url').val();
|
|
||||||
var id = row.id;
|
|
||||||
btn.prop('disabled', true);
|
|
||||||
$.ajax({
|
|
||||||
method: 'DELETE',
|
|
||||||
url: url+'/recordings/'+id
|
|
||||||
}).done(function() {
|
|
||||||
|
|
||||||
}).fail(function(data) {
|
|
||||||
btn.prop('disabled', false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue