Added footer buttons

This commit is contained in:
Pierre HUBERT 2019-01-26 09:52:40 +01:00
parent b62fefc258
commit b8865b96f0
2 changed files with 181 additions and 1 deletions

View File

@ -14,6 +14,7 @@
border: 1px black solid; border: 1px black solid;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background-color: #000000b3;
} }
.call.window.body { .call.window.body {
@ -47,7 +48,7 @@
*/ */
.loading-message-container { .loading-message-container {
position: absolute; position: absolute;
min-height: 110px; min-height: 112px;
width: 100%; width: 100%;
display: flex; display: flex;
background: 1px #0009; background: 1px #0009;
@ -70,4 +71,41 @@
.call-window .streams-target video { .call-window .streams-target video {
width: 149px; width: 149px;
}
/**
* Footer
*/
.call-window .call-footer {
height: 40px;
display: flex;
justify-content: space-around;
align-items: center;
}
.call-window .call-footer .call-option-button {
color: #fff6;
flex: 1;
text-align: center;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.call-window .call-footer .call-option-button.selected {
color: white;
}
.call-window .call-footer .call-option-button:hover {
background-color: #ffffff4d;
}
.call-window .call-footer .call-option-button:active {
background-color: #fff3;
}
.call-window .call-footer .call-option-button.hang-up-button {
color: #dd4b39;
} }

View File

@ -32,6 +32,11 @@ ComunicWeb.components.calls.callWindow = {
window: {}, window: {},
streams: {}, streams: {},
/**
* @type {MediaStream}
*/
localStream: undefined,
/** /**
* @type {SignalExchangerClient} * @type {SignalExchangerClient}
*/ */
@ -44,6 +49,7 @@ ComunicWeb.components.calls.callWindow = {
* Initialize utilities * Initialize utilities
*/ */
/** /**
* Get member information based on call ID * Get member information based on call ID
* *
@ -62,6 +68,56 @@ ComunicWeb.components.calls.callWindow = {
return memberInfo; return memberInfo;
} }
/**
* Check out whether local stream audio is enabled or not
*
* @return {Boolean} TRUE if local stream is enabled / FALSE else
*/
call.isLocalAudioEnabled = function(){
//Default behaviour : local stream not enabled
if(!call.localStream)
return true;
return call.localStream.getAudioTracks()[0].enabled;
}
/**
* Set audio mute status of local stream
*
* @param {Boolean} enabled New enabled status
*/
call.setLocalAudioEnabled = function(enabled){
if(call.localStream)
call.localStream.getAudioTracks()[0].enabled = enabled;
}
/**
* Check if the local video is enabled or not
*
* @return {Boolean} TRUE to mute video / FALSE else
*/
call.isLocalVideoEnabled = function(){
//Default behaviour : video not enabled
if(!call.localStream)
return true;
return call.localStream.getVideoTracks()[0].enabled;
}
/**
* Update mute status of local video stream
*
* @param {Boolean} enabled New mute status
*/
call.setLocalVideoEnabled = function(enabled){
if(call.localStream)
call.localStream.getVideoTracks()[0].enabled = enabled;
}
/** /**
@ -147,6 +203,10 @@ ComunicWeb.components.calls.callWindow = {
}); });
/** /**
* Create loading message area * Create loading message area
*/ */
@ -187,6 +247,88 @@ ComunicWeb.components.calls.callWindow = {
//Call footer
call.window.footer = createElem2({
appendTo: callContainer,
type: "div",
class: "call-footer"
});
/**
* This function is used to toggle selection state
* of one of the call toolbar button
*
* @param {HTMLElement} btn Target button
* @param {Boolean} selected Selection state of the button
*/
var togglButtonSelectedStatus = function(btn, selected){
if(!selected){
while(btn.className.includes(" selected"))
btn.className = btn.className.replace(" selected", "");
}
else if(selected && !btn.className.includes(" selected"))
btn.className += " selected";
}
var buttonsList = [
//Mute button
{
icon: "fa-microphone",
selected: true,
onclick: function(btn){
call.setLocalAudioEnabled(!call.isLocalAudioEnabled());
togglButtonSelectedStatus(btn, call.isLocalAudioEnabled());
}
},
//Hang up button
{
icon: "fa-phone",
class: "hang-up-button",
selected: false,
onclick: function(){
call.close();
}
},
//Stop video button
{
icon: "fa-video-camera",
selected: true,
onclick: function(btn){
call.setLocalVideoEnabled(!call.isLocalVideoEnabled());
togglButtonSelectedStatus(btn, call.isLocalVideoEnabled());
console.log(call);
}
}
];
//Add buttons
buttonsList.forEach(function(button){
var buttonEl = createElem2({
appendTo: call.window.footer,
type: "div",
class: "call-option-button",
innerHTML: "<i class='fa " + button.icon + "'></i>"
});
//Add button optionnal class
if(button.class)
buttonEl.className += " " + button.class;
buttonEl.addEventListener("click", function(){
button.onclick(buttonEl);
});
togglButtonSelectedStatus(buttonEl, button.selected);
});
//Load user media //Load user media
call.setLoadingMessage("Waiting for your microphone and camera..."); call.setLoadingMessage("Waiting for your microphone and camera...");