Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

SettingsMenu.js 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. function generateLanguagesSelectBox() {
  7. var currentLang = APP.translation.getCurrentLanguage();
  8. var html = '<select id="languages_selectbox">';
  9. var langArray = languages.getLanguages();
  10. for(var i = 0; i < langArray.length; i++) {
  11. var lang = langArray[i];
  12. html += "<option ";
  13. if(lang === currentLang)
  14. html += "selected ";
  15. html += "value=\"" + lang + "\" data-i18n='languages:" + lang + "'>";
  16. html += "</option>";
  17. }
  18. return html + "</select>";
  19. }
  20. function generateDevicesOptions(items, selectedId) {
  21. return items.map(function (item) {
  22. let attrs = {
  23. value: item.deviceId
  24. };
  25. if (item.deviceId === selectedId) {
  26. attrs.selected = 'selected';
  27. }
  28. let attrsStr = UIUtil.attrsToString(attrs);
  29. return `<option ${attrsStr}>${item.label}</option>`;
  30. }).join('\n');
  31. }
  32. export default {
  33. init (emitter) {
  34. function update() {
  35. let displayName = $('#setDisplayName').val();
  36. if (displayName && Settings.getDisplayName() !== displayName) {
  37. emitter.emit(UIEvents.NICKNAME_CHANGED, displayName);
  38. }
  39. let language = $("#languages_selectbox").val();
  40. if (language !== Settings.getLanguage()) {
  41. emitter.emit(UIEvents.LANG_CHANGED, language);
  42. }
  43. let email = UIUtil.escapeHtml($('#setEmail').val());
  44. if (email !== Settings.getEmail()) {
  45. emitter.emit(UIEvents.EMAIL_CHANGED, email);
  46. }
  47. let startAudioMuted = $("#startAudioMuted").is(":checked");
  48. let startVideoMuted = $("#startVideoMuted").is(":checked");
  49. if (startAudioMuted !== APP.conference.startAudioMuted
  50. || startVideoMuted !== APP.conference.startVideoMuted) {
  51. emitter.emit(
  52. UIEvents.START_MUTED_CHANGED,
  53. startAudioMuted,
  54. startVideoMuted
  55. );
  56. }
  57. let cameraDeviceId = $('#selectCamera').val();
  58. if (cameraDeviceId !== Settings.getCameraDeviceId()) {
  59. emitter.emit(UIEvents.VIDEO_DEVICE_CHANGED, cameraDeviceId);
  60. }
  61. let micDeviceId = $('#selectMic').val();
  62. if (micDeviceId !== Settings.getMicDeviceId()) {
  63. emitter.emit(UIEvents.AUDIO_DEVICE_CHANGED, micDeviceId);
  64. }
  65. }
  66. let startMutedBlock = $("#startMutedOptions");
  67. startMutedBlock.before(generateLanguagesSelectBox());
  68. APP.translation.translateElement($("#languages_selectbox"));
  69. this.onAvailableDevicesChanged();
  70. this.onRoleChanged();
  71. this.onStartMutedChanged();
  72. $("#updateSettings").click(update);
  73. $('#settingsmenu>input').keyup(function(event){
  74. if (event.keyCode === 13) {//enter
  75. update();
  76. }
  77. });
  78. },
  79. onRoleChanged () {
  80. if(APP.conference.isModerator) {
  81. $("#startMutedOptions").css("display", "block");
  82. }
  83. else {
  84. $("#startMutedOptions").css("display", "none");
  85. }
  86. },
  87. onStartMutedChanged () {
  88. $("#startAudioMuted").attr("checked", APP.conference.startAudioMuted);
  89. $("#startVideoMuted").attr("checked", APP.conference.startVideoMuted);
  90. },
  91. isVisible () {
  92. return $('#settingsmenu').is(':visible');
  93. },
  94. onDisplayNameChange (id, newDisplayName) {
  95. if(id === 'localVideoContainer' || APP.conference.isLocalId(id)) {
  96. $('#setDisplayName').val(newDisplayName);
  97. }
  98. },
  99. changeAvatar (avatarUrl) {
  100. $('#avatar').attr('src', avatarUrl);
  101. },
  102. onAvailableDevicesChanged () {
  103. let devices = APP.conference.availableDevices;
  104. if (!devices.length) {
  105. $('#devicesOptions').hide();
  106. return;
  107. }
  108. let audio = devices.filter(device => device.kind === 'audioinput');
  109. let video = devices.filter(device => device.kind === 'videoinput');
  110. $('#selectCamera').html(
  111. generateDevicesOptions(video, Settings.getCameraDeviceId())
  112. );
  113. $('#selectMic').html(
  114. generateDevicesOptions(audio, Settings.getMicDeviceId())
  115. );
  116. $('#devicesOptions').show();
  117. }
  118. };