jiti-meet/modules/UI/toolbars/Toolbar.js

394 lines
13 KiB
JavaScript
Raw Normal View History

2015-12-03 13:11:01 +00:00
/* global APP, $, config, interfaceConfig */
/* jshint -W101 */
2015-12-10 16:36:03 +00:00
import messageHandler from '../util/MessageHandler';
import UIUtil from '../util/UIUtil';
import AnalyticsAdapter from '../../statistics/AnalyticsAdapter';
import UIEvents from '../../../service/UI/UIEvents';
2015-01-07 14:54:03 +00:00
2015-12-10 16:36:03 +00:00
let roomUrl = null;
let recordingToaster = null;
let emitter = null;
2015-01-07 14:54:03 +00:00
2015-12-10 13:30:25 +00:00
/**
* Opens the invite link dialog.
*/
function openLinkDialog () {
2015-12-10 16:36:03 +00:00
let inviteAttributes;
2015-12-10 13:30:25 +00:00
if (roomUrl === null) {
inviteAttributes = 'data-i18n="[value]roomUrlDefaultMsg" value="' +
APP.translation.translateString("roomUrlDefaultMsg") + '"';
} else {
inviteAttributes = "value=\"" + encodeURI(roomUrl) + "\"";
}
messageHandler.openTwoButtonDialog(
"dialog.shareLink", null, null,
`<input id="inviteLinkRef" type="text" ${inviteAttributes} onclick="this.select();" readonly>`,
false, "dialog.Invite",
function (e, v) {
if (v && roomUrl) {
emitter.emit(UIEvents.USER_INVITED, roomUrl);
}
},
function (event) {
if (roomUrl) {
document.getElementById('inviteLinkRef').select();
} else {
if (event && event.target) {
$(event.target).find('button[value=true]').prop('disabled', true);
}
}
}
);
}
// Sets the state of the recording button
function setRecordingButtonState (recordingState) {
let selector = $('#toolbar_button_record');
if (recordingState === 'on') {
selector.removeClass("icon-recEnable");
selector.addClass("icon-recEnable active");
$("#largeVideo").toggleClass("videoMessageFilter", true);
let recordOnKey = "recording.on";
$('#videoConnectionMessage').attr("data-i18n", recordOnKey);
$('#videoConnectionMessage').text(APP.translation.translateString(recordOnKey));
setTimeout(function(){
$("#largeVideo").toggleClass("videoMessageFilter", false);
$('#videoConnectionMessage').css({display: "none"});
}, 1500);
recordingToaster = messageHandler.notify(
null, "recording.toaster", null,
null, null,
{timeOut: 0, closeButton: null, tapToDismiss: false}
);
} else if (recordingState === 'off') {
selector.removeClass("icon-recEnable active");
selector.addClass("icon-recEnable");
$("#largeVideo").toggleClass("videoMessageFilter", false);
$('#videoConnectionMessage').css({display: "none"});
if (recordingToaster) {
messageHandler.remove(recordingToaster);
}
} else if (recordingState === 'pending') {
selector.removeClass("icon-recEnable active");
selector.addClass("icon-recEnable");
$("#largeVideo").toggleClass("videoMessageFilter", true);
let recordPendingKey = "recording.pending";
$('#videoConnectionMessage').attr("data-i18n", recordPendingKey);
$('#videoConnectionMessage').text(APP.translation.translateString(recordPendingKey));
$('#videoConnectionMessage').css({display: "block"});
}
}
const buttonHandlers = {
2015-01-07 14:54:03 +00:00
"toolbar_button_mute": function () {
if (APP.conference.audioMuted) {
2015-09-16 22:44:53 +00:00
AnalyticsAdapter.sendEvent('toolbar.audio.unmuted');
2015-12-03 13:11:01 +00:00
emitter.emit(UIEvents.AUDIO_MUTED, false);
2015-09-02 17:08:48 +00:00
} else {
AnalyticsAdapter.sendEvent('toolbar.audio.muted');
2015-12-03 13:11:01 +00:00
emitter.emit(UIEvents.AUDIO_MUTED, true);
2015-09-02 17:08:48 +00:00
}
2015-01-07 14:54:03 +00:00
},
"toolbar_button_camera": function () {
if (APP.conference.videoMuted) {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.video.enabled');
2015-12-03 13:11:01 +00:00
emitter.emit(UIEvents.VIDEO_MUTED, false);
2015-09-02 17:08:48 +00:00
} else {
AnalyticsAdapter.sendEvent('toolbar.video.disabled');
2015-12-03 13:11:01 +00:00
emitter.emit(UIEvents.VIDEO_MUTED, true);
2015-09-02 17:08:48 +00:00
}
2015-01-07 14:54:03 +00:00
},
"toolbar_button_record": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.recording.toggled');
2015-12-10 15:48:56 +00:00
emitter.emit(UIEvents.RECORDING_TOGGLE);
2015-01-07 14:54:03 +00:00
},
"toolbar_button_security": function () {
2015-12-09 17:10:49 +00:00
emitter.emit(UIEvents.ROOM_LOCK_CLICKED);
2015-01-07 14:54:03 +00:00
},
"toolbar_button_link": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.invite.clicked');
2015-12-10 13:30:25 +00:00
openLinkDialog();
2015-01-07 14:54:03 +00:00
},
"toolbar_button_chat": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.chat.toggled');
2015-12-10 13:30:25 +00:00
emitter.emit(UIEvents.TOGGLE_CHAT);
2015-01-07 14:54:03 +00:00
},
"toolbar_button_prezi": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.prezi.clicked');
emitter.emit(UIEvents.PREZI_CLICKED);
2015-01-07 14:54:03 +00:00
},
"toolbar_button_etherpad": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.etherpad.clicked');
emitter.emit(UIEvents.ETHERPAD_CLICKED);
2015-01-07 14:54:03 +00:00
},
"toolbar_button_desktopsharing": function () {
2015-09-02 17:08:48 +00:00
if (APP.desktopsharing.isUsingScreenStream) {
AnalyticsAdapter.sendEvent('toolbar.screen.disabled');
} else {
AnalyticsAdapter.sendEvent('toolbar.screen.enabled');
}
2015-12-10 13:30:25 +00:00
APP.desktopsharing.toggleScreenSharing();
2015-01-07 14:54:03 +00:00
},
"toolbar_button_fullScreen": function() {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.fullscreen.enabled');
UIUtil.buttonClick("#toolbar_button_fullScreen", "icon-full-screen icon-exit-full-screen");
2015-12-10 13:30:25 +00:00
emitter.emit(UIEvents.FULLSCREEN_TOGGLE);
2015-01-07 14:54:03 +00:00
},
"toolbar_button_sip": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.sip.clicked');
2015-12-10 15:48:56 +00:00
showSipNumberInput();
2015-01-07 14:54:03 +00:00
},
"toolbar_button_dialpad": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.sip.dialpad.clicked');
2015-12-10 13:30:25 +00:00
dialpadButtonClicked();
},
2015-01-07 14:54:03 +00:00
"toolbar_button_settings": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.settings.toggled');
2015-12-10 13:30:25 +00:00
emitter.emit(UIEvents.TOGGLE_SETTINGS);
2015-01-07 14:54:03 +00:00
},
"toolbar_button_hangup": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.hangup');
2015-12-10 15:48:56 +00:00
emitter.emit(UIEvents.HANGUP);
},
"toolbar_button_login": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.authenticate.login.clicked');
2015-12-10 13:30:25 +00:00
emitter.emit(UIEvents.AUTH_CLICKED);
},
"toolbar_button_logout": function () {
2015-09-02 17:08:48 +00:00
AnalyticsAdapter.sendEvent('toolbar.authenticate.logout.clicked');
// Ask for confirmation
messageHandler.openTwoButtonDialog(
"dialog.logoutTitle",
null,
2015-02-23 14:59:36 +00:00
"dialog.logoutQuestion",
null,
false,
"dialog.Yes",
function (evt, yes) {
if (yes) {
2015-12-10 15:48:56 +00:00
emitter.emit(UIEvents.LOGOUT);
}
2015-12-10 15:48:56 +00:00
}
);
2015-01-07 14:54:03 +00:00
}
};
2015-12-10 16:36:03 +00:00
const defaultToolbarButtons = {
2015-12-25 16:55:45 +00:00
'microphone': '#toolbar_button_mute',
'camera': '#toolbar_button_camera',
'desktop': '#toolbar_button_desktopsharing',
'security': '#toolbar_button_security',
'invite': '#toolbar_button_link',
'chat': '#toolbar_button_chat',
'prezi': '#toolbar_button_prezi',
'etherpad': '#toolbar_button_etherpad',
'fullscreen': '#toolbar_button_fullScreen',
'settings': '#toolbar_button_settings',
'hangup': '#toolbar_button_hangup'
};
2015-01-07 14:54:03 +00:00
function dialpadButtonClicked() {
//TODO show the dialpad box
}
2015-12-10 15:48:56 +00:00
function showSipNumberInput () {
2015-12-10 13:30:25 +00:00
let defaultNumber = config.defaultSipNumber
? config.defaultSipNumber
: '';
let sipMsg = APP.translation.generateTranslationHTML("dialog.sipMsg");
messageHandler.openTwoButtonDialog(
null, null, null,
`<h2>${sipMsg}</h2>
2015-12-25 16:55:45 +00:00
<input name="sipNumber" type="text" value="${defaultNumber}" autofocus>`,
2015-12-10 13:30:25 +00:00
false, "dialog.Dial",
function (e, v, m, f) {
2015-12-10 15:48:56 +00:00
if (v && f.sipNumber) {
emitter.emit(UIEvents.SIP_DIAL, f.sipNumber);
}
},
null, null, ':input:first'
);
}
2015-12-10 13:30:25 +00:00
const Toolbar = {
2015-12-09 17:10:49 +00:00
init (eventEmitter) {
2015-12-03 13:11:01 +00:00
emitter = eventEmitter;
2015-12-10 16:36:03 +00:00
UIUtil.hideDisabledButtons(defaultToolbarButtons);
2015-12-10 16:36:03 +00:00
Object.keys(buttonHandlers).forEach(
buttonId => $(`#${buttonId}`).click(buttonHandlers[buttonId])
);
2015-12-09 17:10:49 +00:00
},
2015-01-07 14:54:03 +00:00
/**
* Updates the room invite url.
*/
2015-12-09 17:10:49 +00:00
updateRoomUrl (newRoomUrl) {
2015-01-07 14:54:03 +00:00
roomUrl = newRoomUrl;
// If the invite dialog has been already opened we update the information.
2015-12-10 16:36:03 +00:00
let inviteLink = document.getElementById('inviteLinkRef');
2015-01-07 14:54:03 +00:00
if (inviteLink) {
inviteLink.value = roomUrl;
inviteLink.select();
$('#inviteLinkRef').parent()
.find('button[value=true]').prop('disabled', false);
2015-01-07 14:54:03 +00:00
}
2015-12-09 17:10:49 +00:00
},
2015-01-07 14:54:03 +00:00
/**
* Disables and enables some of the buttons.
*/
2015-12-09 17:10:49 +00:00
setupButtonsFromConfig () {
2015-12-25 16:55:45 +00:00
if (!UIUtil.isButtonEnabled('prezi')) {
$("#toolbar_button_prezi").css({display: "none"});
}
2015-12-09 17:10:49 +00:00
},
/**
* Unlocks the lock button state.
*/
2015-12-09 17:10:49 +00:00
unlockLockButton () {
if ($("#toolbar_button_security").hasClass("icon-security-locked"))
UIUtil.buttonClick("#toolbar_button_security", "icon-security icon-security-locked");
2015-12-09 17:10:49 +00:00
},
/**
* Updates the lock button state to locked.
*/
2015-12-09 17:10:49 +00:00
lockLockButton () {
if ($("#toolbar_button_security").hasClass("icon-security"))
UIUtil.buttonClick("#toolbar_button_security", "icon-security icon-security-locked");
2015-12-09 17:10:49 +00:00
},
/**
* Shows or hides authentication button
* @param show <tt>true</tt> to show or <tt>false</tt> to hide
*/
2015-12-09 17:10:49 +00:00
showAuthenticateButton (show) {
if (UIUtil.isButtonEnabled('authentication') && show) {
$('#authentication').css({display: "inline"});
} else {
$('#authentication').css({display: "none"});
}
2015-12-09 17:10:49 +00:00
},
2015-12-25 16:55:45 +00:00
showEtherpadButton () {
if (!$('#toolbar_button_etherpad').is(":visible")) {
$('#toolbar_button_etherpad').css({display: 'inline-block'});
}
},
// Shows or hides the 'recording' button.
2015-12-09 17:10:49 +00:00
showRecordingButton (show) {
if (UIUtil.isButtonEnabled('recording') && show) {
$('#toolbar_button_record').css({display: "inline-block"});
} else {
$('#toolbar_button_record').css({display: "none"});
}
2015-12-09 17:10:49 +00:00
},
// checks whether recording is enabled and whether we have params
// to start automatically recording
2015-12-09 17:10:49 +00:00
checkAutoRecord () {
if (UIUtil.isButtonEnabled('recording') && config.autoRecord) {
2015-12-10 15:48:56 +00:00
emitter.emit(UIEvents.RECORDING_TOGGLE, UIUtil.escapeHtml(config.autoRecordToken));
}
2015-12-09 17:10:49 +00:00
},
// checks whether desktop sharing is enabled and whether
// we have params to start automatically sharing
2015-12-09 17:10:49 +00:00
checkAutoEnableDesktopSharing () {
if (UIUtil.isButtonEnabled('desktop')
2015-12-25 16:55:45 +00:00
&& config.autoEnableDesktopSharing) {
APP.desktopsharing.toggleScreenSharing();
}
2015-12-09 17:10:49 +00:00
},
2014-08-08 13:25:24 +00:00
// Shows or hides SIP calls button
2015-12-09 17:10:49 +00:00
showSipCallButton (show) {
2015-12-29 23:52:24 +00:00
if (APP.conference.sipGatewayEnabled() && UIUtil.isButtonEnabled('sip') && show) {
$('#toolbar_button_sip').css({display: "inline-block"});
} else {
$('#toolbar_button_sip').css({display: "none"});
2014-08-08 13:25:24 +00:00
}
2015-12-09 17:10:49 +00:00
},
2014-08-08 13:25:24 +00:00
// Shows or hides the dialpad button
2015-12-09 17:10:49 +00:00
showDialPadButton (show) {
if (UIUtil.isButtonEnabled('dialpad') && show) {
$('#toolbar_button_dialpad').css({display: "inline-block"});
} else {
$('#toolbar_button_dialpad').css({display: "none"});
}
2015-12-09 17:10:49 +00:00
},
/**
* Displays user authenticated identity name(login).
* @param authIdentity identity name to be displayed.
*/
2015-12-09 17:10:49 +00:00
setAuthenticatedIdentity (authIdentity) {
if (authIdentity) {
2015-12-10 16:36:03 +00:00
let selector = $('#toolbar_auth_identity');
2015-04-08 10:49:49 +00:00
selector.css({display: "list-item"});
selector.text(authIdentity);
} else {
$('#toolbar_auth_identity').css({display: "none"});
}
2015-12-09 17:10:49 +00:00
},
/**
* Shows/hides login button.
* @param show <tt>true</tt> to show
*/
2015-12-09 17:10:49 +00:00
showLoginButton (show) {
if (UIUtil.isButtonEnabled('authentication') && show) {
$('#toolbar_button_login').css({display: "list-item"});
} else {
$('#toolbar_button_login').css({display: "none"});
}
2015-12-09 17:10:49 +00:00
},
/**
* Shows/hides logout button.
* @param show <tt>true</tt> to show
*/
2015-12-09 17:10:49 +00:00
showLogoutButton (show) {
if (UIUtil.isButtonEnabled('authentication') && show) {
$('#toolbar_button_logout').css({display: "list-item"});
} else {
$('#toolbar_button_logout').css({display: "none"});
}
2015-12-09 17:10:49 +00:00
},
/**
* Sets the state of the button. The button has blue glow if desktop
* streaming is active.
* @param active the state of the desktop streaming.
*/
2015-12-09 17:10:49 +00:00
changeDesktopSharingButtonState (active) {
2015-12-10 16:36:03 +00:00
let button = $("#toolbar_button_desktopsharing");
if (active) {
button.addClass("glow");
} else {
button.removeClass("glow");
}
2015-12-10 15:48:56 +00:00
},
updateRecordingState (state) {
setRecordingButtonState(state);
2015-12-09 17:10:49 +00:00
}
};
2015-01-07 14:54:03 +00:00
2015-12-09 17:10:49 +00:00
export default Toolbar;