git-svn-id: http://bigbluebutton.googlecode.com/svn/trunk@608 af16638f-c34d-0410-8cfa-b39d5352b314
This commit is contained in:
Richard Alam 2008-10-20 20:20:00 +00:00
parent 8f559fed85
commit a50fee40aa
25 changed files with 0 additions and 2552 deletions

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<actionScriptProperties mainApplicationPath="main.mxml" version="3">
<compiler additionalCompilerArguments="-locale en_US" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="bin-debug" sourceFolderPath="src" strict="true" useApolloConfig="false" verifyDigests="true" warn="true">
<compilerSourcePath/>
<libraryPath defaultLinkType="1">
<libraryPathEntry kind="4" path=""/>
<libraryPathEntry kind="1" linkType="1" path="libs"/>
<libraryPathEntry kind="3" linkType="1" path="${DOCUMENTS}/bigbluebutton_core/bin/bigbluebutton_core.swc" useDefaultLinkType="false"/>
</libraryPath>
<sourceAttachmentPath/>
</compiler>
<applications>
<application path="main.mxml"/>
</applications>
<modules/>
<buildCSSFiles/>
</actionScriptProperties>

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>chat-module</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.adobe.flexbuilder.project.flexbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.adobe.flexbuilder.project.flexnature</nature>
<nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
</natures>
</projectDescription>

View File

@ -1,3 +0,0 @@
#Wed Jul 09 11:19:09 EDT 2008
eclipse.preferences.version=1
encoding/<project>=utf-8

View File

@ -1,276 +0,0 @@
// Flash Player Version Detection - Rev 1.6
// Detect Client Browser type
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
function ControlVersion()
{
var version;
var axo;
var e;
// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
try {
// version will be set for 7.X or greater players
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
version = axo.GetVariable("$version");
} catch (e) {
}
if (!version)
{
try {
// version will be set for 6.X players only
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
// installed player is some revision of 6.0
// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
// so we have to be careful.
// default to the first public version
version = "WIN 6,0,21,0";
// throws if AllowScripAccess does not exist (introduced in 6.0r47)
axo.AllowScriptAccess = "always";
// safe to call for 6.0r47 or greater
version = axo.GetVariable("$version");
} catch (e) {
}
}
if (!version)
{
try {
// version will be set for 4.X or 5.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
version = axo.GetVariable("$version");
} catch (e) {
}
}
if (!version)
{
try {
// version will be set for 3.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
version = "WIN 3,0,18,0";
} catch (e) {
}
}
if (!version)
{
try {
// version will be set for 2.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
version = "WIN 2,0,0,11";
} catch (e) {
version = -1;
}
}
return version;
}
// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
// NS/Opera version >= 3 check for Flash plugin in plugin array
var flashVer = -1;
if (navigator.plugins != null && navigator.plugins.length > 0) {
if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
var descArray = flashDescription.split(" ");
var tempArrayMajor = descArray[2].split(".");
var versionMajor = tempArrayMajor[0];
var versionMinor = tempArrayMajor[1];
var versionRevision = descArray[3];
if (versionRevision == "") {
versionRevision = descArray[4];
}
if (versionRevision[0] == "d") {
versionRevision = versionRevision.substring(1);
} else if (versionRevision[0] == "r") {
versionRevision = versionRevision.substring(1);
if (versionRevision.indexOf("d") > 0) {
versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
}
}
var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
}
}
// MSN/WebTV 2.6 supports Flash 4
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
// WebTV 2.5 supports Flash 3
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
// older WebTV supports Flash 2
else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
else if ( isIE && isWin && !isOpera ) {
flashVer = ControlVersion();
}
return flashVer;
}
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
versionStr = GetSwfVer();
if (versionStr == -1 ) {
return false;
} else if (versionStr != 0) {
if(isIE && isWin && !isOpera) {
// Given "WIN 2,0,0,11"
tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
tempString = tempArray[1]; // "2,0,0,11"
versionArray = tempString.split(","); // ['2', '0', '0', '11']
} else {
versionArray = versionStr.split(".");
}
var versionMajor = versionArray[0];
var versionMinor = versionArray[1];
var versionRevision = versionArray[2];
// is the major.revision >= requested major.revision AND the minor version >= requested minor
if (versionMajor > parseFloat(reqMajorVer)) {
return true;
} else if (versionMajor == parseFloat(reqMajorVer)) {
if (versionMinor > parseFloat(reqMinorVer))
return true;
else if (versionMinor == parseFloat(reqMinorVer)) {
if (versionRevision >= parseFloat(reqRevision))
return true;
}
}
return false;
}
}
function AC_AddExtension(src, ext)
{
if (src.indexOf('?') != -1)
return src.replace(/\?/, ext+'?');
else
return src + ext;
}
function AC_Generateobj(objAttrs, params, embedAttrs)
{
var str = '';
if (isIE && isWin && !isOpera)
{
str += '<object ';
for (var i in objAttrs)
str += i + '="' + objAttrs[i] + '" ';
str += '>';
for (var i in params)
str += '<param name="' + i + '" value="' + params[i] + '" /> ';
str += '</object>';
} else {
str += '<embed ';
for (var i in embedAttrs)
str += i + '="' + embedAttrs[i] + '" ';
str += '> </embed>';
}
document.write(str);
}
function AC_FL_RunContent(){
var ret =
AC_GetArgs
( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
, "application/x-shockwave-flash"
);
AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}
function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
var ret = new Object();
ret.embedAttrs = new Object();
ret.params = new Object();
ret.objAttrs = new Object();
for (var i=0; i < args.length; i=i+2){
var currArg = args[i].toLowerCase();
switch (currArg){
case "classid":
break;
case "pluginspage":
ret.embedAttrs[args[i]] = args[i+1];
break;
case "src":
case "movie":
args[i+1] = AC_AddExtension(args[i+1], ext);
ret.embedAttrs["src"] = args[i+1];
ret.params[srcParamName] = args[i+1];
break;
case "onafterupdate":
case "onbeforeupdate":
case "onblur":
case "oncellchange":
case "onclick":
case "ondblClick":
case "ondrag":
case "ondragend":
case "ondragenter":
case "ondragleave":
case "ondragover":
case "ondrop":
case "onfinish":
case "onfocus":
case "onhelp":
case "onmousedown":
case "onmouseup":
case "onmouseover":
case "onmousemove":
case "onmouseout":
case "onkeypress":
case "onkeydown":
case "onkeyup":
case "onload":
case "onlosecapture":
case "onpropertychange":
case "onreadystatechange":
case "onrowsdelete":
case "onrowenter":
case "onrowexit":
case "onrowsinserted":
case "onstart":
case "onscroll":
case "onbeforeeditfocus":
case "onactivate":
case "onbeforedeactivate":
case "ondeactivate":
case "type":
case "codebase":
ret.objAttrs[args[i]] = args[i+1];
break;
case "id":
case "width":
case "height":
case "align":
case "vspace":
case "hspace":
case "class":
case "title":
case "accesskey":
case "name":
case "tabindex":
ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
break;
default:
ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
}
}
ret.objAttrs["classid"] = classid;
if (mimeType) ret.embedAttrs["type"] = mimeType;
return ret;
}

View File

@ -1,6 +0,0 @@
/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
#ie_historyFrame { width: 0px; height: 0px; display:none }
#firefox_anchorDiv { width: 0px; height: 0px; display:none }
#safari_formDiv { width: 0px; height: 0px; display:none }
#safari_rememberDiv { width: 0px; height: 0px; display:none }

