Merge pull request #34 from zach-chai/coffeescript_classes

coffeescript classes instead of es6
This commit is contained in:
Zachary Chai 2016-11-14 17:35:28 -05:00 committed by GitHub
commit e5c31f81c2
4 changed files with 199 additions and 243 deletions

View File

@ -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

View File

@ -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;
}
}

View File

@ -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)
)

View File

@ -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);
});
});
}
}