Merge branch 'master' into make-users-user-conn-invoke
Conflicts: bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java
This commit is contained in:
commit
3051b66072
@ -234,7 +234,7 @@ public String getJoinURLwithDynamicConfigXML(String username, String meetingID,
|
||||
|
||||
String base_url_create = BigBlueButtonURL + "api/create?";
|
||||
String base_url_join = BigBlueButtonURL + "api/join?";
|
||||
String base_url_setConfigXML = BigBlueButtonURL + "api/setConfigXML?";
|
||||
String base_url_setConfigXML = BigBlueButtonURL + "api/setConfigXML.xml?";
|
||||
|
||||
Random random = new Random();
|
||||
String voiceBridge_param = "&voiceBridge=" + (70000 + random.nextInt(9999));
|
||||
|
@ -266,6 +266,9 @@ bbb.shortcuthelp.dropdown.general = Global shortcuts
|
||||
bbb.shortcuthelp.dropdown.presentation = Presentation shortcuts
|
||||
bbb.shortcuthelp.dropdown.chat = Chat shortcuts
|
||||
bbb.shortcuthelp.dropdown.users = Users shortcuts
|
||||
bbb.shortcuthelp.dropdown.users = Users shortcuts
|
||||
bbb.shortcuthelp.dropdown.polling = Presenter Polling shortcuts
|
||||
bbb.shortcuthelp.dropdown.polling2 = Viewer Polling shortcuts
|
||||
|
||||
bbb.shortcutkey.general.minimize = 189
|
||||
bbb.shortcutkey.general.minimize.function = Minimize current window
|
||||
@ -290,7 +293,13 @@ bbb.shortcutkey.focus.video.function = Move focus to the Video dock
|
||||
bbb.shortcutkey.focus.presentation = 51
|
||||
bbb.shortcutkey.focus.presentation.function = Move focus to the Presentation window
|
||||
bbb.shortcutkey.focus.chat = 52
|
||||
bbb.shortcutkey.focus.chat.function = Move focus to the Chat window
|
||||
bbb.shortcutkey.focus.chat.function = Move focus to the Chat window
|
||||
bbb.shortcutkey.focus.pollingCreate = 67
|
||||
bbb.shortcutkey.focus.pollingCreate.function = Move focus to the Poll Creation window, if it is open.
|
||||
bbb.shortcutkey.focus.pollingStats = 83
|
||||
bbb.shortcutkey.focus.pollingStats.function = Move focus to the Poll Statistics window, if it is open.
|
||||
bbb.shortcutkey.focus.voting = 89
|
||||
bbb.shortcutkey.focus.voting.function = Move focus to the Voting window, if it is open.
|
||||
|
||||
bbb.shortcutkey.share.desktop = 68
|
||||
bbb.shortcutkey.share.desktop.function = Open desktop sharing window
|
||||
@ -398,7 +407,9 @@ bbb.polling.stats.didNotVote = Did Not Vote
|
||||
bbb.polling.stats.refresh = Refresh
|
||||
bbb.polling.stats.stopPoll = Stop Poll
|
||||
bbb.polling.stats.webPollURL = This poll is available at:
|
||||
bbb.polling.stats.votes = votes
|
||||
bbb.polling.stats.answer = Answers
|
||||
bbb.polling.stats.votes = Votes
|
||||
bbb.polling.stats.percentage = % Of Votes
|
||||
|
||||
bbb.polling.webPollClosed = Web polling has been closed.
|
||||
bbb.polling.pollClosed = Polling has been closed! The results are:
|
||||
@ -411,3 +422,46 @@ bbb.publishVideo.changeCameraBtn.labelText = Change Camera Settings
|
||||
|
||||
bbb.accessibility.alerts.madePresenter = You are now the Presenter.
|
||||
bbb.accessibility.alerts.madeViewer = You are now a Viewer.
|
||||
|
||||
bbb.shortcutkey.polling.buttonClick = 80
|
||||
bbb.shortcutkey.polling.buttonClick.function = Open the Polling Menu.
|
||||
bbb.shortcutkey.polling.focusTitle = 67
|
||||
bbb.shortcutkey.polling.focusTitle.function = Focus to Title input box.
|
||||
bbb.shortcutkey.polling.focusQuestion = 81
|
||||
bbb.shortcutkey.polling.focusQuestion.function = Focus to Question input box.
|
||||
bbb.shortcutkey.polling.focusAnswers = 65
|
||||
bbb.shortcutkey.polling.focusAnswers.function = Focus to Answers input box.
|
||||
bbb.shortcutkey.polling.focusMultipleCB = 77
|
||||
bbb.shortcutkey.polling.focusMultipleCB.function = Focus to "Allow multple selections" checkbox.
|
||||
bbb.shortcutkey.polling.focusWebPollCB = 66
|
||||
bbb.shortcutkey.polling.focusWebPollCB.function = Focus to "Enable web polling" checkbox.
|
||||
bbb.shortcutkey.polling.previewClick = 80
|
||||
bbb.shortcutkey.polling.previewClick.function = Preview your poll and proceed.
|
||||
bbb.shortcutkey.polling.cancelClick = 88
|
||||
bbb.shortcutkey.polling.cancelClick.function = Cancel and exit Poll creation.
|
||||
bbb.shortcutkey.polling.modify = 69
|
||||
bbb.shortcutkey.polling.modify.function = Go back and modify your poll.
|
||||
bbb.shortcutkey.polling.publish = 85
|
||||
bbb.shortcutkey.polling.publish.function = Publish your poll and open voting.
|
||||
bbb.shortcutkey.polling.save = 83
|
||||
bbb.shortcutkey.polling.save.function = Save your poll to use later.
|
||||
|
||||
bbb.shortcutkey.pollStats.explanation = ----
|
||||
bbb.shortcutkey.pollStats.explanation.function = Poll results are only available once the poll has been published.
|
||||
bbb.shortcutkey.polling.focusData = 68
|
||||
bbb.shortcutkey.polling.focusData.function = Focus to poll results.
|
||||
bbb.shortcutkey.polling.refresh = 82
|
||||
bbb.shortcutkey.polling.refresh.function = Refresh poll results.
|
||||
bbb.shortcutkey.polling.focusWebPoll = 73
|
||||
bbb.shortcutkey.polling.focusWebPoll.function = Focus to web polling URL box.
|
||||
bbb.shortcutkey.polling.stopPoll = 79
|
||||
bbb.shortcutkey.polling.stopPoll.function = Stop the poll and end voting.
|
||||
bbb.shortcutkey.polling.repostPoll = 80
|
||||
bbb.shortcutkey.polling.repostPoll.function = Re-publish the poll.
|
||||
bbb.shortcutkey.polling.closeStatsWindow = 88
|
||||
bbb.shortcutkey.polling.closeStatsWindow.function = Close Polling Results window.
|
||||
|
||||
bbb.shortcutkey.polling.vote = 86
|
||||
bbb.shortcutkey.polling.vote.function = Cast your vote for the options selected.
|
||||
bbb.shortcutkey.polling.focusVoteQuestion = 81
|
||||
bbb.shortcutkey.polling.focusVoteQuestion.function = Focus to question.
|
@ -47,7 +47,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
import org.bigbluebutton.main.events.ShortcutEvent;
|
||||
import org.bigbluebutton.main.views.MainApplicationShell;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
private var langResources:ResourceUtil = null; //ResourceUtil.getInstance();
|
||||
private var langResources:ResourceUtil = null;
|
||||
|
||||
private var globalModifier:String;
|
||||
/**
|
||||
@ -115,6 +115,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.flash.exit') as String)] = ShortcutEvent.FOCUS_AWAY_EVENT;
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.users.muteme') as String)] = ShortcutEvent.MUTE_ME_EVENT;
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.chat.chatinput') as String)] = ShortcutEvent.FOCUS_CHAT_INPUT;
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.focus.voting') as String)] = ShortcutEvent.FOCUS_VOTING_WINDOW;
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.focus.pollingCreate') as String)] = ShortcutEvent.FOCUS_POLLING_WINDOW_CREATE;
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.focus.pollingStats') as String)] = ShortcutEvent.FOCUS_POLLING_WINDOW_STATS;
|
||||
|
||||
// General hotKeys (usable from anywhere in the application)
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.focus.users') as String)] = ShortcutEvent.FOCUS_USERS_WINDOW;
|
||||
@ -130,6 +133,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.logout') as String)] = ShortcutEvent.LOGOUT;
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.raiseHand') as String)] = ShortcutEvent.RAISE_HAND;
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.users.muteAllButPres') as String)] = ShortcutEvent.MUTE_ALL_BUT_PRES;
|
||||
|
||||
keyCombos[globalModifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.buttonClick') as String)] = ShortcutEvent.POLL_BUTTON_CLICK;
|
||||
}
|
||||
|
||||
public function hotkeyCapture():void{
|
||||
@ -150,6 +155,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
}
|
||||
|
||||
if (keyCombos[keyPress]) {
|
||||
//LogUtil.debug("Caught shortcut: " + keyCombos[keyPress]);
|
||||
globalDispatcher.dispatchEvent(new ShortcutEvent(keyCombos[keyPress]));
|
||||
}
|
||||
}
|
||||
|
@ -70,8 +70,32 @@ package org.bigbluebutton.main.events {
|
||||
public static const FOCUS_CHAT_BOX:String = 'FOCUS_CHAT_BOX';
|
||||
public static const CHANGE_FONT_COLOUR:String = 'CHANGE_FONT_COLOUR';
|
||||
public static const SEND_MESSAGE:String = 'SEND_MESSAGE';
|
||||
|
||||
public static const FOCUS_SHORTCUT_BUTTON:String = 'FOCUS_SHORTCUT_BUTTON';
|
||||
public static const MUTE_ALL_BUT_PRES:String = 'MUTE_ALL_BUT_PRES';
|
||||
|
||||
public static const MUTE_ALL_BUT_PRES:String = 'MUTE_ALL_BUT_PRES';
|
||||
public static const CLOSE_POLL_STATS:String = 'CLOSE_POLL_STATS';
|
||||
public static const FOCUS_MULT_CHECK:String = 'FOCUS_MULT_CHECK';
|
||||
public static const FOCUS_POLL_ANSWERS:String = 'FOCUS_POLL_ANSWERS';
|
||||
public static const FOCUS_POLL_DATA:String = 'FOCUS_POLL_DATA';
|
||||
public static const FOCUS_POLL_TITLE:String = 'FOCUS_POLL_TITLE';
|
||||
public static const FOCUS_POLL_QUESTION:String = 'FOCUS_POLL_QUESTION';
|
||||
public static const FOCUS_POLLING_WINDOW_CREATE:String = 'FOCUS_POLLING_WINDOW_CREATE';
|
||||
public static const FOCUS_POLLING_WINDOW_STATS:String = 'FOCUS_POLLING_WINDOW_STATS';
|
||||
public static const FOCUS_VOTE_QUESTION:String = 'FOCUS_VOTE_QUESTION';
|
||||
public static const FOCUS_VOTING_WINDOW:String = 'FOCUS_VOTING_WINDOW';
|
||||
public static const FOCUS_WEBPOLL_ADDRESS:String = 'FOCUS_WEBPOLL_ADDRESS';
|
||||
public static const FOCUS_WEBPOLL_CHECK:String = 'FOCUS_WEBPOLL_CHECK';
|
||||
public static const POLL_BUTTON_CLICK:String = 'POLL_BUTTON_CLICK';
|
||||
public static const POLL_CANCEL:String = 'POLL_CANCEL';
|
||||
public static const POLL_MODIFY:String = 'POLL_MODIFY';
|
||||
public static const POLL_PREVIEW:String = 'POLL_PREVIEW';
|
||||
public static const POLL_PUBLISH:String = 'POLL_PUBLISH';
|
||||
public static const POLL_SAVE:String = 'POLL_SAVE';
|
||||
public static const REMOTE_CAST_VOTE:String = 'REMOTE_CAST_VOTE';
|
||||
public static const SC_REFRESH_POLL:String = 'SC_REFRESH_POLL';
|
||||
public static const SC_REPOST_POLL:String = 'SC_REPOST_POLL';
|
||||
public static const SC_STOP_POLL:String = 'SC_STOP_POLL';
|
||||
|
||||
// Temporary string to help fix chat message navigation for screen readers
|
||||
public static const CHAT_DEBUG:String = 'CHAT_DEBUG';
|
||||
|
@ -222,7 +222,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
mdiCanvas.windowManager.add(scWindow);
|
||||
mdiCanvas.windowManager.absPos(scWindow, mdiCanvas.width/2 - 150, mdiCanvas.height/2 - 150);
|
||||
|
||||
scWindow.focusCategories();
|
||||
scWindow.focusHead();
|
||||
}
|
||||
|
||||
private function toggleFullScreen():void{
|
||||
|
@ -33,6 +33,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
<mate:Listener type="{SettingsEvent.SETTINGS_MODULE_LOADED}" method="showSettingsButton" />
|
||||
<mate:Listener type="{ShortcutEvent.REMOTE_OPEN_SHORTCUT_WIN}" method="remoteShortcutClick" />
|
||||
<mate:Listener type="{ShortcutEvent.LOGOUT}" method="remoteLogout" />
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_SHORTCUT_BUTTON}" method="focusShortcutButton" />
|
||||
|
||||
|
||||
<mx:Script>
|
||||
@ -252,6 +253,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
var d:Dispatcher = new Dispatcher();
|
||||
d.dispatchEvent(new ShortcutEvent(ShortcutEvent.OPEN_SHORTCUT_WIN));
|
||||
}
|
||||
|
||||
private function focusShortcutButton(e:ShortcutEvent):void{
|
||||
shortcutKeysBtn.setFocus();
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
@ -119,6 +119,7 @@ $Id: $
|
||||
|
||||
private function toggleMuteMeState(event:ShortcutEvent = null):void{
|
||||
if (UserManager.getInstance().getConference().voiceJoined) {
|
||||
this.setFocus();
|
||||
if (UserManager.getInstance().getConference().voiceLocked && !UserManager.getInstance().getConference().amIModerator()) return;
|
||||
|
||||
var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
|
||||
|
@ -29,10 +29,13 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
title="{ResourceUtil.getInstance().getString('bbb.shortcuthelp.title')}" >
|
||||
|
||||
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
|
||||
<mate:Listener type="{MDIWindowEvent.CLOSE}" method="focusButton" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import flash.events.Event;
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
import flexlib.mdi.events.MDIWindowEvent;
|
||||
|
||||
import flexlib.controls.textClasses.StringBoundaries;
|
||||
|
||||
@ -48,13 +51,16 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
private var presKeys:ArrayList;
|
||||
private var chatKeys:ArrayList;
|
||||
private var userKeys:ArrayList;
|
||||
private var pollKeys:ArrayList;
|
||||
private var pollVoteKeys:ArrayList;
|
||||
|
||||
private var genResource:Array = ['bbb.shortcutkey.general.minimize', 'bbb.shortcutkey.general.maximize', 'bbb.shortcutkey.flash.exit',
|
||||
'bbb.shortcutkey.focus.users', 'bbb.shortcutkey.focus.video', 'bbb.shortcutkey.focus.presentation',
|
||||
'bbb.shortcutkey.focus.chat', 'bbb.shortcutkey.chat.chatinput', 'bbb.shortcutkey.share.desktop',
|
||||
'bbb.shortcutkey.share.microphone', 'bbb.shortcutkey.share.webcam', 'bbb.shortcutkey.shortcutWindow',
|
||||
'bbb.shortcutkey.focus.chat', 'bbb.shortcutkey.focus.pollingCreate', 'bbb.shortcutkey.focus.pollingStats',
|
||||
'bbb.shortcutkey.focus.voting', 'bbb.shortcutkey.share.microphone', 'bbb.shortcutkey.share.desktop',
|
||||
'bbb.shortcutkey.share.webcam', 'bbb.shortcutkey.polling.buttonClick', 'bbb.shortcutkey.shortcutWindow',
|
||||
'bbb.shortcutkey.logout', 'bbb.shortcutkey.raiseHand', 'bbb.shortcutkey.users.muteme',
|
||||
'bbb.shortcutkey.users.muteAllButPres'];
|
||||
'bbb.shortcutkey.users.muteAllButPres', 'bbb.shortcutkey.chat.chatinput'];
|
||||
|
||||
private var presResource:Array = ['bbb.shortcutkey.present.focusslide', /*'bbb.shortcutkey.whiteboard.undo',*/ 'bbb.shortcutkey.present.upload',
|
||||
'bbb.shortcutkey.present.previous', 'bbb.shortcutkey.present.select', 'bbb.shortcutkey.present.next',
|
||||
@ -68,6 +74,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
private var userResource:Array = ['bbb.shortcutkey.users.focusUsers', 'bbb.shortcutkey.users.makePresenter', 'bbb.shortcutkey.users.mute',
|
||||
/*'bbb.shortcutkey.users.kick',*/ 'bbb.shortcutkey.users.muteall'];
|
||||
|
||||
private var pollResource:Array = ['bbb.shortcutkey.polling.focusTitle', 'bbb.shortcutkey.polling.focusQuestion', 'bbb.shortcutkey.polling.focusAnswers',
|
||||
'bbb.shortcutkey.polling.focusMultipleCB', 'bbb.shortcutkey.polling.focusWebPollCB', 'bbb.shortcutkey.polling.previewClick',
|
||||
'bbb.shortcutkey.polling.cancelClick', 'bbb.shortcutkey.polling.modify', 'bbb.shortcutkey.polling.publish',
|
||||
'bbb.shortcutkey.polling.save', 'bbb.shortcutkey.pollStats.explanation', 'bbb.shortcutkey.polling.focusWebPoll',
|
||||
'bbb.shortcutkey.polling.focusData', 'bbb.shortcutkey.polling.refresh', 'bbb.shortcutkey.polling.stopPoll',
|
||||
'bbb.shortcutkey.polling.repostPoll', 'bbb.shortcutkey.polling.closeStatsWindow'];
|
||||
|
||||
private var pollVoteResource:Array = ['bbb.shortcutkey.polling.focusVoteQuestion', 'bbb.shortcutkey.polling.vote'];
|
||||
|
||||
[Bindable]
|
||||
private var shownKeys:ArrayCollection;
|
||||
|
||||
@ -97,10 +112,18 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
presKeys = loadKeys(presResource);
|
||||
chatKeys = loadKeys(chatResource);
|
||||
userKeys = loadKeys(userResource);
|
||||
pollKeys = loadKeys(pollResource);
|
||||
pollVoteKeys = loadKeys(pollVoteResource);
|
||||
|
||||
changeArray();
|
||||
}
|
||||
|
||||
public override function close(event:MouseEvent = null):void{
|
||||
var dispatcher:Dispatcher = new Dispatcher();
|
||||
dispatcher.dispatchEvent(new ShortcutEvent(ShortcutEvent.FOCUS_SHORTCUT_BUTTON));
|
||||
super.close(event);
|
||||
}
|
||||
|
||||
private function changeArray():void {
|
||||
shownKeys = new ArrayCollection();
|
||||
switch(categories.selectedIndex) {
|
||||
@ -116,6 +139,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
case 3: //Users
|
||||
shownKeys.addAll(userKeys);
|
||||
break;
|
||||
case 4: //Polling, Presenter
|
||||
shownKeys.addAll(pollKeys);
|
||||
break;
|
||||
case 5: //Polling, Viewer
|
||||
shownKeys.addAll(pollVoteKeys);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -189,6 +218,16 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
focusManager.setFocus(keyList);
|
||||
keyList.drawFocus(true);
|
||||
}
|
||||
|
||||
public function focusHead():void {
|
||||
focusManager.setFocus(titleBarOverlay);
|
||||
}
|
||||
|
||||
public function focusButton(e:MDIWindowEvent):void{
|
||||
LogUtil.debug("Caught close event from window");
|
||||
var dispatcher:Dispatcher = new Dispatcher();
|
||||
dispatcher.dispatchEvent(new ShortcutEvent(ShortcutEvent.FOCUS_SHORTCUT_BUTTON));
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
@ -201,6 +240,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
<mx:String>{ResourceUtil.getInstance().getString("bbb.shortcuthelp.dropdown.presentation")}</mx:String>
|
||||
<mx:String>{ResourceUtil.getInstance().getString("bbb.shortcuthelp.dropdown.chat")}</mx:String>
|
||||
<mx:String>{ResourceUtil.getInstance().getString("bbb.shortcuthelp.dropdown.users")}</mx:String>
|
||||
<mx:String>{ResourceUtil.getInstance().getString("bbb.shortcuthelp.dropdown.polling")}</mx:String>
|
||||
<mx:String>{ResourceUtil.getInstance().getString("bbb.shortcuthelp.dropdown.polling2")}</mx:String>
|
||||
</mx:ArrayCollection>
|
||||
</mx:ComboBox>
|
||||
<mx:DataGrid id="keyList" draggableColumns="false" dataProvider="{shownKeys}" width="100%" height="100%" tabIndex="{baseIndex + 15}" >
|
||||
|
@ -118,7 +118,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
private function onCreationComplete():void{
|
||||
// Start the timer for screen-reader-friendly chat notifications
|
||||
notificationTimer.addEventListener(TimerEvent.TIMER, checkNotifications);
|
||||
notificationTimer.start();
|
||||
// Timer removed. Better method must be found for accessible notifications.
|
||||
// notificationTimer.start();
|
||||
|
||||
openChatBoxFor(PUBLIC_CHAT_USERID, true);
|
||||
makePublicChatUncloseable();
|
||||
|
@ -30,6 +30,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
implements="org.bigbluebutton.common.IBbbToolbarComponent">
|
||||
|
||||
<mate:Listener type="{ShortcutEvent.SHARE_DESKTOP}" method="remoteClick" />
|
||||
<mate:Listener type="{ShareWindowEvent.CLOSE}" method="closeFocus" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -132,6 +133,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
public function theory():String{
|
||||
return "Deskshare button";
|
||||
}
|
||||
|
||||
// Moves focus back to the toolbar button when the desktop sharing window closes, for accessibility
|
||||
public function closeFocus(e:ShareWindowEvent):void{
|
||||
this.setFocus();
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:Button>
|
||||
|
1
bigbluebutton-client/src/org/bigbluebutton/modules/polling/events/PollGetTitlesEvent.as
Normal file → Executable file
1
bigbluebutton-client/src/org/bigbluebutton/modules/polling/events/PollGetTitlesEvent.as
Normal file → Executable file
@ -26,6 +26,7 @@ package org.bigbluebutton.modules.polling.events
|
||||
public static const UPDATE:String = "UPDATE_GET_TITLES";
|
||||
public static const CHECK:String = "GET_TITLES_CHECK";
|
||||
public static const RETURN:String = "GET_TITLES_RETURN";
|
||||
public static const REMOTE_CHECK:String = "REMOTE_CHECK"
|
||||
public var titleList:Array;
|
||||
|
||||
public function PollGetTitlesEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
|
||||
|
1
bigbluebutton-client/src/org/bigbluebutton/modules/polling/events/PollReturnTitlesEvent.as
Normal file → Executable file
1
bigbluebutton-client/src/org/bigbluebutton/modules/polling/events/PollReturnTitlesEvent.as
Normal file → Executable file
@ -23,6 +23,7 @@ package org.bigbluebutton.modules.polling.events
|
||||
public class PollReturnTitlesEvent extends Event
|
||||
{
|
||||
public static const UPDATE:String = "UPDATE_RETURN_TITLES";
|
||||
public static const REMOTE_RETURN:String = "REMOTE_RETURN";
|
||||
public var titleList:Array;
|
||||
|
||||
public function PollReturnTitlesEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
|
||||
|
@ -17,10 +17,12 @@ package org.bigbluebutton.modules.polling.managers
|
||||
import org.bigbluebutton.modules.polling.service.PollingService;
|
||||
|
||||
import org.bigbluebutton.core.managers.UserManager;
|
||||
import org.bigbluebutton.main.model.users.Conference
|
||||
import org.bigbluebutton.main.model.users.Conference;
|
||||
import org.bigbluebutton.main.model.users.BBBUser;
|
||||
import org.bigbluebutton.common.Role;
|
||||
|
||||
import org.bigbluebutton.main.events.ShortcutEvent;
|
||||
import flash.events.TimerEvent;
|
||||
import flash.utils.Timer;
|
||||
|
||||
public class PollingManager
|
||||
{
|
||||
@ -36,7 +38,7 @@ package org.bigbluebutton.modules.polling.managers
|
||||
public var pollKey:String;
|
||||
public var participants:int;
|
||||
private var conference:Conference;
|
||||
|
||||
private var synchTimer:Timer;
|
||||
|
||||
|
||||
public function PollingManager()
|
||||
@ -82,7 +84,9 @@ package org.bigbluebutton.modules.polling.managers
|
||||
public function handleClosePollingInstructionsWindowEvent(e:PollingInstructionsWindowEvent):void {
|
||||
viewWindowManager.handleClosePollingInstructionsWindow(e);
|
||||
toolbarButtonManager.enableToolbarButton();
|
||||
toolbarButtonManager.focusToolbarButton();
|
||||
}
|
||||
|
||||
//Opening Instructions Window
|
||||
public function handleOpenPollingInstructionsWindowEvent(e:PollingInstructionsWindowEvent):void {
|
||||
viewWindowManager.appFM = toolbarButtonManager.appFM;
|
||||
@ -194,8 +198,17 @@ package org.bigbluebutton.modules.polling.managers
|
||||
|
||||
// Make a call to the service to update the list of titles and statuses for the Polling Menu
|
||||
public function handleInitializePollMenuEvent(e:PollGetTitlesEvent):void{
|
||||
toolbarButtonManager.button.roomID = module.getRoom();
|
||||
service.initializePollingMenu(module.getRoom());
|
||||
if (module != null && module.getRoom() != null){
|
||||
toolbarButtonManager.button.roomID = module.getRoom();
|
||||
service.initializePollingMenu(module.getRoom());
|
||||
}
|
||||
}
|
||||
|
||||
public function handleRemoteInitializePollMenuEvent(e:PollGetTitlesEvent):void{
|
||||
if (module != null && module.getRoom() != null){
|
||||
toolbarButtonManager.button.roomID = module.getRoom();
|
||||
service.initializePollingMenuRemotely(module.getRoom());
|
||||
}
|
||||
}
|
||||
|
||||
public function handleUpdateTitlesEvent(e:PollGetTitlesEvent):void{
|
||||
@ -206,6 +219,22 @@ package org.bigbluebutton.modules.polling.managers
|
||||
public function handleReturnTitlesEvent(e:PollReturnTitlesEvent):void{
|
||||
toolbarButtonManager.button.titleList = e.titleList;
|
||||
}
|
||||
|
||||
public function handleRemoteReturnTitlesEvent(e:PollReturnTitlesEvent):void{
|
||||
toolbarButtonManager.button.titleList = e.titleList;
|
||||
// This timer gives the earlier NetConnection.call time to finish and deliver what it was sent out to get.
|
||||
synchTimer = new Timer((1000*0.01));
|
||||
synchTimer.addEventListener(TimerEvent.TIMER, remoteOpen);
|
||||
synchTimer.start();
|
||||
}
|
||||
|
||||
private function remoteOpen(e:TimerEvent):void{
|
||||
if (synchTimer != null){
|
||||
synchTimer.removeEventListener(TimerEvent.TIMER, remoteOpen);
|
||||
synchTimer = null;
|
||||
toolbarButtonManager.button.remoteOpenPollingMenu();
|
||||
}
|
||||
}
|
||||
|
||||
public function handleGetPollEvent(e:PollGetPollEvent):void{
|
||||
service.getPoll(e.pollKey, "menu");
|
||||
@ -250,5 +279,11 @@ package org.bigbluebutton.modules.polling.managers
|
||||
viewWindowManager.handleReviewResultsEvent(e);
|
||||
}
|
||||
//##################################################################################
|
||||
public function handleGlobalPollHotkey(e:ShortcutEvent):void{
|
||||
conference = UserManager.getInstance().getConference();
|
||||
if (conference.amIPresenter){
|
||||
toolbarButtonManager.openMenuRemotely();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ package org.bigbluebutton.modules.polling.managers
|
||||
public static const LOGNAME:String = "[Polling :: ToolBarButtonManager] ";
|
||||
|
||||
public function ToolbarButtonManager() {
|
||||
LogUtil.debug(LOGNAME + " initialized ***************************************************************** ")
|
||||
//LogUtil.debug(LOGNAME + " initialized ***************************************************************** ")
|
||||
globalDispatcher = new Dispatcher();
|
||||
button = new ToolbarButton();
|
||||
}
|
||||
@ -54,6 +54,7 @@ package org.bigbluebutton.modules.polling.managers
|
||||
globalDispatcher.dispatchEvent(event);
|
||||
buttonShownOnToolbar = true;
|
||||
button.enabled = true;
|
||||
button.id = "pollButton";
|
||||
appFM = button.focusManager;
|
||||
}
|
||||
}
|
||||
@ -70,11 +71,27 @@ package org.bigbluebutton.modules.polling.managers
|
||||
public function enableToolbarButton():void {
|
||||
button.enabled = true;
|
||||
}
|
||||
|
||||
public function focusToolbarButton():void {
|
||||
appFM.setFocus(button);
|
||||
button.notifyPosition();
|
||||
}
|
||||
|
||||
public function disableToolbarButton():void {
|
||||
appFM.setFocus(button.focusManager.getNextFocusManagerComponent());
|
||||
button.enabled = false;
|
||||
}
|
||||
|
||||
public function openMenuRemotely():Boolean{
|
||||
var rValue:Boolean = true;
|
||||
if (button.enabled){
|
||||
button.updateMenuByShortcut();
|
||||
}
|
||||
else{
|
||||
rValue = false;
|
||||
}
|
||||
return rValue;
|
||||
}
|
||||
// _Button
|
||||
}
|
||||
}
|
||||
|
12
bigbluebutton-client/src/org/bigbluebutton/modules/polling/maps/PollingEventMap.mxml
Normal file → Executable file
12
bigbluebutton-client/src/org/bigbluebutton/modules/polling/maps/PollingEventMap.mxml
Normal file → Executable file
@ -26,6 +26,7 @@
|
||||
import mx.events.FlexEvent;
|
||||
import org.bigbluebutton.main.events.MadePresenterEvent;
|
||||
import org.bigbluebutton.main.events.BBBEvent;
|
||||
import org.bigbluebutton.main.events.ShortcutEvent;
|
||||
|
||||
import org.bigbluebutton.modules.polling.managers.PollingManager;
|
||||
|
||||
@ -129,11 +130,16 @@
|
||||
<EventHandlers type="{PollGetTitlesEvent.UPDATE}">
|
||||
<MethodInvoker generator="{PollingManager}" method="handleUpdateTitlesEvent" arguments="{event}"/>
|
||||
</EventHandlers>
|
||||
<EventHandlers type="{PollGetTitlesEvent.REMOTE_CHECK}">
|
||||
<MethodInvoker generator="{PollingManager}" method="handleRemoteInitializePollMenuEvent" arguments="{event}"/>
|
||||
</EventHandlers>
|
||||
|
||||
<EventHandlers type="{PollReturnTitlesEvent.UPDATE}">
|
||||
<MethodInvoker generator="{PollingManager}" method="handleReturnTitlesEvent" arguments="{event}"/>
|
||||
</EventHandlers>
|
||||
|
||||
<EventHandlers type="{PollReturnTitlesEvent.REMOTE_RETURN}">
|
||||
<MethodInvoker generator="{PollingManager}" method="handleRemoteReturnTitlesEvent" arguments="{event}"/>
|
||||
</EventHandlers>
|
||||
|
||||
<EventHandlers type="{PollGetPollEvent.INIT}">
|
||||
<MethodInvoker generator="{PollingManager}" method="handlePopulateMenuEvent" arguments="{event}"/>
|
||||
@ -164,4 +170,8 @@
|
||||
<EventHandlers type="{GenerateWebKeyEvent.RETURN}">
|
||||
<MethodInvoker generator="{PollingManager}" method="handleReturnWebKeyEvent" arguments="{event}"/>
|
||||
</EventHandlers>
|
||||
|
||||
<EventHandlers type="{ShortcutEvent.POLL_BUTTON_CLICK}">
|
||||
<MethodInvoker generator="{PollingManager}" method="handleGlobalPollHotkey" arguments="{event}"/>
|
||||
</EventHandlers>
|
||||
</EventMap>
|
||||
|
@ -85,6 +85,30 @@ package org.bigbluebutton.modules.polling.service
|
||||
public function initializePollingMenu(roomID:String):void{
|
||||
|
||||
}
|
||||
|
||||
public function initializePollingMenuRemotely(roomID:String):void{
|
||||
nc.call("poll.titleList", new Responder(titleSuccess, titleFailure));
|
||||
//--------------------------------------//
|
||||
// Responder functions
|
||||
function titleSuccess(obj:Object):void{
|
||||
LogUtil.debug("REMOTE_POLL_MENU_INIT: Entering NC CALL SUCCESS section");
|
||||
var event:PollReturnTitlesEvent = new PollReturnTitlesEvent(PollReturnTitlesEvent.REMOTE_RETURN);
|
||||
event.titleList = obj as Array;
|
||||
// Append roomID to each item in titleList, call getPoll on that key, add the result to pollList back in ToolBarButton
|
||||
for (var i:int = 0; i < event.titleList.length; i++){
|
||||
var pollKey:String = roomID +"-"+ event.titleList[i];
|
||||
getPoll(pollKey, "initialize");
|
||||
}
|
||||
// This dispatch populates the titleList back in the Menu; the pollList is populated one item at a time in the for-loop
|
||||
LogUtil.debug("PollingService.initializePollingMenuRemotely, dispatching PollReturnTitlesEvent.REMOTE_RETURN");
|
||||
dispatcher.dispatchEvent(event);
|
||||
}
|
||||
function titleFailure(obj:Object):void{
|
||||
LogUtil.error(LOGNAME+"Responder object failure in INITALIZE POLLING MENU NC.CALL");
|
||||
LogUtil.error("Failure object tostring is: " + obj.toString());
|
||||
}
|
||||
//--------------------------------------//
|
||||
}
|
||||
|
||||
public function updateTitles():void{
|
||||
|
||||
|
@ -27,6 +27,19 @@ Notes.mxml is the main view of the SharedNotes application
|
||||
creationComplete="onCreationComplete()"
|
||||
label="Create Poll" layout="absolute"
|
||||
title="{ResourceUtil.getInstance().getString('bbb.polling.createPoll')}">
|
||||
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_POLL_TITLE}" method="focusTitle" />
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_POLL_QUESTION}" method="focusQuestion" />
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_POLL_ANSWERS}" method="focusAnswers" />
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_MULT_CHECK}" method="focusMultiple" />
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_WEBPOLL_CHECK}" method="focusWebpoll" />
|
||||
|
||||
<mate:Listener type="{ShortcutEvent.POLL_PREVIEW}" method="previewClick" />
|
||||
<mate:Listener type="{ShortcutEvent.POLL_CANCEL}" method="cancelClick" />
|
||||
|
||||
<mate:Listener type="{ShortcutEvent.POLL_MODIFY}" method="modifyClick" />
|
||||
<mate:Listener type="{ShortcutEvent.POLL_PUBLISH}" method="publishClick" />
|
||||
<mate:Listener type="{ShortcutEvent.POLL_SAVE}" method="saveClick" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -88,6 +101,8 @@ Notes.mxml is the main view of the SharedNotes application
|
||||
[Bindable] public var editing:Boolean;
|
||||
[Bindable] public var pollOptions:PollOptions;
|
||||
[Bindable] private var baseIndex:int;
|
||||
|
||||
private var keyCombos:Object;
|
||||
|
||||
// LENGTH CONSTRAINTS ( CHANGE IF YOU NEED)
|
||||
//################################################
|
||||
@ -110,6 +125,8 @@ Notes.mxml is the main view of the SharedNotes application
|
||||
private function onCreationComplete():void{
|
||||
published = false;
|
||||
|
||||
hotkeyCapture();
|
||||
|
||||
titleBarOverlay.tabIndex = baseIndex;
|
||||
minimizeBtn.tabIndex = baseIndex+1;
|
||||
maximizeRestoreBtn.tabIndex = baseIndex+2;
|
||||
@ -137,6 +154,38 @@ Notes.mxml is the main view of the SharedNotes application
|
||||
this.module = module;
|
||||
focusManager.setFocus(titleBarOverlay);
|
||||
}
|
||||
|
||||
private function hotkeyCapture():void{
|
||||
this.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
|
||||
//ResourceUtil.getInstance().addEventListener(Event.CHANGE, localeChanged); // Listen for locale changing
|
||||
}
|
||||
|
||||
private function handleKeyDown(e:KeyboardEvent) :void {
|
||||
var modifier:String = ExternalInterface.call("determineModifier");
|
||||
loadKeyCombos(modifier);
|
||||
var keyPress:String = (e.ctrlKey ? "control+" : "") +
|
||||
(e.shiftKey ? "shift+" : "") +
|
||||
(e.altKey ? "alt+" : "") + e.keyCode;
|
||||
LogUtil.debug("Polling Instructions: modifier is " + modifier);
|
||||
if (keyCombos[keyPress]) {
|
||||
LogUtil.debug("Dispatching event " + keyCombos[keyPress]);
|
||||
dispatchEvent(new ShortcutEvent(keyCombos[keyPress]));
|
||||
}
|
||||
}
|
||||
|
||||
private function loadKeyCombos(modifier:String):void {
|
||||
keyCombos = new Object(); // always start with a fresh array
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusTitle') as String)] = ShortcutEvent.FOCUS_POLL_TITLE;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusQuestion') as String)] = ShortcutEvent.FOCUS_POLL_QUESTION;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusAnswers') as String)] = ShortcutEvent.FOCUS_POLL_ANSWERS;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusMultipleCB') as String)] = ShortcutEvent.FOCUS_MULT_CHECK;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusWebPollCB') as String)] = ShortcutEvent.FOCUS_WEBPOLL_CHECK;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.previewClick') as String)] = ShortcutEvent.POLL_PREVIEW;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.cancelClick') as String)] = ShortcutEvent.POLL_CANCEL;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.modify') as String)] = ShortcutEvent.POLL_MODIFY;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.publish') as String)] = ShortcutEvent.POLL_PUBLISH;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.save') as String)] = ShortcutEvent.POLL_SAVE;
|
||||
}
|
||||
|
||||
// Overwritting close to use custom function
|
||||
override public function close(event:MouseEvent = null):void {
|
||||
@ -337,6 +386,52 @@ Notes.mxml is the main view of the SharedNotes application
|
||||
focusManager.setFocus(pollTitle);
|
||||
}
|
||||
}
|
||||
private function focusQuestion(e:ShortcutEvent):void{
|
||||
if (pollQuestion.enabled && pollQuestion.visible){
|
||||
focusManager.setFocus(pollQuestion);
|
||||
}
|
||||
}
|
||||
private function focusAnswers(e:ShortcutEvent):void{
|
||||
if (pollAnswers.enabled && pollAnswers.visible){
|
||||
focusManager.setFocus(pollAnswers);
|
||||
}
|
||||
}
|
||||
private function focusMultiple(e:ShortcutEvent):void{
|
||||
if (multiple_response.enabled && multiple_response.visible){
|
||||
focusManager.setFocus(multiple_response);
|
||||
}
|
||||
}
|
||||
private function focusWebpoll(e:ShortcutEvent):void{
|
||||
if (publishToWeb_response.enabled && publishToWeb_response.visible){
|
||||
focusManager.setFocus(publishToWeb_response);
|
||||
}
|
||||
}
|
||||
private function previewClick(e:ShortcutEvent):void{
|
||||
if (next.enabled && next.visible){
|
||||
validateAndSubmit();
|
||||
}
|
||||
}
|
||||
private function cancelClick(e:ShortcutEvent):void{
|
||||
if (Cancel.enabled && Cancel.visible){
|
||||
closeInstructionsWindow();
|
||||
}
|
||||
}
|
||||
|
||||
private function modifyClick(e:ShortcutEvent):void{
|
||||
if (back.enabled && back.visible){
|
||||
goBack();
|
||||
}
|
||||
}
|
||||
private function publishClick(e:ShortcutEvent):void{
|
||||
if (publishButton.enabled && publishButton.visible){
|
||||
publish();
|
||||
}
|
||||
}
|
||||
private function saveClick(e:ShortcutEvent):void{
|
||||
if (SavePoll.enabled && SavePoll.visible){
|
||||
savePoll();
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
<mx:VBox width="100%" height="100%">
|
||||
|
@ -31,6 +31,14 @@
|
||||
title="{ResourceUtil.getInstance().getString('bbb.polling.toolbar.toolTip')}"
|
||||
layout="absolute"
|
||||
>
|
||||
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_WEBPOLL_ADDRESS}" method="focusWebPollBox" />
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_POLL_DATA}" method="focusDataGrid" />
|
||||
<mate:Listener type="{ShortcutEvent.SC_REFRESH_POLL}" method="remoteRefresh" />
|
||||
<mate:Listener type="{ShortcutEvent.SC_STOP_POLL}" method="remoteStop" />
|
||||
|
||||
<mate:Listener type="{ShortcutEvent.SC_REPOST_POLL}" method="remoteRepost" />
|
||||
<mate:Listener type="{ShortcutEvent.CLOSE_POLL_STATS}" method="remoteClose" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -56,6 +64,7 @@
|
||||
import org.bigbluebutton.main.model.users.BBBUser;
|
||||
import org.bigbluebutton.main.model.users.Conference;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
import org.bigbluebutton.main.events.ShortcutEvent;
|
||||
import org.bigbluebutton.modules.chat.events.SendPublicChatMessageEvent;
|
||||
import org.bigbluebutton.modules.polling.events.GenerateWebKeyEvent;
|
||||
import org.bigbluebutton.modules.polling.events.PollRefreshEvent;
|
||||
@ -92,6 +101,7 @@
|
||||
private var notified:Boolean;
|
||||
private var refreshTimer:Timer = new Timer(1000);
|
||||
[Bindable] private var answerCollection:ArrayCollection = new ArrayCollection();
|
||||
private var keyCombos:Object;
|
||||
|
||||
private function init():void{
|
||||
pollOptions = new PollOptions();
|
||||
@ -119,6 +129,8 @@
|
||||
|
||||
|
||||
private function onCreationComplete():void{
|
||||
hotkeyCapture();
|
||||
|
||||
titleBarOverlay.accessibilityName = ResourceUtil.getInstance().getString('bbb.polling.stats.accessTitle', [trackingPoll.title]);
|
||||
titleBarOverlay.tabIndex = baseIndex;
|
||||
minimizeBtn.tabIndex = baseIndex+1;
|
||||
@ -155,8 +167,35 @@
|
||||
height = height + ((lines+1) * 45);
|
||||
createResultsTable(answers.length, answers);
|
||||
focusManager.setFocus(titleBarOverlay);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function hotkeyCapture():void{
|
||||
this.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
|
||||
//ResourceUtil.getInstance().addEventListener(Event.CHANGE, localeChanged); // Listen for locale changing
|
||||
}
|
||||
|
||||
private function handleKeyDown(e:KeyboardEvent) :void {
|
||||
var modifier:String = ExternalInterface.call("determineModifier");
|
||||
loadKeyCombos(modifier);
|
||||
var keyPress:String = (e.ctrlKey ? "control+" : "") +
|
||||
(e.shiftKey ? "shift+" : "") +
|
||||
(e.altKey ? "alt+" : "") + e.keyCode;
|
||||
if (keyCombos[keyPress]) {
|
||||
dispatchEvent(new ShortcutEvent(keyCombos[keyPress]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function loadKeyCombos(modifier:String):void {
|
||||
keyCombos = new Object(); // always start with a fresh array
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusData') as String)] = ShortcutEvent.FOCUS_POLL_DATA;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.refresh') as String)] = ShortcutEvent.SC_REFRESH_POLL;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusWebPoll') as String)] = ShortcutEvent.FOCUS_WEBPOLL_ADDRESS;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.stopPoll') as String)] = ShortcutEvent.SC_STOP_POLL;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.closeStatsWindow') as String)] = ShortcutEvent.CLOSE_POLL_STATS;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.repostPoll') as String)] = ShortcutEvent.SC_REPOST_POLL;
|
||||
}
|
||||
|
||||
public function setUrlBoxText():void{
|
||||
webPollURLBox.text = webPollUrl;
|
||||
webPollURLBox.accessibilityName = ResourceUtil.getInstance().getString('bbb.polling.stats.webPollBoxAccessName', [webPollUrl]);
|
||||
@ -269,6 +308,48 @@
|
||||
pso.percentage = "";
|
||||
return pso;
|
||||
}
|
||||
|
||||
private function focusWebPollBox(e:ShortcutEvent):void{
|
||||
if (webPollURLBox.visible)
|
||||
focusManager.setFocus(webPollURLBox);
|
||||
}
|
||||
|
||||
private function focusDataGrid(e:ShortcutEvent):void{
|
||||
focusManager.setFocus(resultsGrid);
|
||||
}
|
||||
|
||||
// addAlert
|
||||
private function remoteRefresh(e:ShortcutEvent):void{
|
||||
if (btnRefreshResults.label == ResourceUtil.getInstance().getString('bbb.polling.stats.refresh')){
|
||||
var message:String = ResourceUtil.getInstance().getString('bbb.polling.stats.alerts.refresh');
|
||||
ExternalInterface.call("addAlert", message);
|
||||
refreshPoll();
|
||||
}
|
||||
}
|
||||
|
||||
private function remoteStop(e:ShortcutEvent):void{
|
||||
if (btnClosePoll.label == ResourceUtil.getInstance().getString('bbb.polling.stats.stopPoll')){
|
||||
var message:String = ResourceUtil.getInstance().getString('bbb.polling.stats.alerts.stopPoll');
|
||||
ExternalInterface.call("addAlert", message);
|
||||
stopPoll();
|
||||
}
|
||||
}
|
||||
|
||||
private function remoteRepost(e:ShortcutEvent):void{
|
||||
if (btnRefreshResults.label == ResourceUtil.getInstance().getString('bbb.polling.stats.repost')){
|
||||
var message:String = ResourceUtil.getInstance().getString('bbb.polling.stats.alerts.repost');
|
||||
ExternalInterface.call("addAlert", message);
|
||||
publishPollAgain(e);
|
||||
}
|
||||
}
|
||||
|
||||
private function remoteClose(e:ShortcutEvent):void{
|
||||
if (btnClosePoll.label == ResourceUtil.getInstance().getString('bbb.polling.stats.close')){
|
||||
var message:String = ResourceUtil.getInstance().getString('bbb.polling.stats.alerts.close');
|
||||
ExternalInterface.call("addAlert", message);
|
||||
closeButtonClick(e);
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
|
@ -30,6 +30,10 @@
|
||||
title="{ResourceUtil.getInstance().getString('bbb.polling.toolbar.toolTip')}"
|
||||
layout="absolute">
|
||||
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_VOTING_WINDOW}" method="focusWindow" />
|
||||
<mate:Listener type="{ShortcutEvent.REMOTE_CAST_VOTE}" method="remoteVote" />
|
||||
<mate:Listener type="{ShortcutEvent.FOCUS_VOTE_QUESTION}" method="focusQuestion" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import flexlib.mdi.events.MDIWindowEvent;
|
||||
@ -42,6 +46,7 @@
|
||||
import org.bigbluebutton.modules.polling.managers.PollingManager;
|
||||
import org.bigbluebutton.modules.polling.events.VoteEvent;
|
||||
import org.bigbluebutton.modules.polling.model.PollOptions;
|
||||
import org.bigbluebutton.main.events.ShortcutEvent;
|
||||
|
||||
import org.bigbluebutton.main.model.users.Conference;
|
||||
|
||||
@ -70,6 +75,7 @@
|
||||
public var cbSelected:Array = new Array(); // variable that receives either CheckBox or RadioButton info and sends it to VoteEvent
|
||||
[Bindable] public var pollOptions:PollOptions;
|
||||
[Bindable] private var baseIndex:int;
|
||||
private var keyCombos:Object;
|
||||
|
||||
public function getPrefferedPosition():String{
|
||||
return MainCanvas.POPUP;
|
||||
@ -85,6 +91,7 @@
|
||||
}
|
||||
|
||||
private function onCreationComplete():void{
|
||||
hotkeyCapture();
|
||||
titleBarOverlay.tabIndex = baseIndex;
|
||||
minimizeBtn.tabIndex = baseIndex+1;
|
||||
maximizeRestoreBtn.tabIndex = baseIndex+2;
|
||||
@ -114,6 +121,27 @@
|
||||
height = height + ((lines+1) * 45);
|
||||
// We won't automatically focus to the Vote window when it is created, for a couple of reasons.
|
||||
}
|
||||
|
||||
private function hotkeyCapture():void{
|
||||
this.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
|
||||
}
|
||||
|
||||
private function handleKeyDown(e:KeyboardEvent) :void {
|
||||
var modifier:String = ExternalInterface.call("determineModifier");
|
||||
loadKeyCombos(modifier);
|
||||
var keyPress:String = (e.ctrlKey ? "control+" : "") +
|
||||
(e.shiftKey ? "shift+" : "") +
|
||||
(e.altKey ? "alt+" : "") + e.keyCode;
|
||||
if (keyCombos[keyPress]) {
|
||||
dispatchEvent(new ShortcutEvent(keyCombos[keyPress]));
|
||||
}
|
||||
}
|
||||
|
||||
private function loadKeyCombos(modifier:String):void {
|
||||
keyCombos = new Object(); // always start with a fresh array
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.vote') as String)] = ShortcutEvent.REMOTE_CAST_VOTE;
|
||||
keyCombos[modifier+(ResourceUtil.getInstance().getString('bbb.shortcutkey.polling.focusVoteQuestion') as String)] = ShortcutEvent.FOCUS_VOTE_QUESTION;
|
||||
}
|
||||
|
||||
// This function will receive information and generate radiobuttons on fly
|
||||
// function receives Array.length and ArrayCollection
|
||||
@ -208,6 +236,21 @@
|
||||
public function radioClick(e:Event):void{
|
||||
submissionAllowed = true;
|
||||
}
|
||||
|
||||
private function focusWindow(e:Event):void{
|
||||
LogUtil.debug("Received Vote Window Focus");
|
||||
focusManager.setFocus(titleBarOverlay);
|
||||
}
|
||||
|
||||
private function focusQuestion(e:ShortcutEvent):void{
|
||||
LogUtil.debug("Received Vote Question Focus");
|
||||
focusManager.setFocus(questionText);
|
||||
}
|
||||
|
||||
private function remoteVote(e:ShortcutEvent):void{
|
||||
LogUtil.debug("Received Vote Command");
|
||||
Vote();
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
initialize="init();"
|
||||
click="createAndShow();"
|
||||
icon="{pollIcon}"
|
||||
accessibilityName="{ResourceUtil.getInstance().getString('bbb.polling.buttonName')}"
|
||||
>
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -37,8 +38,9 @@
|
||||
import org.bigbluebutton.common.Images;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.main.views.MainToolbar;
|
||||
import org.bigbluebutton.main.events.ShortcutEvent ;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
import org.bigbluebutton.modules.polling.events.PollingInstructionsWindowEvent;
|
||||
import org.bigbluebutton.modules.polling.events.PollingInstructionsWindowEvent;
|
||||
import org.bigbluebutton.modules.polling.events.PollGetTitlesEvent;
|
||||
import org.bigbluebutton.modules.polling.events.PollGetPollEvent;
|
||||
import org.bigbluebutton.modules.polling.events.OpenSavedPollEvent;
|
||||
@ -46,6 +48,8 @@
|
||||
|
||||
import org.bigbluebutton.modules.polling.model.ValueObject;
|
||||
import org.bigbluebutton.modules.polling.model.PollObject;
|
||||
import org.bigbluebutton.core.managers.UserManager;
|
||||
import org.bigbluebutton.main.model.users.Conference;
|
||||
|
||||
import mx.collections.ArrayCollection;
|
||||
import mx.controls.Menu;
|
||||
@ -63,6 +67,10 @@
|
||||
public var pollIcon:Class;
|
||||
|
||||
public static const LOGNAME:String = "[Polling (views) : ToolbarButton] ";
|
||||
private var conference:Conference;
|
||||
private var myMenu:Menu = new Menu();
|
||||
private const REAL_BUTTON_ID:String = "BigBlueButton.mainShell.toolbar.addedBtns.pollButton";
|
||||
|
||||
|
||||
[Bindable] public var roomID:String;
|
||||
[Bindable] public var titleList:Array;
|
||||
@ -75,30 +83,52 @@
|
||||
pollList = new ArrayCollection();
|
||||
listInitialize();
|
||||
renderMenu();
|
||||
conference = UserManager.getInstance().getConference();
|
||||
|
||||
this.addEventListener(FocusEvent.FOCUS_IN, updateMenuByEvent);
|
||||
}
|
||||
|
||||
public function remoteOpenPollingMenu(e:ShortcutEvent = null):void{
|
||||
//LogUtil.debug("Opening poll menu by --SHORTCUT-- [remoteOpenPollingMenu()]");
|
||||
createAndShow();
|
||||
//LogUtil.debug("Finished opening menu by shortcut. [/remoteOpenPollingMenu()]");
|
||||
}
|
||||
|
||||
private function createAndShow():void{
|
||||
renderMenu();
|
||||
var myMenu:Menu = Menu.createMenu(null, myMenuData, false);
|
||||
myMenu.hide();
|
||||
myMenu = Menu.createMenu(null, myMenuData, false);
|
||||
myMenu.iconField="icon";
|
||||
myMenu.show(this.x + 10, this.y + this.height + 10);
|
||||
var xPos:int = this.x;
|
||||
var yPos:int = this.y;
|
||||
var heightVal:int = this.height;
|
||||
myMenu.show(xPos + 10, yPos + heightVal + 10);
|
||||
myMenu.addEventListener(MenuEvent.ITEM_CLICK, menuClick);
|
||||
}
|
||||
// #################################################################
|
||||
|
||||
public function listInitialize():void{
|
||||
public function listInitialize(calledFromShortcut:Boolean = false):void{
|
||||
LogUtil.debug("Entering listInitialize [listInitialize()]");
|
||||
titleList = new Array();
|
||||
myMenuData.removeAll();
|
||||
pollList.removeAll();
|
||||
var pevent:PollGetTitlesEvent = new PollGetTitlesEvent(PollGetTitlesEvent.INIT);
|
||||
if (myMenuData != null)
|
||||
myMenuData.removeAll();
|
||||
if (pollList != null)
|
||||
pollList.removeAll();
|
||||
|
||||
var pevent:PollGetTitlesEvent;
|
||||
if (calledFromShortcut){
|
||||
pevent = new PollGetTitlesEvent(PollGetTitlesEvent.REMOTE_CHECK);
|
||||
}
|
||||
else{
|
||||
pevent = new PollGetTitlesEvent(PollGetTitlesEvent.INIT);
|
||||
}
|
||||
|
||||
try{
|
||||
dispatchEvent(pevent);
|
||||
LogUtil.debug("GetTitlesEvent dispatched");
|
||||
}
|
||||
catch (e:*){
|
||||
LogUtil.debug("Bleh.");
|
||||
}
|
||||
catch (e:*){LogUtil.debug("GetTitlesEvent failed");}
|
||||
LogUtil.debug("Leaving listInitialize [/listInitialize()]");
|
||||
}
|
||||
|
||||
private function renderMenu():void{
|
||||
@ -123,8 +153,23 @@
|
||||
updateMenu();
|
||||
}
|
||||
|
||||
private function updateMenu():void{
|
||||
listInitialize();
|
||||
public function updateMenuByShortcut(e:ShortcutEvent = null):void{
|
||||
conference = UserManager.getInstance().getConference();
|
||||
if (conference.amIPresenter){
|
||||
var message:String = ResourceUtil.getInstance().getString('bbb.polling.buttonNameShortcut');
|
||||
ExternalInterface.call("addAlert", message);
|
||||
updateMenu(true);
|
||||
}
|
||||
}
|
||||
|
||||
public function notifyPosition():void{
|
||||
var message:String = ResourceUtil.getInstance().getString('bbb.polling.buttonName');
|
||||
ExternalInterface.call("addAlert", message);
|
||||
}
|
||||
|
||||
private function updateMenu(calledFromShortcut:Boolean = false):void{
|
||||
LogUtil.debug("Caught poll click in button, heading towards listInitialize()");
|
||||
listInitialize(calledFromShortcut);
|
||||
}
|
||||
|
||||
private function menuClick(event:MenuEvent):void {
|
||||
@ -144,6 +189,7 @@
|
||||
dispatchEvent(reviewEvent);
|
||||
}
|
||||
}
|
||||
stage.dispatchEvent(new MenuEvent(MenuEvent.MENU_HIDE));
|
||||
}
|
||||
|
||||
|
||||
@ -156,6 +202,15 @@
|
||||
dispatchEvent(new PollingInstructionsWindowEvent(PollingInstructionsWindowEvent.OPEN));
|
||||
this.enabled=false;
|
||||
}
|
||||
|
||||
private function remoteSwitch(e:ShortcutEvent):void{
|
||||
if (this.toString() != REAL_BUTTON_ID){
|
||||
updateMenuByShortcut(e);
|
||||
}
|
||||
else{
|
||||
remoteOpenPollingMenu(e);
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:Button>
|
@ -111,6 +111,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
}
|
||||
|
||||
private function handleCamSettingsClosedEvent(e:BBBEvent):void {
|
||||
this.setFocus();
|
||||
if(e.payload['clicked'] == "cancel"){
|
||||
this.enabled = true;
|
||||
this.selected = false;
|
||||
|
@ -500,6 +500,18 @@ module BigBlueButton
|
||||
stop_evt << new_event
|
||||
end
|
||||
end
|
||||
|
||||
# fix the start events list so the matched events will be consistent
|
||||
stop_evt.each do |evt|
|
||||
if start_evt.select{ |s| s[:stream] == evt[:stream] }.empty?
|
||||
new_event = {
|
||||
:stream => evt[:stream],
|
||||
:start_timestamp => evt[:stop_timestamp] - (BigBlueButton.get_video_duration("#{video_dir}/#{evt[:stream]}.flv") * 1000).to_i
|
||||
}
|
||||
BigBlueButton.logger.debug("Adding stop event: #{new_event}")
|
||||
start_evt << new_event
|
||||
end
|
||||
end
|
||||
|
||||
matched_evts = BigBlueButton::Events.match_start_and_stop_video_events(start_evt, stop_evt)
|
||||
BigBlueButton.logger.debug("First timestamp: #{first_timestamp}")
|
||||
|
@ -17,17 +17,49 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License along
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
sudo cp -r core/lib/* /usr/local/bigbluebutton/core/lib/
|
||||
sudo cp -r core/scripts/* /usr/local/bigbluebutton/core/scripts/
|
||||
|
||||
PLAYBACK_LIST="slides presentation"
|
||||
set -e
|
||||
|
||||
sudo cp core/Gemfile /usr/local/bigbluebutton/core/Gemfile
|
||||
sudo rm -rf /usr/local/bigbluebutton/core/lib
|
||||
sudo cp -r core/lib /usr/local/bigbluebutton/core/
|
||||
sudo rm -rf /usr/local/bigbluebutton/core/scripts
|
||||
sudo cp -r core/scripts /usr/local/bigbluebutton/core/
|
||||
sudo rm -rf /etc/bigbluebutton/god
|
||||
sudo cp -r core/god/god /etc/bigbluebutton/
|
||||
sudo rm -f /etc/init.d/bbb-record-core
|
||||
sudo cp core/god/initd.god /etc/init.d/bbb-record-core
|
||||
sudo chmod 0755 /etc/init.d/bbb-record-core
|
||||
sudo rm -rf /var/bigbluebutton/playback/*
|
||||
|
||||
function deploy_format() {
|
||||
local formats=$1
|
||||
for format in $formats
|
||||
do
|
||||
playback_dir="$format/playback/$format"
|
||||
scripts_dir="$format/scripts"
|
||||
if [ -d $playback_dir ]; then sudo cp -r $playback_dir /var/bigbluebutton/playback/; fi
|
||||
if [ -d $scripts_dir ]; then sudo cp -r $scripts_dir/* /usr/local/bigbluebutton/core/scripts/; fi
|
||||
sudo mkdir -p /var/log/bigbluebutton/$format
|
||||
done
|
||||
}
|
||||
|
||||
# deploy_format "slides"
|
||||
deploy_format "presentation"
|
||||
|
||||
sudo mkdir -p /var/bigbluebutton/playback/
|
||||
for PLAYBACK in $PLAYBACK_LIST
|
||||
do
|
||||
sudo cp -r $PLAYBACK/playback/* /var/bigbluebutton/playback/
|
||||
sudo cp -r $PLAYBACK/scripts/* /usr/local/bigbluebutton/core/scripts/
|
||||
done
|
||||
sudo mkdir -p /var/bigbluebutton/recording/raw/
|
||||
sudo mkdir -p /var/bigbluebutton/recording/process/
|
||||
sudo mkdir -p /var/bigbluebutton/recording/publish/
|
||||
sudo mkdir -p /var/bigbluebutton/recording/status/recorded/
|
||||
sudo mkdir -p /var/bigbluebutton/recording/status/archived/
|
||||
sudo mkdir -p /var/bigbluebutton/recording/status/processed/
|
||||
sudo mkdir -p /var/bigbluebutton/recording/status/sanity/
|
||||
|
||||
sudo chown -R tomcat6:tomcat6 /var/bigbluebutton/playback/
|
||||
sudo cp /usr/local/bigbluebutton/core/scripts/*.nginx /etc/bigbluebutton/nginx/
|
||||
sudo mv /usr/local/bigbluebutton/core/scripts/*.nginx /etc/bigbluebutton/nginx/
|
||||
sudo chown -R tomcat6:tomcat6 /var/bigbluebutton/ /var/log/bigbluebutton/
|
||||
sudo chown -R red5:red5 /var/bigbluebutton/deskshare/
|
||||
sudo chown -R freeswitch:daemon /var/bigbluebutton/meetings/
|
||||
|
||||
cd /usr/local/bigbluebutton/core/
|
||||
sudo bundle install
|
@ -684,19 +684,24 @@
|
||||
"collision": "none none",
|
||||
"offset": "10 0"
|
||||
});
|
||||
$('#videoRecordingWrapper').width("800px");
|
||||
$('#videoRecordingWrapper').height("600px");
|
||||
|
||||
$('#presentation').position({
|
||||
"my": "center top",
|
||||
"at": "center bottom",
|
||||
"my": "left top",
|
||||
"at": "left bottom",
|
||||
"of": '#chat',
|
||||
"collision": "none none"
|
||||
});
|
||||
$('#presentation').width("400px");
|
||||
$('#presentation').height("300px");
|
||||
|
||||
$('.acorn-controls').position({
|
||||
"my": "center top",
|
||||
"at": "center bottom",
|
||||
"of": '#playbackArea',
|
||||
"collision": "none none"
|
||||
"my": "left top",
|
||||
"at": "left bottom",
|
||||
"of": '#videoRecordingWrapper',
|
||||
"collision": "none none",
|
||||
"offset": "10 7"
|
||||
});
|
||||
|
||||
draw(0,0);
|
||||
@ -723,19 +728,24 @@
|
||||
"collision": "none none",
|
||||
"offset": "10 0"
|
||||
});
|
||||
$('#presentation').width("800px");
|
||||
$('#presentation').height("600px");
|
||||
|
||||
$('#videoRecordingWrapper').position({
|
||||
"my": "center top",
|
||||
"at": "center bottom",
|
||||
"my": "left top",
|
||||
"at": "left bottom",
|
||||
"of": '#chat',
|
||||
"collision": "none none"
|
||||
});
|
||||
$('#videoRecordingWrapper').width("400px");
|
||||
$('#videoRecordingWrapper').height("300px");
|
||||
|
||||
$('.acorn-controls').position({
|
||||
"my": "center top",
|
||||
"at": "center bottom",
|
||||
"of": '#playbackArea',
|
||||
"collision": "none none"
|
||||
"my": "left top",
|
||||
"at": "left bottom",
|
||||
"of": '#presentation',
|
||||
"collision": "none none",
|
||||
"offset": "10 7"
|
||||
});
|
||||
|
||||
swapped = false;
|
||||
|
@ -49,7 +49,14 @@ br{
|
||||
|
||||
#playbackArea {
|
||||
width: 1360px; /* #slide.width + #chat.width + #audioRecording.width */
|
||||
height: 650px;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#audioRecordingWrapper{
|
||||
float: left;
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
#audioRecording{
|
||||
@ -59,6 +66,26 @@ br{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#audioRecordingWrapper .acorn-controls, #videoRecordingWrapper .acorn-controls{
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: -810px;
|
||||
width: 730px;
|
||||
}
|
||||
|
||||
#playbackControls{
|
||||
width: 1360px;
|
||||
margin: 0 auto;
|
||||
margin-top: -50px;
|
||||
}
|
||||
|
||||
#autoscrollWrapper{
|
||||
float: left;
|
||||
margin-left: 10px;
|
||||
margin-top: 8px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.webcam{
|
||||
width: 402px;
|
||||
height: 300px;
|
||||
@ -85,6 +112,7 @@ br{
|
||||
#presentation {
|
||||
float: left;
|
||||
position: relative;
|
||||
height: 600px;
|
||||
}
|
||||
|
||||
#slide {
|
||||
@ -111,10 +139,16 @@ br{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.chatcontainer{
|
||||
#mediaArea {
|
||||
float: right;
|
||||
background: white;
|
||||
height: 300px;
|
||||
width: 402px;
|
||||
}
|
||||
|
||||
#chatAndMediaArea{
|
||||
float: right;
|
||||
background: white;
|
||||
height: 600px;
|
||||
width: 402px;
|
||||
}
|
||||
#chat{
|
||||
|
@ -53,7 +53,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
<div id="slide" role="region" aria-label="Slide"></div>
|
||||
<div id="slideText" class="visually-hidden" role="region" aria-live="polite" aria-label="Slide Text"></div>
|
||||
</div>
|
||||
<div class="chatcontainer">
|
||||
<div id="chatAndMediaArea">
|
||||
<div id="chat" aria-live="polite" role="region" aria-label="Chat messages"></div>
|
||||
<div id="videoRecordingWrapper" role="region" aria-label="Video">
|
||||
<!--
|
||||
@ -61,12 +61,18 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
This playback requires modern browser, please use FF, Safari, Chrome</video>
|
||||
-->
|
||||
</div>
|
||||
<div id="audioRecordingWrapper" role="region" aria-label="Audio">
|
||||
<div id="audioRecordingWrapper" role="region" aria-label="Audio">
|
||||
<!--
|
||||
<audio id="video">You must use an HTML5 capable browser to view this page.
|
||||
This playback requires modern browser, please use FF, Safari, Chrome</audio>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="playbackControls">
|
||||
<div id="autoscrollWrapper">
|
||||
<input id="autoscrollEnabled" type="checkbox" name="autoscrollEnabled" checked="true" aria-label="Toggle autoscroll"/>
|
||||
<label for="autoscrollEnabled">Auto scroll</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -81,5 +87,3 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
<!-- <script src='lib/writing.js'></script> -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
@ -31,6 +31,28 @@ getUrlParameters = function() {
|
||||
return map;
|
||||
}
|
||||
|
||||
/*
|
||||
* From: http://stackoverflow.com/questions/1634748/how-can-i-delete-a-query-string-parameter-in-javascript/4827730#4827730
|
||||
*/
|
||||
removeUrlParameter = function(url, param) {
|
||||
var urlparts= url.split('?');
|
||||
if (urlparts.length>=2) {
|
||||
var prefix= encodeURIComponent(param)+'=';
|
||||
var pars= urlparts[1].split(/[&;]/g);
|
||||
for (var i=pars.length; i-- > 0;) {
|
||||
if (pars[i].indexOf(prefix, 0)==0)
|
||||
pars.splice(i, 1);
|
||||
}
|
||||
if (pars.length > 0) {
|
||||
return urlparts[0]+'?'+pars.join('&');
|
||||
} else {
|
||||
return urlparts[0];
|
||||
}
|
||||
} else {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Converts seconds to HH:MM:SS
|
||||
* From: http://stackoverflow.com/questions/6312993/javascript-seconds-to-time-with-format-hhmmss#6313008
|
||||
@ -47,6 +69,19 @@ secondsToHHMMSS = function(secs) {
|
||||
return time;
|
||||
}
|
||||
|
||||
secondsToYouTubeFormat = function(secs) {
|
||||
var hours = Math.floor(secs / 3600);
|
||||
var minutes = Math.floor((secs - (hours * 3600)) / 60);
|
||||
var seconds = secs - (hours * 3600) - (minutes * 60);
|
||||
|
||||
var time = "";
|
||||
if (hours > 0) {time += hours+"h";}
|
||||
if (minutes > 0) {time += minutes+"m";}
|
||||
if (seconds > 0) {time += seconds+"s";}
|
||||
|
||||
return time;
|
||||
}
|
||||
|
||||
/*
|
||||
* Full word version of the above function for screen readers
|
||||
*/
|
||||
@ -66,6 +101,11 @@ secondsToHHMMSSText = function(secs) {
|
||||
return time;
|
||||
}
|
||||
|
||||
replaceTimeOnUrl = function(secs) {
|
||||
var newUrl = removeUrlParameter(document.URL, "t") + "&t=" + secondsToYouTubeFormat(secs);
|
||||
window.history.replaceState({}, "", newUrl);
|
||||
}
|
||||
|
||||
var params = getUrlParameters();
|
||||
var MEETINGID = params['meetingId'];
|
||||
var RECORDINGS = "/presentation/" + MEETINGID;
|
||||
@ -104,6 +144,8 @@ setEventsOnThumbnail = function($thumb) {
|
||||
$parent = $("#thumbnail-" + options.start).parent();
|
||||
$parent.addClass("active");
|
||||
$(".thumbnail-label", $parent).show();
|
||||
|
||||
animateToCurrentSlide();
|
||||
},
|
||||
onEnd: function( options ) {
|
||||
$parent = $("#thumbnail-" + options.start).parent();
|
||||
@ -115,9 +157,9 @@ setEventsOnThumbnail = function($thumb) {
|
||||
// Click on thumbnail changes the slide in popcorn
|
||||
$thumb.parent().on("click", function() {
|
||||
goToSlide($thumb.attr("data-in"));
|
||||
replaceTimeOnUrl($thumb.attr("data-in"));
|
||||
});
|
||||
|
||||
|
||||
// Mouse over/out to show/hide the label over the thumbnail
|
||||
$wrapper = $thumb.parent();
|
||||
$wrapper.on("mouseover", function() {
|
||||
@ -130,6 +172,33 @@ setEventsOnThumbnail = function($thumb) {
|
||||
});
|
||||
}
|
||||
|
||||
$("input[name='autoscrollEnabled']").live('change', function() {
|
||||
animateToCurrentSlide();
|
||||
});
|
||||
|
||||
animateToCurrentSlide = function(force) {
|
||||
force = typeof force !== 'undefined' ? force : false;
|
||||
|
||||
if (force || isAutoscrollEnabled()) {
|
||||
var currentSlide = getCurrentSlide();
|
||||
// animate the scroll of thumbnails to center the current slide
|
||||
var thumbnailOffset = currentSlide.prop('offsetTop') - $("#thumbnails").prop('offsetTop') + (currentSlide.prop('offsetHeight') - $("#thumbnails").prop('offsetHeight')) / 2;
|
||||
$("#thumbnails").animate({ scrollTop: thumbnailOffset }, 'slow');
|
||||
}
|
||||
}
|
||||
|
||||
isAutoscrollEnabled = function() {
|
||||
return $("input[name='autoscrollEnabled']").is(':checked');
|
||||
}
|
||||
|
||||
setAutoscrollEnabled = function(value) {
|
||||
$('input[name=autoscrollEnabled]').attr('checked', value);
|
||||
}
|
||||
|
||||
getCurrentSlide = function() {
|
||||
return $(".thumbnail-wrapper.active");
|
||||
}
|
||||
|
||||
/*
|
||||
* Generates the list of thumbnails using shapes.svg
|
||||
*/
|
||||
@ -200,7 +269,6 @@ generateThumbnails = function() {
|
||||
div.append(label);
|
||||
div.append(hiddenDesc);
|
||||
|
||||
// $("#thumbnails").append(div);
|
||||
imagesList.push(timeIn);
|
||||
elementsMap[timeIn] = div;
|
||||
|
||||
@ -312,13 +380,6 @@ document.addEventListener( "DOMContentLoaded", function() {
|
||||
theme: 'darkglass',
|
||||
volumeSlider: 'vertical'
|
||||
});
|
||||
$('.acorn-controls').width('500');
|
||||
$('.acorn-controls').position({
|
||||
"my": "center top",
|
||||
"at": "center bottom",
|
||||
"of": '#playbackArea',
|
||||
"collision": "none none"
|
||||
});
|
||||
}, false);
|
||||
|
||||
var secondsToWait = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user