View File

@ -1,645 +0,0 @@
BrowserHistoryUtils = {
addEvent: function(elm, evType, fn, useCapture) {
useCapture = useCapture || false;
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
}
else {
elm['on' + evType] = fn;
}
}
}
BrowserHistory = (function() {
// type of browser
var browser = {
ie: false,
firefox: false,
safari: false,
opera: false,
version: -1
};
// if setDefaultURL has been called, our first clue
// that the SWF is ready and listening
//var swfReady = false;
// the URL we'll send to the SWF once it is ready
//var pendingURL = '';
// Default app state URL to use when no fragment ID present
var defaultHash = '';
// Last-known app state URL
var currentHref = document.location.href;
// Initial URL (used only by IE)
var initialHref = document.location.href;
// Initial URL (used only by IE)
var initialHash = document.location.hash;
// History frame source URL prefix (used only by IE)
var historyFrameSourcePrefix = 'history/historyFrame.html?';
// History maintenance (used only by Safari)
var currentHistoryLength = -1;
var historyHash = [];
var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);
var backStack = [];
var forwardStack = [];
var currentObjectId = null;
//UserAgent detection
var useragent = navigator.userAgent.toLowerCase();
if (useragent.indexOf("opera") != -1) {
browser.opera = true;
} else if (useragent.indexOf("msie") != -1) {
browser.ie = true;
browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
} else if (useragent.indexOf("safari") != -1) {
browser.safari = true;
browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
} else if (useragent.indexOf("gecko") != -1) {
browser.firefox = true;
}
if (browser.ie == true && browser.version == 7) {
window["_ie_firstload"] = false;
}
// Accessor functions for obtaining specific elements of the page.
function getHistoryFrame()
{
return document.getElementById('ie_historyFrame');
}
function getAnchorElement()
{
return document.getElementById('firefox_anchorDiv');
}
function getFormElement()
{
return document.getElementById('safari_formDiv');
}
function getRememberElement()
{
return document.getElementById("safari_remember_field");
}
/* Get the Flash player object for performing ExternalInterface callbacks. */
function getPlayer(objectId) {
var objectId = objectId || null;
var player = null; /* AJH, needed? = document.getElementById(getPlayerId()); */
if (browser.ie && objectId != null) {
player = document.getElementById(objectId);
}
if (player == null) {
player = document.getElementsByTagName('object')[0];
}
if (player == null || player.object == null) {
player = document.getElementsByTagName('embed')[0];
}
return player;
}
function getPlayers() {
var players = [];
if (players.length == 0) {
var tmp = document.getElementsByTagName('object');
players = tmp;
}
if (players.length == 0 || players[0].object == null) {
var tmp = document.getElementsByTagName('embed');
players = tmp;
}
return players;
}
function getIframeHash() {
var doc = getHistoryFrame().contentWindow.document;
var hash = String(doc.location.search);
if (hash.length == 1 && hash.charAt(0) == "?") {
hash = "";
}
else if (hash.length >= 2 && hash.charAt(0) == "?") {
hash = hash.substring(1);
}
return hash;
}
/* Get the current location hash excluding the '#' symbol. */
function getHash() {
// It would be nice if we could use document.location.hash here,
// but it's faulty sometimes.
var idx = document.location.href.indexOf('#');
return (idx >= 0) ? document.location.href.substr(idx+1) : '';
}
/* Get the current location hash excluding the '#' symbol. */
function setHash(hash) {
// It would be nice if we could use document.location.hash here,
// but it's faulty sometimes.
if (hash == '') hash = '#'
document.location.hash = hash;
}
function createState(baseUrl, newUrl, flexAppUrl) {
return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };
}
/* Add a history entry to the browser.
* baseUrl: the portion of the location prior to the '#'
* newUrl: the entire new URL, including '#' and following fragment
* flexAppUrl: the portion of the location following the '#' only
*/
function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
//delete all the history entries
forwardStack = [];
if (browser.ie) {
//Check to see if we are being asked to do a navigate for the first
//history entry, and if so ignore, because it's coming from the creation
//of the history iframe
if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {
currentHref = initialHref;
return;
}
if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {
newUrl = baseUrl + '#' + defaultHash;
flexAppUrl = defaultHash;
} else {
// for IE, tell the history frame to go somewhere without a '#'
// in order to get this entry into the browser history.
getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
}
setHash(flexAppUrl);
} else {
//ADR
if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
initialState = createState(baseUrl, newUrl, flexAppUrl);
} else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
}
if (browser.safari) {
// for Safari, submit a form whose action points to the desired URL
if (browser.version <= 419.3) {
var file = window.location.pathname.toString();
file = file.substring(file.lastIndexOf("/")+1);
getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';
//get the current elements and add them to the form
var qs = window.location.search.substring(1);
var qs_arr = qs.split("&");
for (var i = 0; i < qs_arr.length; i++) {
var tmp = qs_arr[i].split("=");
var elem = document.createElement("input");
elem.type = "hidden";
elem.name = tmp[0];
elem.value = tmp[1];
document.forms.historyForm.appendChild(elem);
}
document.forms.historyForm.submit();
} else {
top.location.hash = flexAppUrl;
}
// We also have to maintain the history by hand for Safari
historyHash[history.length] = flexAppUrl;
_storeStates();
} else {
// Otherwise, write an anchor into the page and tell the browser to go there
addAnchor(flexAppUrl);
setHash(flexAppUrl);
}
}
backStack.push(createState(baseUrl, newUrl, flexAppUrl));
}
function _storeStates() {
if (browser.safari) {
getRememberElement().value = historyHash.join(",");
}
}
function handleBackButton() {
//The "current" page is always at the top of the history stack.
var current = backStack.pop();
if (!current) { return; }
var last = backStack[backStack.length - 1];
if (!last && backStack.length == 0){
last = initialState;
}
forwardStack.push(current);
}
function handleForwardButton() {
//summary: private method. Do not call this directly.
var last = forwardStack.pop();
if (!last) { return; }
backStack.push(last);
}
function handleArbitraryUrl() {
//delete all the history entries
forwardStack = [];
}
/* Called periodically to poll to see if we need to detect navigation that has occurred */
function checkForUrlChange() {
if (browser.ie) {
if (currentHref != document.location.href && currentHref + '#' != document.location.href) {
//This occurs when the user has navigated to a specific URL
//within the app, and didn't use browser back/forward
//IE seems to have a bug where it stops updating the URL it
//shows the end-user at this point, but programatically it
//appears to be correct. Do a full app reload to get around
//this issue.
if (browser.version < 7) {
currentHref = document.location.href;
document.location.reload();
} else {
if (getHash() != getIframeHash()) {
// this.iframe.src = this.blankURL + hash;
var sourceToSet = historyFrameSourcePrefix + getHash();
getHistoryFrame().src = sourceToSet;
}
}
}
}
if (browser.safari) {
// For Safari, we have to check to see if history.length changed.
if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {
//alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));
// If it did change, then we have to look the old state up
// in our hand-maintained array since document.location.hash
// won't have changed, then call back into BrowserManager.
currentHistoryLength = history.length;
var flexAppUrl = historyHash[currentHistoryLength];
if (flexAppUrl == '') {
//flexAppUrl = defaultHash;
}
//ADR: to fix multiple
if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
var pl = getPlayers();
for (var i = 0; i < pl.length; i++) {
pl[i].browserURLChange(flexAppUrl);
}
} else {
getPlayer().browserURLChange(flexAppUrl);
}
_storeStates();
}
}
if (browser.firefox) {
if (currentHref != document.location.href) {
var bsl = backStack.length;
var urlActions = {
back: false,
forward: false,
set: false
}
if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {
urlActions.back = true;
// FIXME: could this ever be a forward button?
// we can't clear it because we still need to check for forwards. Ugg.
// clearInterval(this.locationTimer);
handleBackButton();
}
// first check to see if we could have gone forward. We always halt on
// a no-hash item.
if (forwardStack.length > 0) {
if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) {
urlActions.forward = true;
handleForwardButton();
}
}
// ok, that didn't work, try someplace back in the history stack
if ((bsl >= 2) && (backStack[bsl - 2])) {
if (backStack[bsl - 2].flexAppUrl == getHash()) {
urlActions.back = true;
handleBackButton();
}
}
if (!urlActions.back && !urlActions.forward) {
var foundInStacks = {
back: -1,
forward: -1
}
for (var i = 0; i < backStack.length; i++) {
if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
arbitraryUrl = true;
foundInStacks.back = i;
}
}
for (var i = 0; i < forwardStack.length; i++) {
if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
arbitraryUrl = true;
foundInStacks.forward = i;
}
}
handleArbitraryUrl();
}
// Firefox changed; do a callback into BrowserManager to tell it.
currentHref = document.location.href;
var flexAppUrl = getHash();
if (flexAppUrl == '') {
//flexAppUrl = defaultHash;
}
//ADR: to fix multiple
if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
var pl = getPlayers();
for (var i = 0; i < pl.length; i++) {
pl[i].browserURLChange(flexAppUrl);
}
} else {
getPlayer().browserURLChange(flexAppUrl);
}
}
}
//setTimeout(checkForUrlChange, 50);
}
/* Write an anchor into the page to legitimize it as a URL for Firefox et al. */
function addAnchor(flexAppUrl)
{
if (document.getElementsByName(flexAppUrl).length == 0) {
getAnchorElement().innerHTML += "<a name='" + flexAppUrl + "'>" + flexAppUrl + "</a>";
}
}
var _initialize = function () {
if (browser.ie)
{
var scripts = document.getElementsByTagName('script');
for (var i = 0, s; s = scripts[i]; i++) {
if (s.src.indexOf("history.js") > -1) {
var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");
}
}
historyFrameSourcePrefix = iframe_location + "?";
var src = historyFrameSourcePrefix;
var iframe = document.createElement("iframe");
iframe.id = 'ie_historyFrame';
iframe.name = 'ie_historyFrame';
//iframe.src = historyFrameSourcePrefix;
try {
document.body.appendChild(iframe);
} catch(e) {
setTimeout(function() {
document.body.appendChild(iframe);
}, 0);
}
}
if (browser.safari)
{
var rememberDiv = document.createElement("div");
rememberDiv.id = 'safari_rememberDiv';
document.body.appendChild(rememberDiv);
rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';
var formDiv = document.createElement("div");
formDiv.id = 'safari_formDiv';
document.body.appendChild(formDiv);
var reloader_content = document.createElement('div');
reloader_content.id = 'safarireloader';
var scripts = document.getElementsByTagName('script');
for (var i = 0, s; s = scripts[i]; i++) {
if (s.src.indexOf("history.js") > -1) {
html = (new String(s.src)).replace(".js", ".html");
}
}
reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';
document.body.appendChild(reloader_content);
reloader_content.style.position = 'absolute';
reloader_content.style.left = reloader_content.style.top = '-9999px';
iframe = reloader_content.getElementsByTagName('iframe')[0];
if (document.getElementById("safari_remember_field").value != "" ) {
historyHash = document.getElementById("safari_remember_field").value.split(",");
}
}
if (browser.firefox)
{
var anchorDiv = document.createElement("div");
anchorDiv.id = 'firefox_anchorDiv';
document.body.appendChild(anchorDiv);
}
//setTimeout(checkForUrlChange, 50);
}
return {
historyHash: historyHash,
backStack: function() { return backStack; },
forwardStack: function() { return forwardStack },
getPlayer: getPlayer,
initialize: function(src) {
_initialize(src);
},
setURL: function(url) {
document.location.href = url;
},
getURL: function() {
return document.location.href;
},
getTitle: function() {
return document.title;
},
setTitle: function(title) {
try {
backStack[backStack.length - 1].title = title;
} catch(e) { }
//if on safari, set the title to be the empty string.
if (browser.safari) {
if (title == "") {
try {
var tmp = window.location.href.toString();
title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#"));
} catch(e) {
title = "";
}
}
}
document.title = title;
},
setDefaultURL: function(def)
{
defaultHash = def;
def = getHash();
//trailing ? is important else an extra frame gets added to the history
//when navigating back to the first page. Alternatively could check
//in history frame navigation to compare # and ?.
if (browser.ie)
{
window['_ie_firstload'] = true;
var sourceToSet = historyFrameSourcePrefix + def;
var func = function() {
getHistoryFrame().src = sourceToSet;
window.location.replace("#" + def);
setInterval(checkForUrlChange, 50);
}
try {
func();
} catch(e) {
window.setTimeout(function() { func(); }, 0);
}
}
if (browser.safari)
{
currentHistoryLength = history.length;
if (historyHash.length == 0) {
historyHash[currentHistoryLength] = def;
var newloc = "#" + def;
window.location.replace(newloc);
} else {
//alert(historyHash[historyHash.length-1]);
}
//setHash(def);
setInterval(checkForUrlChange, 50);
}
if (browser.firefox || browser.opera)
{
var reg = new RegExp("#" + def + "$");
if (window.location.toString().match(reg)) {
} else {
var newloc ="#" + def;
window.location.replace(newloc);
}
setInterval(checkForUrlChange, 50);
//setHash(def);
}
},
/* Set the current browser URL; called from inside BrowserManager to propagate
* the application state out to the container.
*/
setBrowserURL: function(flexAppUrl, objectId) {
if (browser.ie && typeof objectId != "undefined") {
currentObjectId = objectId;
}
//fromIframe = fromIframe || false;
//fromFlex = fromFlex || false;
//alert("setBrowserURL: " + flexAppUrl);
//flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
var pos = document.location.href.indexOf('#');
var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;
var newUrl = baseUrl + '#' + flexAppUrl;
if (document.location.href != newUrl && document.location.href + '#' != newUrl) {
currentHref = newUrl;
addHistoryEntry(baseUrl, newUrl, flexAppUrl);
currentHistoryLength = history.length;
}
return false;
},
browserURLChange: function(flexAppUrl) {
var objectId = null;
if (browser.ie && currentObjectId != null) {
objectId = currentObjectId;
}
pendingURL = '';
if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
var pl = getPlayers();
for (var i = 0; i < pl.length; i++) {
try {
pl[i].browserURLChange(flexAppUrl);
} catch(e) { }
}
} else {
try {
getPlayer(objectId).browserURLChange(flexAppUrl);
} catch(e) { }
}
currentObjectId = null;
}
}
})();
// Initialization
// Automated unit testing and other diagnostics
function setURL(url)
{
document.location.href = url;
}
function backButton()
{
history.back();
}
function forwardButton()
{
history.forward();
}
function goForwardOrBackInHistory(step)
{
history.go(step);
}
//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
(function(i) {
var u =navigator.userAgent;var e=/*@cc_on!@*/false;
var st = setTimeout;
if(/webkit/i.test(u)){
st(function(){
var dr=document.readyState;
if(dr=="loaded"||dr=="complete"){i()}
else{st(arguments.callee,10);}},10);
} else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
document.addEventListener("DOMContentLoaded",i,false);
} else if(e){
(function(){
var t=document.createElement('doc:rdy');
try{t.doScroll('left');
i();t=null;
}catch(e){st(arguments.callee,0);}})();
} else{
window.onload=i;
}
})( function() {BrowserHistory.initialize();} );

