You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/07/25 15:50:19 UTC

[openmeetings] branch 4.0.x updated: [OPENMEETINGS-1142] settings dialog is improved

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

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


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

commit b19f95198053f61ee0a51e523a8c6afc70850c6c
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Jul 25 22:50:10 2018 +0700

    [OPENMEETINGS-1142] settings dialog is improved
---
 .../openmeetings/web/room/VideoSettings.html       | 50 +++++++--------
 .../org/apache/openmeetings/web/room/settings.js   | 72 ++++++++++++++++------
 openmeetings-web/src/main/webapp/css/menu.css      | 12 ++--
 openmeetings-web/src/main/webapp/css/room.css      |  3 +
 4 files changed, 87 insertions(+), 50 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 f37a2fa..5942004 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>
@@ -86,5 +82,11 @@
 		</div>
 	</div>
 	<span id="jsNotifications"></span>
+	<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.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
index 15836bc..a7b974b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.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 VideoSettings = (function() {
 	let vs, lm, swf, s, cam, mic, res, o
 		, vidScroll, recBtn, playBtn, recAllowed = false;
@@ -36,9 +50,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');
 		recBtn = vs.find('.rec-start').click(function() {
 			recBtn.prop('disabled', true).button('refresh'); //TODO disable drop-downs
@@ -116,13 +148,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()
@@ -138,11 +175,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);
@@ -157,18 +199,8 @@ var VideoSettings = (function() {
 						cCount++;
 					}
 				});
-				cam.prop('disabled', false).off().change(function() {
-					_readValues();
-					swf.camChanged(s.video.cam);
-				});
-				mic.prop('disabled', false).off().change(function() {
-					_readValues();
-					swf.micChanged(s.video.mic);
-				});
-				res.off().change(function() {
-					_readValues();
-					swf.resChanged(s.video.width, s.video.height);
-				});
+				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) {
@@ -177,6 +209,8 @@ var VideoSettings = (function() {
 					}
 				});
 				_readValues();
+				swf.init(s.video.cam, s.video.mic
+						, o.interview ? 320 : s.video.width, o.interview ? 260 : s.video.height);
 			})
 			.catch(function(err) {
 				OmUtil.error(err);
@@ -185,8 +219,6 @@ var VideoSettings = (function() {
 	function _initSwf() {
 		_initDevices();
 		_readValues();
-		swf.init(s.video.cam, s.video.mic
-			, o.interview ? 320 : s.video.width, o.interview ? 260 : s.video.height);
 	}
 	function _open() {
 		recAllowed = false;
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 2e2ba52..7e34ed3 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;
 }