This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new 58318f0  [OPENMEETINGS-1142] settings dialog is improved
58318f0 is described below

commit 58318f01d5fc9347c929d4894a569a73cbb36dd9
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Jul 25 22:50:10 2018 +0700

    [OPENMEETINGS-1142] settings dialog is improved
---
 .../openmeetings/web/room/VideoSettings.html       | 50 +++++++++--------
 .../apache/openmeetings/web/room/settings-base.js  | 65 +++++++++++++++++-----
 openmeetings-web/src/main/webapp/css/menu.css      | 12 ++--
 openmeetings-web/src/main/webapp/css/room.css      |  3 +
 4 files changed, 85 insertions(+), 45 deletions(-)

diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
index 83f6420..e13735f 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
@@ -23,23 +23,19 @@
                <div class="title"><wicket:message key="758"/></div>
                <div class="sett-container">
                        <div class="opt-block">
-                               <div class="sett-row">
+                               <div class="cam-row sett-row">
                                        <div><wicket:message key="52"/></div>
                                        <div>
-                                               <select class="cam">
-                                                       <option 
value="-1"><wicket:message key="159"/></option>
-                                               </select>
+                                               <select class="cam"></select>
                                        </div>
                                </div>
-                               <div class="sett-row">
+                               <div class="mic-row sett-row">
                                        <div><wicket:message key="53"/></div>
                                        <div>
-                                               <select class="mic">
-                                                       <option 
value="-1"><wicket:message key="159"/></option>
-                                               </select>
+                                               <select class="mic"></select>
                                        </div>
                                </div>
-                               <div class="sett-row">
+                               <div class="res-row sett-row">
                                        <div class="clear">
                                                <wicket:message key="1429"/>
                                                <span class="warn 
ui-state-highlight" wicket:message="title:1430">
@@ -48,21 +44,21 @@
                                        </div>
                                        <div>
                                                <select class="cam-resolution">
-                                                       <option value="1" 
data-width="40" data-height="30">40x30 [4:3 (~6 KByte/sec)]</option>
-                                                       <option value="2" 
data-width="80" data-height="60">80x60 [4:3 (~12 KByte/sec)]</option>
-                                                       <option value="3" 
data-width="120" data-height="90" selected="selected">120x90 [4:3 (~20 
KByte/sec)]</option>
-                                                       <option value="4" 
data-width="160" data-height="120">160x120 [QQVGA 4:3 (~36 KByte/sec)]</option>
-                                                       <option value="5" 
data-width="240" data-height="180">240x180 [4:3 (~40 KByte/sec)]</option>
-                                                       <option value="6" 
data-width="320" data-height="240">320x240 [HVGA 4:3 (~56 KByte/sec)]</option>
-                                                       <option value="7" 
data-width="480" data-height="360">480x360 [4:3  (~60 KByte/sec)]</option>
-                                                       <option value="8" 
data-width="640" data-height="480">640x480 [4:3 (~68 KByte/sec)]</option>
-                                                       <option value="9" 
data-width="1024" data-height="768">1024x768 [XGA 4:3]</option>
-                                                       <option value="10" 
data-width="256" data-height="150">256x150 [16:9]</option>
-                                                       <option value="11" 
data-width="432" data-height="240">432x240 [WQVGA 9:5]</option>
-                                                       <option value="12" 
data-width="480" data-height="234">480x234 [pseudo 16:9]</option>
-                                                       <option value="13" 
data-width="512" data-height="300">512x300 [16:9]</option>
-                                                       <option value="14" 
data-width="640" data-height="360">640x360 [nHD 16:9]</option>
-                                                       <option value="15" 
data-width="1024" data-height="600">1024x600 [16:9]</option>
+                                                       <option value="1" 
data-width="40" data-height="30" data-class="ui-icon-video">40x30 [4:3 (~6 
KByte/sec)]</option>
+                                                       <option value="2" 
data-width="80" data-height="60" data-class="ui-icon-video">80x60 [4:3 (~12 
KByte/sec)]</option>
+                                                       <option value="3" 
data-width="120" data-height="90" data-class="ui-icon-video" 
selected="selected">120x90 [4:3 (~20 KByte/sec)]</option>
+                                                       <option value="4" 
data-width="160" data-height="120" data-class="ui-icon-video">160x120 [QQVGA 
4:3 (~36 KByte/sec)]</option>
+                                                       <option value="5" 
data-width="240" data-height="180" data-class="ui-icon-video">240x180 [4:3 (~40 
KByte/sec)]</option>
+                                                       <option value="6" 
data-width="320" data-height="240" data-class="ui-icon-video">320x240 [HVGA 4:3 
(~56 KByte/sec)]</option>
+                                                       <option value="7" 
data-width="480" data-height="360" data-class="ui-icon-video">480x360 [4:3  
(~60 KByte/sec)]</option>
+                                                       <option value="8" 
data-width="640" data-height="480" data-class="ui-icon-video">640x480 [4:3 (~68 
KByte/sec)]</option>
+                                                       <option value="9" 
data-width="1024" data-height="768" data-class="ui-icon-video">1024x768 [XGA 
4:3]</option>
+                                                       <option value="10" 
data-width="256" data-height="150" data-class="ui-icon-video">256x150 
[16:9]</option>
+                                                       <option value="11" 
data-width="432" data-height="240" data-class="ui-icon-video">432x240 [WQVGA 
9:5]</option>
+                                                       <option value="12" 
data-width="480" data-height="234" data-class="ui-icon-video">480x234 [pseudo 
16:9]</option>
+                                                       <option value="13" 
data-width="512" data-height="300" data-class="ui-icon-video">512x300 
[16:9]</option>
+                                                       <option value="14" 
data-width="640" data-height="360" data-class="ui-icon-video">640x360 [nHD 
16:9]</option>
+                                                       <option value="15" 
data-width="1024" data-height="600" data-class="ui-icon-video">1024x600 
[16:9]</option>
                                                </select>
                                        </div>
                                </div>