View File

@ -1,29 +0,0 @@
<html>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</head>
<body>
<script>
function processUrl()
{
var pos = url.indexOf("?");
url = pos != -1 ? url.substr(pos + 1) : "";
if (!parent._ie_firstload) {
parent.BrowserHistory.setBrowserURL(url);
try {
parent.BrowserHistory.browserURLChange(url);
} catch(e) { }
} else {
parent._ie_firstload = false;
}
}
var url = document.location.href;
processUrl();
document.write(url);
</script>
Hidden frame for Browser History support.
</body>
</html>

View File

@ -1,121 +0,0 @@
<!-- saved from url=(0014)about:internet -->
<html lang="en">
<!--
Smart developers always View Source.
This application was built using Adobe Flex, an open source framework
for building rich Internet applications that get delivered via the
Flash Player or to desktops via Adobe AIR.
Learn more about Flex at http://flex.org
// -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- BEGIN Browser History required section -->
<link rel="stylesheet" type="text/css" href="history/history.css" />
<!-- END Browser History required section -->
<title>${title}</title>
<script src="AC_OETags.js" language="javascript"></script>
<!-- BEGIN Browser History required section -->
<script src="history/history.js" language="javascript"></script>
<!-- END Browser History required section -->
<style>
body { margin: 0px; overflow:hidden }
</style>
<script language="JavaScript" type="text/javascript">
<!--
// -----------------------------------------------------------------------------
// Globals
// Major version of Flash required
var requiredMajorVersion = ${version_major};
// Minor version of Flash required
var requiredMinorVersion = ${version_minor};
// Minor version of Flash required
var requiredRevision = ${version_revision};
// -----------------------------------------------------------------------------
// -->
</script>
</head>
<body scroll="no">
<script language="JavaScript" type="text/javascript">
<!--
// Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
var hasProductInstall = DetectFlashVer(6, 0, 65);
// Version check based upon the values defined in globals
var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
if ( hasProductInstall && !hasRequestedVersion ) {
// DO NOT MODIFY THE FOLLOWING FOUR LINES
// Location visited after installation is complete if installation is required
var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
var MMredirectURL = window.location;
document.title = document.title.slice(0, 47) + " - Flash Player Installation";
var MMdoctitle = document.title;
AC_FL_RunContent(
"src", "playerProductInstall",
"FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
"width", "${width}",
"height", "${height}",
"align", "middle",
"id", "${application}",
"quality", "high",
"bgcolor", "${bgcolor}",
"name", "${application}",
"allowScriptAccess","sameDomain",
"type", "application/x-shockwave-flash",
"pluginspage", "http://www.adobe.com/go/getflashplayer"
);
} else if (hasRequestedVersion) {
// if we've detected an acceptable version
// embed the Flash Content SWF when all tests are passed
AC_FL_RunContent(
"src", "${swf}",
"width", "${width}",
"height", "${height}",
"align", "middle",
"id", "${application}",
"quality", "high",
"bgcolor", "${bgcolor}",
"name", "${application}",
"allowScriptAccess","sameDomain",
"type", "application/x-shockwave-flash",
"pluginspage", "http://www.adobe.com/go/getflashplayer"
);
} else { // flash is too old or we can't detect the plugin
var alternateContent = 'Alternate HTML content should be placed here. '
+ 'This content requires the Adobe Flash Player. '
+ '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
document.write(alternateContent); // insert non-flash content
}
// -->
</script>
<noscript>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="${application}" width="${width}" height="${height}"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="${swf}.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="${bgcolor}" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="${swf}.swf" quality="high" bgcolor="${bgcolor}"
width="${width}" height="${height}" name="${application}" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>
</noscript>
</body>
</html>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="addPresentation()" xmlns:components="org.bigbluebutton.main.view.components.*">
<mx:Script>
<![CDATA[
import org.bigbluebutton.modules.chat.ChatModule;
import org.bigbluebutton.main.MainApplicationFacade;
public function addPresentation():void{
var facade:MainApplicationFacade =
MainApplicationFacade.getInstance();
facade.addModule(new ChatModule());
}
]]>
</mx:Script>
<components:MainApplicationShell id="shell" />
</mx:Application>

