Merge branch 'master' of github.com:capilkey/bigbluebutton

This commit is contained in:
Chad Pilkey 2012-08-10 19:28:14 +00:00
commit a7acb2714a
4 changed files with 72 additions and 124 deletions

1
bigbluebutton-client/resources/prod/BigBlueButton.html Normal file → Executable file
View File

@ -39,5 +39,6 @@
<!--<![endif]-->
</object>
</div>
<div id="notifications" aria-live="polite" role="region" aria-label="Chat Notifications"></div>
</body>
</html>

22
bigbluebutton-client/resources/prod/lib/bbb_blinker.js Normal file → Executable file
View File

@ -27,3 +27,25 @@ var clearblink = function()
document.title = 'BigBlueButton';
}
var i = 1;
function addAlert(message){
var target = document.getElementById( 'notifications' ),
contentDiv = document.createElement( "div" );
contentDiv.id = "alertDiv" + i;
i++;
//contentDiv.innerHTML = "<p>" + message + "</p>";
contentDiv.innerHTML = message;
contentDiv.style.display = "block";
target.appendChild( contentDiv );
target.hide();
target.setAttribute("role","alert");
target.show();
contentDiv.hide();
contentDiv.setAttribute("role","alert");
contentDiv.show();
}
function determineBrowser()
{
return navigator.appName;
}

View File

@ -19,7 +19,6 @@
$Id: $
-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:views="org.bigbluebutton.main.views.*"
xmlns:maps="org.bigbluebutton.main.maps.*"

View File

