diff --git a/css/_side_toolbar_container.scss b/css/_side_toolbar_container.scss index f6b2adddf..c174a4c71 100644 --- a/css/_side_toolbar_container.scss +++ b/css/_side_toolbar_container.scss @@ -2,16 +2,15 @@ * Toolbar side panel main container element. */ #sideToolbarContainer { - display: inline-block; - position:absolute; - top: 0px; - left: $defaultToolbarSize; - width: 0; background-color: rgba(0,0,0,0.8); height: 100%; + left: $defaultToolbarSize; max-width: $sidebarWidth; - z-index: 800; overflow: hidden; + position: absolute; + top: 0; + width: 0; + z-index: 800; /** * Labels inside the side panel. @@ -23,7 +22,7 @@ /** * Form elements and blocks. */ - input, label, select, a, + input, select, a, .sideToolbarBlock, .input-control, .button-control { display: block; margin-top: 15px; @@ -34,8 +33,8 @@ /** * Specify colors for edit elements. */ - select, input[type="button"], input[type="text"], - input[type="reset"], input[type="submit"] { + select, input[type="button"], input[type="text"], input[type="reset"], + input[type="submit"] { color: $inputColor; background: $inputBackground; border: none; @@ -45,16 +44,18 @@ * Specify styling of elements inside a block. */ .sideToolbarBlock { - input, label, button, a, select { - margin-top: 5px; + input, button, a, select { margin-left: 0; + margin-top: 5px; width: 100%; } - - .startMutedLabel, - .followMeLabel { + input[type='checkbox'] { display: inline; - margin-top: 0; + width: auto !important; + > label { + margin-top: 5px; + width: 80%; + } } } @@ -72,36 +73,35 @@ /** * Titles and subtitles of inner containers. */ - > div.title, - div.subTitle { - text-align: left; - margin: 10px 0px 10px 0px; + div.title, div.subTitle { + margin: 10px 0; } /** * Main title size. */ - > div.title { + div.title { color: $defaultColor !important; - text-align: center; font-size: 16px; + text-align: center; } /** * Subtitle specific properties. */ - > div.subTitle { + div.subTitle { + color: $defaultSideBarFontColor !important; font-size: 11px; font-weight: 500; - color: $defaultSideBarFontColor !important; margin-left: 10%; + text-align: left; } /** * First element after a title. */ .first { - margin-top: 0px !important; + margin-top: 0 !important; } /** @@ -119,12 +119,6 @@ text-align: center; } -#startAudioMuted, -#startVideoMuted, -#followMeCheckBox { - width: 13px !important; -} - /** * Profile */ @@ -135,7 +129,7 @@ li { list-style-type: none; - a.authButton{ + a.authButton { width: 160px; margin: 10px 20px; padding: 3px 29px; @@ -149,4 +143,4 @@ } } } -} \ No newline at end of file +} diff --git a/css/_variables.scss b/css/_variables.scss index 8051438ec..a13fee87d 100644 --- a/css/_variables.scss +++ b/css/_variables.scss @@ -92,4 +92,13 @@ $auiPrimaryButtonBg: #3572b0; $auiPrimaryButtonHoverBg: #57647b; $auiPrimaryButtonColor: #fff; $auiIconColor: #707070; -$inputControlEmColor: #f29424; \ No newline at end of file +$inputControlEmColor: #f29424; +$linkFontColor: #489afe; +$linkHoverFontColor: #287ade; + +/** + * Forms + */ +$inputBg: #505F79; +$inputBgHover: #505F79; +$inputFontColor: #ECEEF1; \ No newline at end of file diff --git a/css/aui-components/dropdown.scss b/css/aui-components/dropdown.scss new file mode 100644 index 000000000..930cfebe0 --- /dev/null +++ b/css/aui-components/dropdown.scss @@ -0,0 +1,48 @@ +form.aui { + .aui-select2-container { + background-color: transparent; + + > a { + margin: 0 auto !important; + width: 100% !important; + } + } +} + +.select2-results{ + &::-webkit-scrollbar { + background-color: transparent; + } + &::-webkit-scrollbar-track { + background-color: transparent; + } + &::-webkit-scrollbar-track-piece { + background-color: transparent; + } + &::-webkit-scrollbar-thumb { + background-color: #3572b0; + } +} + +.aui-select2-drop { + z-index: 901; +} + +.select2-drop-mask { + z-index: 900; +} + +//Dark theme +form.aui{ + //Placeholder + .aui-select2-container.input-container-dark { + a.select2-choice { + text-shadow: none; + } + } +} + +.aui-dropdown2.aui-style-default.dropdown-dark { + background-color: $defaultBackground; + border-color: transparent; +} diff --git a/css/main.scss b/css/main.scss index 1959a6edb..c65ff91d9 100644 --- a/css/main.scss +++ b/css/main.scss @@ -62,5 +62,6 @@ @import 'buttons/button-control'; @import "modals/invite/invite"; @import "connection-info"; +@import 'aui-components/dropdown'; -/* Modules END */ \ No newline at end of file +/* Modules END */ diff --git a/index.html b/index.html index 3f3849b72..1bb4941a5 100644 --- a/index.html +++ b/index.html @@ -30,15 +30,15 @@ jitsi.org
-
-
-
- -
- +
+
+
+ +
+ -
+
@@ -180,37 +180,45 @@
- -
-
-
- - +
+
+
-
- - +
+
+
+ + +
+
+ + +
+
+ + +
-
- - +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
-
-
-
-
- - -
-
- - -
-
-
- - -
+
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')); } };