您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

SettingsMenu.js 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /* global APP, $ */
  2. import UIUtil from "../../util/UIUtil";
  3. import UIEvents from "../../../../service/UI/UIEvents";
  4. import languages from "../../../../service/translation/languages";
  5. import Settings from '../../../settings/Settings';
  6. /**
  7. * Generate html select options for available languages.
  8. * @param {string[]} items available languages
  9. * @param {string} [currentLang] current language
  10. * @returns {string}
  11. */
  12. function generateLanguagesOptions(items, currentLang) {
  13. return items.map(function (lang) {
  14. let attrs = {
  15. value: lang,
  16. 'data-i18n': `languages:${lang}`
  17. };
  18. if (lang === currentLang) {
  19. attrs.selected = 'selected';
  20. }
  21. let attrsStr = UIUtil.attrsToString(attrs);
  22. return `<option ${attrsStr}></option>`;
  23. }).join('\n');
  24. }
  25. /**
  26. * Generate html select options for available physical devices.
  27. * @param {{ deviceId, label }[]} items available devices
  28. * @param {string} [selectedId] id of selected device
  29. * @returns {string}
  30. */
  31. function generateDevicesOptions(items, selectedId) {
  32. return items.map(function (item) {
  33. let attrs = {
  34. value: item.deviceId
  35. };
  36. if (item.deviceId === selectedId) {
  37. attrs.selected = 'selected';
  38. }
  39. let attrsStr = UIUtil.attrsToString(attrs);
  40. return `<option ${attrsStr}>${item.label}</option>`;
  41. }).join('\n');
  42. }
  43. export default {
  44. init (emitter) {
  45. // DISPLAY NAME
  46. function updateDisplayName () {
  47. emitter.emit(UIEvents.NICKNAME_CHANGED, $('#setDisplayName').val());
  48. }
  49. $('#setDisplayName')
  50. .val(Settings.getDisplayName())
  51. .keyup(function (event) {
  52. if (event.keyCode === 13) { // enter
  53. updateDisplayName();
  54. }
  55. })
  56. .focusout(updateDisplayName);
  57. // EMAIL
  58. function updateEmail () {
  59. emitter.emit(UIEvents.EMAIL_CHANGED, $('#setEmail').val());
  60. }
  61. $('#setEmail')
  62. .val(Settings.getEmail())
  63. .keyup(function (event) {
  64. if (event.keyCode === 13) { // enter
  65. updateEmail();
  66. }
  67. }).focusout(updateEmail);
  68. // START MUTED
  69. $("#startMutedOptions").change(function () {
  70. let startAudioMuted = $("#startAudioMuted").is(":checked");
  71. let startVideoMuted = $("#startVideoMuted").is(":checked");
  72. emitter.emit(
  73. UIEvents.START_MUTED_CHANGED,
  74. startAudioMuted,
  75. startVideoMuted
  76. );
  77. });
  78. // FOLLOW ME
  79. $("#followMeOptions").change(function () {
  80. let isFollowMeEnabled = $("#followMeCheckBox").is(":checked");
  81. emitter.emit(
  82. UIEvents.FOLLOW_ME_ENABLED,
  83. isFollowMeEnabled
  84. );
  85. });
  86. // LANGUAGES BOX
  87. let languagesBox = $("#languages_selectbox");
  88. languagesBox.html(generateLanguagesOptions(
  89. languages.getLanguages(),
  90. APP.translation.getCurrentLanguage()
  91. ));
  92. APP.translation.translateElement(languagesBox);
  93. languagesBox.change(function () {
  94. emitter.emit(UIEvents.LANG_CHANGED, languagesBox.val());
  95. });
  96. // DEVICES LIST
  97. this.changeDevicesList([]);
  98. $('#selectCamera').change(function () {
  99. let cameraDeviceId = $(this).val();
  100. if (cameraDeviceId !== Settings.getCameraDeviceId()) {
  101. emitter.emit(UIEvents.VIDEO_DEVICE_CHANGED, cameraDeviceId);
  102. }
  103. });
  104. $('#selectMic').change(function () {
  105. let micDeviceId = $(this).val();
  106. if (micDeviceId !== Settings.getMicDeviceId()) {
  107. emitter.emit(UIEvents.AUDIO_DEVICE_CHANGED, micDeviceId);
  108. }
  109. });
  110. },
  111. /**
  112. * If start audio muted/start video muted options should be visible or not.
  113. * @param {boolean} show
  114. */
  115. showStartMutedOptions (show) {
  116. if (show) {
  117. $("#startMutedOptions").css("display", "block");
  118. } else {
  119. $("#startMutedOptions").css("display", "none");
  120. }
  121. },
  122. updateStartMutedBox (startAudioMuted, startVideoMuted) {
  123. $("#startAudioMuted").attr("checked", startAudioMuted);
  124. $("#startVideoMuted").attr("checked", startVideoMuted);
  125. },
  126. /**
  127. * Shows/hides the follow me options in the settings dialog.
  128. *
  129. * @param {boolean} show {true} to show those options, {false} to hide them
  130. */
  131. showFollowMeOptions (show) {
  132. if (show) {
  133. $("#followMeOptions").css("display", "block");
  134. } else {
  135. $("#followMeOptions").css("display", "none");
  136. }
  137. },
  138. /**
  139. * Check if settings menu is visible or not.
  140. * @returns {boolean}
  141. */
  142. isVisible () {
  143. return $('#settingsmenu').is(':visible');
  144. },
  145. /**
  146. * Change user display name in the settings menu.
  147. * @param {string} newDisplayName
  148. */
  149. changeDisplayName (newDisplayName) {
  150. $('#setDisplayName').val(newDisplayName);
  151. },
  152. /**
  153. * Change user avatar in the settings menu.
  154. * @param {string} avatarUrl url of the new avatar
  155. */
  156. changeAvatar (avatarUrl) {
  157. $('#avatar').attr('src', avatarUrl);
  158. },
  159. /**
  160. * Change available cameras/microphones or hide selects completely if
  161. * no devices available.
  162. * @param {{ deviceId, label, kind }[]} devices list of available devices
  163. */
  164. changeDevicesList (devices) {
  165. if (!devices.length) {
  166. $('#devicesOptions').hide();
  167. return;
  168. }
  169. let audio = devices.filter(device => device.kind === 'audioinput');
  170. let video = devices.filter(device => device.kind === 'videoinput');
  171. $('#selectCamera').html(
  172. generateDevicesOptions(video, Settings.getCameraDeviceId())
  173. );
  174. $('#selectMic').html(
  175. generateDevicesOptions(audio, Settings.getMicDeviceId())
  176. );
  177. $('#devicesOptions').show();
  178. }
  179. };