View File

@ -1,77 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat
{
import org.bigbluebutton.modules.chat.controller.StartupCommand;
import org.puremvc.as3.multicore.interfaces.IFacade;
import org.puremvc.as3.multicore.patterns.facade.Facade;
/**
*
* Class ChatFacade
*
*/
public class ChatFacade extends Facade implements IFacade
{
public static const NAME:String = "ChatFacade";
public static const STARTUP:String = "startup";
public static const NEW_MESSAGE:String = "newMessage";
public static const CLOSE_CHAT:String = "closeChat";
public function ChatFacade()
{
super(NAME);
}
/**
*
* @returns the instance of ChatFacade
*
*/
public static function getInstance():ChatFacade{
if (instanceMap[NAME] == null) instanceMap[NAME] = new ChatFacade();
return instanceMap[NAME] as ChatFacade;
}
/**
* initializes the controller and registers the required commands with it
*
*/
override protected function initializeController():void{
super.initializeController();
registerCommand(STARTUP, StartupCommand);
}
/**
*
* @param app:ChatModule
*
*/
public function startup(app:ChatModule):void {
sendNotification(ChatFacade.STARTUP, app);
}
}
}

View File

@ -1,95 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat
{
import flash.system.Capabilities;
import flexlib.mdi.containers.MDIWindow;
import org.bigbluebutton.common.BigBlueButtonModule;
import org.bigbluebutton.common.Constants;
import org.bigbluebutton.common.IRouterAware;
import org.bigbluebutton.common.Router;
import org.bigbluebutton.main.view.components.MainApplicationShell;
import org.bigbluebutton.modules.chat.model.business.ChatProxy;
import org.bigbluebutton.modules.chat.view.components.ChatWindow;
import org.bigbluebutton.modules.log.LogModuleFacade;
import org.bigbluebutton.modules.viewers.ViewersFacade;
import org.bigbluebutton.modules.viewers.model.business.Conference;
/**
*
* Class ChatModule acts as view component for Chat Application
*
*/
public class ChatModule extends BigBlueButtonModule implements IRouterAware
{
public static const NAME:String = 'ChatModule';
public var chatWindow : ChatWindow;
private var facade : ChatFacade;
private var log : LogModuleFacade = LogModuleFacade.getInstance("LogModule");
public var activeWindow:MDIWindow;
/**
* costructor of class ChatModule
*
*/
public function ChatModule()
{
super(NAME);
log.debug("Creating new ChatWindow...");
chatWindow = new ChatWindow;
log.debug("Getting an instance of Chat Facade...");
facade = ChatFacade.getInstance();
this.preferedX = Capabilities.screenResolutionX - 410;
this.preferedY = 20;
this.startTime = BigBlueButtonModule.START_ON_LOGIN;
}
/**
*
* @param router
* @param shell
*
*/
override public function acceptRouter(router : Router, shell : MainApplicationShell) : void
{
super.acceptRouter(router, shell);
log.debug("Setting Router for Chat Module...");
ChatFacade(facade).startup(this);
var conf:Conference = ViewersFacade.getInstance().retrieveMediator(Conference.NAME) as Conference;
var proxy:ChatProxy = facade.retrieveProxy(ChatProxy.NAME) as ChatProxy;
proxy.join((conf.me.userid) as String,Constants.red5Host, conf.room);
//facade.presApp.join();
}
override public function getMDIComponent():MDIWindow{
return activeWindow;
}
override public function logout():void{
// var presentation:PresentationApplication =
// facade.retrieveMediator(PresentationApplication.NAME) as PresentationApplication;
// presentation.leave();
facade.removeCore(ChatFacade.NAME);
}
}
}

