"; };
diff --git a/lang/main.json b/lang/main.json
index ecc548da6..776b5fae5 100644
--- a/lang/main.json
+++ b/lang/main.json
@@ -151,6 +151,7 @@
},
"connectionindicator":
{
+ "header": "Connection data",
"bitrate": "Bitrate:",
"packetloss": "Packet loss:",
"resolution": "Resolution:",
diff --git a/modules/UI/UI.js b/modules/UI/UI.js
index ef5e68fef..5b629b554 100644
--- a/modules/UI/UI.js
+++ b/modules/UI/UI.js
@@ -758,6 +758,7 @@ UI.getRemoteVideoType = function (jid) {
UI.connectionIndicatorShowMore = function(id) {
VideoLayout.showMore(id);
+ return false;
};
// FIXME check if someone user this
@@ -1045,15 +1046,20 @@ UI.updateDTMFSupport = function (isDTMFSupported) {
};
/**
- * Show user feedback dialog if its required or just show "thank you" dialog.
- * @returns {Promise} when dialog is closed.
+ * Show user feedback dialog if its required and enabled after pressing the
+ * hangup button.
+ * @returns {Promise} Resolved with value - false if the dialog is enabled and
+ * resolved with true if the dialog is disabled or the feedback was already
+ * submitted. Rejected if another dialog is already displayed. This values are
+ * used to display or not display the thank you dialog from
+ * conference.maybeRedirectToWelcomePage method.
*/
-UI.requestFeedback = function () {
+UI.requestFeedbackOnHangup = function () {
if (Feedback.isVisible())
return Promise.reject(UIErrors.FEEDBACK_REQUEST_IN_PROGRESS);
// Feedback has been submitted already.
else if (Feedback.isEnabled() && Feedback.isSubmitted())
- return Promise.resolve();
+ return Promise.resolve(true);
else
return new Promise(function (resolve) {
if (Feedback.isEnabled()) {
@@ -1061,10 +1067,10 @@ UI.requestFeedback = function () {
// window and immidiately start the conference dispose timeout.
if (Feedback.getFeedbackScore() > 0) {
Feedback.openFeedbackWindow();
- resolve();
+ resolve(false);
} else { // Otherwise we'll wait for user's feedback.
- Feedback.openFeedbackWindow(resolve);
+ Feedback.openFeedbackWindow(() => resolve(false));
}
} else {
// If the feedback functionality isn't enabled we show a thank
@@ -1122,11 +1128,12 @@ UI.notifyFocusLeft = function () {
* @param {string} [login] current login
*/
UI.updateAuthInfo = function (isAuthEnabled, login) {
+ let showAuth = isAuthEnabled && UIUtil.isAuthenticationEnabled();
let loggedIn = !!login;
- Toolbar.showAuthenticateButton(isAuthEnabled);
+ Toolbar.showAuthenticateButton(showAuth);
- if (isAuthEnabled) {
+ if (showAuth) {
Toolbar.setAuthenticatedIdentity(login);
Toolbar.showLoginButton(!loggedIn);
diff --git a/modules/UI/authentication/LoginDialog.js b/modules/UI/authentication/LoginDialog.js
index 89f2b756d..8eb01d22f 100644
--- a/modules/UI/authentication/LoginDialog.js
+++ b/modules/UI/authentication/LoginDialog.js
@@ -8,13 +8,14 @@ function getPasswordInputHtml() {
let placeholder = config.hosts.authdomain
? "user identity"
: "user@domain.net";
+
return `
-
-
+
- `;
+ class="input-control__input"
+ data-i18n="[placeholder]dialog.userPassword">`;
}
/**
@@ -77,6 +78,7 @@ function LoginDialog(successCallback, cancelCallback) {
const states = {
login: {
+ titleKey: 'dialog.passwordRequired',
html: getPasswordInputHtml(),
buttons: loginButtons,
focus: ':input:first',
diff --git a/modules/UI/invite/InviteDialogView.js b/modules/UI/invite/InviteDialogView.js
index b5b518e49..74e62e6ce 100644
--- a/modules/UI/invite/InviteDialogView.js
+++ b/modules/UI/invite/InviteDialogView.js
@@ -250,7 +250,7 @@ export default class InviteDialogView {
$(removePassword).on('click', () => {
this.model.setRoomUnlocked();
});
- let boundSetPassword = this.setPassword.bind(this);
+ let boundSetPassword = this._setPassword.bind(this);
$(document).on('click', addPasswordBtn, boundSetPassword);
let boundDisablePass = this.disableAddPassIfInputEmpty.bind(this);
$(document).on('keypress', newPasswordInput, boundDisablePass);
@@ -260,12 +260,16 @@ export default class InviteDialogView {
$(newPasswordInput).on('keydown', (e) => {
if (e.keyCode === ENTER_KEY) {
e.stopPropagation();
- this.setPassword();
+ this._setPassword();
}
});
}
- setPassword() {
+ /**
+ * Marking room as locked
+ * @private
+ */
+ _setPassword() {
let $passInput = $('#newPasswordInput');
let newPass = $passInput.val();
diff --git a/modules/UI/ring_overlay/RingOverlay.js b/modules/UI/ring_overlay/RingOverlay.js
index d7aa47e52..a59b83871 100644
--- a/modules/UI/ring_overlay/RingOverlay.js
+++ b/modules/UI/ring_overlay/RingOverlay.js
@@ -9,11 +9,11 @@ import UIEvents from "../../../service/UI/UIEvents";
let overlay = null;
/**
- * Handler for UIEvents.LARGE_VIDEO_AVATAR_DISPLAYED event.
+ * Handler for UIEvents.LARGE_VIDEO_AVATAR_VISIBLE event.
* @param {boolean} shown indicates whether the avatar on the large video is
* currently displayed or not.
*/
-function onAvatarDisplayed(shown) {
+function onAvatarVisible(shown) {
overlay._changeBackground(shown);
}
@@ -112,6 +112,9 @@ class RingOverlay {
$(`#${this._containerId}`).remove();
}
+ /**
+ * Stops the ringing and clears related timers.
+ */
_stopAudio() {
if (this.interval) {
clearInterval(this.interval);
@@ -144,8 +147,8 @@ export default {
}
overlay = new RingOverlay(callee, disableRingingSound);
- APP.UI.addListener(UIEvents.LARGE_VIDEO_AVATAR_DISPLAYED,
- onAvatarDisplayed);
+ APP.UI.addListener(UIEvents.LARGE_VIDEO_AVATAR_VISIBLE,
+ onAvatarVisible);
},
/**
@@ -158,8 +161,8 @@ export default {
}
overlay.destroy();
overlay = null;
- APP.UI.removeListener(UIEvents.LARGE_VIDEO_AVATAR_DISPLAYED,
- onAvatarDisplayed);
+ APP.UI.removeListener(UIEvents.LARGE_VIDEO_AVATAR_VISIBLE,
+ onAvatarVisible);
return true;
},
diff --git a/modules/UI/side_pannels/settings/SettingsMenu.js b/modules/UI/side_pannels/settings/SettingsMenu.js
index 3c1e80067..b4cde7133 100644
--- a/modules/UI/side_pannels/settings/SettingsMenu.js
+++ b/modules/UI/side_pannels/settings/SettingsMenu.js
@@ -1,4 +1,5 @@
-/* global APP, $, JitsiMeetJS */
+/* global $, APP, AJS, interfaceConfig, JitsiMeetJS */
+
import UIUtil from "../../util/UIUtil";
import UIEvents from "../../../../service/UI/UIEvents";
import languages from "../../../../service/translation/languages";
@@ -24,7 +25,7 @@ function generateLanguagesOptions(items, currentLang) {
let attrsStr = UIUtil.attrsToString(attrs);
return ` `;
- }).join('\n');
+ }).join('');
}
/**
@@ -61,11 +62,57 @@ function generateDevicesOptions(items, selectedId, permissionGranted) {
return options.join('');
}
+/**
+ * Replace html select element to select2 custom dropdown
+ *
+ * @param {jQueryElement} $el native select element
+ * @param {function} onSelectedCb fired if item is selected
+ */
+function initSelect2($el, onSelectedCb) {
+ $el.auiSelect2({
+ containerCssClass: 'input-container-dark',
+ dropdownCssClass: 'dropdown-dark',
+ minimumResultsForSearch: Infinity
+ });
+ if (typeof onSelectedCb === 'function') {
+ $el.change(onSelectedCb);
+ }
+}
export default {
init (emitter) {
+ //LANGUAGES BOX
+ if (UIUtil.isSettingEnabled('language')) {
+ const wrapperId = 'languagesSelectWrapper';
+ const selectId = 'languagesSelect';
+ const selectEl = AJS.$(`#${selectId}`);
+ let selectInput;
+
+ selectEl.html(generateLanguagesOptions(
+ languages.getLanguages(),
+ APP.translation.getCurrentLanguage()
+ ));
+ initSelect2(selectEl, () => {
+ const val = selectEl.val();
+
+ selectInput[0].dataset.i18n = `languages:${val}`;
+ APP.translation.translateElement(selectInput);
+ emitter.emit(UIEvents.LANG_CHANGED, val);
+ });
+ //find new selectInput element
+ selectInput = $(`#s2id_${selectId} .select2-chosen`);
+ //first select fix for languages options
+ selectInput[0].dataset.i18n =
+ `languages:${APP.translation.getCurrentLanguage()}`;
+
+ APP.translation.translateElement(selectEl);
+
+ UIUtil.showElement(wrapperId);
+ }
+ // DEVICES LIST
if (UIUtil.isSettingEnabled('devices')) {
- // DEVICES LIST
+ const wrapperId = 'deviceOptionsWrapper';
+
JitsiMeetJS.mediaDevices.isDeviceListAvailable()
.then((isDeviceListAvailable) => {
if (isDeviceListAvailable &&
@@ -73,31 +120,21 @@ export default {
this._initializeDeviceSelectionSettings(emitter);
}
});
+ // Only show the subtitle if this isn't the only setting section.
+ if (interfaceConfig.SETTINGS_SECTIONS.length > 1)
+ UIUtil.showElement("deviceOptionsTitle");
- UIUtil.showElement("deviceOptionsTitle");
- UIUtil.showElement("devicesOptions");
+ UIUtil.showElement(wrapperId);
}
-
- if (UIUtil.isSettingEnabled('language')) {
- //LANGUAGES BOX
- let languagesBox = $("#languages_selectbox");
- languagesBox.html(generateLanguagesOptions(
- languages.getLanguages(),
- APP.translation.getCurrentLanguage()
- ));
- APP.translation.translateElement(languagesBox);
- languagesBox.change(function () {
- emitter.emit(UIEvents.LANG_CHANGED, languagesBox.val());
- });
-
- UIUtil.showElement("languages_selectbox");
- }
-
+ // MODERATOR
if (UIUtil.isSettingEnabled('moderator')) {
+ const wrapperId = 'moderatorOptionsWrapper';
+
// START MUTED
$("#startMutedOptions").change(function () {
let startAudioMuted = $("#startAudioMuted").is(":checked");
let startVideoMuted = $("#startVideoMuted").is(":checked");
+
emitter.emit(
UIEvents.START_MUTED_CHANGED,
startAudioMuted,
@@ -106,13 +143,13 @@ export default {
});
// FOLLOW ME
- $("#followMeOptions").change(function () {
- let isFollowMeEnabled = $("#followMeCheckBox").is(":checked");
- emitter.emit(
- UIEvents.FOLLOW_ME_ENABLED,
- isFollowMeEnabled
- );
+ const followMeToggle = document.getElementById('followMeCheckBox');
+ followMeToggle.addEventListener('change', () => {
+ const isFollowMeEnabled = followMeToggle.checked;
+ emitter.emit(UIEvents.FOLLOW_ME_ENABLED, isFollowMeEnabled);
});
+
+ UIUtil.showElement(wrapperId);
}
},
@@ -147,7 +184,8 @@ export default {
showStartMutedOptions (show) {
if (show && UIUtil.isSettingEnabled('moderator')) {
// Only show the subtitle if this isn't the only setting section.
- if (!$("#moderatorOptionsTitle").is(":visible"))
+ if (!$("#moderatorOptionsTitle").is(":visible")
+ && interfaceConfig.SETTINGS_SECTIONS.length > 1)
UIUtil.showElement("moderatorOptionsTitle");
UIUtil.showElement("startMutedOptions");
@@ -214,9 +252,9 @@ export default {
* @param {{ deviceId, label, kind }[]} devices list of available devices
*/
changeDevicesList (devices) {
- let $selectCamera= $('#selectCamera'),
- $selectMic = $('#selectMic'),
- $selectAudioOutput = $('#selectAudioOutput'),
+ let $selectCamera= AJS.$('#selectCamera'),
+ $selectMic = AJS.$('#selectMic'),
+ $selectAudioOutput = AJS.$('#selectAudioOutput'),
$selectAudioOutputParent = $selectAudioOutput.parent();
let audio = devices.filter(device => device.kind === 'audioinput'),
@@ -241,6 +279,8 @@ export default {
videoPermissionGranted))
.prop('disabled', !video.length || !videoPermissionGranted);
+ initSelect2($selectCamera);
+
$selectMic
.html(generateDevicesOptions(
audio,
@@ -248,6 +288,8 @@ export default {
audioPermissionGranted))
.prop('disabled', !audio.length || !audioPermissionGranted);
+ initSelect2($selectMic);
+
if (JitsiMeetJS.mediaDevices.isDeviceChangeAvailable('output')) {
$selectAudioOutput
.html(generateDevicesOptions(
@@ -258,14 +300,13 @@ export default {
videoPermissionGranted || audioPermissionGranted))
.prop('disabled', !audioOutput.length ||
(!videoPermissionGranted && !audioPermissionGranted));
+ initSelect2($selectAudioOutput);
$selectAudioOutputParent.show();
} else {
$selectAudioOutputParent.hide();
}
- $('#devicesOptions').show();
-
APP.translation.translateElement($('#settings_container option'));
}
};
diff --git a/modules/UI/toolbars/Toolbar.js b/modules/UI/toolbars/Toolbar.js
index 59e93b106..05f1fe92c 100644
--- a/modules/UI/toolbars/Toolbar.js
+++ b/modules/UI/toolbars/Toolbar.js
@@ -389,11 +389,9 @@ Toolbar = {
* @param show true to show or false to hide
*/
showAuthenticateButton (show) {
- if (UIUtil.isButtonEnabled('authentication') && show) {
- $('#authentication').css({display: "inline"});
- } else {
- $('#authentication').css({display: "none"});
- }
+ let display = show ? 'block' : 'none';
+
+ $('#authenticationContainer').css({display});
},
showEtherpadButton () {
@@ -447,12 +445,14 @@ Toolbar = {
* @param authIdentity identity name to be displayed.
*/
setAuthenticatedIdentity (authIdentity) {
+ let selector = $('#toolbar_auth_identity');
+
if (authIdentity) {
- let selector = $('#toolbar_auth_identity');
selector.css({display: "list-item"});
selector.text(authIdentity);
} else {
- $('#toolbar_auth_identity').css({display: "none"});
+ selector.css({display: "none"});
+ selector.text('');
}
},
@@ -461,7 +461,7 @@ Toolbar = {
* @param show true to show
*/
showLoginButton (show) {
- if (UIUtil.isButtonEnabled('authentication') && show) {
+ if (show) {
$('#toolbar_button_login').css({display: "list-item"});
} else {
$('#toolbar_button_login').css({display: "none"});
@@ -473,7 +473,7 @@ Toolbar = {
* @param show true to show
*/
showLogoutButton (show) {
- if (UIUtil.isButtonEnabled('authentication') && show) {
+ if (show) {
$('#toolbar_button_logout').css({display: "list-item"});
} else {
$('#toolbar_button_logout').css({display: "none"});
diff --git a/modules/UI/util/JitsiPopover.js b/modules/UI/util/JitsiPopover.js
index f8addfee5..adaab6945 100644
--- a/modules/UI/util/JitsiPopover.js
+++ b/modules/UI/util/JitsiPopover.js
@@ -8,17 +8,14 @@ var JitsiPopover = (function () {
*/
function JitsiPopover(element, options)
{
- this.options = {
- skin: "white",
- content: ""
- };
- if(options)
- {
- if(options.skin)
- this.options.skin = options.skin;
+ let { skin, content, hasArrow } = options;
+ this.options = {};
+ this.options.skin = skin || 'white';
+ this.options.content = content || '';
+ this.options.hasArrow = true;
- if(options.content)
- this.options.content = options.content;
+ if (typeof(hasArrow) !== 'undefined') {
+ this.options.hasArrow = false;
}
this.elementIsHovered = false;
@@ -27,10 +24,7 @@ var JitsiPopover = (function () {
element.data("jitsi_popover", this);
this.element = element;
- this.template = ' ';
+ this.template = this.getTemplate();
var self = this;
this.element.on("mouseenter", function () {
self.elementIsHovered = true;
@@ -43,6 +37,22 @@ var JitsiPopover = (function () {
});
}
+ /**
+ * Returns template for popover
+ */
+ JitsiPopover.prototype.getTemplate = function () {
+ let arrow = '';
+ if (this.options.hasArrow) {
+ arrow = '
';
+ }
+ return (
+ ``
+ );
+ };
+
/**
* Shows the popover
*/
@@ -76,7 +86,7 @@ var JitsiPopover = (function () {
*/
JitsiPopover.prototype.createPopover = function () {
$("body").append(this.template);
- let popoverElem = $(".jitsipopover > .jitsipopover-content");
+ let popoverElem = $(".jitsipopover > .jitsipopover__content");
popoverElem.html(this.options.content);
APP.translation.translateElement(popoverElem);
var self = this;
@@ -105,7 +115,7 @@ var JitsiPopover = (function () {
$(".jitsipopover").css(
{top: position.top, left: position.left, display: "table"});
$(".jitsipopover > .arrow").css({left: calcLeft});
- $(".jitsipopover > .jitsiPopupmenuPadding").css(
+ $(".jitsipopover > .jitsipopover__menu-padding").css(
{left: calcLeft - 50});
}
});
diff --git a/modules/UI/util/UIUtil.js b/modules/UI/util/UIUtil.js
index daa1b3570..fe4d1f739 100644
--- a/modules/UI/util/UIUtil.js
+++ b/modules/UI/util/UIUtil.js
@@ -204,6 +204,15 @@ const TOOLTIP_POSITIONS = {
return interfaceConfig.SETTINGS_SECTIONS.indexOf(name) !== -1;
},
+ /**
+ * Indicates if Authentication Section should be shown
+ *
+ * @returns {boolean}
+ */
+ isAuthenticationEnabled: function() {
+ return interfaceConfig.AUTHENTICATION_ENABLE;
+ },
+
/**
* Shows the element given by id.
*
diff --git a/modules/UI/videolayout/ConnectionIndicator.js b/modules/UI/videolayout/ConnectionIndicator.js
index f6259f403..43850adb1 100644
--- a/modules/UI/videolayout/ConnectionIndicator.js
+++ b/modules/UI/videolayout/ConnectionIndicator.js
@@ -78,10 +78,10 @@ ConnectionIndicator.prototype.generateText = function () {
packetLoss = "N/A";
} else {
- packetLoss = "↓ " +
+ packetLoss = "↓ " +
(this.packetLoss.download !== null ?
this.packetLoss.download : "N/A") +
- "% ↑ " +
+ "% ↑ " +
(this.packetLoss.upload !== null? this.packetLoss.upload : "N/A") +
"%";
}
@@ -93,26 +93,40 @@ ConnectionIndicator.prototype.generateText = function () {
return `${width}x${height}`;
}).join(', ') || 'N/A';
- var result = "" +
- "" +
- " " +
- "↓ " +
- downloadBitrate + " ↑ " +
- uploadBitrate + " " +
- " " +
- " " +
- "" + packetLoss + " " +
- " " +
- " " +
- "" + resolutionStr + "
";
+ let result = (
+ `
+
+
+
+
+
+ ↓ ${downloadBitrate}
+ ↑ ${uploadBitrate}
+
+
+
+
+
+
+ ${packetLoss}
+
+
+
+
+
+
+ ${resolutionStr}
+
+
+
`);
if(this.videoContainer.videoSpanId == "localVideoContainer") {
- result += "
";
+ (this.showMoreValue ? "less" : "more") + "'>";
}
if (this.showMoreValue) {
@@ -131,7 +145,7 @@ ConnectionIndicator.prototype.generateText = function () {
if (!this.transport || this.transport.length === 0) {
transport = "" +
- " " +
" N/A ";
} else {
@@ -163,15 +177,17 @@ ConnectionIndicator.prototype.generateText = function () {
var local_address_key = "connectionindicator.localaddress";
var remote_address_key = "connectionindicator.remoteaddress";
var localTransport =
- " " +
+ JSON.stringify({count: data.localIP.length})
+ + "'> " +
ConnectionIndicator.getStringFromArray(data.localIP) +
" ";
transport =
- " " +
+ JSON.stringify({count: data.remoteIP.length})
+ + "'> " +
ConnectionIndicator.getStringFromArray(data.remoteIP) +
" ";
@@ -180,14 +196,16 @@ ConnectionIndicator.prototype.generateText = function () {
transport += "" +
"" +
- " ";
+ JSON.stringify({count: this.transport.length})
+ + "'> ";
localTransport += " " +
"" +
- " ";
+ JSON.stringify({count: this.transport.length})
+ + "'> ";
transport +=
ConnectionIndicator.getStringFromArray(data.remotePort);
@@ -196,19 +214,20 @@ ConnectionIndicator.prototype.generateText = function () {
transport += " ";
transport += localTransport + "";
transport +="" +
- " " +
+ "" +
+ " " +
"" + this.transport[0].type + " ";
}
- result += "" +
+ result += "" +
"" +
"" +
- " " +
+ " " +
" " +
- "↓ " +
+ "↓ " +
downloadBandwidth +
- " ↑ " +
+ " ↑ " +
uploadBandwidth + " ";
result += transport + "
";
@@ -247,8 +266,9 @@ ConnectionIndicator.prototype.create = function () {
this.connectionIndicatorContainer);
this.popover = new JitsiPopover(
$("#" + this.videoContainer.videoSpanId + " > .connectionindicator"),
- {content: "
",
- skin: "black"});
+ {content: "
",
+ skin: "black"});
// override popover show method to make sure we will update the content
// before showing the popover
@@ -359,7 +379,7 @@ ConnectionIndicator.prototype.updatePopoverData = function (force) {
// popover is visible or we force to do so.
if(this.popover.popoverShown || force) {
this.popover.updateContent(
- `${this.generateText()}
`
+ `${this.generateText()}
`
);
}
};
diff --git a/modules/UI/videolayout/RemoteVideo.js b/modules/UI/videolayout/RemoteVideo.js
index 481afd520..b251d0290 100644
--- a/modules/UI/videolayout/RemoteVideo.js
+++ b/modules/UI/videolayout/RemoteVideo.js
@@ -75,14 +75,17 @@ RemoteVideo.prototype.addRemoteVideoContainer = function() {
* to display in the popup
*/
RemoteVideo.prototype._initPopupMenu = function (popupMenuElement) {
- this.popover = new JitsiPopover(
- $("#" + this.videoSpanId + " .remotevideomenu"),
- { content: popupMenuElement.outerHTML,
- skin: "black"});
+ let options = {
+ content: popupMenuElement.outerHTML,
+ skin: "black",
+ hasArrow: false
+ };
+ let element = $("#" + this.videoSpanId + " .remotevideomenu");
+ this.popover = new JitsiPopover(element, options);
// override popover show method to make sure we will update the content
// before showing the popover
- var origShowFunc = this.popover.show;
+ let origShowFunc = this.popover.show;
this.popover.show = function () {
// update content by forcing it, to finish even if popover
// is not visible
diff --git a/modules/UI/videolayout/VideoContainer.js b/modules/UI/videolayout/VideoContainer.js
index f59e43cc0..b91f6542d 100644
--- a/modules/UI/videolayout/VideoContainer.js
+++ b/modules/UI/videolayout/VideoContainer.js
@@ -397,7 +397,7 @@ export class VideoContainer extends LargeContainer {
this.$avatar.css("visibility", show ? "visible" : "hidden");
this.avatarDisplayed = show;
- this.emitter.emit(UIEvents.LARGE_VIDEO_AVATAR_DISPLAYED, show);
+ this.emitter.emit(UIEvents.LARGE_VIDEO_AVATAR_VISIBLE, show);
}
/**
diff --git a/react/features/base/fontIcons/Icon.js b/react/features/base/fontIcons/Icon.js
index f230db5da..6a544d81b 100644
--- a/react/features/base/fontIcons/Icon.js
+++ b/react/features/base/fontIcons/Icon.js
@@ -2,7 +2,7 @@
// but the file's name and/or location (within the directory structure) don't
// reflect that, it suggests the file is platform-independent.
import { createIconSetFromIcoMoon } from 'react-native-vector-icons';
-import icoMoonConfig from './fonts/selection.json';
+import icoMoonConfig from './jitsi.json';
/**
* Creates the Jitsi icon set from the ico moon project config file.
diff --git a/react/features/base/fontIcons/fonts/fontawesome-webfont.eot b/react/features/base/fontIcons/fonts/fontawesome-webfont.eot
deleted file mode 100644
index a30335d74..000000000
Binary files a/react/features/base/fontIcons/fonts/fontawesome-webfont.eot and /dev/null differ
diff --git a/react/features/base/fontIcons/fonts/fontawesome-webfont.svg b/react/features/base/fontIcons/fonts/fontawesome-webfont.svg
deleted file mode 100644
index 6fd19abcb..000000000
--- a/react/features/base/fontIcons/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,640 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/react/features/base/fontIcons/fonts/fontawesome-webfont.ttf b/react/features/base/fontIcons/fonts/fontawesome-webfont.ttf
deleted file mode 100644
index d7994e130..000000000
Binary files a/react/features/base/fontIcons/fonts/fontawesome-webfont.ttf and /dev/null differ
diff --git a/react/features/base/fontIcons/fonts/fontawesome-webfont.woff b/react/features/base/fontIcons/fonts/fontawesome-webfont.woff
deleted file mode 100644
index 6fd4ede0f..000000000
Binary files a/react/features/base/fontIcons/fonts/fontawesome-webfont.woff and /dev/null differ
diff --git a/react/features/base/fontIcons/fonts/fontawesome-webfont.woff2 b/react/features/base/fontIcons/fonts/fontawesome-webfont.woff2
deleted file mode 100644
index 5560193cc..000000000
Binary files a/react/features/base/fontIcons/fonts/fontawesome-webfont.woff2 and /dev/null differ
diff --git a/react/features/base/fontIcons/fonts/jitsi.eot b/react/features/base/fontIcons/fonts/jitsi.eot
deleted file mode 100755
index 264fbd136..000000000
Binary files a/react/features/base/fontIcons/fonts/jitsi.eot and /dev/null differ
diff --git a/react/features/base/fontIcons/fonts/jitsi.svg b/react/features/base/fontIcons/fonts/jitsi.svg
deleted file mode 100755
index 7b4ff3645..000000000
--- a/react/features/base/fontIcons/fonts/jitsi.svg
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-Generated by IcoMoon
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/react/features/base/fontIcons/fonts/jitsi.woff b/react/features/base/fontIcons/fonts/jitsi.woff
deleted file mode 100755
index 86cea65c6..000000000
Binary files a/react/features/base/fontIcons/fonts/jitsi.woff and /dev/null differ
diff --git a/react/features/base/fontIcons/fonts/selection.json b/react/features/base/fontIcons/jitsi.json
old mode 100755
new mode 100644
similarity index 100%
rename from react/features/base/fontIcons/fonts/selection.json
rename to react/features/base/fontIcons/jitsi.json
diff --git a/service/UI/UIEvents.js b/service/UI/UIEvents.js
index b92f0b4d8..ed2b492e5 100644
--- a/service/UI/UIEvents.js
+++ b/service/UI/UIEvents.js
@@ -118,8 +118,8 @@ export default {
/**
* Notifies that the avatar is displayed or not on the largeVideo.
*/
- LARGE_VIDEO_AVATAR_DISPLAYED: "UI.large_video_avatar_displayed",
-
+ LARGE_VIDEO_AVATAR_VISIBLE: "UI.large_video_avatar_visible",
+
/**
* Toggling room lock
*/