@@ -91,5 +87,11 @@
        </div>
        <span id="jsNotifications"></span>
        <div wicket:id="ws-panel" style="display: none"></div>
+       <div style="display: none">
+               <select>
+                       <option id="settings-option-loading" value="-2" 
data-class="ui-icon-refresh"><wicket:message key="230"/></option>
+                       <option id="settings-option-disabled" value="-1" 
data-class="ui-icon-closethick"><wicket:message key="159"/></option>
+               </select>
+       </div>
 </wicket:panel>
 </html>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
index b666517..505c29f 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
@@ -1,4 +1,18 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") 
http://www.apache.org/licenses/LICENSE-2.0 */
+$.widget('openmeetings.iconselectmenu', $.ui.selectmenu, {
+       _renderItem: function(ul, item) {
+               ul.addClass('settings-menu');
+               const li = $('<li>'), wrapper = $('<div>', {text: item.label});
+               if (item.disabled) {
+                       li.addClass('ui-state-disabled');
+               }
+               $('<span>', {
+                       style: item.element.attr('data-style')
+                       , 'class': 'ui-icon ' + 
(item.element.attr('data-class') || 'ui-icon-blank')
+               }).appendTo(wrapper);
+               return li.append(wrapper).appendTo(ul);
+       }
+});
 var MicLevel = (function() {
        let ctx, mic, script, vol = .0;
 
@@ -113,9 +127,27 @@ var VideoSettings = (function() {
                }));
                vs = $('#video-settings');
                lm = vs.find('.level-meter');
-               cam = vs.find('select.cam');
-               mic = vs.find('select.mic');
-               res = vs.find('select.cam-resolution');
+               cam = vs.find('select.cam').iconselectmenu({
+                       appendTo: '.cam-row'
+                       , change: function(event, ui) {
+                               _readValues();
+                               swf.camChanged(s.video.cam);
+                       }
+               });
+               mic = vs.find('select.mic').iconselectmenu({
+                       appendTo: '.mic-row'
+                       , change: function(event, ui) {
+                               _readValues();
+                               swf.micChanged(s.video.mic);
+                       }
+               });
+               res = vs.find('select.cam-resolution').iconselectmenu({
+                       appendTo: '.res-row'
+                       , change: function(event, ui) {
+                               _readValues();
+                               swf.resChanged(s.video.width, s.video.height);
+                       }
+               });
                vidScroll = vs.find('.vid-block .video-conainer');
                timer = vs.find('.timer');
                vid = vidScroll.find('video');
@@ -287,13 +319,18 @@ var VideoSettings = (function() {
        function _micActivity(level) {
                lm.progressbar("value", Math.max(0, level));
        }
+       function _setLoading(el) {
+               el.find('option').remove();
+               
el.append(OmUtil.tmpl('#settings-option-loading'));//!settings-option-disabled
+               el.iconselectmenu('refresh');
+       }
        function _initDevices() {
                if (!navigator.mediaDevices || 
!navigator.mediaDevices.enumerateDevices) {
                        OmUtil.error('enumerateDevices() not supported.');
                        return;
                }
-               cam.find('option[value!="-1"]').remove();
-               mic.find('option[value!="-1"]').remove();
+               _setLoading(cam);
+               _setLoading(mic);
                navigator.mediaDevices.getUserMedia({video:true, audio:true})
                        .then(function(stream) {
                                const devices = 
navigator.mediaDevices.enumerateDevices()
@@ -309,11 +346,16 @@ var VideoSettings = (function() {
                        })
                        .then(function(devices) {
                                let cCount = 0, mCount = 0;
+                               _load();
+                               cam.find('option').remove();
+                               
cam.append(OmUtil.tmpl('#settings-option-disabled'));
+                               mic.find('option').remove();
+                               
mic.append(OmUtil.tmpl('#settings-option-disabled'));
                                devices.forEach(function(device) {
                                        if ('audioinput' === device.kind) {
                                                const o = 
$('<option></option>').attr('value', mCount).text(device.label)
                                                        .data('device-id', 
device.deviceId);
-                                               if (mCount === s.video.cam) {
+                                               if (mCount === s.video.mic) {
                                                        o.prop('selected', 
true);
                                                }
                                                mic.append(o);
@@ -328,15 +370,8 @@ var VideoSettings = (function() {
                                                cCount++;
                                        }
                                });
-                               cam.prop('disabled', 
false).off().change(function() {
-                                       _readValues();
-                               });
-                               mic.prop('disabled', 
false).off().change(function() {
-                                       _readValues();
-                               });
-                               res.off().change(function() {
-                                       _readValues();
-                               });
+                               cam.iconselectmenu('refresh');
+                               mic.iconselectmenu('refresh');
                                res.find('option').each(function() {
                                        const o = $(this).data();
                                        if (o.width === s.video.width && 
o.height === s.video.height) {
diff --git a/openmeetings-web/src/main/webapp/css/menu.css 
b/openmeetings-web/src/main/webapp/css/menu.css
index 97ce298..24b0e2b 100644
--- a/openmeetings-web/src/main/webapp/css/menu.css
+++ b/openmeetings-web/src/main/webapp/css/menu.css
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-.ui-menu:after {
+#menu .ui-menu:after {
        content: ".";
        display: block;
        clear: both;
@@ -24,24 +24,24 @@
        line-height: 0;
        height: 0;
 }
-.ui-menu .ui-menu-item {
+#menu .ui-menu .ui-menu-item {
        display: inline-block;
        margin: 0;
        line-height: 1.2em !important;
        padding: .2em 2.1em .2em 1em;
        font-weight: normal;
 }
-.ui-menu .ui-menu-item, .ui-menu .ui-menu-item .ui-state-active {
+#menu .ui-menu .ui-menu-item, #menu .ui-menu .ui-menu-item .ui-state-active {
        font-weight: bold;
 }
-.ui-menu .ui-menu-item.sub {
+#menu .ui-menu .ui-menu-item.sub {
        width: 280px;
        display: block;
 }
-.ui-menu .ui-menu-item.top {
+#menu .ui-menu .ui-menu-item.top {
        border: 0 !important;
 }
-.ui-menu.ui-widget.ui-widget-content.ui-menu-icons {
+#menu .ui-menu.ui-widget.ui-widget-content.ui-menu-icons {
        border: 0;
 }
 #menu .ui-menu {
diff --git a/openmeetings-web/src/main/webapp/css/room.css 
b/openmeetings-web/src/main/webapp/css/room.css
index 75d235d..e82b6c8 100644
--- a/openmeetings-web/src/main/webapp/css/room.css
+++ b/openmeetings-web/src/main/webapp/css/room.css
@@ -311,6 +311,9 @@
 #video-settings {
        padding: 5px 10px;
 }
+ul.settings-menu {
+       max-height: 130px;
+}
 .ui-dialog.video .title {
        font-weight: bold;
 }

Reply via email to