View File

@ -1,35 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat
{
/**
*
* Class of Constants
*
*/
public class ChatModuleConstants
{
public static const FROM_CHAT_MODULE:String = 'FROM_CHAT_MODULE';
public static const TO_CHAT_MODULE:String = 'TO_CHAT_MODULE';
public static const OPEN_WINDOW_MSG:String = 'OPEN_WINDOW_MSG';
public static const CLOSE_WINDOW_MSG:String = 'CLOSE_WINDOW_MSG';
}
}

View File

@ -1,48 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.controller
{
import flash.net.NetConnection;
import org.bigbluebutton.modules.chat.ChatModule;
import org.bigbluebutton.modules.chat.model.business.ChatProxy;
import org.bigbluebutton.modules.chat.view.ChatModuleMediator;
import org.bigbluebutton.modules.chat.view.ChatWindowMediator;
import org.puremvc.as3.multicore.interfaces.ICommand;
import org.puremvc.as3.multicore.interfaces.INotification;
import org.puremvc.as3.multicore.patterns.command.SimpleCommand;
public class StartupCommand extends SimpleCommand implements ICommand
{
/**
* registers the mediator and proxy with the facade
* @param notification
*
*/
override public function execute(notification:INotification):void {
var app:ChatModule = notification.getBody() as ChatModule;
facade.registerMediator(new ChatModuleMediator(app));
facade.registerMediator( new ChatWindowMediator(app.chatWindow) );
facade.registerProxy(new ChatProxy(app.chatWindow.messageVO, new NetConnection()));
}
}
}

View File

@ -1,214 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.model.business
{
import flash.events.AsyncErrorEvent;
import flash.events.NetStatusEvent;
import flash.events.SyncEvent;
import flash.net.NetConnection;
import flash.net.SharedObject;
import org.bigbluebutton.modules.chat.ChatFacade;
import org.bigbluebutton.modules.chat.model.vo.*;
import org.bigbluebutton.modules.chat.view.components.ChatWindow;
import org.bigbluebutton.modules.log.LogModuleFacade;
import org.bigbluebutton.modules.viewers.ViewersFacade;
import org.bigbluebutton.modules.viewers.model.business.Conference;
import org.puremvc.as3.multicore.interfaces.IProxy;
import org.puremvc.as3.multicore.patterns.proxy.Proxy;
/**
*
* This class gets a NetConnection instance and a shared object which try to connect.
*
*/
public class ChatProxy extends Proxy implements IProxy
{
public static const NAME:String = "Chat Proxy";
private var uri:String;
private var conn:Connection;
private var nc:NetConnection;
private var chatSO : SharedObject;
private var netConnectionDelegate: NetConnectionDelegate;
private var log : LogModuleFacade = LogModuleFacade.getInstance("LogModule");
private var conf : Conference = ViewersFacade.getInstance().retrieveMediator(Conference.NAME) as Conference;
private var me:String = conf.me.name;
private var room:String;
/**
* This method makes a new connection and adds event listeners to it
* @param messageVO
*
*/
public function ChatProxy(messageVO:MessageVO, nc:NetConnection)
{
super(NAME, messageVO);
netConnectionDelegate = new NetConnectionDelegate(this);
netConnectionDelegate.setNetConnection(nc);
}
public function connectionSuccess() : void
{
var conf:Conference = ViewersFacade.getInstance().retrieveMediator(Conference.NAME) as Conference;
room = conf.room;
joinConference();
}
/**
* The event is called when a connection could not be established
* @param message - the reason the connection was not established
*
*/
public function connectionFailed(message : String) : void
{
if (chatSO != null) chatSO.close();
}
public function join(userid: String, host : String, room : String):void
{
this.messageVO.message.setUserid(userid);
this.messageVO.message.host = host;
this.messageVO.message.room = room;
netConnectionDelegate.connect(host, room);
}
private function joinConference() : void
{
chatSO = SharedObject.getRemote("chatSO", netConnectionDelegate.connUri, false);
chatSO.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
chatSO.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
chatSO.addEventListener(SyncEvent.SYNC, sharedObjectSyncHandler);
chatSO.client = this;
chatSO.connect(netConnectionDelegate.getConnection());
log.chat("Chat is connected to Shared object");
}
public function leave():void
{
}
/**
*
* @return the messageVO containig the message Object
*
*/
public function get messageVO():MessageVO{
return this.data as MessageVO;
}
/**
* Handles the event of successful connection
* @param e:ConnectionEvent
*
*/
/*public function handleSucessfulConnection(e:ConnectionEvent):void{
nc = conn.getConnection();
chatSO = SharedObject.getRemote("chatSO", uri, false);
chatSO.addEventListener(SyncEvent.SYNC, sharedObjectSyncHandler);
chatSO.client = this;
chatSO.connect(nc);
log.debug("Chat is connected to Shared object");
}*/
public function handleDisconnection(e:ConnectionEvent):void {
}
/*public function closeConnection():void {
conn.removeEventListener(Connection.SUCCESS, handleSucessfulConnection);
conn.removeEventListener(Connection.DISCONNECTED, handleDisconnection);
conn.close();
log.debug("Chat module disconnected");
}*/
/**
* SyncHandler for Shared Object
* @param e:SyncEvent
*
*/
public function sharedObjectSyncHandler(e:SyncEvent):void{
}
/**
* Sends the message to the shared object
* @param message of type MessageVO
*
*/
public function sendMessageToSharedObject(message:MessageObject):void
{
chatSO.send("receiveNewMessage", me, message.getMessage(), message.getColor());
}
/**
* Updates the message VO according to the new message received
* and sends a notification for update the view
* @param message
* @param color
*
*/
public function receiveNewMessage(userid:String, message:String , color:uint):void{
var m:MessageObject = new MessageObject(message, color);
m.setUserid(userid);
this.messageVO.message = m;
sendNotification(ChatFacade.NEW_MESSAGE, m);
}
/**
*
* @return SharedObject
*
*/
public function getSharedObject(): SharedObject {
return chatSO;
}
public function setChatLog (messages:String) : void {
//log.chat("This is inside setChatLog(): " + messages);
var face: ChatWindow = ChatFacade.getInstance().retrieveMediator("ChatMediator").getViewComponent() as ChatWindow;
face.txtChatBox.htmlText = messages;
}
/**
* Method is called when a new NetStatusEvent is received
* @param event
*
*/
private function netStatusHandler ( event : NetStatusEvent ) : void
{
log.chat( "netStatusHandler " + event.info.code );
}
/**
* Method is called when a new AsyncErrorEvent is received
* @param event
*
*/
private function asyncErrorHandler ( event : AsyncErrorEvent ) : void
{
log.chat( "asyncErrorHandler " + event.error);
}
}
}