@ -117,11 +117,10 @@
// Descriptions for accessibilty properties
// private static const PUBLIC_TAB:String = "PUBLIC CHAT";
private static const PUBLIC_TAB:String = "JAWS is cumbersome";
private static const PUBLIC_TAB_NEW:String = "NEW MESSAGE IN PUBLIC CHAT ";
private static const PRIVATE_TAB:String = "PRIVATE CHAT WITH ";
// private static const PRIVATE_TAB:String = "PRIVATE CHAT WITH ";
private static const PRIVATE_TAB_NEW:String = "NEW MESSAGE IN PRIVATE CHAT WITH";
private static const PLUS_TAB:String = "CHAT OPTIONS TAB";
//private static const PLUS_TAB:String = "CHAT OPTIONS TAB";
private var publicWaiting:Boolean = false;
private var privateWaiting:ArrayCollection = new ArrayCollection();
@ -250,12 +249,9 @@
var indexOfHTTP:Number = message.indexOf("http://");
var indexOfWWW:Number = message.indexOf("www.");
var indexOfHTTPS:Number = message.indexOf("https://");
if (indexOfHTTP == -1 && indexOfWWW == -1 && indexOfHTTPS == -1) return message;
var words:Array = message.split(" ");
var parsedString:String = "";
for (var n:Number = 0; n<words.length; n++){
var word:String = words[n] as String;
if (word.indexOf("http://") != -1) parsedString += '<a href="event:' + word + '"> <u>' + word + '</u></a> ';
@ -383,11 +379,8 @@
private function createChatBoxFor(userid:String):ChatBox {
var chatBox:ChatBox = new ChatBox();
chatBox.id = getParticipantName(userid);
LogUtil.debug("WATERFALL: chatBox.id = " + chatBox.id);
chatBox.label = getParticipantName(userid);
LogUtil.debug("WATERFALL: chatBox.label = " + chatBox.label);
chatBox.name = userid;
LogUtil.debug("WATERFALL: chatBox.name = " + chatBox.name);
if (chatTabs.numChildren >= 2){
chatTabs.addChildAt(chatBox, chatTabs.numChildren - 1);
@ -395,21 +388,6 @@
else{
chatTabs.addChild(chatBox);
}
//*
var childIndex:int;
childIndex = chatTabs.getChildIndex(chatBox);
LogUtil.debug("WATERFALL: ChatBox is at index " + childIndex);
if (childIndex == 0){
//chatTabs.getChildAt(childIndex).parent.accessibilityProperties.name = PUBLIC_TAB + "NAME";
this.accessibilityProperties.description = PUBLIC_TAB + "DESCRIPTION";
}
else if (childIndex == chatTabs.numChildren-1){
this.accessibilityProperties.description = PLUS_TAB;
}
else{}
Accessibility.updateProperties();
//*/
return chatBox;
}
@ -427,10 +405,9 @@
// Receive public chat messages
private function handlePublicChatMessageEvent(event:PublicChatMessageEvent):void {
LogUtil.debug("Got PublicChatMessageEvent from userid [ " + event.chatobj.userid + " ]");
//LogUtil.debug("Got PublicChatMessageEvent from userid [ " + event.chatobj.userid + " ]");
if(event.chatobj.userid != "")
event.chatobj.message = parseURLs(event.chatobj.message);
showMessage(PUBLIC_CHAT_USERID, event.chatobj, autoTranslation);
if ((! UserManager.getInstance().getConference().amIThisUser(new Number(event.chatobj.userid))) && (event.chatobj.userid != "")){
if (Accessibility.active){
@ -440,6 +417,7 @@
ExternalInterface.call("startblink", ResourceUtil.getInstance().getString('bbb.chat.publicMsgAwaiting'), ResourceUtil.getInstance().getString('bbb.chat.publicMsgAwaiting2'));
}
}
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.RECEIVED_PUBLIC_CHAT_MESSAGE_EVENT, event.chatobj.message));
}
@ -484,8 +462,7 @@
}
}
if (newItem){
// Add a private chat event (with all associated information) to the privateWaiting array,
// and a PrivateFocusTracker to the privateFocus array to track whether to play the sound
// Add a private chat event (with all associated information) to the privateWaiting array
privateWaiting.addItem(event);
chatTabs.getChildByName(event.message.chatobj.userid).addEventListener(FocusEvent.FOCUS_IN, privateChatFocus);
chatTabs.getChildByName(event.message.chatobj.userid).addEventListener(FocusEvent.FOCUS_OUT, privateChatUnfocus);
@ -494,7 +471,6 @@
}
public function publicChatFocus(event:FocusEvent):void{
//LogUtil.debug("WATERFALL: publicChatFocus active, removing publicWaiting");
publicFocus = true;
if (publicWaiting)
ExternalInterface.call("clearblink");
@ -502,8 +478,6 @@
}
public function privateChatFocus(event:FocusEvent):void{
//LogUtil.debug("WATERFALL: Event target is " + event.target);
//LogUtil.debug("WATERFALL: Event target name is " + event.target.name);
if (event.target.name == "chatMessagesList"){
var removed:Boolean = false;
@ -535,23 +509,38 @@
}
// Listens to the notification timer, and checks if there are messages waiting
// The notifications kept repeating as I was still focused from the last message, and after I hit space. Try comparing latestMessage to currentMessage; maybe store a Boolean?
private function checkNotifications(event:TimerEvent):void{
var debugDate:Date = new Date();
var browserName:String;
var message:String = "";
if (publicWaiting && !publicFocus){
LogUtil.debug("The time is " + debugDate.getHours() + ":" + debugDate.getMinutes() + ":" + debugDate.getSeconds() + " and there are new public messages.");
publicSound.play();
//browserName = ExternalInterface.call("determineBrowser", PUBLIC_TAB_NEW);
//if (browserName == "Microsoft Internet Explorer")
// publicSound.play();
//else{
//ExternalInterface.call("addAlert", PUBLIC_TAB_NEW);
message += PUBLIC_TAB_NEW;
//}
}
// Clearing public notes works, but for some reason private chat tabs are not appearing
// The tab appears on the second message you send
if (privateWaiting.length && !privateFocus){
privateSound.play();
/*LogUtil.debug("The time is " + debugDate.getHours() + ":" + debugDate.getMinutes() + ":" + debugDate.getSeconds() + " and there are new private messages from: ");
browserName = ExternalInterface.call("determineBrowser", PUBLIC_TAB_NEW);
//if (browserName == "Microsoft Internet Explorer"){
// privateSound.play();
//}
//else {
var names:String = "";
for (var i:int = 0; i < privateWaiting.length; i++){
LogUtil.debug(privateWaiting.getItemAt(i).message.chatobj.username);
}*/
names += " " + privateWaiting.getItemAt(i).message.chatobj.username;
if (i < privateWaiting.length - 1)
names += ",";
}
//ExternalInterface.call("addAlert", PRIVATE_TAB_NEW + names);
message += PRIVATE_TAB_NEW + names;
//}
}
ExternalInterface.call("addAlert", message);
}
// Returns an array of userIDs. The userIDs refer to users who have sent this user private messages which have not been read.
@ -568,78 +557,18 @@
// This is slightly mis-named; it removes the notification of this sender sending a private message for notification purposes
private function removePrivateSender(senderID:String):Boolean{
var success:Boolean = false;
//LogUtil.debug("WATERFALL: Trying to remove sender " + senderID);
if (privateWaiting.length){
for (var i:int = 0; i < privateWaiting.length; i++){
if (senderID == privateWaiting.getItemAt(i).message.chatobj.userid){
privateWaiting.removeItemAt(i);
success = true;
i = privateWaiting.length;
//LogUtil.debug("WATERFALL: Removed sender " + senderID);
}
}
}
return success;
}
/*
// Descriptions for accessibilty properties
private static const PUBLIC_TAB:String = "PUBLIC CHAT";
private static const PUBLIC_TAB_NEW:String = "NEW MESSAGE IN PUBLIC CHAT";
private static const PRIVATE_TAB:String = "PRIVATE CHAT WITH ";
private static const PRIVATE_TAB_NEW:String = "NEW MESSAGE IN PRIVATE CHAT WITH ";
private static const PLUS_TAB:String = "CHAT OPTIONS TAB";
*/
// All uses of updateTabNames temporarily disabled, as it is not working for mysterious reasons
// It's intended use is to let a screen reader tell the user if there are new messages in the currently focused tab or not
private function updateTabNames():void{
LogUtil.debug("Entering updateTabNames");
if (chatTabs.selectedIndex == 0){ // Public Chat tab
LogUtil.debug("Entering public tab logic");
if (publicWaiting){
LogUtil.debug("Entering public waiting logic");
this.accessibilityProperties.description = PUBLIC_TAB_NEW;
}
else{
LogUtil.debug("Entering public no-waiting logic");
this.accessibilityProperties.description = PUBLIC_TAB;
}
LogUtil.debug("Leaving public logic");
}
else if (chatTabs.selectedIndex == chatTabs.numChildren - 1){ // Options tab
LogUtil.debug("Entering options logic");
this.accessibilityProperties.description = PLUS_TAB;
LogUtil.debug("Leaving options logic");
}
else{ // Any Private Chat tab
LogUtil.debug("Entering private logic");
var otherUserID:String = chatTabs.getChildAt(chatTabs.selectedIndex).name;
var otherUserName:String = UserManager.getInstance().getConference().getParticipant(int(otherUserID)).name;
LogUtil.debug("WATERFALL: Just to be sure, user ID " + otherUserID + " has the name " + otherUserName);
if (getPrivateSenders().contains(otherUserID)){ // New messages
LogUtil.debug("Entering private new-message logic");
this.accessibilityProperties.description = PRIVATE_TAB_NEW + otherUserName;
LogUtil.debug("Leaving private new-message logic");
}
else{ // No new messages
LogUtil.debug("Entering private no-new-message logic");
this.accessibilityProperties.description = PRIVATE_TAB + otherUserName;
LogUtil.debug("Leaving private no-new-message logic");
}
LogUtil.debug("Leaving private logic");
}
Accessibility.updateProperties();
//focusManager.setFocus(this);
LogUtil.debug("WATERFALL: Description is now: "+ this.accessibilityProperties.description);
LogUtil.debug("Leaving updateTableNames");
}
// About to change description again
// From (chatTabs.selectedIndex).accessibilityProperties.description
// To this.accessibilityProperties.description
private function focusPreviousChatTab(e:ShortcutEvent):void{
if (chatTabs.selectedIndex > 0){
chatTabs.selectedIndex--;
@ -647,7 +576,6 @@
else{
chatTabs.selectedIndex = chatTabs.numChildren - 1;
}
//updateTabNames();
}
private function focusNextChatTab(e:ShortcutEvent):void{
@ -657,7 +585,6 @@
else{
chatTabs.selectedIndex = 0;
}
//updateTabNames();
}
private function participantHasChatBox(id:String):Boolean {
@ -670,7 +597,6 @@
return chatTabs.getChildByName(id) as ChatBox;
}
/* it should receive the ChatObject */
private function showMessage(sender:String, chatobj:ChatObject, translate:Boolean):void{
var chatBox:ChatBox;
if (! participantHasChatBox(sender)) {