diff --git a/bigbluebutton-client/resources/config.xml.template b/bigbluebutton-client/resources/config.xml.template index 758b707b99d8c3df62e18659f4374147b455941e..89f76f5d166ca9dab493262225a7821af9d6f974 100755 --- a/bigbluebutton-client/resources/config.xml.template +++ b/bigbluebutton-client/resources/config.xml.template @@ -54,7 +54,6 @@ uri="rtmp://HOST/sip" autoJoin="true" listenOnlyMode="true" - presenterShareOnly="false" skipCheck="false" showButton="true" enabledEchoCancel="true" @@ -69,7 +68,6 @@ uri="rtmp://HOST/video" dependson = "UsersModule" baseTabIndex="401" - presenterShareOnly = "false" controlsForPresenter = "false" autoStart = "false" skipCamSettingsCheck="false" diff --git a/bigbluebutton-client/src/VideoconfModule.mxml b/bigbluebutton-client/src/VideoconfModule.mxml index c55ae6eb2e525779765fae91b7bb2a2702e74ab8..477345781d4c3fa8504468c09bedf23868f6de61 100644 --- a/bigbluebutton-client/src/VideoconfModule.mxml +++ b/bigbluebutton-client/src/VideoconfModule.mxml @@ -69,11 +69,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. return _attributes.userrole as String; } - public function get presenterShareOnly():Boolean{ - if (_attributes.presenterShareOnly == "true") return true; - else return false; - } - public function start(attributes:Object):void { LOGGER.debug("Starting Video Module"); _attributes = attributes; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml index d30b0e3a04b78a434d69ca956245502207271462..2b508934a7359e50a83172d3895f0ff3908cc03b 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml @@ -26,10 +26,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. initialize="init()" styleName="micSettingsWindowStyle" showCloseButton="false"> - - <mate:Listener type="{MadePresenterEvent.SWITCH_TO_PRESENTER_MODE}" method="handleBecomePresenter" /> - <mate:Listener type="{MadePresenterEvent.SWITCH_TO_VIEWER_MODE}" method="handleBecomeViewer" /> - + <mx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; @@ -37,10 +34,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.core.PopUpUtil; - import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.api.JSAPI; - import org.bigbluebutton.main.events.MadePresenterEvent; import org.bigbluebutton.main.model.users.Conference; import org.bigbluebutton.modules.phone.PhoneOptions; import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent; @@ -57,14 +52,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. browserInfo = JSAPI.getInstance().getBrowserInfo(); var conference:Conference = UserManager.getInstance().getConference(); - - if (!phoneOptions.listenOnlyMode) btnListenOnly.enabled = false; - if ( - (phoneOptions.presenterShareOnly && !UsersUtil.amIPresenter() && !UsersUtil.amIModerator()) - ) { - btnMicrophone.enabled = false; - } - + if (!phoneOptions.listenOnlyMode) + btnListenOnly.enabled = false; + if (phoneOptions.showPhoneOption) { txtPhone.text=ResourceUtil.getInstance().getString('bbb.audioSelection.txtPhone.text', [conference.dialNumber, conference.voiceBridge]); } else { @@ -123,14 +113,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. PopUpUtil.removePopUp(this); } - - private function handleBecomePresenter(e:MadePresenterEvent):void { - if (phoneOptions.presenterShareOnly) btnMicrophone.enabled = true; - } - - private function handleBecomeViewer(e:MadePresenterEvent):void { - if (phoneOptions.presenterShareOnly && !UsersUtil.amIModerator()) btnMicrophone.enabled = false; - } ]]> </mx:Script> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/PhoneOptions.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/PhoneOptions.as index f468aba7e48d17be23d444282298082137c6eba0..88313e5d2ff63571a3d108d7da1f32c4cda2bc57 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/PhoneOptions.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/PhoneOptions.as @@ -1,13 +1,13 @@ /** * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ - * + * * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below). * * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software * Foundation; either version 3.0 of the License, or (at your option) any later * version. - * + * * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. @@ -19,22 +19,22 @@ package org.bigbluebutton.modules.phone { import org.bigbluebutton.core.BBB; - + public class PhoneOptions { - public var uri:String = "unknown"; - + public var uri:String = "unknown"; + [Bindable] public var showButton:Boolean = true; [Bindable] public var autoJoin:Boolean = false; - + [Bindable] public var skipCheck:Boolean = false; - + [Bindable] public var enabledEchoCancel:Boolean = false; - + [Bindable] public var useWebRTCIfAvailable:Boolean = true; @@ -44,25 +44,22 @@ package org.bigbluebutton.modules.phone [Bindable] public var listenOnlyMode:Boolean = true; - [Bindable] - public var presenterShareOnly:Boolean = false; - [Bindable] public var showPhoneOption:Boolean = false; [Bindable] public var showWebRTCStats:Boolean = false; - + public function PhoneOptions() { parseOptions(); } - + public function parseOptions():void { var vxml:XML = BBB.getConfigForModule("PhoneModule"); if (vxml != null) { - if (vxml.@uri != undefined) { - uri = vxml.@uri.toString(); - } + if (vxml.@uri != undefined) { + uri = vxml.@uri.toString(); + } if (vxml.@showButton != undefined) { showButton = (vxml.@showButton.toString().toUpperCase() == "TRUE") ? true : false; } @@ -84,9 +81,6 @@ package org.bigbluebutton.modules.phone if (vxml.@listenOnlyMode != undefined) { listenOnlyMode = (vxml.@listenOnlyMode.toString().toUpperCase() == "TRUE"); } - if (vxml.@presenterShareOnly != undefined) { - presenterShareOnly = (vxml.@presenterShareOnly.toString().toUpperCase() == "TRUE"); - } if (vxml.@showPhoneOption != undefined) { showPhoneOption = (vxml.@showPhoneOption.toString().toUpperCase() == "TRUE"); } @@ -94,6 +88,6 @@ package org.bigbluebutton.modules.phone showWebRTCStats = (vxml.@showWebRTCStats.toString().toUpperCase() == "TRUE"); } } - } + } } -} \ No newline at end of file +} diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as index bab48ef7345453058369ad83338c26fe72c2a40c..bd634e8a382e8d77ea85dc129a17371727324b61 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as @@ -13,7 +13,6 @@ import org.bigbluebutton.common.Media; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.events.VoiceConfEvent; - import org.bigbluebutton.main.api.JSLog; import org.bigbluebutton.modules.phone.PhoneOptions; import org.bigbluebutton.modules.phone.events.FlashCallConnectedEvent; import org.bigbluebutton.modules.phone.events.FlashCallDisconnectedEvent; @@ -376,20 +375,7 @@ } hangup(); } - - public function handleBecomeViewer():void { - LOGGER.debug("Handling BecomeViewer, current state: {0}, using flash: {1}", [state, usingFlash]); - if (options.presenterShareOnly) { - if (!usingFlash || state != IN_CONFERENCE || UsersUtil.amIModerator()) return; - LOGGER.debug("handleBecomeViewer leaving flash with mic and joining listen only stream"); - hangup(); - - var command:JoinVoiceConferenceCommand = new JoinVoiceConferenceCommand(); - command.mic = false; - dispatcher.dispatchEvent(command); - } - } - + public function handleFlashVoiceConnected():void { switch (state) { case JOIN_VOICE_CONFERENCE: diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as index 2f2fb63d0048c9c234838cbfdd3f7bd628f1c2a2..5e1580ff944e682d2e2931d3f39b9a9b45554cde 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as @@ -172,20 +172,6 @@ package org.bigbluebutton.modules.phone.managers ExternalInterface.call("leaveWebRTCVoiceConference"); } - public function handleBecomeViewer():void { - LOGGER.debug("handleBecomeViewer received"); - if (options.presenterShareOnly) { - if (!usingWebRTC || model.state != Constants.IN_CONFERENCE || UsersUtil.amIModerator()) return; - - LOGGER.debug("handleBecomeViewer leaving WebRTC and joining listen only stream"); - ExternalInterface.call("leaveWebRTCVoiceConference"); - - var command:JoinVoiceConferenceCommand = new JoinVoiceConferenceCommand(); - command.mic = false; - dispatcher.dispatchEvent(command); - } - } - public function handleUseFlashModeCommand():void { usingWebRTC = false; } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/FlashCallEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/FlashCallEventMap.mxml index 2aadf3376bb915fe986233b4f5946370b053ed17..d1f8103c7b0771b786917cf5f43b8f41fa680d1d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/FlashCallEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/FlashCallEventMap.mxml @@ -27,7 +27,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <![CDATA[ import mx.events.FlexEvent; - import org.bigbluebutton.main.events.MadePresenterEvent; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; import org.bigbluebutton.modules.phone.events.FlashCallConnectedEvent; @@ -117,10 +116,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <MethodInvoker generator="{FlashCallManager}" method="handleUseFlashModeCommand"/> </EventHandlers> - <EventHandlers type="{MadePresenterEvent.SWITCH_TO_VIEWER_MODE}"> - <MethodInvoker generator="{FlashCallManager}" method="handleBecomeViewer"/> - </EventHandlers> - <EventHandlers type="{BBBEvent.RECONNECT_SIP_SUCCEEDED_EVENT}"> <MethodInvoker generator="{FlashCallManager}" method="handleReconnectSIPSucceededEvent"/> </EventHandlers> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/WebRTCEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/WebRTCEventMap.mxml index 69254e099024de2441aafd2794c1a25005efcff5..e53aab311ee302ef0719e16d635620a251e0b951 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/WebRTCEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/maps/WebRTCEventMap.mxml @@ -26,8 +26,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:Script> <![CDATA[ import mx.events.FlexEvent; - - import org.bigbluebutton.main.events.MadePresenterEvent; + import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand; import org.bigbluebutton.modules.phone.events.LeaveVoiceConferenceCommand; @@ -116,7 +115,4 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <MethodInvoker generator="{WebRTCCallManager}" method="handleLeaveVoiceConferenceCommand"/> </EventHandlers> - <EventHandlers type="{MadePresenterEvent.SWITCH_TO_VIEWER_MODE}"> - <MethodInvoker generator="{WebRTCCallManager}" method="handleBecomeViewer"/> - </EventHandlers> </EventMap> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml index d38292d647f774daef1df6701dcd62bb9660a6f7..4c175770f269134c183cd092e34926aba6b2cd40 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml @@ -95,44 +95,40 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. dispatcher.dispatchEvent(new LeaveVoiceConferenceCommand()); } } - - public function remoteClick(event:ShortcutEvent):void{ + + public function remoteClick(event:ShortcutEvent):void { this.selected = true; startPhone(); } - - + private function mouseOverHandler(event:MouseEvent):void { - if(_currentState == ACTIVE_STATE) - this.styleName = "voiceConfInactiveButtonStyle"; + if (_currentState == ACTIVE_STATE) + this.styleName = "voiceConfInactiveButtonStyle"; else - this.styleName = "voiceConfActiveButtonStyle"; + this.styleName = "voiceConfActiveButtonStyle"; } private function mouseOutHandler(event:MouseEvent):void { - if(_currentState == ACTIVE_STATE) - this.styleName = "voiceConfActiveButtonStyle"; + if (_currentState == ACTIVE_STATE) + this.styleName = "voiceConfActiveButtonStyle"; else - this.styleName = "voiceConfDefaultButtonStyle"; + this.styleName = "voiceConfDefaultButtonStyle"; } - + private function onCreationComplete():void { var conference:Conference = UserManager.getInstance().getConference(); var thisUser:BBBUser = conference.getMyUser(); - + // when the button is added to the stage display the audio selection window if auto join is true if (phoneOptions.autoJoin) { if (phoneOptions.skipCheck || thisUser.disableMyMic) { var command:JoinVoiceConferenceCommand = new JoinVoiceConferenceCommand(); - if ( - (phoneOptions.presenterShareOnly && !UsersUtil.amIPresenter() && !UsersUtil.amIModerator()) - || thisUser.disableMyMic - ) { + if (thisUser.disableMyMic) { command.mic = false; } else { command.mic = true; } - + dispatcher.dispatchEvent(command); } else { LOGGER.debug("Sending Show Audio Selection command"); @@ -141,6 +137,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } } + private function onUserJoinedConference():void { this.selected = true; this.enabled = true; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as index 32c88f2475c023800c951badbf5f89f0c704eede..3e1cfb1542ed7992313bd6ec20435aeac6c2158b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as @@ -145,15 +145,6 @@ package org.bigbluebutton.modules.videoconf.maps private function displayToolbarButton():void { button.isPresenter = true; - - if (options.presenterShareOnly) { - if (UsersUtil.amIPresenter()) { - button.isPresenter = true; - } else { - button.isPresenter = false; - } - } - } private function addToolbarButton():void{ @@ -457,9 +448,6 @@ package org.bigbluebutton.modules.videoconf.maps if (options.showButton){ LOGGER.debug("****************** Switching to viewer. Show video button?=[{0}]", [UsersUtil.amIPresenter()]); displayToolbarButton(); - if (_myCamSettings.length > 0 && options.presenterShareOnly) { - stopBroadcasting(); - } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as index 4863a82728a2e6c4e869f66de813c5e3a136b3cf..353605c440bb9da75baade350f0f1cb8ffcc6594 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/model/VideoConfOptions.as @@ -1,13 +1,13 @@ /** * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ - * + * * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below). * * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software * Foundation; either version 3.0 of the License, or (at your option) any later * version. - * + * * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. @@ -18,85 +18,81 @@ */ package org.bigbluebutton.modules.videoconf.model { - import flash.external.ExternalInterface; - import org.bigbluebutton.core.BBB; import org.bigbluebutton.main.api.JSAPI; - - public class VideoConfOptions - { + + public class VideoConfOptions { public var uri:String = "rtmp://localhost/video"; - + [Bindable] public var autoStart:Boolean = false; - + [Bindable] public var showCloseButton:Boolean = true; - + [Bindable] public var showButton:Boolean = true; - + [Bindable] public var publishWindowVisible:Boolean = true; - + [Bindable] public var viewerWindowMaxed:Boolean = false; - + [Bindable] public var viewerWindowLocation:String = "middle"; - + [Bindable] public var smoothVideo:Boolean = false; - + [Bindable] public var applyConvolutionFilter:Boolean = false; - + [Bindable] public var convolutionFilter:Array = [-1, 0, -1, 0, 6, 0, -1, 0, -1]; - + [Bindable] public var filterBias:Number = 0; - + [Bindable] public var filterDivisor:Number = 4; - - [Bindable] public var baseTabIndex:int; - + [Bindable] - public var presenterShareOnly:Boolean = false; - + public var baseTabIndex:int; + [Bindable] - public var controlsForPresenter:Boolean = false; - + public var controlsForPresenter:Boolean = false; + [Bindable] public var displayAvatar:Boolean = false; - + [Bindable] public var focusTalking:Boolean = false; - - [Bindable] - public var skipCamSettingsCheck:Boolean = false; - + + [Bindable] + public var skipCamSettingsCheck:Boolean = false; + [Bindable] public var glowColor:String = "0x4A931D"; - + [Bindable] public var glowBlurSize:Number = 30.0; - [Bindable] - public var priorityRatio:Number = 2/3; - + + [Bindable] + public var priorityRatio:Number = 2 / 3; + public function VideoConfOptions() { parseOptions(); } - + public function parseOptions():void { - var browserInfo : Array = JSAPI.getInstance().getBrowserInfo(); - + var browserInfo:Array = JSAPI.getInstance().getBrowserInfo(); + var vxml:XML = BBB.getConfigForModule("VideoconfModule"); if (vxml != null) { if (vxml.@uri != undefined) { uri = vxml.@uri.toString(); - } + } if (vxml.@showCloseButton != undefined) { showCloseButton = (vxml.@showCloseButton.toString().toUpperCase() == "TRUE") ? true : false; } @@ -112,25 +108,22 @@ package org.bigbluebutton.modules.videoconf.model } if (vxml.@publishWindowVisible != undefined) { publishWindowVisible = (vxml.@publishWindowVisible.toString().toUpperCase() == "TRUE") ? true : false; - } - if (vxml.@presenterShareOnly != undefined) { - presenterShareOnly = (vxml.@presenterShareOnly.toString().toUpperCase() == "TRUE") ? true : false; } if (vxml.@controlsForPresenter != undefined) { controlsForPresenter = (vxml.@controlsForPresenter.toString().toUpperCase() == "TRUE") ? true : false; - } + } if (vxml.@viewerWindowMaxed != undefined) { viewerWindowMaxed = (vxml.@viewerWindowMaxed.toString().toUpperCase() == "TRUE") ? true : false; - } - if (vxml.@skipCamSettingsCheck != undefined) { - skipCamSettingsCheck = (vxml.@skipCamSettingsCheck.toString().toUpperCase() == "TRUE") ? true : false; - } + } + if (vxml.@skipCamSettingsCheck != undefined) { + skipCamSettingsCheck = (vxml.@skipCamSettingsCheck.toString().toUpperCase() == "TRUE") ? true : false; + } if (vxml.@viewerWindowLocation != undefined) { viewerWindowLocation = vxml.@viewerWindowLocation.toString().toUpperCase(); - } + } if (vxml.@viewerWindowLocation != undefined) { viewerWindowLocation = vxml.@viewerWindowLocation.toString().toUpperCase(); - } + } if (vxml.@smoothVideo != undefined) { smoothVideo = (vxml.@smoothVideo.toString().toUpperCase() == "TRUE") ? true : false; } @@ -140,41 +133,40 @@ package org.bigbluebutton.modules.videoconf.model if (vxml.@convolutionFilter != undefined) { var f:Array = vxml.@convolutionFilter.split(","); var fint:Array = new Array(); - for (var i:int=0; i < f.length; i++) { + for (var i:int = 0; i < f.length; i++) { convolutionFilter[i] = Number(f[i]); } } if (vxml.@filterBias != undefined) { filterBias = Number(vxml.@filterBias.toString()); - } + } if (vxml.@filterDivisor != undefined) { filterDivisor = Number(vxml.@filterDivisor.toString()); - } + } if (vxml.@baseTabIndex != undefined) { baseTabIndex = vxml.@baseTabIndex; - } - else{ + } else { baseTabIndex = 101; } - + if (vxml.@displayAvatar != undefined) { displayAvatar = (vxml.@displayAvatar.toString().toUpperCase() == "TRUE") ? true : false; } - + if (vxml.@focusTalking != undefined) { focusTalking = (vxml.@focusTalking.toString().toUpperCase() == "TRUE") ? true : false; } - + if (vxml.@glowColor != undefined) { glowColor = vxml.@glowColor.toString(); } - + if (vxml.@glowBlurSize != undefined) { glowBlurSize = Number(vxml.@glowBlurSize.toString()); - } + } if (vxml.@priorityRatio != undefined) { - priorityRatio = Number(vxml.@priorityRatio.toString()); + priorityRatio = Number(vxml.@priorityRatio.toString()); } } }