View File

@ -1,157 +0,0 @@
//written by John Grden...
package org.bigbluebutton.modules.chat.model.business
{
import flash.events.EventDispatcher;
import mx.events.MetadataEvent;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import org.bigbluebutton.modules.log.LogModuleFacade;
//import org.bigbluebutton.modules.chat.view.components.ChatWindow;
//import org.bigbluebutton.modules.chat.ChatFacade;
import mx.controls.Alert;
public class Connection extends EventDispatcher
{
public static var SUCCESS:String = "success";
public static var FAILED:String = "failed";
public static var CLOSED:String = "closed";
public static var REJECTED:String = "rejected";
public static var INVALIDAPP:String = "invalidApp";
public static var APPSHUTDOWN:String = "appShutdown";
public static var SECURITYERROR:String = "securityError";
public static var DISCONNECTED:String = "disconnected";
private var log : LogModuleFacade = LogModuleFacade.getInstance("LogModule");
private var nc:NetConnection;
private var uri:String;
public function Connection()
{
// create the netConnection
log.info("Creating NetConnection...");
nc = new NetConnection();
// set the encoding to AMF0 - still waiting for AMF3 to be implemented on Red5
nc.objectEncoding = ObjectEncoding.AMF0;
// set it's client/focus to this
nc.client = this;
// add listeners for netstatus and security issues
log.info("Listening to NetStatusEvent.NET_STATUS ...");
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
log.info("Listening to SecurityErrorEvent.SECURITY_ERROR ...");
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}
public function connect():void
{
if(getURI().length == 0)
{
Alert.show("please provide a valid URI connection string", "URI Connection String missing");
return;
}else if(nc.connected)
{
Alert.show("You are already connected to " + getURI(), "Already connected");
return;
}
nc.connect(getURI());
}
public function close():void
{
nc.close();
}
public function setURI(p_URI:String):void
{
uri = p_URI;
}
public function getURI():String
{
return uri;
}
public function getConnection():NetConnection
{
return nc;
}
public function getConnected():Boolean
{
return nc.connected;
}
public function onBWDone():void
{
// have to have this for an RTMP connection
}
private function netStatusHandler(event:NetStatusEvent):void
{
var e:ConnectionEvent;
switch(event.info.code)
{
case "NetConnection.Connect.Failed":
e = new ConnectionEvent(Connection.FAILED, false, false, event.info.code);
dispatchEvent(e);
log.error("Connection Failed " + event.info.code);
break;
case "NetConnection.Connect.Success":
e = new ConnectionEvent(Connection.SUCCESS, false, false, event.info.code);
dispatchEvent(e);
log.info("Connected to server Successfully " + event.info.code);
break;
case "NetConnection.Connect.Rejected":
e = new ConnectionEvent(Connection.REJECTED, false, false, event.info.code);
dispatchEvent(e);
log.error("NetConnection.Connect.Rejected " + event.info.code);
break;
case "NetConnection.Connect.Closed":
e = new ConnectionEvent(Connection.CLOSED, false, false, event.info.code);
dispatchEvent(e);
log.warning("NetConnection.Connect.Closed " + event.info.code);
break;
case "NetConnection.Connect.InvalidApp":
e = new ConnectionEvent(Connection.INVALIDAPP, false, false, event.info.code);
dispatchEvent(e);
log.error("NetConnection.Connect.InvalidApp " + event.info.code);
break;
case "NetConnection.Connect.AppShutdown":
e = new ConnectionEvent(Connection.APPSHUTDOWN, false, false, event.info.code);
dispatchEvent(e);
log.warning("NetConnection.Connect.AppShutDown " + event.info.code);
break;
}
if(event.info.code != "NetConnection.Connect.Success")
{
// I dispatch DISCONNECTED incase someone just simply wants to know if we're not connected'
// rather than having to subscribe to the events individually
e = new ConnectionEvent(Connection.DISCONNECTED, false, false, event.info.code);
dispatchEvent(e);
log.error("Module not Connected " + event.info.code);
}
}
private function securityErrorHandler(event:SecurityErrorEvent):void
{
var e:ConnectionEvent = new ConnectionEvent(Connection.SECURITYERROR, false, false, event.text);
dispatchEvent(e);
}
/*public function setChatLog (messages:String) : void {
log.info("This is serChatLog" + messages);
var face: ChatWindow = ChatFacade.getInstance().retrieveMediator("ChatMediator").getViewComponent() as ChatWindow;
face.txtChatBox.htmlText = messages;
}*/
}
}

View File

@ -1,33 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.model.business
{
import flash.events.Event;
public class ConnectionEvent extends Event
{
public var code:String = "";
public function ConnectionEvent(type:String, bubbles:Boolean, cancelable:Boolean, p_code:String=""):void
{
super(type, bubbles, cancelable);
code = p_code;
}
}
}

View File

@ -1,200 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.model.business
{
import mx.rpc.IResponder;
import flash.net.NetConnection;
import flash.events.*;
import org.bigbluebutton.modules.log.LogModuleFacade;
import org.bigbluebutton.modules.viewers.ViewersFacade;
import org.bigbluebutton.modules.chat.view.components.ChatWindow;
import org.bigbluebutton.modules.chat.ChatFacade;
public class NetConnectionDelegate
{
public static const ID : String = "Chat.NetConnectionDelegate";
private var log : LogModuleFacade = LogModuleFacade.getInstance("LogModule");
private var _proxy : ChatProxy;
private var netConnection : NetConnection;
private var _connUri : String;
private var connectionId : Number;
private var connected : Boolean = false;
public function NetConnectionDelegate(proxy : ChatProxy) : void
{
_proxy = proxy;
}
public function setNetConnection(nc:NetConnection):void{
this.netConnection = nc;
}
public function connect(host : String , room : String) : void
{
netConnection = new NetConnection();
netConnection.client = this;
netConnection.addEventListener( NetStatusEvent.NET_STATUS, netStatus );
netConnection.addEventListener( AsyncErrorEvent.ASYNC_ERROR, netASyncError );
netConnection.addEventListener( SecurityErrorEvent.SECURITY_ERROR, netSecurityError );
netConnection.addEventListener( IOErrorEvent.IO_ERROR, netIOError );
try {
// if (uri.charAt(uri.length) == "/")
// {
// _connUri = uri + room;
// } else {
// _connUri = uri + "/" + room;
// }
_connUri = "rtmp://" + host + "/chatServer/" + room;
log.chat( "Connecting to <b>" + _connUri + "</b>");
netConnection.connect(_connUri );
} catch( e : ArgumentError ) {
// Invalid parameters.
switch ( e.errorID )
{
case 2004 :
log.chat("Error! Invalid server location: <b>" + _connUri + "</b>");
break;
default :
break;
}
}
}
public function get connUri() : String
{
return _connUri;
}
public function disconnect() : void
{
netConnection.close();
}
protected function netStatus( event : NetStatusEvent ) : void
{
handleResult( event );
}
public function handleResult( event : Object ) : void {
var info : Object = event.info;
var statusCode : String = info.code;
switch ( statusCode )
{
case "NetConnection.Connect.Success" :
_proxy.connectionSuccess();
// find out if it's a secure (HTTPS/TLS) connection
if ( event.target.connectedProxyType == "HTTPS" || event.target.usingTLS ) {
log.chat("Connected to secure chat server");
} else {
log.chat("Connected to chat server");
}
break;
case "NetConnection.Connect.Failed" :
_proxy.connectionFailed(event.info.application);
_proxy.connectionFailed("Connection to server failed.");
log.chat("Connection to chat server failed");
break;
case "NetConnection.Connect.Closed" :
_proxy.connectionFailed("Connection to chat server closed.");
log.chat("Connection to chat server closed");
break;
case "NetConnection.Connect.InvalidApp" :
_proxy.connectionFailed("Chat application not found on server")
log.chat("Chat application not found on server");
break;
case "NetConnection.Connect.AppShutDown" :
_proxy.connectionFailed("Chat application has been shutdown");
log.chat("Chat application has been shutdown");
break;
case "NetConnection.Connect.Rejected" :
_proxy.connectionFailed(event.info.application);
log.chat("No permissions to connect to the chat application" );
break;
default :
// statements
break;
}
}
protected function netSecurityError( event : SecurityErrorEvent ) : void
{
handleFault( new SecurityErrorEvent ( SecurityErrorEvent.SECURITY_ERROR, false, true,
"Security error - " + event.text ) );
}
protected function netIOError( event : IOErrorEvent ) : void
{
handleFault( new IOErrorEvent ( IOErrorEvent.IO_ERROR, false, true,
"Input/output error - " + event.text ) );
}
protected function netASyncError( event : AsyncErrorEvent ) : void
{
handleFault( new AsyncErrorEvent ( AsyncErrorEvent.ASYNC_ERROR, false, true,
"Asynchronous code error - <i>" + event.error + "</i>" ) );
}
public function handleFault( event : Object ) : void
{
_proxy.connectionFailed(event.text);
}
public function getConnection() : NetConnection
{
return netConnection;
}
public function setId(id:Number ) : *
{
log.debug( ID + "::setConnectionId: id=[" + id + "]");
if( isNaN( id ) ) return "FAILED";
return "OK";
}
public function setChatLog (messages:String) : void {
//log.info("This is inside setChatLog(): " + messages);
var face: ChatWindow = ChatFacade.getInstance().retrieveMediator("ChatMediator").getViewComponent() as ChatWindow;
face.txtChatBox.htmlText = messages;
//log.info("Here is the chat history: " + messages + " end of chat history");
}
}
}

View File

@ -1,57 +0,0 @@
package org.bigbluebutton.modules.chat.model.business
{
import flash.events.SyncEvent;
import flash.net.SharedObject;
import org.bigbluebutton.modules.chat.model.vo.MessageObject;
import org.bigbluebutton.modules.chat.model.vo.MessageVO;
public class PlaybackProxy extends ChatProxy
{
public function PlaybackProxy(messageVO:MessageVO, nc:NetConnection = null)
{
super(messageVO, nc);
}
override public function connectionSuccess():void{}
override public function connectionFailed(message:String):void{}
override public function join(userid:String, host:String, room:String):void{}
override public function leave():void{}
override public function get messageVO():MessageVO{
return null;
}
override public function handleDisconnection(e:ConnectionEvent):void{}
override public function sharedObjectSyncHandler(e:SyncEvent):void{}
override public function sendMessageToSharedObject(message:MessageObject):void{
}
/**
* This is the only method in the chat proxy the playback is interested in
* @param userid - The name of the person sending the message
* @param message - The message
* @param color - The color of the text
*
*/
override public function receiveNewMessage(userid:String, message:String, color:uint):void{
var m:MessageObject = new MessageObject(message, color);
m.setUserid(userid);
this.messageVO.message = m;
sendNotification(ChatFacade.NEW_MESSAGE, m);
}
override public function getSharedObject():SharedObject{
return null;
}
override public function setChatLog(messages:String):void{}
}
}

View File

@ -1,70 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.model.vo
{
public class MessageObject
{
public var color:uint;
public var message:String;
private var userid:String;
public var room:String;
public var host:String;
/**
*
* @param message
* @param color
*
*/
public function MessageObject(message:String, color:uint)
{
this.color = color;
this.message = message;
}
/**
*
* @return the color of message font
*
*/
public function getColor():uint{
return this.color;
}
/**
*
* @return a string containing the last message
*
*/
public function getMessage (): String {
return this.message;
}
/**
*
* @return userid
*
*/
public function getUserid():String {
return this.userid;
}
public function setUserid(userid:String):void{
this.userid = userid;
}
}
}

View File

@ -1,44 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.model.vo
{
/**
*
* Value object class
* The message itself and some attributes of it
*
*/
[Bindable]
public class MessageVO
{
public var message:MessageObject;
/**
* Constructor
*
*/
public function MessageVO()
{
message = new MessageObject("",0xffff);
}
}
}

View File

@ -1,187 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.view
{
import flash.events.Event;
import flash.events.MouseEvent;
import org.bigbluebutton.common.InputPipe;
import org.bigbluebutton.common.OutputPipe;
import org.bigbluebutton.common.Router;
import org.bigbluebutton.main.MainApplicationConstants;
import org.bigbluebutton.modules.chat.ChatModule;
import org.bigbluebutton.modules.chat.ChatModuleConstants;
import org.bigbluebutton.modules.chat.model.business.ChatProxy;
import org.bigbluebutton.modules.chat.view.components.ChatWindow;
import org.bigbluebutton.modules.log.LogModuleFacade;
import org.puremvc.as3.multicore.interfaces.IMediator;
import org.puremvc.as3.multicore.patterns.mediator.Mediator;
import org.puremvc.as3.multicore.utilities.pipes.interfaces.IPipeMessage;
import org.puremvc.as3.multicore.utilities.pipes.messages.Message;
import org.puremvc.as3.multicore.utilities.pipes.plumbing.PipeListener;
/**
* This class is a mediator for the ChatModule viewComponent
*
*
*/
public class ChatModuleMediator extends Mediator implements IMediator
{
public static const NAME:String = 'LogModuleMediator';
private var outpipe : OutputPipe;
private var inpipe : InputPipe;
private var router : Router;
private var inpipeListener : PipeListener;
public var chatWindow : ChatWindow;
private var log : LogModuleFacade = LogModuleFacade.getInstance("LogModule");
private var module:ChatModule;
/**
* Constructor
* It sets the required initialization for the router and piping
* @param viewComponent
*
*/
public function ChatModuleMediator( viewComponent:ChatModule )
{
super( NAME, viewComponent );
module = viewComponent;
router = viewComponent.router;
log.debug("initializing input pipes for chat module...");
inpipe = new InputPipe(ChatModuleConstants.TO_CHAT_MODULE);
log.debug("initializing output pipes for chat module...");
outpipe = new OutputPipe(ChatModuleConstants.FROM_CHAT_MODULE);
log.debug("initializing pipe listener for chat module...");
inpipeListener = new PipeListener(this, messageReceiver);
router.registerOutputPipe(outpipe.name, outpipe);
router.registerInputPipe(inpipe.name, inpipe);
chatWindow = viewComponent.chatWindow;
addWindow();
}
override public function initializeNotifier(key:String):void
{
super.initializeNotifier(key);
}
//override public function handleNotification(note:INotification):void
//{
// switch(note.getName())
// {
//case ChatFacade.DEBUG:
//break;
// }
//}
/**
* prepares the chat window to be sent as a message through pipes to Shell
*
*/
private function addWindow() : void
{
// create a message
var msg:IPipeMessage = new Message(Message.NORMAL);
msg.setHeader( {MSG:MainApplicationConstants.ADD_WINDOW_MSG, SRC: ChatModuleConstants.FROM_CHAT_MODULE,
TO: MainApplicationConstants.TO_MAIN });
msg.setPriority(Message.PRIORITY_HIGH );
chatWindow.width = 210;
chatWindow.height = 200;
chatWindow.title = ChatWindow.TITLE;
msg.setBody(viewComponent as ChatModule);
module.activeWindow = chatWindow;
outpipe.write(msg);
chatWindow.closeBtn.addEventListener(MouseEvent.CLICK, removeWindow);
log.debug("A message has been sent to show the chat window.");
}
/**
* preparing the remove window event to send through pipes to shell
* @param event:Event
*
*/
private function removeWindow(event:Event) : void
{
var msg:IPipeMessage = new Message(Message.NORMAL);
msg.setHeader( {MSG:MainApplicationConstants.REMOVE_WINDOW_MSG, SRC: ChatModuleConstants.FROM_CHAT_MODULE,
TO: MainApplicationConstants.TO_MAIN });
msg.setPriority(Message.PRIORITY_HIGH );
chatWindow.closeBtn.removeEventListener(MouseEvent.CLICK, removeWindow);
msg.setBody(viewComponent as ChatModule);
outpipe.write(msg);
log.debug("A message has been sent to remove the chat window.");
log.debug("Disconnecting chat module...");
//proxy.closeConnection();
}
/**
*
* @return view component chatModule
*
*/
protected function get chatModule():ChatModule
{
return viewComponent as ChatModule;
}
/**
* handler for incoming messages
* @param message
*
*/
private function messageReceiver(message : IPipeMessage) : void
{
var msg : String = message.getHeader().MSG;
}
/**
*
* @return proxy
*
*/
public function get proxy():ChatProxy
{
return facade.retrieveProxy(ChatProxy.NAME) as ChatProxy;
}
// override public function listNotificationInterests():Array
// {
// return [
//ChatFacade.DEBUG
// ];
//}
/*
private function debug(message:String) : void
{
var msg:IPipeMessage = new Message(Message.NORMAL);
msg.setHeader( {MSG: LogModuleConstants.DEBUG , SRC: ChatModuleConstants.FROM_CHAT_MODULE,
TO: LogModuleConstants.TO_LOG_MODULE });
msg.setBody(message);
outpipe.write(msg);
}
*/
}
}

View File

@ -1,106 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 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 2.1 of the License, or (at your option) any later
* version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.chat.view
{
import flash.events.Event;
import org.bigbluebutton.modules.chat.ChatFacade;
import org.bigbluebutton.modules.chat.model.business.ChatProxy;
import org.bigbluebutton.modules.chat.model.vo.*;
import org.bigbluebutton.modules.chat.view.components.ChatWindow;
import org.puremvc.as3.multicore.interfaces.IMediator;
import org.puremvc.as3.multicore.interfaces.INotification;
import org.puremvc.as3.multicore.patterns.mediator.Mediator;
/**
*
* Mediator Class for ChatWindow view component
*
*/
public class ChatWindowMediator extends Mediator implements IMediator
{
public static const NAME:String = "ChatMediator";
public static const NEW_MESSAGE:String = "newMessage";
/**
* Constructor for class ChatWindowMediator
* @param viewComponent
*
*/
public function ChatWindowMediator(viewComponent:ChatWindow)
{
super(NAME, viewComponent);
viewComponent.addEventListener(ChatWindowMediator.NEW_MESSAGE, sendNewMessage);
}
/**
*
* @return chatWindow, the view component
*
*/
public function get chatWindow():ChatWindow
{
return viewComponent as ChatWindow;
}
/**
* handler for the event of sending new message
* @param e
*
*/
public function sendNewMessage(e:Event):void
{
proxy.sendMessageToSharedObject(chatWindow.m);
}
/**
* notification(s) that should be taken care off
* @return
*
*/
override public function listNotificationInterests():Array
{
return [
ChatFacade.NEW_MESSAGE
];
}
/**
* Handlers for notification(s) this class is listening to
* @param notification
*
*/
override public function handleNotification(notification:INotification):void
{
switch(notification.getName())
{
case ChatFacade.NEW_MESSAGE:
this.chatWindow.showNewMessage(notification.getBody() as MessageObject);
break;
}
}
/**
*
* @return proxy
*
*/
public function get proxy():ChatProxy
{
return facade.retrieveProxy(ChatProxy.NAME) as ChatProxy;
}
}
}

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<MDIWindow xmlns="flexlib.mdi.containers.*"
xmlns:mx="http://www.adobe.com/2006/mxml"
width="400" height="300" showCloseButton="false"
click="setFocusOn(this.txtMsg || this.txtChatBox)"
focusEnd="setFocusOff()">
<mx:Script>
<![CDATA[
import mx.events.MenuEvent;
import mx.controls.Menu;
import mx.utils.ColorUtil;
import org.bigbluebutton.modules.chat.model.vo.MessageVO;
import org.bigbluebutton.modules.chat.view.ChatWindowMediator;
import org.bigbluebutton.modules.chat.model.vo.*;
import mx.core.UIComponent;
public static const TITLE:String = "Public Chat";
private var sizeM:Menu;
public var m:MessageObject;
[Bindable]
public var messageVO:MessageVO = new MessageVO();
public function showNewMessage(rm : MessageObject):void
{
var newMessage:String;
newMessage = "<font color=\"#" + rm.color.toString(16) + "\"><b>[" +
rm.getUserid() +" @ "+ time()+ "]</b> " + rm.message + "</font>";
txtChatBox.htmlText += newMessage + "\n";
}
public function setFocusOn(component:UIComponent):void
{
if (component.id == "txtMsg") {
component.setFocus();
component.drawFocus(true);
}
else
{
this.txtMsg.setFocus();
this.txtMsg.drawFocus(true);
}
//this.txtMsg.focusManager.showFocusIndicator = true;
}
public function setFocusOff():void
{
//this.txtMsg.setFocus();
//this.txtMsg.cursorManager.hideCursor();
this.txtMsg.drawFocus(false);
//this.txtMsg.cursorManager.removeAllCursors();
}
public function sendMessages():void
{
if (txtMsg.text.length > 4000)
{
txtChatBox.htmlText += "Your message is too long!" +
" There is a limit of maximum 4000 character per message." + "\n";
return;
}
else if (txtMsg.text != ""){
this.m = new MessageObject(txtMsg.text, cmpColorPicker.selectedColor);
dispatchEvent(new Event(ChatWindowMediator.NEW_MESSAGE));}
txtMsg.text = "";
}
private function updateScroll():void
{
txtChatBox.verticalScrollPosition = txtChatBox.maxVerticalScrollPosition;
}
private function time() : String
{
var date:Date = new Date();
var t:String = date.toLocaleTimeString();
//var d:String = date.toLocaleDateString();
return t;
}
]]>
</mx:Script>
<mx:TextArea id="txtChatBox" editable="false" width="100%" height="100%" focusEnabled="false" updateComplete="updateScroll()"/>
<mx:ApplicationControlBar width="100%" height="10%">
<mx:TextInput id="txtMsg" width="100%" enter="sendMessages()"/>
<mx:ColorPicker id="cmpColorPicker" showTextField="false" toolTip="Text Color" selectedColor="0x000000"/>
<mx:Button label="Send" id="send" toolTip="Send Message" click="sendMessages()"/>
</mx:ApplicationControlBar>
</MDIWindow>