Merge branch 'merge-master-into-client-testing'
This commit is contained in:
commit
3e408401a4
@ -1,17 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<actionScriptProperties mainApplicationPath="BigBlueButton.mxml" projectUUID="2f78753b-2e4c-41b4-8cf4-eddb768eb4b3" version="6">
|
||||
<compiler additionalCompilerArguments="-locale=" autoRSLOrdering="false" copyDependentFiles="true" flexSDK="Flex 3.5" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" sourceFolderPath="src" strict="true" targetPlayerVersion="10.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
|
||||
<compiler additionalCompilerArguments="-locale= -swf-version=12" autoRSLOrdering="false" copyDependentFiles="true" flex3CompatMode="true" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" sourceFolderPath="src" strict="true" targetPlayerVersion="10.3.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
|
||||
<compilerSourcePath/>
|
||||
<libraryPath defaultLinkType="1">
|
||||
<libraryPathEntry kind="4" path="">
|
||||
<modifiedEntries>
|
||||
<libraryPathEntry kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/framework.swc" useDefaultLinkType="true">
|
||||
<crossDomainRsls>
|
||||
<crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="framework_3.1.0.2710.swz"/>
|
||||
<crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="framework_3.1.0.2710.swf"/>
|
||||
</crossDomainRsls>
|
||||
</libraryPathEntry>
|
||||
</modifiedEntries>
|
||||
<excludedEntries>
|
||||
<libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/qtp.swc" useDefaultLinkType="false"/>
|
||||
<libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation.swc" useDefaultLinkType="false"/>
|
||||
@ -53,4 +45,3 @@
|
||||
<buildCSSFileEntry destPath="bin" sourcePath="src/branding/css/theme.css"/>
|
||||
</buildCSSFiles>
|
||||
</actionScriptProperties>
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
|
||||
|
||||
<!-- Declare module names here -->
|
||||
<property name="BBB_MAIN_TEST" value="BigBlueButtonTest" />
|
||||
<property name="BBB_MAIN" value="BigBlueButton" />
|
||||
<property name="CHAT" value="ChatModule" />
|
||||
<property name="VIEWERS" value="ViewersModule" />
|
||||
@ -28,88 +29,22 @@
|
||||
<property name="BREAKOUT" value="BreakoutModule" />
|
||||
<property name="CLASSROOM_AUDIO" value="ClassroomAudioModule" />
|
||||
<property name="SETTINGS" value="SettingsModule" />
|
||||
|
||||
<property name="AVAILABLE_LOCALES" value="az_AZ,bn_BN,bg_BG,cs_CZ,da_DK,de_DE,el_GR,en_US,es_ES,es_LA,eu_EU,fa_IR,fr_FR,fr_CA,hr_HR,hu_HU,id_ID,it_IT,ja_JP,ko_KR,lv_LV,lt_LT,mn_MN,nb_NO,ne_NE,nl_NL,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sv_SE,sr_RS,sr_SR,th_TH,tr_TR,vi_VN,uk_UA,zh_CN,zh_TW"/>
|
||||
|
||||
<xmlproperty file="${SRC_DIR}/conf/locales.xml" collapseAttributes="true"/>
|
||||
|
||||
<target name="init-ant-contrib">
|
||||
<property name="ant-contrib.jar" location="${BASE_DIR}/build/lib/ant-contrib-0.6.jar"/>
|
||||
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${ant-contrib.jar}"/>
|
||||
</target>
|
||||
|
||||
<target name="localization" depends="init-ant-contrib">
|
||||
<echo message="Parsing ${SRC_DIR}/conf/locales.xml for supported locales"/>
|
||||
<echo message="Available locales ${AVAILABLE_LOCALES}"/>
|
||||
<!--foreach list="${locales.locale.code}" target="build-locale" param="supportedlocale" delimiter=","/-->
|
||||
<foreach list="${AVAILABLE_LOCALES}" target="build-locale" param="supportedlocale" delimiter=","/>
|
||||
</target>
|
||||
|
||||
<target name="branding" depends="init-ant-contrib">
|
||||
<sequential>
|
||||
<mxmlc file="${SRC_DIR}/branding/css/${themeFile}" output="${OUTPUT_DIR}/branding/css/${themeFile}.swf" debug="false" optimize="true">
|
||||
<mxmlc file="${SRC_DIR}/branding/css/${themeFile}" output="${OUTPUT_DIR}/branding/css/${themeFile}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true">
|
||||
</mxmlc>
|
||||
</sequential>
|
||||
</target>
|
||||
|
||||
<target name="build-locale">
|
||||
<echo message="Building ${supportedlocale}"/>
|
||||
<available file="${LOCALE_DIR}/${supportedlocale}" type="dir" property="locale.dir.present"/>
|
||||
<if>
|
||||
<equals arg1="${locale.dir.present}" arg2="true"/>
|
||||
<then>
|
||||
<echo message="No need to copy ${LOCALE_DIR}/${supportedlocale}"/>
|
||||
</then>
|
||||
<else>
|
||||
<echo message="Need to copy ${LOCALE_DIR}/${supportedlocale}"/>
|
||||
<exec dir="${BASE_DIR}" vmlauncher="true" executable="copylocale">
|
||||
<arg value="en_US"/>
|
||||
<arg value="${supportedlocale}"/>
|
||||
</exec>
|
||||
</else>
|
||||
</if>
|
||||
<compileLocale locale="${supportedlocale}" />
|
||||
|
||||
<target name="build-bbb-main-test" description="Compile BigBlueButton Main Test">
|
||||
<build-main src="${SRC_DIR}" target="${BBB_MAIN_TEST}" />
|
||||
</target>
|
||||
|
||||
<macrodef name="compileLocale" description="Compiles the Resource package for the given locale">
|
||||
<attribute name="locale" default="en_US"/>
|
||||
<sequential>
|
||||
<echo message="Building @{locale}"/>
|
||||
<available file="${LOCALE_DIR}/@{locale}" type="dir" property="locale.dir.present"/>
|
||||
<if>
|
||||
<equals arg1="${locale.dir.present}" arg2="true"/>
|
||||
<then>
|
||||
<echo message="No need to copy ${LOCALE_DIR}/@{locale}"/>
|
||||
</then>
|
||||
<else>
|
||||
<echo message="Need to copy ${LOCALE_DIR}/@{locale}"/>
|
||||
<exec dir="${BASE_DIR}" vmlauncher="true" executable="copylocale">
|
||||
<arg value="en_US"/>
|
||||
<arg value="@{locale}"/>
|
||||
</exec>
|
||||
</else>
|
||||
</if>
|
||||
|
||||
<!--
|
||||
Create the Flex Home directory for the language in question.
|
||||
This is necessary to compensate for a bug in pre-3.2 releases of
|
||||
mxmlc.
|
||||
|
||||
<mkdir dir="${FLEX_HOME}/frameworks/locale/@{locale}"/>-->
|
||||
|
||||
<!-- Invoke MXMLC -->
|
||||
<mxmlc output="${OUTPUT_DIR}/locale/@{locale}_resources.swf">
|
||||
<locale>@{locale}</locale>
|
||||
<target-player>10.0.0</target-player>
|
||||
<source-path path-element="locale/{locale}"/>
|
||||
<include-resource-bundles>bbbResources</include-resource-bundles>
|
||||
<include-resource-bundles>core</include-resource-bundles>
|
||||
<include-resource-bundles>controls</include-resource-bundles>
|
||||
<source-path path-element="${FLEX_HOME}/frameworks"/>
|
||||
</mxmlc>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
|
||||
|
||||
<target name="build-bbb-main" description="Compile BigBlueButton Main">
|
||||
<build-main src="${SRC_DIR}" target="${BBB_MAIN}" />
|
||||
|
||||
@ -186,7 +121,7 @@
|
||||
|
||||
<!-- just a grouping of modules to compile -->
|
||||
<target name="build-main-chat-viewers-listeners-present"
|
||||
depends="build-bbb-main, build-chat, build-viewers, build-listeners, build-present, build-breakout"
|
||||
depends="build-bbb-main, build-bbb-main-test, build-chat, build-viewers, build-listeners, build-present, build-breakout"
|
||||
description="Compile main, chat, viewers, listeners, present, breakout modules">
|
||||
</target>
|
||||
|
||||
@ -202,8 +137,8 @@
|
||||
<attribute name="app" default="."/>
|
||||
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
|
||||
<sequential>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" optimize="true" link-report="linker-report.xml">
|
||||
<target-player>10.0.0</target-player>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" link-report="linker-report.xml">
|
||||
<target-player>11.2</target-player>
|
||||
<load-config filename="@{flex}/frameworks/flex-config.xml" />
|
||||
<source-path path-element="@{flex}/frameworks" />
|
||||
<compiler.library-path dir="@{flex}/frameworks" append="true">
|
||||
@ -227,8 +162,8 @@
|
||||
<attribute name="app" default="."/>
|
||||
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
|
||||
<sequential>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false">
|
||||
<target-player>10.0.0</target-player>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13">
|
||||
<target-player>11</target-player>
|
||||
<load-config filename="@{flex}/frameworks/flex-config.xml" />
|
||||
<source-path path-element="@{flex}/frameworks" />
|
||||
<compiler.library-path dir="@{flex}/frameworks" append="true">
|
||||
@ -252,8 +187,8 @@
|
||||
<attribute name="app" default="."/>
|
||||
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
|
||||
<sequential>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" optimize="true" load-externs="linker-report.xml">
|
||||
<target-player>10.0.0</target-player>
|
||||
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" load-externs="linker-report.xml">
|
||||
<target-player>11</target-player>
|
||||
<load-config filename="@{flex}/frameworks/flex-config.xml" />
|
||||
<source-path path-element="@{flex}/frameworks" />
|
||||
<compiler.library-path dir="@{flex}/frameworks" append="true">
|
||||
@ -284,6 +219,10 @@
|
||||
<copy todir="${OUTPUT_DIR}/swfobject/" >
|
||||
<fileset dir="${BASE_DIR}/src/swfobject/" />
|
||||
</copy>
|
||||
<copy todir="${OUTPUT_DIR}/locale" >
|
||||
<fileset dir="${BASE_DIR}/locale/" />
|
||||
</copy>
|
||||
<copy file="${PROD_RESOURCES_DIR}/BigBlueButtonTest.html" todir="${OUTPUT_DIR}" overwrite="true"/>
|
||||
<copy file="${PROD_RESOURCES_DIR}/BigBlueButton.html" todir="${OUTPUT_DIR}" overwrite="true"/>
|
||||
<copy file="${PROD_RESOURCES_DIR}/DeskshareStandalone.html" todir="${OUTPUT_DIR}" overwrite="true"/>
|
||||
<copy file="${PROD_RESOURCES_DIR}/bbb.gif" todir="${OUTPUT_DIR}" overwrite="true"/>
|
||||
@ -295,19 +234,19 @@
|
||||
<copy file="${PROD_RESOURCES_DIR}/bbb_blinker.js" todir="${OUTPUT_DIR}" overwrite="true"/>
|
||||
<copy file="${PROD_RESOURCES_DIR}/bbb_deskshare.js" todir="${OUTPUT_DIR}" overwrite="true"/>
|
||||
<copy file="${PROD_RESOURCES_DIR}/bbb_localization.js" todir="${OUTPUT_DIR}" overwrite="true"/>
|
||||
<if>
|
||||
<!--<if>
|
||||
<equals arg1="${BUILD_ENV}" arg2="DEV"/>
|
||||
<then>
|
||||
<then>-->
|
||||
<echo message="Copying config.xml for development environment"/>
|
||||
<copy file="${BASE_DIR}/src/conf/config.xml" todir="${OUTPUT_DIR}/conf" />
|
||||
<echo message="Copying join-mock.xml for development environment"/>
|
||||
<copy file="${BASE_DIR}/src/conf/join-mock.xml" todir="${OUTPUT_DIR}/conf" />
|
||||
</then>
|
||||
<!--</then>
|
||||
<else>
|
||||
<echo message="Need to copy config.xml.template for production environment"/>
|
||||
<copy file="${RESOURCES_DIR}/config.xml.template" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
|
||||
</else>
|
||||
</if>
|
||||
</if>-->
|
||||
</target>
|
||||
|
||||
<target name="check-config-xml">
|
||||
@ -328,11 +267,10 @@
|
||||
bgcolor="grey"
|
||||
application="BBB"
|
||||
swf="BigBlueButton"
|
||||
version-major="10"
|
||||
version-minor="0"
|
||||
version-major="11"
|
||||
version-minor="2"
|
||||
version-revision="0"
|
||||
history="true"
|
||||
template="express-installation"
|
||||
output="${OUTPUT_DIR}"
|
||||
/>
|
||||
</target>
|
||||
@ -368,7 +306,7 @@
|
||||
to be compiled withouth being optimized by using the linker -->
|
||||
<target name="clean-build-bbb" depends="clean, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
|
||||
description="Build BBB client skipping compiling of locales"/>
|
||||
<target name="clean-build-all" depends="clean, generate-html-wrapper, localization, compile-deskshare-standalone, compile-bbb"
|
||||
<target name="clean-build-all" depends="clean, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
|
||||
description="Build BBB client including locales"/>
|
||||
<target name="modules" depends="init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
|
||||
description="Build BBB client without locales"/>
|
||||
|
@ -1,292 +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"));
|
||||
}
|
||||
} else if (versionRevision[0] == "b") {
|
||||
versionRevision = versionRevision.substring(1);
|
||||
}
|
||||
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)
|
||||
{
|
||||
var qIndex = src.indexOf('?');
|
||||
if ( qIndex != -1)
|
||||
{
|
||||
// Add the extention (if needed) before the query params
|
||||
var path = src.substring(0, qIndex);
|
||||
if (path.length >= ext.length && path.lastIndexOf(ext) == (path.length - ext.length))
|
||||
return src;
|
||||
else
|
||||
return src.replace(/\?/, ext+'?');
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add the extension (if needed) to the end of the URL
|
||||
if (src.length >= ext.length && src.lastIndexOf(ext) == (src.length - ext.length))
|
||||
return src; // Already have extension
|
||||
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;
|
||||
}
|
||||
|
||||
|
Binary file not shown.
@ -1,29 +0,0 @@
|
||||
var blinkTimer = false;
|
||||
var blinking = false;
|
||||
|
||||
var startblink = function(message1, message2)
|
||||
{
|
||||
if(!blinking)
|
||||
{
|
||||
document.title = (document.title == message2)?message1:message2;
|
||||
blinkTimer = window.setTimeout("blinktitle('" + message1 + "', '" + message2 + "', 1)", 500);
|
||||
blinking = true;
|
||||
}
|
||||
}
|
||||
|
||||
var blinktitle = function(message1, message2)
|
||||
{
|
||||
document.title = (document.title == message2)?message1:message2;
|
||||
blinkTimer = window.setTimeout("blinktitle('" + message1 + "', '" + message2 + "', 1)", 500);
|
||||
}
|
||||
|
||||
var clearblink = function()
|
||||
{
|
||||
blinking = false;
|
||||
if(blinkTimer)
|
||||
{
|
||||
window.clearTimeout(blinkTimer);
|
||||
}
|
||||
document.title = 'BigBlueButton';
|
||||
}
|
||||
|
@ -1,33 +0,0 @@
|
||||
function startApplet(IP, roomNumber, fullScreen)
|
||||
{
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.id = "iframe";
|
||||
document.body.appendChild(iframe);
|
||||
frames[frames.length - 1].document.write(
|
||||
"<applet code=\"org.bigbluebutton.deskshare.client.DeskShareApplet.class\"" +
|
||||
"id=\"DeskShareApplet\" width=\"0\" height=\"400\" archive=\"bbb-deskshare-applet-0.71.jar\">" +
|
||||
"<param name=\"ROOM\" value=\"" + roomNumber + "\"/>" +
|
||||
"<param name=\"IP\" value=\"" + IP + "\"/>" +
|
||||
"<param name=\"FULL_SCREEN\" value=\"" + fullScreen + "\"/>" +
|
||||
"</applet>"
|
||||
);
|
||||
}
|
||||
|
||||
function removeFrame () {
|
||||
var iframe = document.getElementById("iframe");
|
||||
iframe.parentNode.removeChild(iframe);
|
||||
}
|
||||
|
||||
function setScreenCoordinates(x, y) {
|
||||
return frames[frames.length - 1].document.DeskShareApplet.setScreenCoordinates(x,y);
|
||||
}
|
||||
|
||||
function stopApplet(){
|
||||
frames[frames.length - 1].document.DeskShareApplet.destroy();
|
||||
removeFrame();
|
||||
}
|
||||
|
||||
function checkForJava(){
|
||||
// if (navigator.javaEnabled() || window.navigator.javaEnabled())
|
||||
return 1;
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
// Check locale
|
||||
var localeChain = "en_US";
|
||||
|
||||
if (navigator.language)
|
||||
localeChain = navigator.language;
|
||||
else if (navigator.browserLanguage)
|
||||
localeChain = navigator.browserLanguage;
|
||||
|
||||
if(/^([a-z]+)-([a-z]+)$/i.test(localeChain)){
|
||||
var matches = /^([a-z]+)-([a-z]+)$/i.exec(localeChain);
|
||||
localeChain = matches[1].toLowerCase() + "_" + matches[2].toUpperCase();
|
||||
}
|
||||
else if(/^en$/i.test(localeChain)){
|
||||
localeChain = "en_US";
|
||||
}
|
||||
else if(/^([a-z]+)$/i.test(localeChain)){
|
||||
var matches = /^([a-z]+)$/i.exec(localeChain);
|
||||
localeChain = matches[1].toLowerCase() + "_" + matches[1].toUpperCase();
|
||||
}
|
||||
else{
|
||||
localeChain = "en_US";
|
||||
}
|
||||
|
||||
function getLanguage(){
|
||||
return localeChain;
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
(function($){
|
||||
$.fn.bigbluebutton = function(options){
|
||||
|
||||
$('body').append('<div id="speechArea" style="visibility:hidden"></div>');
|
||||
|
||||
function sendSpeechMessage(){
|
||||
var speech = $('#speechArea');
|
||||
if (speech.html() !== ""){
|
||||
document.getElementById('BigBlueButton').sendChatMessage(speech.html());
|
||||
speech.html("");
|
||||
}
|
||||
setTimeout(sendSpeechMessage, 300);
|
||||
}
|
||||
sendSpeechMessage();
|
||||
|
||||
}
|
||||
})(jQuery);
|
||||
|
||||
$(function () { $.fn.bigbluebutton(); });
|
@ -1,567 +0,0 @@
|
||||
var deployJava = {
|
||||
debug: null,
|
||||
firefoxJavaVersion: null,
|
||||
myInterval: null,
|
||||
preInstallJREList: null,
|
||||
returnPage: null,
|
||||
brand: null,
|
||||
locale: null,
|
||||
installType: null,
|
||||
EAInstallEnabled: false,
|
||||
EarlyAccessURL: null,
|
||||
getJavaURL: 'http://java.sun.com/webapps/getjava/BrowserRedirect?host=java.com',
|
||||
appleRedirectPage: 'http://www.apple.com/support/downloads/',
|
||||
oldMimeType: 'application/npruntime-scriptable-plugin;DeploymentToolkit',
|
||||
mimeType: 'application/java-deployment-toolkit',
|
||||
launchButtonPNG: 'http://java.sun.com/products/jfc/tsc/articles/swing2d/webstart.png',
|
||||
browserName: null,
|
||||
browserName2: null,
|
||||
getJREs: function() {
|
||||
var list = new Array();
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
var plugin = deployJava.getPlugin();
|
||||
var VMs = plugin.jvms;
|
||||
for (var i = 0; i < VMs.getLength(); i++) {
|
||||
list[i] = VMs.get(i).version;
|
||||
}
|
||||
} else {
|
||||
var browser = deployJava.getBrowser();
|
||||
if (browser == 'MSIE') {
|
||||
if (deployJava.testUsingActiveX('1.7.0')) {
|
||||
list[0] = '1.7.0';
|
||||
} else if (deployJava.testUsingActiveX('1.6.0')) {
|
||||
list[0] = '1.6.0';
|
||||
} else if (deployJava.testUsingActiveX('1.5.0')) {
|
||||
list[0] = '1.5.0';
|
||||
} else if (deployJava.testUsingActiveX('1.4.2')) {
|
||||
list[0] = '1.4.2';
|
||||
} else if (deployJava.testForMSVM()) {
|
||||
list[0] = '1.1';
|
||||
}
|
||||
} else if (browser == 'Netscape Family') {
|
||||
deployJava.getJPIVersionUsingMimeType();
|
||||
if (deployJava.firefoxJavaVersion != null) {
|
||||
list[0] = deployJava.firefoxJavaVersion;
|
||||
} else if (deployJava.testUsingMimeTypes('1.7')) {
|
||||
list[0] = '1.7.0';
|
||||
} else if (deployJava.testUsingMimeTypes('1.6')) {
|
||||
list[0] = '1.6.0';
|
||||
} else if (deployJava.testUsingMimeTypes('1.5')) {
|
||||
list[0] = '1.5.0';
|
||||
} else if (deployJava.testUsingMimeTypes('1.4.2')) {
|
||||
list[0] = '1.4.2';
|
||||
} else if (deployJava.browserName2 == 'Safari') {
|
||||
if (deployJava.testUsingPluginsArray('1.7.0')) {
|
||||
list[0] = '1.7.0';
|
||||
} else if (deployJava.testUsingPluginsArray('1.6')) {
|
||||
list[0] = '1.6.0';
|
||||
} else if (deployJava.testUsingPluginsArray('1.5')) {
|
||||
list[0] = '1.5.0';
|
||||
} else if (deployJava.testUsingPluginsArray('1.4.2')) {
|
||||
list[0] = '1.4.2';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (deployJava.debug) {
|
||||
for (var i = 0; i < list.length; ++i) {
|
||||
alert('We claim to have detected Java SE ' + list[i]);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
},
|
||||
installJRE: function(requestVersion) {
|
||||
var ret = false;
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
if (deployJava.getPlugin().installJRE(requestVersion)) {
|
||||
deployJava.refresh();
|
||||
if (deployJava.returnPage != null) {
|
||||
document.location = deployJava.returnPage;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return deployJava.installLatestJRE();
|
||||
}
|
||||
},
|
||||
installLatestJRE: function() {
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
if (deployJava.getPlugin().installLatestJRE()) {
|
||||
deployJava.refresh();
|
||||
if (deployJava.returnPage != null) {
|
||||
document.location = deployJava.returnPage;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
var browser = deployJava.getBrowser();
|
||||
var platform = navigator.platform.toLowerCase();
|
||||
if ((deployJava.EAInstallEnabled == 'true') && (platform.indexOf('win') != -1) && (deployJava.EarlyAccessURL != null)) {
|
||||
deployJava.preInstallJREList = deployJava.getJREs();
|
||||
if (deployJava.returnPage != null) {
|
||||
deployJava.myInterval = setInterval("deployJava.poll()", 3000);
|
||||
}
|
||||
location.href = deployJava.EarlyAccessURL;
|
||||
return false;
|
||||
} else {
|
||||
if (browser == 'MSIE') {
|
||||
return deployJava.IEInstall();
|
||||
} else if ((browser == 'Netscape Family') && (platform.indexOf('win32') != -1)) {
|
||||
return deployJava.FFInstall();
|
||||
} else {
|
||||
location.href = deployJava.getJavaURL + ((deployJava.returnPage != null) ? ('&returnPage=' + deployJava.returnPage) : '') + ((deployJava.locale != null) ? ('&locale=' + deployJava.locale) : '') + ((deployJava.brand != null) ? ('&brand=' + deployJava.brand) : '');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
},
|
||||
runApplet: function(attributes, parameters, minimumVersion) {
|
||||
if (minimumVersion == 'undefined' || minimumVersion == null) {
|
||||
minimumVersion = '1.1';
|
||||
}
|
||||
var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
|
||||
var matchData = minimumVersion.match(regex);
|
||||
if (deployJava.returnPage == null) {
|
||||
deployJava.returnPage = document.location;
|
||||
}
|
||||
if (matchData != null) {
|
||||
var browser = deployJava.getBrowser();
|
||||
if ((browser != '?') && ('Safari' != deployJava.browserName2)) {
|
||||
if (deployJava.versionCheck(minimumVersion + '+')) {
|
||||
deployJava.writeAppletTag(attributes, parameters);
|
||||
} else if (deployJava.installJRE(minimumVersion + '+')) {
|
||||
deployJava.refresh();
|
||||
location.href = document.location;
|
||||
deployJava.writeAppletTag(attributes, parameters);
|
||||
}
|
||||
} else {
|
||||
deployJava.writeAppletTag(attributes, parameters);
|
||||
}
|
||||
} else {
|
||||
if (deployJava.debug) {
|
||||
alert('Invalid minimumVersion argument to runApplet():' + minimumVersion);
|
||||
}
|
||||
}
|
||||
},
|
||||
writeAppletTag: function(attributes, parameters) {
|
||||
var s = '<' + 'applet ';
|
||||
var codeAttribute = false;
|
||||
for (var attribute in attributes) {
|
||||
s += (' ' + attribute + '="' + attributes[attribute] + '"');
|
||||
if (attribute == 'code') {
|
||||
codeAttribute = true;
|
||||
}
|
||||
}
|
||||
if (!codeAttribute) {
|
||||
s += (' code="dummy"');
|
||||
}
|
||||
s += '>';
|
||||
document.write(s);
|
||||
if (parameters != 'undefined' && parameters != null) {
|
||||
var codebaseParam = false;
|
||||
for (var parameter in parameters) {
|
||||
if (parameter == 'codebase_lookup') {
|
||||
codebaseParam = true;
|
||||
}
|
||||
s = '<param name="' + parameter + '" value="' + parameters[parameter] + '">';
|
||||
document.write(s);
|
||||
}
|
||||
if (!codebaseParam) {
|
||||
document.write('<param name="codebase_lookup" value="false">');
|
||||
}
|
||||
}
|
||||
document.write('<' + '/' + 'applet' + '>');
|
||||
},
|
||||
versionCheck: function(versionPattern) {
|
||||
var index = 0;
|
||||
var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$";
|
||||
var matchData = versionPattern.match(regex);
|
||||
if (matchData != null) {
|
||||
var familyMatch = true;
|
||||
var patternArray = new Array();
|
||||
for (var i = 1; i < matchData.length; ++i) {
|
||||
if ((typeof matchData[i] == 'string') && (matchData[i] != '')) {
|
||||
patternArray[index] = matchData[i];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
if (patternArray[patternArray.length - 1] == '+') {
|
||||
familyMatch = false;
|
||||
patternArray.length--;
|
||||
} else {
|
||||
if (patternArray[patternArray.length - 1] == '*') {
|
||||
patternArray.length--;
|
||||
}
|
||||
}
|
||||
var list = deployJava.getJREs();
|
||||
for (var i = 0; i < list.length; ++i) {
|
||||
if (deployJava.compareVersionToPattern(list[i], patternArray, familyMatch)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
alert('Invalid versionPattern passed to versionCheck: ' + versionPattern);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
isWebStartInstalled: function(minimumVersion) {
|
||||
var browser = deployJava.getBrowser();
|
||||
if ((browser == '?') || ('Safari' == deployJava.browserName2)) {
|
||||
return true;
|
||||
}
|
||||
if (minimumVersion == 'undefined' || minimumVersion == null) {
|
||||
minimumVersion = '1.4.2';
|
||||
}
|
||||
var retval = false;
|
||||
var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
|
||||
var matchData = minimumVersion.match(regex);
|
||||
if (matchData != null) {
|
||||
retval = deployJava.versionCheck(minimumVersion + '+');
|
||||
} else {
|
||||
if (deployJava.debug) {
|
||||
alert('Invalid minimumVersion argument to isWebStartInstalled(): ' + minimumVersion);
|
||||
}
|
||||
retval = deployJava.versionCheck('1.4.2+');
|
||||
}
|
||||
return retval;
|
||||
},
|
||||
getJPIVersionUsingMimeType: function() {
|
||||
for (var i = 0; i < navigator.mimeTypes.length; ++i) {
|
||||
var s = navigator.mimeTypes[i].type;
|
||||
var m = s.match(/^application\/x-java-applet;jpi-version=(.*)$/);
|
||||
if (m != null) {
|
||||
deployJava.firefoxJavaVersion = m[1];
|
||||
if ('Opera' != deployJava.browserName2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
launchWebStartApplication: function(jnlp) {
|
||||
return false;
|
||||
},
|
||||
createWebStartLaunchButtonEx: function(jnlp, minimumVersion) {
|
||||
if (deployJava.returnPage == null) {
|
||||
deployJava.returnPage = jnlp;
|
||||
}
|
||||
var url = 'javascript:deployJava.launchWebStartApplication(\'' + jnlp + '\');';
|
||||
document.write('<' + 'a href="' + url + '" onMouseOver="window.status=\'\'; ' + 'return true;"><' + 'img ' + 'src="' + deployJava.launchButtonPNG + '" ' + 'border="0" /><' + '/' + 'a' + '>');
|
||||
},
|
||||
createWebStartLaunchButton: function(jnlp, minimumVersion) {
|
||||
if (deployJava.returnPage == null) {
|
||||
deployJava.returnPage = jnlp;
|
||||
}
|
||||
var url = 'javascript:' + 'if (!deployJava.isWebStartInstalled("' + minimumVersion + '")) {' + 'if (deployJava.installLatestJRE()) {' + 'if (deployJava.launch("' + jnlp + '")) {}' + '}' + '} else {' + 'if (deployJava.launch("' + jnlp + '")) {}' + '}';
|
||||
document.write('<' + 'a href="' + url + '" onMouseOver="window.status=\'\'; ' + 'return true;"><' + 'img ' + 'src="' + deployJava.launchButtonPNG + '" ' + 'border="0" /><' + '/' + 'a' + '>');
|
||||
},
|
||||
launch: function(jnlp) {
|
||||
document.location = jnlp;
|
||||
return true;
|
||||
},
|
||||
isPluginInstalled: function() {
|
||||
var plugin = deployJava.getPlugin();
|
||||
if (plugin && plugin.jvms) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
isAutoUpdateEnabled: function() {
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
return deployJava.getPlugin().isAutoUpdateEnabled();
|
||||
}
|
||||
return false;
|
||||
},
|
||||
setAutoUpdateEnabled: function() {
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
return deployJava.getPlugin().setAutoUpdateEnabled();
|
||||
}
|
||||
return false;
|
||||
},
|
||||
setInstallerType: function(type) {
|
||||
deployJava.installType = type;
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
return deployJava.getPlugin().setInstallerType(type);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
setAdditionalPackages: function(packageList) {
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
return deployJava.getPlugin().setAdditionalPackages(packageList);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
setEarlyAccess: function(enabled) {
|
||||
deployJava.EAInstallEnabled = enabled;
|
||||
},
|
||||
isPlugin2: function() {
|
||||
if (deployJava.isPluginInstalled()) {
|
||||
if (deployJava.versionCheck('1.6.0_10+')) {
|
||||
try {
|
||||
return deployJava.getPlugin().isPlugin2();
|
||||
} catch (err) {}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
allowPlugin: function() {
|
||||
deployJava.getBrowser();
|
||||
var ret = ('Safari' != deployJava.browserName2 && 'Opera' != deployJava.browserName2);
|
||||
return ret;
|
||||
},
|
||||
getPlugin: function() {
|
||||
deployJava.refresh();
|
||||
var ret = null;
|
||||
if (deployJava.allowPlugin()) {
|
||||
ret = document.getElementById('deployJavaPlugin');
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
compareVersionToPattern: function(version, patternArray, familyMatch) {
|
||||
var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
|
||||
var matchData = version.match(regex);
|
||||
if (matchData != null) {
|
||||
var index = 0;
|
||||
var result = new Array();
|
||||
for (var i = 1; i < matchData.length; ++i) {
|
||||
if ((typeof matchData[i] == 'string') && (matchData[i] != '')) {
|
||||
result[index] = matchData[i];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
var l = Math.min(result.length, patternArray.length);
|
||||
if (familyMatch) {
|
||||
for (var i = 0; i < l; ++i) {
|
||||
if (result[i] != patternArray[i]) return false;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
for (var i = 0; i < l; ++i) {
|
||||
if (result[i] < patternArray[i]) {
|
||||
return false;
|
||||
} else if (result[i] > patternArray[i]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
getBrowser: function() {
|
||||
if (deployJava.browserName == null) {
|
||||
var browser = navigator.userAgent.toLowerCase();
|
||||
if (deployJava.debug) {
|
||||
alert('userAgent -> ' + browser);
|
||||
}
|
||||
if (browser.indexOf('msie') != -1) {
|
||||
deployJava.browserName = 'MSIE';
|
||||
deployJava.browserName2 = 'MSIE';
|
||||
} else if (browser.indexOf('firefox') != -1) {
|
||||
deployJava.browserName = 'Netscape Family';
|
||||
deployJava.browserName2 = 'Firefox';
|
||||
} else if (browser.indexOf('chrome') != -1) {
|
||||
deployJava.browserName = 'Netscape Family';
|
||||
deployJava.browserName2 = 'Chrome';
|
||||
} else if (browser.indexOf('safari') != -1) {
|
||||
deployJava.browserName = 'Netscape Family';
|
||||
deployJava.browserName2 = 'Safari';
|
||||
} else if (browser.indexOf('mozilla') != -1) {
|
||||
deployJava.browserName = 'Netscape Family';
|
||||
deployJava.browserName2 = 'Other';
|
||||
} else if (browser.indexOf('opera') != -1) {
|
||||
deployJava.browserName = 'Netscape Family';
|
||||
deployJava.browserName2 = 'Opera';
|
||||
} else {
|
||||
deployJava.browserName = '?';
|
||||
deployJava.browserName2 = 'unknown';
|
||||
}
|
||||
if (deployJava.debug) {
|
||||
alert('Detected browser name:' + deployJava.browserName + ', ' + deployJava.browserName2);
|
||||
}
|
||||
}
|
||||
return deployJava.browserName;
|
||||
},
|
||||
testUsingActiveX: function(version) {
|
||||
var objectName = 'JavaWebStart.isInstalled.' + version + '.0';
|
||||
if (!ActiveXObject) {
|
||||
if (deployJava.debug) {
|
||||
alert('Browser claims to be IE, but no ActiveXObject object?');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
return (new ActiveXObject(objectName) != null);
|
||||
} catch (exception) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
testForMSVM: function() {
|
||||
var clsid = '{08B0E5C0-4FCB-11CF-AAA5-00401C608500}';
|
||||
if (typeof oClientCaps != 'undefined') {
|
||||
var v = oClientCaps.getComponentVersion(clsid, "ComponentID");
|
||||
if ((v == '') || (v == '5,0,5000,0')) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
testUsingMimeTypes: function(version) {
|
||||
if (!navigator.mimeTypes) {
|
||||
if (deployJava.debug) {
|
||||
alert('Browser claims to be Netscape family, but no mimeTypes[] array?');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
for (var i = 0; i < navigator.mimeTypes.length; ++i) {
|
||||
s = navigator.mimeTypes[i].type;
|
||||
var m = s.match(/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/);
|
||||
if (m != null) {
|
||||
if (deployJava.compareVersions(m[1], version)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
testUsingPluginsArray: function(version) {
|
||||
if ((!navigator.plugins) || (!navigator.plugins.length)) {
|
||||
return false;
|
||||
}
|
||||
var platform = navigator.platform.toLowerCase();
|
||||
for (var i = 0; i < navigator.plugins.length; ++i) {
|
||||
s = navigator.plugins[i].description;
|
||||
if (s.search(/^Java Switchable Plug-in (Cocoa)/) != -1) {
|
||||
if (deployJava.compareVersions("1.5.0", version)) {
|
||||
return true;
|
||||
}
|
||||
} else if (s.search(/^Java/) != -1) {
|
||||
if (platform.indexOf('win') != -1) {
|
||||
if (deployJava.compareVersions("1.5.0", version) || deployJava.compareVersions("1.6.0", version)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (deployJava.compareVersions("1.5.0", version)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
IEInstall: function() {
|
||||
location.href = deployJava.getJavaURL + ((deployJava.returnPage != null) ? ('&returnPage=' + deployJava.returnPage) : '') + ((deployJava.locale != null) ? ('&locale=' + deployJava.locale) : '') + ((deployJava.brand != null) ? ('&brand=' + deployJava.brand) : '') + ((deployJava.installType != null) ? ('&type=' + deployJava.installType) : '');
|
||||
return false;
|
||||
},
|
||||
done: function(name, result) {},
|
||||
FFInstall: function() {
|
||||
location.href = deployJava.getJavaURL + ((deployJava.returnPage != null) ? ('&returnPage=' + deployJava.returnPage) : '') + ((deployJava.locale != null) ? ('&locale=' + deployJava.locale) : '') + ((deployJava.brand != null) ? ('&brand=' + deployJava.brand) : '') + ((deployJava.installType != null) ? ('&type=' + deployJava.installType) : '');
|
||||
return false;
|
||||
},
|
||||
compareVersions: function(installed, required) {
|
||||
var a = installed.split('.');
|
||||
var b = required.split('.');
|
||||
for (var i = 0; i < a.length; ++i) {
|
||||
a[i] = Number(a[i]);
|
||||
}
|
||||
for (var i = 0; i < b.length; ++i) {
|
||||
b[i] = Number(b[i]);
|
||||
}
|
||||
if (a.length == 2) {
|
||||
a[2] = 0;
|
||||
}
|
||||
if (a[0] > b[0]) return true;
|
||||
if (a[0] < b[0]) return false;
|
||||
if (a[1] > b[1]) return true;
|
||||
if (a[1] < b[1]) return false;
|
||||
if (a[2] > b[2]) return true;
|
||||
if (a[2] < b[2]) return false;
|
||||
return true;
|
||||
},
|
||||
enableAlerts: function() {
|
||||
deployJava.browserName = null;
|
||||
deployJava.debug = true;
|
||||
},
|
||||
poll: function() {
|
||||
deployJava.refresh();
|
||||
var postInstallJREList = deployJava.getJREs();
|
||||
if ((deployJava.preInstallJREList.length == 0) && (postInstallJREList.length != 0)) {
|
||||
clearInterval(deployJava.myInterval);
|
||||
if (deployJava.returnPage != null) {
|
||||
location.href = deployJava.returnPage;
|
||||
};
|
||||
}
|
||||
if ((deployJava.preInstallJREList.length != 0) && (postInstallJREList.length != 0) && (deployJava.preInstallJREList[0] != postInstallJREList[0])) {
|
||||
clearInterval(deployJava.myInterval);
|
||||
if (deployJava.returnPage != null) {
|
||||
location.href = deployJava.returnPage;
|
||||
}
|
||||
}
|
||||
},
|
||||
writePluginTag: function() {
|
||||
var browser = deployJava.getBrowser();
|
||||
if (browser == 'MSIE') {
|
||||
document.write('<' + 'object classid="clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA" ' + 'id="deployJavaPlugin" width="0" height="0">' + '<' + '/' + 'object' + '>');
|
||||
} else if (browser == 'Netscape Family' && deployJava.allowPlugin()) {
|
||||
deployJava.writeEmbedTag();
|
||||
}
|
||||
},
|
||||
refresh: function() {
|
||||
navigator.plugins.refresh(false);
|
||||
var browser = deployJava.getBrowser();
|
||||
if (browser == 'Netscape Family' && deployJava.allowPlugin()) {
|
||||
var plugin = document.getElementById('deployJavaPlugin');
|
||||
if (plugin == null) {
|
||||
deployJava.writeEmbedTag();
|
||||
}
|
||||
}
|
||||
},
|
||||
writeEmbedTag: function() {
|
||||
var written = false;
|
||||
if (navigator.mimeTypes != null) {
|
||||
for (var i = 0; i < navigator.mimeTypes.length; i++) {
|
||||
if (navigator.mimeTypes[i].type == deployJava.mimeType) {
|
||||
if (navigator.mimeTypes[i].enabledPlugin) {
|
||||
document.write('<' + 'embed id="deployJavaPlugin" type="' + deployJava.mimeType + '" hidden="true" />');
|
||||
written = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!written) for (var i = 0; i < navigator.mimeTypes.length; i++) {
|
||||
if (navigator.mimeTypes[i].type == deployJava.oldMimeType) {
|
||||
if (navigator.mimeTypes[i].enabledPlugin) {
|
||||
document.write('<' + 'embed id="deployJavaPlugin" type="' + deployJava.oldMimeType + '" hidden="true" />');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
do_initialize: function() {
|
||||
deployJava.writePluginTag();
|
||||
if (deployJava.locale == null) {
|
||||
var loc = null;
|
||||
if (loc == null) try {
|
||||
loc = navigator.userLanguage;
|
||||
} catch (err) {}
|
||||
if (loc == null) try {
|
||||
loc = navigator.systemLanguage;
|
||||
} catch (err) {}
|
||||
if (loc == null) try {
|
||||
loc = navigator.language;
|
||||
} catch (err) {}
|
||||
if (loc != null) {
|
||||
loc.replace("-", "_")
|
||||
deployJava.locale = loc;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
deployJava.do_initialize();
|
@ -19,19 +19,13 @@ BrowserHistory = (function() {
|
||||
// type of browser
|
||||
var browser = {
|
||||
ie: false,
|
||||
ie8: 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 = '';
|
||||
|
||||
@ -49,6 +43,9 @@ BrowserHistory = (function() {
|
||||
|
||||
// History maintenance (used only by Safari)
|
||||
var currentHistoryLength = -1;
|
||||
|
||||
// Flag to denote the existence of onhashchange
|
||||
var browserHasHashChange = false;
|
||||
|
||||
var historyHash = [];
|
||||
|
||||
@ -67,6 +64,11 @@ BrowserHistory = (function() {
|
||||
} else if (useragent.indexOf("msie") != -1) {
|
||||
browser.ie = true;
|
||||
browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
|
||||
if (browser.version == 8)
|
||||
{
|
||||
browser.ie = false;
|
||||
browser.ie8 = true;
|
||||
}
|
||||
} else if (useragent.indexOf("safari") != -1) {
|
||||
browser.safari = true;
|
||||
browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
|
||||
@ -78,17 +80,27 @@ BrowserHistory = (function() {
|
||||
window["_ie_firstload"] = false;
|
||||
}
|
||||
|
||||
function hashChangeHandler()
|
||||
{
|
||||
currentHref = document.location.href;
|
||||
var flexAppUrl = getHash();
|
||||
//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);
|
||||
}
|
||||
}
|
||||
|
||||
// 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');
|
||||
@ -102,6 +114,8 @@ BrowserHistory = (function() {
|
||||
// Get the Flash player object for performing ExternalInterface callbacks.
|
||||
// Updated for changes to SWFObject2.
|
||||
function getPlayer(id) {
|
||||
var i;
|
||||
|
||||
if (id && document.getElementById(id)) {
|
||||
var r = document.getElementById(id);
|
||||
if (typeof r.SetVariable != "undefined") {
|
||||
@ -110,40 +124,53 @@ BrowserHistory = (function() {
|
||||
else {
|
||||
var o = r.getElementsByTagName("object");
|
||||
var e = r.getElementsByTagName("embed");
|
||||
if (o.length > 0 && typeof o[0].SetVariable != "undefined") {
|
||||
return o[0];
|
||||
}
|
||||
else if (e.length > 0 && typeof e[0].SetVariable != "undefined") {
|
||||
return e[0];
|
||||
}
|
||||
for (i = 0; i < o.length; i++) {
|
||||
if (typeof o[i].browserURLChange != "undefined")
|
||||
return o[i];
|
||||
}
|
||||
for (i = 0; i < e.length; i++) {
|
||||
if (typeof e[i].browserURLChange != "undefined")
|
||||
return e[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var o = document.getElementsByTagName("object");
|
||||
var e = document.getElementsByTagName("embed");
|
||||
if (e.length > 0 && typeof e[0].SetVariable != "undefined") {
|
||||
return e[0];
|
||||
}
|
||||
else if (o.length > 0 && typeof o[0].SetVariable != "undefined") {
|
||||
return o[0];
|
||||
}
|
||||
else if (o.length > 1 && typeof o[1].SetVariable != "undefined") {
|
||||
return o[1];
|
||||
}
|
||||
for (i = 0; i < e.length; i++) {
|
||||
if (typeof e[i].browserURLChange != "undefined")
|
||||
{
|
||||
return e[i];
|
||||
}
|
||||
}
|
||||
for (i = 0; i < o.length; i++) {
|
||||
if (typeof o[i].browserURLChange != "undefined")
|
||||
{
|
||||
return o[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getPlayers() {
|
||||
var i;
|
||||
var players = [];
|
||||
if (players.length == 0) {
|
||||
var tmp = document.getElementsByTagName('object');
|
||||
players = tmp;
|
||||
for (i = 0; i < tmp.length; i++)
|
||||
{
|
||||
if (typeof tmp[i].browserURLChange != "undefined")
|
||||
players.push(tmp[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (players.length == 0 || players[0].object == null) {
|
||||
var tmp = document.getElementsByTagName('embed');
|
||||
players = tmp;
|
||||
for (i = 0; i < tmp.length; i++)
|
||||
{
|
||||
if (typeof tmp[i].browserURLChange != "undefined")
|
||||
players.push(tmp[i]);
|
||||
}
|
||||
}
|
||||
return players;
|
||||
}
|
||||
@ -216,7 +243,7 @@ BrowserHistory = (function() {
|
||||
backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
|
||||
}
|
||||
|
||||
if (browser.safari) {
|
||||
if (browser.safari && !browserHasHashChange) {
|
||||
// for Safari, submit a form whose action points to the desired URL
|
||||
if (browser.version <= 419.3) {
|
||||
var file = window.location.pathname.toString();
|
||||
@ -241,8 +268,7 @@ BrowserHistory = (function() {
|
||||
historyHash[history.length] = flexAppUrl;
|
||||
_storeStates();
|
||||
} else {
|
||||
// Otherwise, write an anchor into the page and tell the browser to go there
|
||||
addAnchor(flexAppUrl);
|
||||
// Otherwise, just tell the browser to go there
|
||||
setHash(flexAppUrl);
|
||||
}
|
||||
}
|
||||
@ -298,12 +324,13 @@ BrowserHistory = (function() {
|
||||
// this.iframe.src = this.blankURL + hash;
|
||||
var sourceToSet = historyFrameSourcePrefix + getHash();
|
||||
getHistoryFrame().src = sourceToSet;
|
||||
currentHref = document.location.href;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (browser.safari) {
|
||||
if (browser.safari && !browserHasHashChange) {
|
||||
// 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("|"));
|
||||
@ -314,7 +341,7 @@ BrowserHistory = (function() {
|
||||
// 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;
|
||||
currentHistoryLength = history.length;
|
||||
flexAppUrl = historyHash[currentHistoryLength];
|
||||
}
|
||||
|
||||
@ -330,7 +357,7 @@ BrowserHistory = (function() {
|
||||
_storeStates();
|
||||
}
|
||||
}
|
||||
if (browser.firefox) {
|
||||
if (browser.firefox && !browserHasHashChange) {
|
||||
if (currentHref != document.location.href) {
|
||||
var bsl = backStack.length;
|
||||
|
||||
@ -389,9 +416,6 @@ BrowserHistory = (function() {
|
||||
// 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();
|
||||
@ -403,18 +427,12 @@ BrowserHistory = (function() {
|
||||
}
|
||||
}
|
||||
}
|
||||
//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 () {
|
||||
|
||||
browserHasHashChange = ("onhashchange" in document.body);
|
||||
|
||||
if (browser.ie)
|
||||
{
|
||||
var scripts = document.getElementsByTagName('script');
|
||||
@ -429,7 +447,8 @@ BrowserHistory = (function() {
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.id = 'ie_historyFrame';
|
||||
iframe.name = 'ie_historyFrame';
|
||||
//iframe.src = historyFrameSourcePrefix;
|
||||
iframe.src = 'javascript:false;';
|
||||
|
||||
try {
|
||||
document.body.appendChild(iframe);
|
||||
} catch(e) {
|
||||
@ -439,7 +458,7 @@ BrowserHistory = (function() {
|
||||
}
|
||||
}
|
||||
|
||||
if (browser.safari)
|
||||
if (browser.safari && !browserHasHashChange)
|
||||
{
|
||||
var rememberDiv = document.createElement("div");
|
||||
rememberDiv.id = 'safari_rememberDiv';
|
||||
@ -467,17 +486,10 @@ BrowserHistory = (function() {
|
||||
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);
|
||||
if (browserHasHashChange)
|
||||
document.body.onhashchange = hashChangeHandler;
|
||||
}
|
||||
|
||||
return {
|
||||
@ -547,7 +559,6 @@ BrowserHistory = (function() {
|
||||
} else {
|
||||
//alert(historyHash[historyHash.length-1]);
|
||||
}
|
||||
//setHash(def);
|
||||
setInterval(checkForUrlChange, 50);
|
||||
}
|
||||
|
||||
@ -561,7 +572,6 @@ BrowserHistory = (function() {
|
||||
window.location.replace(newloc);
|
||||
}
|
||||
setInterval(checkForUrlChange, 50);
|
||||
//setHash(def);
|
||||
}
|
||||
|
||||
},
|
||||
@ -594,7 +604,6 @@ BrowserHistory = (function() {
|
||||
if (browser.ie && currentObjectId != null) {
|
||||
objectId = currentObjectId;
|
||||
}
|
||||
pendingURL = '';
|
||||
|
||||
if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
|
||||
var pl = getPlayers();
|
||||
|
@ -1,132 +1,115 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- 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 -->
|
||||
|
||||
<script src="jquery-1.5.1.min.js" language="javascript"></script>
|
||||
<script src="bigbluebutton.js" language="javascript"></script>
|
||||
<script src="bbb_localization.js" language="javascript"></script>
|
||||
<script src="deployJava.js" language="javascript"></script>
|
||||
<script src="bbb_blinker.js" language="javascript"></script>
|
||||
<script src="bbb_deskshare.js" language="javascript"></script>
|
||||
|
||||
<!-- Shared Noted javascript files. Uncomment for shared notes module -->
|
||||
<!--<script src="sharednotes/diff_match_patch_uncompressed.js" language="javascript"></script>-->
|
||||
<!--<script src="sharednotes/shared_notes.js" language="javascript"></script>-->
|
||||
|
||||
<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 xmlns="http://www.w3.org/1999/xhtml" lang="en" xml: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>
|
||||
<title>${title}</title>
|
||||
<meta name="google" value="notranslate" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<!-- Include CSS to eliminate any default margins/padding and set the height of the html element and
|
||||
the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as
|
||||
the percentage of the height of its parent container, which has to be set explicitly. Fix for
|
||||
Firefox 3.6 focus border issues. Initially, don't display flashContent div so it won't show
|
||||
if JavaScript disabled.
|
||||
-->
|
||||
<style type="text/css" media="screen">
|
||||
html, body { height:100%; }
|
||||
body { margin:0; padding:0; overflow:auto; text-align:center;
|
||||
background-color: ${bgcolor}; }
|
||||
object:focus { outline:none; }
|
||||
#flashContent { display:none; }
|
||||
</style>
|
||||
|
||||
<!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
|
||||
<!-- BEGIN Browser History required section ${useBrowserHistory}>
|
||||
<link rel="stylesheet" type="text/css" href="history/history.css" />
|
||||
<script type="text/javascript" src="history/history.js"></script>
|
||||
<!${useBrowserHistory} END Browser History required section -->
|
||||
|
||||
<script src="jquery-1.5.1.min.js" language="javascript"></script>
|
||||
<script src="bigbluebutton.js" language="javascript"></script>
|
||||
<script src="bbb_localization.js" language="javascript"></script>
|
||||
<script src="deployJava.js" language="javascript"></script>
|
||||
<script src="bbb_blinker.js" language="javascript"></script>
|
||||
<script src="bbb_deskshare.js" language="javascript"></script>
|
||||
|
||||
<script type="text/javascript" src="swfobject.js"></script>
|
||||
<script type="text/javascript">
|
||||
// For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.
|
||||
var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";
|
||||
// To use express install, set to playerProductInstall.swf, otherwise the empty string.
|
||||
var xiSwfUrlStr = "${expressInstallSwf}";
|
||||
var flashvars = {};
|
||||
var params = {};
|
||||
params.quality = "high";
|
||||
params.bgcolor = "${bgcolor}";
|
||||
params.allowscriptaccess = "sameDomain";
|
||||
params.allowfullscreen = "true";
|
||||
var attributes = {};
|
||||
attributes.id = "${application}";
|
||||
attributes.name = "${application}";
|
||||
attributes.align = "middle";
|
||||
swfobject.embedSWF(
|
||||
"${swf}.swf", "flashContent",
|
||||
"${width}", "${height}",
|
||||
swfVersionStr, xiSwfUrlStr,
|
||||
flashvars, params, attributes);
|
||||
// JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
|
||||
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough
|
||||
JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show
|
||||
when JavaScript is disabled.
|
||||
-->
|
||||
<div id="flashContent">
|
||||
<p>
|
||||
To view this page ensure that Adobe Flash Player version
|
||||
${version_major}.${version_minor}.${version_revision} or greater is installed.
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");
|
||||
document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"
|
||||
+ pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<noscript>
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="${width}" height="${height}" id="${application}">
|
||||
<param name="movie" value="${swf}.swf" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="${bgcolor}" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<param name="allowFullScreen" value="true" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="${swf}.swf" width="${width}" height="${height}">
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="${bgcolor}" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<param name="allowFullScreen" value="true" />
|
||||
<!--<![endif]-->
|
||||
<!--[if gte IE 6]>-->
|
||||
<p>
|
||||
Either scripts and active content are not permitted to run or Adobe Flash Player version
|
||||
${version_major}.${version_minor}.${version_revision} or greater is not installed.
|
||||
</p>
|
||||
<!--<![endif]-->
|
||||
<a href="http://www.adobe.com/go/getflashplayer">
|
||||
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
|
||||
</a>
|
||||
<!--[if !IE]>-->
|
||||
</object>
|
||||
<!--<![endif]-->
|
||||
</object>
|
||||
</noscript>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because one or more lines are too long
777
bigbluebutton-client/html-template/swfobject.js
Executable file
777
bigbluebutton-client/html-template/swfobject.js
Executable file
@ -0,0 +1,777 @@
|
||||
/*! SWFObject v2.2 <http://code.google.com/p/swfobject/>
|
||||
is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
|
||||
*/
|
||||
|
||||
var swfobject = function() {
|
||||
|
||||
var UNDEF = "undefined",
|
||||
OBJECT = "object",
|
||||
SHOCKWAVE_FLASH = "Shockwave Flash",
|
||||
SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
|
||||
FLASH_MIME_TYPE = "application/x-shockwave-flash",
|
||||
EXPRESS_INSTALL_ID = "SWFObjectExprInst",
|
||||
ON_READY_STATE_CHANGE = "onreadystatechange",
|
||||
|
||||
win = window,
|
||||
doc = document,
|
||||
nav = navigator,
|
||||
|
||||
plugin = false,
|
||||
domLoadFnArr = [main],
|
||||
regObjArr = [],
|
||||
objIdArr = [],
|
||||
listenersArr = [],
|
||||
storedAltContent,
|
||||
storedAltContentId,
|
||||
storedCallbackFn,
|
||||
storedCallbackObj,
|
||||
isDomLoaded = false,
|
||||
isExpressInstallActive = false,
|
||||
dynamicStylesheet,
|
||||
dynamicStylesheetMedia,
|
||||
autoHideShow = true,
|
||||
|
||||
/* Centralized function for browser feature detection
|
||||
- User agent string detection is only used when no good alternative is possible
|
||||
- Is executed directly for optimal performance
|
||||
*/
|
||||
ua = function() {
|
||||
var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
|
||||
u = nav.userAgent.toLowerCase(),
|
||||
p = nav.platform.toLowerCase(),
|
||||
windows = p ? /win/.test(p) : /win/.test(u),
|
||||
mac = p ? /mac/.test(p) : /mac/.test(u),
|
||||
webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
|
||||
ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
|
||||
playerVersion = [0,0,0],
|
||||
d = null;
|
||||
if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
|
||||
d = nav.plugins[SHOCKWAVE_FLASH].description;
|
||||
if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
|
||||
plugin = true;
|
||||
ie = false; // cascaded feature detection for Internet Explorer
|
||||
d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
|
||||
playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
|
||||
playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
|
||||
playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
|
||||
}
|
||||
}
|
||||
else if (typeof win.ActiveXObject != UNDEF) {
|
||||
try {
|
||||
var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
|
||||
if (a) { // a will return null when ActiveX is disabled
|
||||
d = a.GetVariable("$version");
|
||||
if (d) {
|
||||
ie = true; // cascaded feature detection for Internet Explorer
|
||||
d = d.split(" ")[1].split(",");
|
||||
playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(e) {}
|
||||
}
|
||||
return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
|
||||
}(),
|
||||
|
||||
/* Cross-browser onDomLoad
|
||||
- Will fire an event as soon as the DOM of a web page is loaded
|
||||
- Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
|
||||
- Regular onload serves as fallback
|
||||
*/
|
||||
onDomLoad = function() {
|
||||
if (!ua.w3) { return; }
|
||||
if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically
|
||||
callDomLoadFunctions();
|
||||
}
|
||||
if (!isDomLoaded) {
|
||||
if (typeof doc.addEventListener != UNDEF) {
|
||||
doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
|
||||
}
|
||||
if (ua.ie && ua.win) {
|
||||
doc.attachEvent(ON_READY_STATE_CHANGE, function() {
|
||||
if (doc.readyState == "complete") {
|
||||
doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
|
||||
callDomLoadFunctions();
|
||||
}
|
||||
});
|
||||
if (win == top) { // if not inside an iframe
|
||||
(function(){
|
||||
if (isDomLoaded) { return; }
|
||||
try {
|
||||
doc.documentElement.doScroll("left");
|
||||
}
|
||||
catch(e) {
|
||||
setTimeout(arguments.callee, 0);
|
||||
return;
|
||||
}
|
||||
callDomLoadFunctions();
|
||||
})();
|
||||
}
|
||||
}
|
||||
if (ua.wk) {
|
||||
(function(){
|
||||
if (isDomLoaded) { return; }
|
||||
if (!/loaded|complete/.test(doc.readyState)) {
|
||||
setTimeout(arguments.callee, 0);
|
||||
return;
|
||||
}
|
||||
callDomLoadFunctions();
|
||||
})();
|
||||
}
|
||||
addLoadEvent(callDomLoadFunctions);
|
||||
}
|
||||
}();
|
||||
|
||||
function callDomLoadFunctions() {
|
||||
if (isDomLoaded) { return; }
|
||||
try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
|
||||
var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
|
||||
t.parentNode.removeChild(t);
|
||||
}
|
||||
catch (e) { return; }
|
||||
isDomLoaded = true;
|
||||
var dl = domLoadFnArr.length;
|
||||
for (var i = 0; i < dl; i++) {
|
||||
domLoadFnArr[i]();
|
||||
}
|
||||
}
|
||||
|
||||
function addDomLoadEvent(fn) {
|
||||
if (isDomLoaded) {
|
||||
fn();
|
||||
}
|
||||
else {
|
||||
domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
|
||||
}
|
||||
}
|
||||
|
||||
/* Cross-browser onload
|
||||
- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
|
||||
- Will fire an event as soon as a web page including all of its assets are loaded
|
||||
*/
|
||||
function addLoadEvent(fn) {
|
||||
if (typeof win.addEventListener != UNDEF) {
|
||||
win.addEventListener("load", fn, false);
|
||||
}
|
||||
else if (typeof doc.addEventListener != UNDEF) {
|
||||
doc.addEventListener("load", fn, false);
|
||||
}
|
||||
else if (typeof win.attachEvent != UNDEF) {
|
||||
addListener(win, "onload", fn);
|
||||
}
|
||||
else if (typeof win.onload == "function") {
|
||||
var fnOld = win.onload;
|
||||
win.onload = function() {
|
||||
fnOld();
|
||||
fn();
|
||||
};
|
||||
}
|
||||
else {
|
||||
win.onload = fn;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main function
|
||||
- Will preferably execute onDomLoad, otherwise onload (as a fallback)
|
||||
*/
|
||||
function main() {
|
||||
if (plugin) {
|
||||
testPlayerVersion();
|
||||
}
|
||||
else {
|
||||
matchVersions();
|
||||
}
|
||||
}
|
||||
|
||||
/* Detect the Flash Player version for non-Internet Explorer browsers
|
||||
- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
|
||||
a. Both release and build numbers can be detected
|
||||
b. Avoid wrong descriptions by corrupt installers provided by Adobe
|
||||
c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
|
||||
- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
|
||||
*/
|
||||
function testPlayerVersion() {
|
||||
var b = doc.getElementsByTagName("body")[0];
|
||||
var o = createElement(OBJECT);
|
||||
o.setAttribute("type", FLASH_MIME_TYPE);
|
||||
var t = b.appendChild(o);
|
||||
if (t) {
|
||||
var counter = 0;
|
||||
(function(){
|
||||
if (typeof t.GetVariable != UNDEF) {
|
||||
var d = t.GetVariable("$version");
|
||||
if (d) {
|
||||
d = d.split(" ")[1].split(",");
|
||||
ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
|
||||
}
|
||||
}
|
||||
else if (counter < 10) {
|
||||
counter++;
|
||||
setTimeout(arguments.callee, 10);
|
||||
return;
|
||||
}
|
||||
b.removeChild(o);
|
||||
t = null;
|
||||
matchVersions();
|
||||
})();
|
||||
}
|
||||
else {
|
||||
matchVersions();
|
||||
}
|
||||
}
|
||||
|
||||
/* Perform Flash Player and SWF version matching; static publishing only
|
||||
*/
|
||||
function matchVersions() {
|
||||
var rl = regObjArr.length;
|
||||
if (rl > 0) {
|
||||
for (var i = 0; i < rl; i++) { // for each registered object element
|
||||
var id = regObjArr[i].id;
|
||||
var cb = regObjArr[i].callbackFn;
|
||||
var cbObj = {success:false, id:id};
|
||||
if (ua.pv[0] > 0) {
|
||||
var obj = getElementById(id);
|
||||
if (obj) {
|
||||
if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
|
||||
setVisibility(id, true);
|
||||
if (cb) {
|
||||
cbObj.success = true;
|
||||
cbObj.ref = getObjectById(id);
|
||||
cb(cbObj);
|
||||
}
|
||||
}
|
||||
else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
|
||||
var att = {};
|
||||
att.data = regObjArr[i].expressInstall;
|
||||
att.width = obj.getAttribute("width") || "0";
|
||||
att.height = obj.getAttribute("height") || "0";
|
||||
if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
|
||||
if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
|
||||
// parse HTML object param element's name-value pairs
|
||||
var par = {};
|
||||
var p = obj.getElementsByTagName("param");
|
||||
var pl = p.length;
|
||||
for (var j = 0; j < pl; j++) {
|
||||
if (p[j].getAttribute("name").toLowerCase() != "movie") {
|
||||
par[p[j].getAttribute("name")] = p[j].getAttribute("value");
|
||||
}
|
||||
}
|
||||
showExpressInstall(att, par, id, cb);
|
||||
}
|
||||
else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF
|
||||
displayAltContent(obj);
|
||||
if (cb) { cb(cbObj); }
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)
|
||||
setVisibility(id, true);
|
||||
if (cb) {
|
||||
var o = getObjectById(id); // test whether there is an HTML object element or not
|
||||
if (o && typeof o.SetVariable != UNDEF) {
|
||||
cbObj.success = true;
|
||||
cbObj.ref = o;
|
||||
}
|
||||
cb(cbObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getObjectById(objectIdStr) {
|
||||
var r = null;
|
||||
var o = getElementById(objectIdStr);
|
||||
if (o && o.nodeName == "OBJECT") {
|
||||
if (typeof o.SetVariable != UNDEF) {
|
||||
r = o;
|
||||
}
|
||||
else {
|
||||
var n = o.getElementsByTagName(OBJECT)[0];
|
||||
if (n) {
|
||||
r = n;
|
||||
}
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Requirements for Adobe Express Install
|
||||
- only one instance can be active at a time
|
||||
- fp 6.0.65 or higher
|
||||
- Win/Mac OS only
|
||||
- no Webkit engines older than version 312
|
||||
*/
|
||||
function canExpressInstall() {
|
||||
return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
|
||||
}
|
||||
|
||||
/* Show the Adobe Express Install dialog
|
||||
- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
|
||||
*/
|
||||
function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
|
||||
isExpressInstallActive = true;
|
||||
storedCallbackFn = callbackFn || null;
|
||||
storedCallbackObj = {success:false, id:replaceElemIdStr};
|
||||
var obj = getElementById(replaceElemIdStr);
|
||||
if (obj) {
|
||||
if (obj.nodeName == "OBJECT") { // static publishing
|
||||
storedAltContent = abstractAltContent(obj);
|
||||
storedAltContentId = null;
|
||||
}
|
||||
else { // dynamic publishing
|
||||
storedAltContent = obj;
|
||||
storedAltContentId = replaceElemIdStr;
|
||||
}
|
||||
att.id = EXPRESS_INSTALL_ID;
|
||||
if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
|
||||
if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
|
||||
doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
|
||||
var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
|
||||
fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
|
||||
if (typeof par.flashvars != UNDEF) {
|
||||
par.flashvars += "&" + fv;
|
||||
}
|
||||
else {
|
||||
par.flashvars = fv;
|
||||
}
|
||||
// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
|
||||
// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
|
||||
if (ua.ie && ua.win && obj.readyState != 4) {
|
||||
var newObj = createElement("div");
|
||||
replaceElemIdStr += "SWFObjectNew";
|
||||
newObj.setAttribute("id", replaceElemIdStr);
|
||||
obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
|
||||
obj.style.display = "none";
|
||||
(function(){
|
||||
if (obj.readyState == 4) {
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
else {
|
||||
setTimeout(arguments.callee, 10);
|
||||
}
|
||||
})();
|
||||
}
|
||||
createSWF(att, par, replaceElemIdStr);
|
||||
}
|
||||
}
|
||||
|
||||
/* Functions to abstract and display alternative content
|
||||
*/
|
||||
function displayAltContent(obj) {
|
||||
if (ua.ie && ua.win && obj.readyState != 4) {
|
||||
// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
|
||||
// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
|
||||
var el = createElement("div");
|
||||
obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
|
||||
el.parentNode.replaceChild(abstractAltContent(obj), el);
|
||||
obj.style.display = "none";
|
||||
(function(){
|
||||
if (obj.readyState == 4) {
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
else {
|
||||
setTimeout(arguments.callee, 10);
|
||||
}
|
||||
})();
|
||||
}
|
||||
else {
|
||||
obj.parentNode.replaceChild(abstractAltContent(obj), obj);
|
||||
}
|
||||
}
|
||||
|
||||
function abstractAltContent(obj) {
|
||||
var ac = createElement("div");
|
||||
if (ua.win && ua.ie) {
|
||||
ac.innerHTML = obj.innerHTML;
|
||||
}
|
||||
else {
|
||||
var nestedObj = obj.getElementsByTagName(OBJECT)[0];
|
||||
if (nestedObj) {
|
||||
var c = nestedObj.childNodes;
|
||||
if (c) {
|
||||
var cl = c.length;
|
||||
for (var i = 0; i < cl; i++) {
|
||||
if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
|
||||
ac.appendChild(c[i].cloneNode(true));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ac;
|
||||
}
|
||||
|
||||
/* Cross-browser dynamic SWF creation
|
||||
*/
|
||||
function createSWF(attObj, parObj, id) {
|
||||
var r, el = getElementById(id);
|
||||
if (ua.wk && ua.wk < 312) { return r; }
|
||||
if (el) {
|
||||
if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
|
||||
attObj.id = id;
|
||||
}
|
||||
if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
|
||||
var att = "";
|
||||
for (var i in attObj) {
|
||||
if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
|
||||
if (i.toLowerCase() == "data") {
|
||||
parObj.movie = attObj[i];
|
||||
}
|
||||
else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
|
||||
att += ' class="' + attObj[i] + '"';
|
||||
}
|
||||
else if (i.toLowerCase() != "classid") {
|
||||
att += ' ' + i + '="' + attObj[i] + '"';
|
||||
}
|
||||
}
|
||||
}
|
||||
var par = "";
|
||||
for (var j in parObj) {
|
||||
if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
|
||||
par += '<param name="' + j + '" value="' + parObj[j] + '" />';
|
||||
}
|
||||
}
|
||||
el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
|
||||
objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
|
||||
r = getElementById(attObj.id);
|
||||
}
|
||||
else { // well-behaving browsers
|
||||
var o = createElement(OBJECT);
|
||||
o.setAttribute("type", FLASH_MIME_TYPE);
|
||||
for (var m in attObj) {
|
||||
if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
|
||||
if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
|
||||
o.setAttribute("class", attObj[m]);
|
||||
}
|
||||
else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
|
||||
o.setAttribute(m, attObj[m]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var n in parObj) {
|
||||
if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
|
||||
createObjParam(o, n, parObj[n]);
|
||||
}
|
||||
}
|
||||
el.parentNode.replaceChild(o, el);
|
||||
r = o;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
function createObjParam(el, pName, pValue) {
|
||||
var p = createElement("param");
|
||||
p.setAttribute("name", pName);
|
||||
p.setAttribute("value", pValue);
|
||||
el.appendChild(p);
|
||||
}
|
||||
|
||||
/* Cross-browser SWF removal
|
||||
- Especially needed to safely and completely remove a SWF in Internet Explorer
|
||||
*/
|
||||
function removeSWF(id) {
|
||||
var obj = getElementById(id);
|
||||
if (obj && obj.nodeName == "OBJECT") {
|
||||
if (ua.ie && ua.win) {
|
||||
obj.style.display = "none";
|
||||
(function(){
|
||||
if (obj.readyState == 4) {
|
||||
removeObjectInIE(id);
|
||||
}
|
||||
else {
|
||||
setTimeout(arguments.callee, 10);
|
||||
}
|
||||
})();
|
||||
}
|
||||
else {
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function removeObjectInIE(id) {
|
||||
var obj = getElementById(id);
|
||||
if (obj) {
|
||||
for (var i in obj) {
|
||||
if (typeof obj[i] == "function") {
|
||||
obj[i] = null;
|
||||
}
|
||||
}
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/* Functions to optimize JavaScript compression
|
||||
*/
|
||||
function getElementById(id) {
|
||||
var el = null;
|
||||
try {
|
||||
el = doc.getElementById(id);
|
||||
}
|
||||
catch (e) {}
|
||||
return el;
|
||||
}
|
||||
|
||||
function createElement(el) {
|
||||
return doc.createElement(el);
|
||||
}
|
||||
|
||||
/* Updated attachEvent function for Internet Explorer
|
||||
- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
|
||||
*/
|
||||
function addListener(target, eventType, fn) {
|
||||
target.attachEvent(eventType, fn);
|
||||
listenersArr[listenersArr.length] = [target, eventType, fn];
|
||||
}
|
||||
|
||||
/* Flash Player and SWF content version matching
|
||||
*/
|
||||
function hasPlayerVersion(rv) {
|
||||
var pv = ua.pv, v = rv.split(".");
|
||||
v[0] = parseInt(v[0], 10);
|
||||
v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
|
||||
v[2] = parseInt(v[2], 10) || 0;
|
||||
return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
|
||||
}
|
||||
|
||||
/* Cross-browser dynamic CSS creation
|
||||
- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
|
||||
*/
|
||||
function createCSS(sel, decl, media, newStyle) {
|
||||
if (ua.ie && ua.mac) { return; }
|
||||
var h = doc.getElementsByTagName("head")[0];
|
||||
if (!h) { return; } // to also support badly authored HTML pages that lack a head element
|
||||
var m = (media && typeof media == "string") ? media : "screen";
|
||||
if (newStyle) {
|
||||
dynamicStylesheet = null;
|
||||
dynamicStylesheetMedia = null;
|
||||
}
|
||||
if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
|
||||
// create dynamic stylesheet + get a global reference to it
|
||||
var s = createElement("style");
|
||||
s.setAttribute("type", "text/css");
|
||||
s.setAttribute("media", m);
|
||||
dynamicStylesheet = h.appendChild(s);
|
||||
if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
|
||||
dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
|
||||
}
|
||||
dynamicStylesheetMedia = m;
|
||||
}
|
||||
// add style rule
|
||||
if (ua.ie && ua.win) {
|
||||
if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
|
||||
dynamicStylesheet.addRule(sel, decl);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
|
||||
dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setVisibility(id, isVisible) {
|
||||
if (!autoHideShow) { return; }
|
||||
var v = isVisible ? "visible" : "hidden";
|
||||
if (isDomLoaded && getElementById(id)) {
|
||||
getElementById(id).style.visibility = v;
|
||||
}
|
||||
else {
|
||||
createCSS("#" + id, "visibility:" + v);
|
||||
}
|
||||
}
|
||||
|
||||
/* Filter to avoid XSS attacks
|
||||
*/
|
||||
function urlEncodeIfNecessary(s) {
|
||||
var regex = /[\\\"<>\.;]/;
|
||||
var hasBadChars = regex.exec(s) != null;
|
||||
return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
|
||||
}
|
||||
|
||||
/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
|
||||
*/
|
||||
var cleanup = function() {
|
||||
if (ua.ie && ua.win) {
|
||||
window.attachEvent("onunload", function() {
|
||||
// remove listeners to avoid memory leaks
|
||||
var ll = listenersArr.length;
|
||||
for (var i = 0; i < ll; i++) {
|
||||
listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
|
||||
}
|
||||
// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
|
||||
var il = objIdArr.length;
|
||||
for (var j = 0; j < il; j++) {
|
||||
removeSWF(objIdArr[j]);
|
||||
}
|
||||
// cleanup library's main closures to avoid memory leaks
|
||||
for (var k in ua) {
|
||||
ua[k] = null;
|
||||
}
|
||||
ua = null;
|
||||
for (var l in swfobject) {
|
||||
swfobject[l] = null;
|
||||
}
|
||||
swfobject = null;
|
||||
});
|
||||
}
|
||||
}();
|
||||
|
||||
return {
|
||||
/* Public API
|
||||
- Reference: http://code.google.com/p/swfobject/wiki/documentation
|
||||
*/
|
||||
registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
|
||||
if (ua.w3 && objectIdStr && swfVersionStr) {
|
||||
var regObj = {};
|
||||
regObj.id = objectIdStr;
|
||||
regObj.swfVersion = swfVersionStr;
|
||||
regObj.expressInstall = xiSwfUrlStr;
|
||||
regObj.callbackFn = callbackFn;
|
||||
regObjArr[regObjArr.length] = regObj;
|
||||
setVisibility(objectIdStr, false);
|
||||
}
|
||||
else if (callbackFn) {
|
||||
callbackFn({success:false, id:objectIdStr});
|
||||
}
|
||||
},
|
||||
|
||||
getObjectById: function(objectIdStr) {
|
||||
if (ua.w3) {
|
||||
return getObjectById(objectIdStr);
|
||||
}
|
||||
},
|
||||
|
||||
embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
|
||||
var callbackObj = {success:false, id:replaceElemIdStr};
|
||||
if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
|
||||
setVisibility(replaceElemIdStr, false);
|
||||
addDomLoadEvent(function() {
|
||||
widthStr += ""; // auto-convert to string
|
||||
heightStr += "";
|
||||
var att = {};
|
||||
if (attObj && typeof attObj === OBJECT) {
|
||||
for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
|
||||
att[i] = attObj[i];
|
||||
}
|
||||
}
|
||||
att.data = swfUrlStr;
|
||||
att.width = widthStr;
|
||||
att.height = heightStr;
|
||||
var par = {};
|
||||
if (parObj && typeof parObj === OBJECT) {
|
||||
for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
|
||||
par[j] = parObj[j];
|
||||
}
|
||||
}
|
||||
if (flashvarsObj && typeof flashvarsObj === OBJECT) {
|
||||
for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
|
||||
if (typeof par.flashvars != UNDEF) {
|
||||
par.flashvars += "&" + k + "=" + flashvarsObj[k];
|
||||
}
|
||||
else {
|
||||
par.flashvars = k + "=" + flashvarsObj[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasPlayerVersion(swfVersionStr)) { // create SWF
|
||||
var obj = createSWF(att, par, replaceElemIdStr);
|
||||
if (att.id == replaceElemIdStr) {
|
||||
setVisibility(replaceElemIdStr, true);
|
||||
}
|
||||
callbackObj.success = true;
|
||||
callbackObj.ref = obj;
|
||||
}
|
||||
else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
|
||||
att.data = xiSwfUrlStr;
|
||||
showExpressInstall(att, par, replaceElemIdStr, callbackFn);
|
||||
return;
|
||||
}
|
||||
else { // show alternative content
|
||||
setVisibility(replaceElemIdStr, true);
|
||||
}
|
||||
if (callbackFn) { callbackFn(callbackObj); }
|
||||
});
|
||||
}
|
||||
else if (callbackFn) { callbackFn(callbackObj); }
|
||||
},
|
||||
|
||||
switchOffAutoHideShow: function() {
|
||||
autoHideShow = false;
|
||||
},
|
||||
|
||||
ua: ua,
|
||||
|
||||
getFlashPlayerVersion: function() {
|
||||
return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
|
||||
},
|
||||
|
||||
hasFlashPlayerVersion: hasPlayerVersion,
|
||||
|
||||
createSWF: function(attObj, parObj, replaceElemIdStr) {
|
||||
if (ua.w3) {
|
||||
return createSWF(attObj, parObj, replaceElemIdStr);
|
||||
}
|
||||
else {
|
||||
return undefined;
|
||||
}
|
||||
},
|
||||
|
||||
showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
|
||||
if (ua.w3 && canExpressInstall()) {
|
||||
showExpressInstall(att, par, replaceElemIdStr, callbackFn);
|
||||
}
|
||||
},
|
||||
|
||||
removeSWF: function(objElemIdStr) {
|
||||
if (ua.w3) {
|
||||
removeSWF(objElemIdStr);
|
||||
}
|
||||
},
|
||||
|
||||
createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
|
||||
if (ua.w3) {
|
||||
createCSS(selStr, declStr, mediaStr, newStyleBoolean);
|
||||
}
|
||||
},
|
||||
|
||||
addDomLoadEvent: addDomLoadEvent,
|
||||
|
||||
addLoadEvent: addLoadEvent,
|
||||
|
||||
getQueryParamValue: function(param) {
|
||||
var q = doc.location.search || doc.location.hash;
|
||||
if (q) {
|
||||
if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
|
||||
if (param == null) {
|
||||
return urlEncodeIfNecessary(q);
|
||||
}
|
||||
var pairs = q.split("&");
|
||||
for (var i = 0; i < pairs.length; i++) {
|
||||
if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
|
||||
return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
},
|
||||
|
||||
// For internal usage only
|
||||
expressInstallCallback: function() {
|
||||
if (isExpressInstallActive) {
|
||||
var obj = getElementById(EXPRESS_INSTALL_ID);
|
||||
if (obj && storedAltContent) {
|
||||
obj.parentNode.replaceChild(storedAltContent, obj);
|
||||
if (storedAltContentId) {
|
||||
setVisibility(storedAltContentId, true);
|
||||
if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }
|
||||
}
|
||||
if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }
|
||||
}
|
||||
isExpressInstallActive = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
}();
|
BIN
bigbluebutton-client/libs/melomel-0.6.2.swc
Normal file
BIN
bigbluebutton-client/libs/melomel-0.6.2.swc
Normal file
Binary file not shown.
@ -1,137 +1,115 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- 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>BigBlueButton</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 -->
|
||||
|
||||
<script src="jquery-1.5.1.min.js" language="javascript"></script>
|
||||
<script src="bigbluebutton.js" language="javascript"></script>
|
||||
<script src="bbb_localization.js" language="javascript"></script>
|
||||
<script src="deployJava.js" language="javascript"></script>
|
||||
<script src="bbb_blinker.js" language="javascript"></script>
|
||||
<script src="bbb_deskshare.js" language="javascript"></script>
|
||||
|
||||
<!-- Shared Noted javascript files. Uncomment for shared notes module -->
|
||||
<!--<script src="sharednotes/diff_match_patch_uncompressed.js" language="javascript"></script>-->
|
||||
<!--<script src="sharednotes/shared_notes.js" language="javascript"></script>-->
|
||||
|
||||
<style>
|
||||
body { margin: 0px; overflow:hidden }
|
||||
</style>
|
||||
<script language="JavaScript" type="text/javascript">
|
||||
<!--
|
||||
// -----------------------------------------------------------------------------
|
||||
// Globals
|
||||
// Major version of Flash required
|
||||
var requiredMajorVersion = 10;
|
||||
// Minor version of Flash required
|
||||
var requiredMinorVersion = 0;
|
||||
// Minor version of Flash required
|
||||
var requiredRevision = 0;
|
||||
// -----------------------------------------------------------------------------
|
||||
// -->
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body scroll="no" onfocus="clearblink()">
|
||||
<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", "100%",
|
||||
"height", "100%",
|
||||
"align", "middle",
|
||||
"id", "BigBlueButton",
|
||||
"quality", "high",
|
||||
"bgcolor", "#869ca7",
|
||||
"name", "BigBlueButton",
|
||||
"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
|
||||
//
|
||||
// NOTE: Don't use wmode=transparent because it messes up mouse wheel
|
||||
// see. http://stackoverflow.com/questions/313966/mousewheel-not-working-when-published-movie-has-wmodetransparent
|
||||
// ralam (mar 31, 2010)
|
||||
AC_FL_RunContent(
|
||||
"src", "BigBlueButton.swf?v=VERSION",
|
||||
"width", "100%",
|
||||
"height", "100%",
|
||||
"align", "middle",
|
||||
"id", "BigBlueButton",
|
||||
"quality", "high",
|
||||
"bgcolor", "#869ca7",
|
||||
"name", "BigBlueButton",
|
||||
"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="BigBlueButton" width="100%" height="100%"
|
||||
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
|
||||
<param name="movie" value="BigBlueButton.swf?v=VERSION" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<embed src="BigBlueButton.swf" quality="high" bgcolor="#869ca7"
|
||||
width="100%" height="100%" name="BigBlueButton" 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 xmlns="http://www.w3.org/1999/xhtml" lang="en" xml: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>
|
||||
<title>BigBlueButton</title>
|
||||
<meta name="google" value="notranslate" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<!-- Include CSS to eliminate any default margins/padding and set the height of the html element and
|
||||
the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as
|
||||
the percentage of the height of its parent container, which has to be set explicitly. Fix for
|
||||
Firefox 3.6 focus border issues. Initially, don't display flashContent div so it won't show
|
||||
if JavaScript disabled.
|
||||
-->
|
||||
<style type="text/css" media="screen">
|
||||
html, body { height:100%; }
|
||||
body { margin:0; padding:0; overflow:auto; text-align:center;
|
||||
background-color: #ffffff; }
|
||||
object:focus { outline:none; }
|
||||
#flashContent { display:none; }
|
||||
</style>
|
||||
|
||||
<!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
|
||||
<!-- BEGIN Browser History required section -->
|
||||
<link rel="stylesheet" type="text/css" href="history/history.css" />
|
||||
<script type="text/javascript" src="history/history.js"></script>
|
||||
<!-- END Browser History required section -->
|
||||
|
||||
<script src="jquery-1.5.1.min.js" language="javascript"></script>
|
||||
<script src="bigbluebutton.js" language="javascript"></script>
|
||||
<script src="bbb_localization.js" language="javascript"></script>
|
||||
<script src="deployJava.js" language="javascript"></script>
|
||||
<script src="bbb_blinker.js" language="javascript"></script>
|
||||
<script src="bbb_deskshare.js" language="javascript"></script>
|
||||
|
||||
<script type="text/javascript" src="swfobject.js"></script>
|
||||
<script type="text/javascript">
|
||||
// For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.
|
||||
var swfVersionStr = "10.3.0";
|
||||
// To use express install, set to playerProductInstall.swf, otherwise the empty string.
|
||||
var xiSwfUrlStr = "playerProductInstall.swf";
|
||||
var flashvars = {};
|
||||
var params = {};
|
||||
params.quality = "high";
|
||||
params.bgcolor = "#ffffff";
|
||||
params.allowscriptaccess = "sameDomain";
|
||||
params.allowfullscreen = "true";
|
||||
var attributes = {};
|
||||
attributes.id = "BigBlueButton";
|
||||
attributes.name = "BigBlueButton";
|
||||
attributes.align = "middle";
|
||||
swfobject.embedSWF(
|
||||
"BigBlueButton.swf", "flashContent",
|
||||
"100%", "100%",
|
||||
swfVersionStr, xiSwfUrlStr,
|
||||
flashvars, params, attributes);
|
||||
// JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
|
||||
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough
|
||||
JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show
|
||||
when JavaScript is disabled.
|
||||
-->
|
||||
<div id="flashContent">
|
||||
<p>
|
||||
To view this page ensure that Adobe Flash Player version
|
||||
10.3.0 or greater is installed.
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");
|
||||
document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"
|
||||
+ pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<noscript>
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="BigBlueButton">
|
||||
<param name="movie" value="BigBlueButton.swf" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#ffffff" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<param name="allowFullScreen" value="true" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="BigBlueButton.swf" width="100%" height="100%">
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#ffffff" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<param name="allowFullScreen" value="true" />
|
||||
<!--<![endif]-->
|
||||
<!--[if gte IE 6]>-->
|
||||
<p>
|
||||
Either scripts and active content are not permitted to run or Adobe Flash Player version
|
||||
10.3.0 or greater is not installed.
|
||||
</p>
|
||||
<!--<![endif]-->
|
||||
<a href="http://www.adobe.com/go/getflashplayer">
|
||||
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
|
||||
</a>
|
||||
<!--[if !IE]>-->
|
||||
</object>
|
||||
<!--<![endif]-->
|
||||
</object>
|
||||
</noscript>
|
||||
</body>
|
||||
</html>
|
||||
|
115
bigbluebutton-client/resources/prod/BigBlueButtonTest.html
Executable file
115
bigbluebutton-client/resources/prod/BigBlueButtonTest.html
Executable file
@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- saved from url=(0014)about:internet -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml: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>
|
||||
<title>BigBlueButton</title>
|
||||
<meta name="google" value="notranslate" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<!-- Include CSS to eliminate any default margins/padding and set the height of the html element and
|
||||
the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as
|
||||
the percentage of the height of its parent container, which has to be set explicitly. Fix for
|
||||
Firefox 3.6 focus border issues. Initially, don't display flashContent div so it won't show
|
||||
if JavaScript disabled.
|
||||
-->
|
||||
<style type="text/css" media="screen">
|
||||
html, body { height:100%; }
|
||||
body { margin:0; padding:0; overflow:auto; text-align:center;
|
||||
background-color: #ffffff; }
|
||||
object:focus { outline:none; }
|
||||
#flashContent { display:none; }
|
||||
</style>
|
||||
|
||||
<!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
|
||||
<!-- BEGIN Browser History required section -->
|
||||
<link rel="stylesheet" type="text/css" href="history/history.css" />
|
||||
<script type="text/javascript" src="history/history.js"></script>
|
||||
<!-- END Browser History required section -->
|
||||
|
||||
<script src="jquery-1.5.1.min.js" language="javascript"></script>
|
||||
<script src="bigbluebutton.js" language="javascript"></script>
|
||||
<script src="bbb_localization.js" language="javascript"></script>
|
||||
<script src="deployJava.js" language="javascript"></script>
|
||||
<script src="bbb_blinker.js" language="javascript"></script>
|
||||
<script src="bbb_deskshare.js" language="javascript"></script>
|
||||
|
||||
<script type="text/javascript" src="swfobject.js"></script>
|
||||
<script type="text/javascript">
|
||||
// For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.
|
||||
var swfVersionStr = "10.3.0";
|
||||
// To use express install, set to playerProductInstall.swf, otherwise the empty string.
|
||||
var xiSwfUrlStr = "playerProductInstall.swf";
|
||||
var flashvars = {};
|
||||
var params = {};
|
||||
params.quality = "high";
|
||||
params.bgcolor = "#ffffff";
|
||||
params.allowscriptaccess = "sameDomain";
|
||||
params.allowfullscreen = "true";
|
||||
var attributes = {};
|
||||
attributes.id = "BigBlueButton";
|
||||
attributes.name = "BigBlueButton";
|
||||
attributes.align = "middle";
|
||||
swfobject.embedSWF(
|
||||
"BigBlueButton.swf", "flashContent",
|
||||
"100%", "100%",
|
||||
swfVersionStr, xiSwfUrlStr,
|
||||
flashvars, params, attributes);
|
||||
// JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
|
||||
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough
|
||||
JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show
|
||||
when JavaScript is disabled.
|
||||
-->
|
||||
<div id="flashContent">
|
||||
<p>
|
||||
To view this page ensure that Adobe Flash Player version
|
||||
10.3.0 or greater is installed.
|
||||
</p>
|
||||
<script type="text/javascript">
|
||||
var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");
|
||||
document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"
|
||||
+ pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<noscript>
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="BigBlueButton">
|
||||
<param name="movie" value="BigBlueButton.swf" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#ffffff" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<param name="allowFullScreen" value="true" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="BigBlueButton.swf" width="100%" height="100%">
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#ffffff" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<param name="allowFullScreen" value="true" />
|
||||
<!--<![endif]-->
|
||||
<!--[if gte IE 6]>-->
|
||||
<p>
|
||||
Either scripts and active content are not permitted to run or Adobe Flash Player version
|
||||
10.3.0 or greater is not installed.
|
||||
</p>
|
||||
<!--<![endif]-->
|
||||
<a href="http://www.adobe.com/go/getflashplayer">
|
||||
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
|
||||
</a>
|
||||
<!--[if !IE]>-->
|
||||
</object>
|
||||
<!--<![endif]-->
|
||||
</object>
|
||||
</noscript>
|
||||
</body>
|
||||
</html>
|
@ -24,49 +24,203 @@
|
||||
xmlns:views="org.bigbluebutton.main.views.*"
|
||||
xmlns:maps="org.bigbluebutton.main.maps.*"
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
xmlns:m="library://melomel/2010"
|
||||
pageTitle="BigBlueButton"
|
||||
layout="absolute" creationComplete="init()"
|
||||
preloader="org.bigbluebutton.main.model.BigBlueButtonPreloader">
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import org.bigbluebutton.core.EventBroadcaster;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.core.BBB;
|
||||
import org.bigbluebutton.core.managers.ConfigManager2;
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import mx.managers.HistoryManager;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.core.BBB;
|
||||
import org.bigbluebutton.core.EventBroadcaster;
|
||||
import org.bigbluebutton.core.managers.ConfigManager2;
|
||||
import org.bigbluebutton.main.events.BBBEvent;
|
||||
import org.bigbluebutton.main.views.MainApplicationShell;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private var langResources:ResourceUtil = ResourceUtil.getInstance();
|
||||
private var langResources:ResourceUtil = ResourceUtil.getInstance();
|
||||
|
||||
public var myFoo:String = "bar";
|
||||
|
||||
/**
|
||||
* Thse two lines are workaround for this. (ralam - Nov 8, 2008)
|
||||
* http://gregjessup.com/flex-3-advanceddatagrid-cannot-convert-mxmanagersdragmanagerimpl-to-mxmanagersidragmanager/
|
||||
* http://butterfliesandbugs.wordpress.com/2007/10/25/workaround-for-error-when-loading-popups-from-modules/
|
||||
*/
|
||||
import mx.managers.IDragManager;
|
||||
private var iDragManager:IDragManager;
|
||||
|
||||
/** another workaround - for this issue: https://bugs.adobe.com/jira/browse/SDK-13121*/
|
||||
private var hist:HistoryManager
|
||||
|
||||
private function handleChatEvent(e:Event):void {
|
||||
trace('Got CHAT_EVENT');
|
||||
}
|
||||
|
||||
public function setFoo(f:String):void {
|
||||
myFoo = f;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* Testing
|
||||
******************************/
|
||||
|
||||
|
||||
|
||||
private var globalDispatcher:Dispatcher = new Dispatcher();
|
||||
|
||||
// Login test
|
||||
private static var isLoggedIn:Boolean = false; // flag to indicate if we successfully logged in
|
||||
|
||||
// Chat test
|
||||
private static var chatMessageSent:String = "";
|
||||
private static var chatTestSucceeded:Boolean = false;
|
||||
|
||||
// Voice test
|
||||
private static var didUserJoin:Boolean = false;
|
||||
|
||||
// Presentation test
|
||||
private static var didPresentationConvert:Boolean = false;
|
||||
|
||||
// Video test
|
||||
private static var didVideoStart:Boolean = false;
|
||||
|
||||
|
||||
public function handleLoginEvent(event:BBBEvent):void {
|
||||
LogUtil.debug("******************* Received loggedin event");
|
||||
isLoggedIn = true;
|
||||
LogUtil.debug("******************* Received loggedin event " + isLoggedIn.toString());
|
||||
}
|
||||
|
||||
public function checkLogin():String {
|
||||
LogUtil.debug("******************* " + isLoggedIn.toString());
|
||||
return isLoggedIn.toString();
|
||||
|
||||
}
|
||||
|
||||
public function checkChat():String {
|
||||
if (chatTestSucceeded)
|
||||
{
|
||||
chatTestSucceeded = false;
|
||||
return "true";
|
||||
}
|
||||
else
|
||||
return chatTestSucceeded.toString();
|
||||
}
|
||||
|
||||
public function handleReceivedPublicChatMessageEvent(event:BBBEvent):void {
|
||||
if (event.message.search(chatMessageSent) != -1)
|
||||
chatTestSucceeded = true;
|
||||
}
|
||||
|
||||
// Creates a random string and sends it as a chat message.
|
||||
public function sendRandomChatMessage():void {
|
||||
chatMessageSent = generateRandomString(15);
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.SEND_PUBLIC_CHAT_MESSAGE_EVENT, chatMessageSent));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Thse two lines are workaround for this. (ralam - Nov 8, 2008)
|
||||
* http://gregjessup.com/flex-3-advanceddatagrid-cannot-convert-mxmanagersdragmanagerimpl-to-mxmanagersidragmanager/
|
||||
* http://butterfliesandbugs.wordpress.com/2007/10/25/workaround-for-error-when-loading-popups-from-modules/
|
||||
* Voice
|
||||
*/
|
||||
public function joinVoiceConference():void {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.JOIN_VOICE_CONFERENCE));
|
||||
}
|
||||
|
||||
public function checkVoice():String {
|
||||
return didUserJoin.toString();
|
||||
}
|
||||
|
||||
public function handleAddedListenerEvent(event:BBBEvent):void {
|
||||
// if (event.message == _attributes.username) {
|
||||
didUserJoin = true;
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Presentation
|
||||
*/
|
||||
|
||||
public function testPresentationConversion():String {
|
||||
return didPresentationConvert.toString();
|
||||
}
|
||||
|
||||
public function handlePresentationConversion(event:Event):void {
|
||||
didPresentationConvert = true;
|
||||
}
|
||||
|
||||
// Obtained from: http://www.zedia.net/2008/generate-random-strings-in-as2-or-as3/
|
||||
private function generateRandomString(newLength:uint = 1, userAlphabet:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"):String{
|
||||
var alphabet:Array = userAlphabet.split("");
|
||||
var alphabetLength:int = alphabet.length;
|
||||
var randomLetters:String = "";
|
||||
for (var i:uint = 0; i < newLength; i++){
|
||||
randomLetters += alphabet[int(Math.floor(Math.random() * alphabetLength))];
|
||||
}
|
||||
return randomLetters;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Video
|
||||
*/
|
||||
import mx.managers.IDragManager;
|
||||
private var iDragManager:IDragManager;
|
||||
|
||||
/** another workaround - for this issue: https://bugs.adobe.com/jira/browse/SDK-13121*/
|
||||
private var hist:HistoryManager
|
||||
|
||||
|
||||
public function startVideoConnection():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_CONNECTION));
|
||||
return "true";
|
||||
}
|
||||
|
||||
public function playVideo():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_STREAM, "640x480avatar.flv"));
|
||||
return "true";
|
||||
}
|
||||
|
||||
public function videoHasStarted(e:Event):void {
|
||||
didVideoStart = true;
|
||||
}
|
||||
|
||||
public function checkVideo():String {
|
||||
return didVideoStart.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Desktop Sharing
|
||||
*/
|
||||
|
||||
public function startDeskshare():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_DESKSHARE));
|
||||
return "true";
|
||||
}
|
||||
|
||||
private var configMgr:ConfigManager2 = BBB.initConfigManager();
|
||||
|
||||
private function init():void {
|
||||
EventBroadcaster.getInstance().addEventListener("configLoadedEvent", configLoadedEventHandler);
|
||||
configMgr.loadConfig();
|
||||
|
||||
EventBroadcaster.getInstance().addEventListener("configLoadedEvent", configLoadedEventHandler);
|
||||
configMgr.loadConfig();
|
||||
|
||||
}
|
||||
|
||||
private function configLoadedEventHandler(e:Event):void {
|
||||
LogUtil.debug("***** Config Loaded ****");
|
||||
LogUtil.debug("***** Config Loaded ****");
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:Script>
|
||||
|
||||
<m:Melomel/>
|
||||
|
||||
<maps:ApplicationEventMap />
|
||||
|
||||
<views:MainApplicationShell id="mainShell"/>
|
||||
|
||||
<mate:Listener type="{BBBEvent.LOGIN_EVENT}" method="handleLoginEvent"/>
|
||||
<mate:Listener type="{BBBEvent.RECEIVED_PUBLIC_CHAT_MESSAGE_EVENT}" method="handleReceivedPublicChatMessageEvent"/>
|
||||
<mate:Listener type="{BBBEvent.ADDED_LISTENER}" method="handleAddedListenerEvent"/>
|
||||
<mate:Listener type="{BBBEvent.PRESENTATION_CONVERTED}" method="handlePresentationConversion"/>
|
||||
<mate:Listener type="{BBBEvent.VIDEO_STARTED}" method="videoHasStarted"/>
|
||||
|
||||
</mx:Application>
|
||||
|
213
bigbluebutton-client/src/BigBlueButtonTest.mxml
Executable file
213
bigbluebutton-client/src/BigBlueButtonTest.mxml
Executable file
@ -0,0 +1,213 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org
|
||||
|
||||
Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
BigBlueButton 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.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
$Id: $
|
||||
-->
|
||||
|
||||
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
xmlns:views="org.bigbluebutton.main.views.*"
|
||||
xmlns:maps="org.bigbluebutton.main.maps.*"
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
xmlns:m="library://melomel/2010"
|
||||
pageTitle="BigBlueButton"
|
||||
layout="absolute"
|
||||
preloader="org.bigbluebutton.main.model.BigBlueButtonPreloader">
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import mx.managers.HistoryManager;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.main.events.BBBEvent;
|
||||
import org.bigbluebutton.main.views.MainApplicationShell;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private var langResources:ResourceUtil = ResourceUtil.getInstance();
|
||||
|
||||
public var myFoo:String = "bar";
|
||||
|
||||
/**
|
||||
* Thse two lines are workaround for this. (ralam - Nov 8, 2008)
|
||||
* http://gregjessup.com/flex-3-advanceddatagrid-cannot-convert-mxmanagersdragmanagerimpl-to-mxmanagersidragmanager/
|
||||
* http://butterfliesandbugs.wordpress.com/2007/10/25/workaround-for-error-when-loading-popups-from-modules/
|
||||
*/
|
||||
import mx.managers.IDragManager;
|
||||
private var iDragManager:IDragManager;
|
||||
|
||||
/** another workaround - for this issue: https://bugs.adobe.com/jira/browse/SDK-13121*/
|
||||
private var hist:HistoryManager
|
||||
|
||||
private function handleChatEvent(e:Event):void {
|
||||
trace('Got CHAT_EVENT');
|
||||
}
|
||||
|
||||
public function setFoo(f:String):void {
|
||||
myFoo = f;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* Testing
|
||||
******************************/
|
||||
|
||||
|
||||
|
||||
private var globalDispatcher:Dispatcher = new Dispatcher();
|
||||
|
||||
// Login test
|
||||
private static var isLoggedIn:Boolean = false; // flag to indicate if we successfully logged in
|
||||
|
||||
// Chat test
|
||||
private static var chatMessageSent:String = "";
|
||||
private static var chatTestSucceeded:Boolean = false;
|
||||
|
||||
// Voice test
|
||||
private static var didUserJoin:Boolean = false;
|
||||
|
||||
// Presentation test
|
||||
private static var didPresentationConvert:Boolean = false;
|
||||
|
||||
// Video test
|
||||
private static var didVideoStart:Boolean = false;
|
||||
|
||||
|
||||
public function handleLoginEvent(event:BBBEvent):void {
|
||||
LogUtil.debug("******************* Received loggedin event");
|
||||
isLoggedIn = true;
|
||||
LogUtil.debug("******************* Received loggedin event " + isLoggedIn.toString());
|
||||
}
|
||||
|
||||
public function checkLogin():String {
|
||||
LogUtil.debug("******************* " + isLoggedIn.toString());
|
||||
return isLoggedIn.toString();
|
||||
|
||||
}
|
||||
|
||||
public function checkChat():String {
|
||||
if (chatTestSucceeded)
|
||||
{
|
||||
chatTestSucceeded = false;
|
||||
return "true";
|
||||
}
|
||||
else
|
||||
return chatTestSucceeded.toString();
|
||||
}
|
||||
|
||||
public function handleReceivedPublicChatMessageEvent(event:BBBEvent):void {
|
||||
if (event.message.search(chatMessageSent) != -1)
|
||||
chatTestSucceeded = true;
|
||||
}
|
||||
|
||||
// Creates a random string and sends it as a chat message.
|
||||
public function sendRandomChatMessage():void {
|
||||
chatMessageSent = generateRandomString(15);
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.SEND_PUBLIC_CHAT_MESSAGE_EVENT, chatMessageSent));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Voice
|
||||
*/
|
||||
public function joinVoiceConference():void {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.JOIN_VOICE_CONFERENCE));
|
||||
}
|
||||
|
||||
public function checkVoice():String {
|
||||
return didUserJoin.toString();
|
||||
}
|
||||
|
||||
public function handleAddedListenerEvent(event:BBBEvent):void {
|
||||
// if (event.message == _attributes.username) {
|
||||
didUserJoin = true;
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Presentation
|
||||
*/
|
||||
|
||||
public function testPresentationConversion():String {
|
||||
return didPresentationConvert.toString();
|
||||
}
|
||||
|
||||
public function handlePresentationConversion(event:Event):void {
|
||||
didPresentationConvert = true;
|
||||
}
|
||||
|
||||
// Obtained from: http://www.zedia.net/2008/generate-random-strings-in-as2-or-as3/
|
||||
private function generateRandomString(newLength:uint = 1, userAlphabet:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"):String{
|
||||
var alphabet:Array = userAlphabet.split("");
|
||||
var alphabetLength:int = alphabet.length;
|
||||
var randomLetters:String = "";
|
||||
for (var i:uint = 0; i < newLength; i++){
|
||||
randomLetters += alphabet[int(Math.floor(Math.random() * alphabetLength))];
|
||||
}
|
||||
return randomLetters;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Video
|
||||
*/
|
||||
|
||||
public function startVideoConnection():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_CONNECTION));
|
||||
return "true";
|
||||
}
|
||||
|
||||
public function playVideo():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_STREAM, "640x480avatar.flv"));
|
||||
return "true";
|
||||
}
|
||||
|
||||
public function videoHasStarted(e:Event):void {
|
||||
didVideoStart = true;
|
||||
}
|
||||
|
||||
public function checkVideo():String {
|
||||
return didVideoStart.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Desktop Sharing
|
||||
*/
|
||||
|
||||
public function startDeskshare():String {
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_DESKSHARE));
|
||||
return "true";
|
||||
}
|
||||
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<m:Melomel/>
|
||||
|
||||
<maps:ApplicationEventMap />
|
||||
|
||||
<views:MainApplicationShell id="mainShell"/>
|
||||
|
||||
<mate:Listener type="{BBBEvent.LOGIN_EVENT}" method="handleLoginEvent"/>
|
||||
<mate:Listener type="{BBBEvent.RECEIVED_PUBLIC_CHAT_MESSAGE_EVENT}" method="handleReceivedPublicChatMessageEvent"/>
|
||||
<mate:Listener type="{BBBEvent.ADDED_LISTENER}" method="handleAddedListenerEvent"/>
|
||||
<mate:Listener type="{BBBEvent.PRESENTATION_CONVERTED}" method="handlePresentationConversion"/>
|
||||
<mate:Listener type="{BBBEvent.VIDEO_STARTED}" method="videoHasStarted"/>
|
||||
|
||||
</mx:Application>
|
@ -27,8 +27,8 @@ $Id: $
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import mx.core.Application;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.core.mx_internal;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
@ -37,6 +37,8 @@ $Id: $
|
||||
import org.bigbluebutton.modules.settings.util.PersistUserPreferences;
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
|
||||
import spark.components.Application;
|
||||
|
||||
private var _moduleName:String = "Settings Module";
|
||||
private var _attributes:Object;
|
||||
|
||||
@ -87,12 +89,12 @@ $Id: $
|
||||
}
|
||||
|
||||
private function openSettingsPanel(e:SettingsEvent = null):void{
|
||||
var settingsPanel:SettingsPanel = SettingsPanel(PopUpManager.createPopUp(Application.application as DisplayObject, SettingsPanel, true));
|
||||
var settingsPanel:SettingsPanel = SettingsPanel(PopUpManager.createPopUp(FlexGlobals.topLevelApplication.mx_internal.Application as DisplayObject, SettingsPanel, true));
|
||||
|
||||
var point1:Point = new Point();
|
||||
// Calculate position of TitleWindow in Application's coordinates.
|
||||
settingsPanel.x = Application.application.width/2 - settingsPanel.width/2;
|
||||
settingsPanel.y = Application.application.height/2 - settingsPanel.height/2;
|
||||
// Calculate position of TitleWindow in Application's coordinates.
|
||||
settingsPanel.x = FlexGlobals.topLevelApplication.mx_internal.Application.width/2 - settingsPanel.width/2;
|
||||
settingsPanel.y = FlexGlobals.topLevelApplication.mx_internal.Application.height/2 - settingsPanel.height/2;
|
||||
|
||||
PersistUserPreferences.saveSettingsVisited();
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package org.bigbluebutton.common.events
|
||||
{
|
||||
import flash.events.Event;
|
||||
|
||||
public class LocaleChangeEvent extends Event
|
||||
{
|
||||
public static const LOCALE_CHANGED:String = "LOCALE_CHANGED_EVENT";
|
||||
|
||||
public function LocaleChangeEvent(type:String)
|
||||
{
|
||||
super(type, true, false);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package org.bigbluebutton.core.model
|
||||
{
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
|
||||
public class Config
|
||||
{
|
||||
private var config:XML = null;
|
||||
@ -63,16 +65,22 @@ package org.bigbluebutton.core.model
|
||||
}
|
||||
|
||||
public function isModulePresent(name:String):Boolean {
|
||||
for each (var n:XML in config.modules..@name) {
|
||||
if (n.toString().toUpperCase() == name.toUpperCase()) return true;
|
||||
var mn:XMLList = config.modules..@name;
|
||||
var found:Boolean = false;
|
||||
|
||||
for each (var n:XML in mn) {
|
||||
if (n.toString().toUpperCase() == name.toUpperCase()) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return found;
|
||||
}
|
||||
|
||||
public function getModuleConfig(name:String):XML {
|
||||
if (isModulePresent(name))
|
||||
return new XML(config.modules.module.(@name.toUpperCase() == name.toUpperCase()).toXMLString());
|
||||
|
||||
public function getModuleConfig(moduleName:String):XML {
|
||||
if (isModulePresent(moduleName)) {
|
||||
return new XML(config.modules.module.(@name.toUpperCase() == moduleName.toUpperCase()).toXMLString());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -18,12 +18,19 @@
|
||||
*/
|
||||
package org.bigbluebutton.core.services
|
||||
{
|
||||
import mx.styles.IStyleManager2;
|
||||
import mx.styles.StyleManager;
|
||||
|
||||
public class SkinningService
|
||||
{
|
||||
private var myStyleManager: IStyleManager2;
|
||||
|
||||
public function loadSkins(skin:String):void {
|
||||
if (skin != "") StyleManager.loadStyleDeclarations(skin);
|
||||
// IStyleManager2.loadStyleDeclarations(skin);
|
||||
if (skin != "") {
|
||||
myStyleManager = StyleManager.getStyleManager(null);
|
||||
myStyleManager.loadStyleDeclarations(skin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -99,7 +99,7 @@ package org.bigbluebutton.main.model.users
|
||||
|
||||
LogUtil.debug(NAME + "::Connecting to " + uri + " [" + _conferenceParameters.username + "," + _conferenceParameters.role + "," +
|
||||
_conferenceParameters.conference + "," + _conferenceParameters.record + "," + _conferenceParameters.room + "]");
|
||||
_netConnection.connect(uri, _conferenceParameters.username, _conferenceParameters.role, _conferenceParameters.conference,
|
||||
_netConnection.connect(uri, _conferenceParameters.username, _conferenceParameters.role, _conferenceParameters.conference, "live",
|
||||
_conferenceParameters.room, _conferenceParameters.voicebridge,
|
||||
_conferenceParameters.record, _conferenceParameters.externUserID);
|
||||
} catch( e : ArgumentError ) {
|
||||
|
@ -216,7 +216,7 @@ package org.bigbluebutton.main.model.users
|
||||
}
|
||||
|
||||
public function addStream(userid:Number, streamName:String):void {
|
||||
var nc:NetConnection = netConnectionDelegate.connection;
|
||||
var nc:NetConnection = netConnectionDelegate.connection;
|
||||
nc.call(
|
||||
"participants.setParticipantStatus",// Remote function name
|
||||
responder,
|
||||
|
@ -89,32 +89,31 @@
|
||||
'id_ID',
|
||||
'it_IT',
|
||||
'ja_JP',
|
||||
'ko_KR',
|
||||
'lv_LV',
|
||||
'lt_LT',
|
||||
'mn_MN',
|
||||
'ne_NE',
|
||||
'nb_NO',
|
||||
'fa_IR',
|
||||
'pt_PT',
|
||||
'pt_BR',
|
||||
'pl_PL',
|
||||
'ro_RO',
|
||||
'ru_RU',
|
||||
'es_ES',
|
||||
'es_LA',
|
||||
'sv_SE',
|
||||
'sr_SR',
|
||||
'sr_RS',
|
||||
'th_TH',
|
||||
'tr_TR',
|
||||
'uk_UA',
|
||||
'vi_VN'] ;
|
||||
|
||||
private function changeLanguage():void{
|
||||
var lang:String = this.langCodes[this.selectedIndex];
|
||||
ResourceUtil.getInstance().changeLocale([lang]);
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:ComboBox>
|
||||
'ko_KR',
|
||||
'lv_LV',
|
||||
'lt_LT',
|
||||
'nb_NO',
|
||||
'nl_NL',
|
||||
'fa_IR',
|
||||
'pt_PT',
|
||||
'pt_BR',
|
||||
'pl_PL',
|
||||
'ro_RO',
|
||||
'ru_RU',
|
||||
'es_ES',
|
||||
'es_LA',
|
||||
'sv_SE',
|
||||
'sr_SR',
|
||||
'sr_RS',
|
||||
'th_TH',
|
||||
'tr_TR',
|
||||
'uk_UA',
|
||||
'vi_VN'] ;
|
||||
|
||||
private function changeLanguage():void{
|
||||
var lang:String = this.langCodes[this.selectedIndex];
|
||||
ResourceUtil.getInstance().changeLocale(lang);
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:ComboBox>
|
||||
|
@ -26,6 +26,7 @@
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.controls.Alert;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
@ -39,8 +40,8 @@
|
||||
}
|
||||
|
||||
private function redirect():void {
|
||||
var pageHost:String = mx.core.Application.application.url.split("/")[0];
|
||||
var pageURL:String = mx.core.Application.application.url.split("/")[2];
|
||||
var pageHost:String = FlexGlobals.topLevelApplication.url.split("/")[0];
|
||||
var pageURL:String = FlexGlobals.topLevelApplication.url.split("/")[2];
|
||||
var url:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut");
|
||||
LogUtil.debug("Log out url: " + pageURL);
|
||||
navigateToURL(url, '_self');
|
||||
|
@ -43,9 +43,6 @@
|
||||
<common:APIEventMap />
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import org.bigbluebutton.core.BBB;
|
||||
import org.bigbluebutton.main.model.LayoutOptions;
|
||||
import org.bigbluebutton.main.events.RecordStatusEvent;
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import flash.events.MouseEvent;
|
||||
@ -56,7 +53,7 @@
|
||||
import mx.collections.ArrayCollection;
|
||||
import mx.containers.TitleWindow;
|
||||
import mx.controls.Alert;
|
||||
import mx.core.Application;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.events.CloseEvent;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
@ -66,15 +63,20 @@
|
||||
import org.bigbluebutton.common.events.AddUIComponentToMainCanvas;
|
||||
import org.bigbluebutton.common.events.CloseWindowEvent;
|
||||
import org.bigbluebutton.common.events.OpenWindowEvent;
|
||||
import org.bigbluebutton.core.BBB;
|
||||
import org.bigbluebutton.main.events.AppVersionEvent;
|
||||
import org.bigbluebutton.main.events.ConfigEvent;
|
||||
import org.bigbluebutton.main.events.ModuleLoadEvent;
|
||||
import org.bigbluebutton.main.events.PortTestEvent;
|
||||
import org.bigbluebutton.main.events.RecordStatusEvent;
|
||||
import org.bigbluebutton.main.events.SuccessfulLoginEvent;
|
||||
import org.bigbluebutton.main.model.LayoutOptions;
|
||||
import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
import org.bigbluebutton.util.logging.Logger;
|
||||
|
||||
import spark.components.Application;
|
||||
|
||||
private var globalDispatcher:Dispatcher;
|
||||
|
||||
private var dispState:String; //full-screen?
|
||||
@ -239,9 +241,9 @@
|
||||
}
|
||||
|
||||
private function redirect():void {
|
||||
var pageHost:String = mx.core.Application.application.url.split("/")[0];
|
||||
var pageURL:String = mx.core.Application.application.url.split("/")[2];
|
||||
var url:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut");
|
||||
var pageHost:String = FlexGlobals.topLevelApplication.url.split("/")[0];
|
||||
var pageURL:String = FlexGlobals.topLevelApplication.url.split("/")[2];
|
||||
var url:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut");
|
||||
LogUtil.debug("Log out url: " + pageURL);
|
||||
navigateToURL(url, '_self');
|
||||
}
|
||||
|
@ -25,10 +25,12 @@
|
||||
x="168" y="86" layout="vertical" width="400" height="150" horizontalAlign="center">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
import mx.controls.Alert;
|
||||
import mx.managers.PopUpManager;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
private const windowTitleDefault:String = "Warning: Old Language Version";
|
||||
private const reminder1Default:String = "You have an old language translation of BigBlueButton.";
|
||||
private const reminder2Default:String = "Please clear your browser cache and try again.";
|
||||
@ -53,8 +55,8 @@
|
||||
}
|
||||
|
||||
private function redirect():void {
|
||||
var pageHost:String = mx.core.Application.application.url.split("/")[0];
|
||||
var pageURL:String = mx.core.Application.application.url.split("/")[2];
|
||||
var pageHost:String = FlexGlobals.topLevelApplication.url.split("/")[0];
|
||||
var pageURL:String = FlexGlobals.topLevelApplication.url.split("/")[2];
|
||||
var url:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut");
|
||||
LogUtil.debug("Log out url: " + pageURL);
|
||||
navigateToURL(url, '_self');
|
||||
|
@ -51,7 +51,7 @@ package org.bigbluebutton.modules.chat.maps {
|
||||
private function getChatOptions():void {
|
||||
var cxml:XML = BBB.initConfigManager().config.getModuleConfig("ChatModule");
|
||||
if (cxml != null) {
|
||||
chatOptions.privateEnabled = (cxml.@privateEnabled.toUpperCase() == "TRUE") ? true : false;
|
||||
chatOptions.privateEnabled = (cxml.@privateEnabled.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,17 +3,12 @@ package org.bigbluebutton.modules.chat.model
|
||||
public class ChatOptions
|
||||
{
|
||||
[Bindable]
|
||||
public var translationOn:Boolean = false;
|
||||
public var translationOn:Boolean = true;
|
||||
|
||||
[Bindable]
|
||||
public var translationEnabled:Boolean = false;
|
||||
public var translationEnabled:Boolean = true;
|
||||
|
||||
[Bindable]
|
||||
public var privateEnabled:Boolean = false;
|
||||
|
||||
public function ChatOptions()
|
||||
{
|
||||
}
|
||||
|
||||
public var privateEnabled:Boolean = true;
|
||||
}
|
||||
}
|
@ -37,9 +37,11 @@
|
||||
|
||||
import mx.controls.Alert;
|
||||
import mx.core.Application;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.resources.ResourceBundle;
|
||||
import mx.resources.ResourceManager;
|
||||
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
import org.bigbluebutton.modules.chat.events.TranscriptEvent;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
@ -56,8 +58,8 @@
|
||||
|
||||
private function onCreationComplete():void {
|
||||
/* Set up full screen handler. */
|
||||
Application.application.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);
|
||||
dispState = Application.application.stage.displayState;
|
||||
FlexGlobals.topLevelApplication.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);
|
||||
dispState = FlexGlobals.topLevelApplication.stage.displayState;
|
||||
|
||||
var disp:Dispatcher = new Dispatcher();
|
||||
disp.dispatchEvent(new TranscriptEvent(TranscriptEvent.LOAD_TRANSCRIPT));
|
||||
@ -65,7 +67,7 @@
|
||||
}
|
||||
|
||||
private function fullScreenHandler(evt:FullScreenEvent):void {
|
||||
dispState = Application.application.stage.displayState + " (fullScreen=" + evt.fullScreen.toString() + ")";
|
||||
dispState = FlexGlobals.topLevelApplication.stage.displayState + " (fullScreen=" + evt.fullScreen.toString() + ")";
|
||||
if (evt.fullScreen) {
|
||||
chatView.txtMsg.text = "Chat not enabled in full screen mode";
|
||||
chatView.txtMsg.enabled = false;
|
||||
@ -82,8 +84,13 @@
|
||||
this.title = ResourceUtil.getInstance().getString("bbb.chat.title");
|
||||
}
|
||||
|
||||
private function localeChanged(e:LocaleChangeEvent):void{
|
||||
resourcesChanged();
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
|
||||
<views:ChatView id="chatView" chatOptions="{chatOptions}"/>
|
||||
|
||||
</MDIWindow>
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
import mx.controls.Alert;
|
||||
import mx.core.Application;
|
||||
import mx.core.FlexGlobals;
|
||||
|
||||
import org.bigbluebutton.main.events.MadePresenterEvent;
|
||||
import org.bigbluebutton.main.views.MainToolbar;
|
||||
@ -35,11 +36,11 @@
|
||||
|
||||
private function onMouseDown(e:MouseEvent):void{
|
||||
dispatcher.dispatchEvent(new PushToTalkEvent(PushToTalkEvent.BUTTON_PUSHED));
|
||||
Application.application.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
|
||||
FlexGlobals.topLevelApplication.mx_internal.Application.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
|
||||
}
|
||||
|
||||
private function onMouseUp(e:MouseEvent):void{
|
||||
Application.application.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
|
||||
FlexGlobals.topLevelApplication.mx_internal.Application.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
|
||||
dispatcher.dispatchEvent(new PushToTalkEvent(PushToTalkEvent.BUTTON_RELEASED));
|
||||
}
|
||||
|
||||
|
@ -36,18 +36,20 @@
|
||||
<mate:Listener type="{MadePresenterEvent.SWITCH_TO_VIEWER_MODE}" method="onChangedPresenter" />
|
||||
<mate:Listener type="{CursorEvent.UPDATE_CURSOR_LOC_EVENT}" method="onUpdateCursorEvent" />
|
||||
<mate:Listener type="{ViewStreamEvent.STOP}" method="closePublishWindow" />
|
||||
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import flexlib.scheduling.scheduleClasses.BackgroundItem;
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import flexlib.mdi.events.MDIWindowEvent;
|
||||
import flexlib.scheduling.scheduleClasses.BackgroundItem;
|
||||
|
||||
import mx.core.UIComponent;
|
||||
|
||||
import org.bigbluebutton.common.Images;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
import org.bigbluebutton.main.events.BBBEvent;
|
||||
import org.bigbluebutton.main.events.MadePresenterEvent;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
@ -98,7 +100,7 @@
|
||||
if (autoStart) {
|
||||
shareScreen(true);
|
||||
}
|
||||
currentState = "dispFullRegionControlBar";
|
||||
setCurrentState("dispFullRegionControlBar");
|
||||
}
|
||||
|
||||
public function get defaultWidth():int{
|
||||
@ -134,15 +136,19 @@
|
||||
}
|
||||
|
||||
private function shareScreen(fullScreen:Boolean):void {
|
||||
LogUtil.debug("Calling shareScreen");
|
||||
startSharing(connection, uri, room, fullScreen);
|
||||
}
|
||||
|
||||
private function startSharing(connection:NetConnection, uri:String, room:String, fullScreen:Boolean):void {
|
||||
LogUtil.debug("Calling startSharing");
|
||||
var captureX:Number = 0;
|
||||
var captureY:Number = 0;
|
||||
|
||||
sharingFullScreen = fullScreen;
|
||||
currentState = "dispQuitControlBar";
|
||||
LogUtil.debug("Calling startSharing1");
|
||||
// setCurrentState("dispQuitControlBar");
|
||||
LogUtil.debug("Calling startApplet");
|
||||
ExternalInterface.call("startApplet", uri, room, fullScreen);
|
||||
}
|
||||
|
||||
@ -223,6 +229,8 @@
|
||||
ns.play(streamName);
|
||||
|
||||
btnClosePublish.enabled = true;
|
||||
btnFSPublish.enabled = false;
|
||||
btnRegionPublish.enabled = false;
|
||||
}
|
||||
|
||||
private function stopStream():void{
|
||||
@ -276,6 +284,10 @@
|
||||
this.title = ResourceUtil.getInstance().getString('bbb.desktopPublish.title');
|
||||
}
|
||||
|
||||
private function localeChanged(e:LocaleChangeEvent):void{
|
||||
resourcesChanged();
|
||||
}
|
||||
|
||||
private function closePublishWindow(event:ViewStreamEvent):void{
|
||||
stopStream();
|
||||
}
|
||||
@ -283,29 +295,21 @@
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<dspub:states>
|
||||
<!--http://stackoverflow.com/questions/369120/why-does-mxstates-have-trouble-being-resolved-to-a-component-implementation-->
|
||||
<!--http://stackoverflow.com/questions/369120/why-does-mxstates-have-trouble-being-resolved-to-a-component-implementation-->
|
||||
<dspub:states>
|
||||
<mx:State name="dispFullRegionControlBar">
|
||||
<mx:AddChild>
|
||||
<mx:ControlBar id="fullRegionBottomBar">
|
||||
<mx:Button id="btnFSPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.desktopPublish.fullscreen.tooltip')}" label="{ResourceUtil.getInstance().getString('bbb.desktopPublish.fullscreen.label')}" visible="true" click="shareScreen(true)" />
|
||||
<mx:Spacer width="100%"/>
|
||||
<mx:Button id="btnRegionPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.desktopPublish.region.tooltip')}" label="{ResourceUtil.getInstance().getString('bbb.desktopPublish.region.label')}" visible="true" click="shareScreen(false)" />
|
||||
</mx:ControlBar>
|
||||
</mx:AddChild>
|
||||
</mx:State>
|
||||
<mx:State name="dispQuitControlBar">
|
||||
<mx:AddChild>
|
||||
<mx:ControlBar id="quitBottomBar">
|
||||
<mx:Spacer width="50%"/>
|
||||
<mx:Button id="btnClosePublish" toolTip="{ResourceUtil.getInstance().getString('bbb.desktopPublish.stop.tooltip')}" label="{ResourceUtil.getInstance().getString('bbb.desktopPublish.stop.label')}" visible="true" enabled="false" click="stopSharing()" />
|
||||
<mx:Spacer width="50%"/>
|
||||
<mx:Spacer width="100%"/>
|
||||
<mx:Button id="btnRegionPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.desktopPublish.region.tooltip')}" label="{ResourceUtil.getInstance().getString('bbb.desktopPublish.region.label')}" visible="true" click="shareScreen(false)" />
|
||||
</mx:ControlBar>
|
||||
</mx:AddChild>
|
||||
</mx:State>
|
||||
</dspub:states>
|
||||
|
||||
|
||||
<mx:Image id="cursorImg" visible="false" source="@Embed('../../assets/images/cursor4.png')"/>
|
||||
|
||||
|
||||
</dspub:MDIWindow>
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
<mate:Listener type="{ViewStreamEvent.STOP}" method="onStopViewStreamEvent" />
|
||||
<mate:Listener type="{CursorEvent.UPDATE_CURSOR_LOC_EVENT}" method="onUpdateCursorEvent" />
|
||||
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -44,10 +45,11 @@
|
||||
import mx.controls.Alert;
|
||||
import mx.core.UIComponent;
|
||||
|
||||
import org.bigbluebutton.common.IUserListener;
|
||||
import org.bigbluebutton.common.Images;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.common.IUserListener;
|
||||
import org.bigbluebutton.common.UserManager;
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
import org.bigbluebutton.main.model.User;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
import org.bigbluebutton.modules.deskshare.events.CursorEvent;
|
||||
@ -305,6 +307,10 @@
|
||||
this.title = ResourceUtil.getInstance().getString('bbb.desktopView.title');
|
||||
}
|
||||
|
||||
private function localeChanged(e:LocaleChangeEvent):void{
|
||||
resourcesChanged();
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
<mx:Move id="cursorMove" target="{cursorImg}"/>
|
||||
|
@ -42,7 +42,7 @@ package org.bigbluebutton.modules.listeners.managers
|
||||
|
||||
var vxml:XML = BBB.initConfigManager().config.getModuleConfig("ListenersModule");
|
||||
if (vxml != null) {
|
||||
listenerOptions.windowVisible = (vxml.@windowVisible.toUpperCase() == "TRUE") ? true : false;
|
||||
listenerOptions.windowVisible = (vxml.@windowVisible.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
<mate:Listener type="{ListenersEvent.ROOM_MUTE_STATE}" method="roomMuteStateChange" />
|
||||
<mate:Listener type="{ListenersEvent.REGISTER_LISTENERS}" method="registerListeners" />
|
||||
<mate:Listener type="{ListenersEvent.SET_LOCAL_MODERATOR_STATUS}" method="{setModerator}" />
|
||||
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -45,6 +46,7 @@
|
||||
import mx.events.ListEvent;
|
||||
|
||||
import org.bigbluebutton.common.Images;
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
import org.bigbluebutton.modules.listeners.events.ListenersCommand;
|
||||
import org.bigbluebutton.modules.listeners.events.ListenersEvent;
|
||||
@ -165,6 +167,11 @@
|
||||
else
|
||||
windowTitle = ResourceUtil.getInstance().getString('bbb.listeners.title', ["",""]);
|
||||
}
|
||||
|
||||
private function localeChanged(e:LocaleChangeEvent):void{
|
||||
resourcesChanged();
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
<mx:List id="listenersList" height="100%" width="100%"
|
||||
|
@ -4,10 +4,10 @@ package org.bigbluebutton.modules.phone
|
||||
{
|
||||
[Bindable]
|
||||
public var showButton:Boolean = true;
|
||||
|
||||
[Bindable]
|
||||
public var autoJoin:Boolean = false;
|
||||
|
||||
public function PhoneOptions()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -27,9 +27,12 @@ package org.bigbluebutton.modules.phone.managers
|
||||
import flash.events.NetStatusEvent;
|
||||
import flash.events.StatusEvent;
|
||||
import flash.media.Microphone;
|
||||
import flash.media.MicrophoneEnhancedMode;
|
||||
import flash.media.MicrophoneEnhancedOptions;
|
||||
import flash.media.SoundCodec;
|
||||
import flash.net.NetConnection;
|
||||
import flash.net.NetStream;
|
||||
import flash.system.Capabilities;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.modules.phone.events.MicMutedEvent;
|
||||
@ -70,6 +73,17 @@ package org.bigbluebutton.modules.phone.managers
|
||||
}
|
||||
|
||||
private function setupMicrophone():void {
|
||||
if (Capabilities.version.search("10,3") != -1){
|
||||
LogUtil.debug("Enhanced mic available");
|
||||
mic = Microphone(Microphone["getEnhancedMicrophone"]());
|
||||
var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
|
||||
options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
|
||||
options.autoGain = false;
|
||||
options.echoPath = 128;
|
||||
options.nonLinearProcessing = true;
|
||||
mic['enhancedOptions'] = options;
|
||||
}
|
||||
|
||||
mic.setUseEchoSuppression(true);
|
||||
mic.setLoopBack(false);
|
||||
mic.setSilenceLevel(0,20000);
|
||||
|
@ -41,7 +41,8 @@ package org.bigbluebutton.modules.phone.maps
|
||||
phoneOptions = new PhoneOptions();
|
||||
var vxml:XML = BBB.initConfigManager().config.getModuleConfig("PhoneModule");
|
||||
if (vxml != null) {
|
||||
phoneOptions.showButton = (vxml.@showButton.toUpperCase() == "TRUE") ? true : false;
|
||||
phoneOptions.showButton = (vxml.@showButton.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
phoneOptions.autoJoin = (vxml.@autoJoin.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,6 +46,7 @@
|
||||
<mate:Listener type="{DisplaySlideEvent.DISPLAY_SLIDE_EVENT}" method="handleDisplaySlideEvent" />
|
||||
<mate:Listener type="{AddOverlayCanvasEvent.ADD_OVERLAY_CANVAS}" method="addOverlayCanvas" />
|
||||
<mate:Listener type="{AddButtonToPresentationEvent.ADD_BUTTON}" method="addButton" />
|
||||
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -67,6 +68,7 @@
|
||||
|
||||
import org.bigbluebutton.common.IBbbCanvas;
|
||||
import org.bigbluebutton.common.Images;
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
import org.bigbluebutton.main.events.MadePresenterEvent;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
import org.bigbluebutton.modules.present.api.IPresentationButton;
|
||||
@ -539,6 +541,10 @@
|
||||
super.resourcesChanged();
|
||||
if ((slideView != null) && (!slideView.visible)) this.title = ResourceUtil.getInstance().getString('bbb.presentation.title');
|
||||
}
|
||||
|
||||
private function localeChanged(e:LocaleChangeEvent):void{
|
||||
resourcesChanged();
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
@ -24,7 +24,6 @@
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
xmlns:local="*"
|
||||
width="100%" height="100%"
|
||||
paddingBottom="5"
|
||||
creationComplete="onCreationComplete()" verticalScrollPolicy="off" horizontalScrollPolicy="off"
|
||||
rollOut="hideCursor()"
|
||||
xmlns:views="org.bigbluebutton.modules.present.views.*"
|
||||
|
6
bigbluebutton-client/src/org/bigbluebutton/modules/settings/uihelpers/WarningItem.mxml
Normal file → Executable file
6
bigbluebutton-client/src/org/bigbluebutton/modules/settings/uihelpers/WarningItem.mxml
Normal file → Executable file
@ -3,7 +3,7 @@
|
||||
click="showWarning()" textAlign="left" >
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.core.Application;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
private var warningLabel:String;
|
||||
@ -23,8 +23,8 @@
|
||||
var userAlert:UserAlert = UserAlert(PopUpManager.createPopUp(this.parent, UserAlert, true));
|
||||
userAlert.setAlert(warningText, optionalLabel, optionalCallback);
|
||||
|
||||
userAlert.x = Application.application.width/2 - userAlert.width/2;
|
||||
userAlert.y = Application.application.height/2 - userAlert.height/2;
|
||||
userAlert.x = FlexGlobals.topLevelApplication.mx_internal.Application.width/2 - userAlert.width/2;
|
||||
userAlert.y = FlexGlobals.topLevelApplication.mx_internal.Application.height/2 - userAlert.height/2;
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
2
bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/infrastructure/Client.as
Normal file → Executable file
2
bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/infrastructure/Client.as
Normal file → Executable file
@ -112,7 +112,7 @@ package org.bigbluebutton.modules.sharednotes.infrastructure
|
||||
trace(logPrefix + "sending " + messageToSend);
|
||||
}
|
||||
|
||||
server.send("m, " + JSON.encode(messageToSend));
|
||||
//server.send("m, " + JSON.encode(messageToSend));
|
||||
|
||||
timeoutTimer.start();
|
||||
}
|
||||
|
10
bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/infrastructure/ServerConnection.as
Normal file → Executable file
10
bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/infrastructure/ServerConnection.as
Normal file → Executable file
@ -53,7 +53,7 @@ package org.bigbluebutton.modules.sharednotes.infrastructure
|
||||
var request:Object = new Object();
|
||||
request.documentName = Client.documentName;
|
||||
request.connectionType = ServerConnection.connectionType;
|
||||
send("c, " + JSON.encode(request));
|
||||
//send("c, " + JSON.encode(request));
|
||||
connectionTimeout.start();
|
||||
}
|
||||
|
||||
@ -62,14 +62,14 @@ package org.bigbluebutton.modules.sharednotes.infrastructure
|
||||
protected function receive(data:String):void {
|
||||
if (data.indexOf("c,") == 0) {
|
||||
trace("Received connection data: " + data);
|
||||
var clientData:Object = JSON.decode(data.substring(2));
|
||||
client.initClient(clientData.id, this, clientData.initialDocument);
|
||||
//var clientData:Object = JSON.decode(data.substring(2));
|
||||
//client.initClient(clientData.id, this, clientData.initialDocument);
|
||||
connectionTimeout.stop();
|
||||
pendingResponse = false;
|
||||
}
|
||||
else if (data.indexOf("m,") == 0) {
|
||||
var message:Message = Message.deserialize(JSON.decode(data.substring(2)));
|
||||
client.receiveMessage(message);
|
||||
//var message:Message = Message.deserialize(JSON.decode(data.substring(2)));
|
||||
//client.receiveMessage(message);
|
||||
}
|
||||
else {
|
||||
trace("unrecognized data: " + data);
|
||||
|
@ -26,7 +26,9 @@ package org.bigbluebutton.modules.videoconf.business
|
||||
import flash.events.SecurityErrorEvent;
|
||||
import flash.net.NetConnection;
|
||||
import flash.net.NetStream;
|
||||
|
||||
import flash.media.H264VideoStreamSettings;
|
||||
import flash.media.H264Profile;
|
||||
import flash.media.H264Level;
|
||||
import mx.collections.ArrayCollection;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
@ -36,6 +38,7 @@ package org.bigbluebutton.modules.videoconf.business
|
||||
import org.bigbluebutton.main.model.users.events.StreamStartedEvent;
|
||||
import org.bigbluebutton.modules.videoconf.events.StartBroadcastEvent;
|
||||
import org.bigbluebutton.modules.videoconf.model.VideoConfOptions;
|
||||
import flash.system.Capabilities;
|
||||
|
||||
public class VideoProxy
|
||||
{
|
||||
@ -49,9 +52,9 @@ package org.bigbluebutton.modules.videoconf.business
|
||||
videoOptions = new VideoConfOptions();
|
||||
var vxml:XML = BBB.initConfigManager().config.getModuleConfig("VideoconfModule");
|
||||
if (vxml != null) {
|
||||
videoOptions.showButton = (vxml.@showButton.toUpperCase() == "TRUE") ? true : false;
|
||||
videoOptions.autoStart = (vxml.@autoStart.toUpperCase() == "TRUE") ? true : false;
|
||||
videoOptions.publishWindowVisible = (vxml.@publishWindowVisible.toUpperCase() == "TRUE") ? true : false;
|
||||
videoOptions.showButton = (vxml.@showButton.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
videoOptions.autoStart = (vxml.@autoStart.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
videoOptions.publishWindowVisible = (vxml.@publishWindowVisible.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
}
|
||||
|
||||
nc = new NetConnection();
|
||||
@ -129,6 +132,13 @@ package org.bigbluebutton.modules.videoconf.business
|
||||
ns.addEventListener( AsyncErrorEvent.ASYNC_ERROR, onAsyncError );
|
||||
ns.client = this;
|
||||
ns.attachCamera(e.camera);
|
||||
|
||||
if (Capabilities.version.search("11,0") != -1) {
|
||||
var h264:H264VideoStreamSettings = new H264VideoStreamSettings();
|
||||
h264.setProfileLevel(H264Profile.MAIN, H264Level.LEVEL_4_1);
|
||||
ns.videoStreamSettings = h264;
|
||||
}
|
||||
|
||||
ns.publish(e.stream);
|
||||
}
|
||||
|
||||
|
@ -25,9 +25,8 @@
|
||||
xmlns:pubVid="flexlib.mdi.containers.*"
|
||||
implements="org.bigbluebutton.common.IBbbModuleWindow"
|
||||
creationComplete="init()"
|
||||
width="{camWidth + 6}" height="{camHeight + 75}"
|
||||
width="{camWidth + 6}" height="{camHeight + 80}"
|
||||
title="{ResourceUtil.getInstance().getString('bbb.publishVideo.title')}"
|
||||
backgroundImage="{bbbLogo}"
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
resize="onResize()">
|
||||
|
||||
@ -42,6 +41,7 @@
|
||||
|
||||
import org.bigbluebutton.common.Images;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
|
||||
import org.bigbluebutton.modules.videoconf.events.StartBroadcastEvent;
|
||||
@ -63,8 +63,8 @@
|
||||
private var _bResizePossible:Boolean = true;
|
||||
private var _nAspectRatio:Number = 1;
|
||||
|
||||
static private var _minWidth:int = 166;
|
||||
static private var _minHeight:int = 149;
|
||||
static private var _minWidth:int = 86;
|
||||
static private var _minHeight:int = 174;
|
||||
|
||||
private var _nSavedVideoWidth:Number = 0;
|
||||
private var _nSavedVideoHeight:Number = 0;
|
||||
@ -81,7 +81,6 @@
|
||||
public var videoOptions:VideoConfOptions;
|
||||
|
||||
private function init():void{
|
||||
currentState = "dispVideoOptionsControlBar";
|
||||
checkIfMacCamera();
|
||||
if (isPresenter()) showResControls(true);
|
||||
if (Camera.names.length > 1) showVideoControls(true);
|
||||
@ -199,15 +198,14 @@
|
||||
|
||||
private function showVideoControls(show:Boolean):void{
|
||||
if (show){
|
||||
currentState = "dispVideoOptionsControlBar"
|
||||
videoOptionsBar.visible = true;
|
||||
btnStartPublish.visible = true;
|
||||
cmbCameraSelector.visible = true;
|
||||
} else{
|
||||
videoOptionsBar.visible = true;
|
||||
btnStartPublish.visible = true;
|
||||
videoOptionsBar.visible = false;
|
||||
btnStartPublish.visible = false;
|
||||
cmbCameraSelector.visible = false;
|
||||
currentState = "dispVideo";
|
||||
videoOptionsBar.visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -239,7 +237,7 @@
|
||||
videoHolder.width = video.width;
|
||||
videoHolder.height = video.height;
|
||||
this.width = video.width + 6;
|
||||
this.height = video.height + 29;
|
||||
this.height = video.height + 74;
|
||||
|
||||
// prevent to show a video window bigger than the parent window
|
||||
if (this.width > this.parent.width) {
|
||||
@ -248,7 +246,7 @@
|
||||
adjustWindowSize();
|
||||
}
|
||||
if (this.height > this.parent.height) {
|
||||
video.height = this.parent.height - 29;
|
||||
video.height = this.parent.height - 74;
|
||||
video.width = Math.floor(video.height * _nAspectRatio);
|
||||
adjustWindowSize();
|
||||
}
|
||||
@ -258,7 +256,7 @@
|
||||
adjustWindowSize();
|
||||
}
|
||||
if (this.height < _minHeight) {
|
||||
video.height = _minHeight - 29;
|
||||
video.height = _minHeight - 74;
|
||||
video.width = Math.floor(video.height * _nAspectRatio);
|
||||
adjustWindowSize();
|
||||
}
|
||||
@ -289,7 +287,7 @@
|
||||
|
||||
if (this.width == video.width + 6) {
|
||||
// if it's a vertical resizing
|
||||
video.height = this.height - 29;
|
||||
video.height = this.height - 74;
|
||||
video.width = video.height * _nAspectRatio;
|
||||
} else {
|
||||
// if it's a horizontal resizing
|
||||
@ -305,7 +303,7 @@
|
||||
|
||||
|
||||
var tmpWidth:Number = this.parent.width - 6;
|
||||
var tmpHeight:Number = this.parent.height - 29;
|
||||
var tmpHeight:Number = this.parent.height - 74;
|
||||
|
||||
if (tmpWidth > tmpHeight * _nAspectRatio)
|
||||
tmpWidth = tmpHeight * _nAspectRatio;
|
||||
@ -316,7 +314,7 @@
|
||||
video.height = tmpHeight;
|
||||
|
||||
video.x = Math.floor ((this.parent.width - 6 - video.width) / 2);
|
||||
video.y = Math.floor ((this.parent.height - 29 - video.height) / 2);
|
||||
video.y = Math.floor ((this.parent.height - 74 - video.height) / 2);
|
||||
}
|
||||
|
||||
public function onRestore(event:MDIWindowEvent):void {
|
||||
@ -344,11 +342,11 @@
|
||||
}
|
||||
|
||||
static public function getWindowHeightByWidth(width:int, aspect:Number):int {
|
||||
return Math.floor((width - 6) / aspect) + 29;
|
||||
return Math.floor((width - 6) / aspect) + 74;
|
||||
}
|
||||
|
||||
static public function getWindowWidthByHeight(height:int, aspect:Number):int {
|
||||
return Math.floor((height - 29) * aspect) + 6;
|
||||
return Math.floor((height - 74) * aspect) + 6;
|
||||
}
|
||||
|
||||
override protected function resourcesChanged():void{
|
||||
@ -356,38 +354,25 @@
|
||||
this.title = ResourceUtil.getInstance().getString('bbb.publishVideo.title');
|
||||
}
|
||||
|
||||
private function localeChanged(e:LocaleChangeEvent):void{
|
||||
resourcesChanged();
|
||||
}
|
||||
|
||||
private function onResize():void{
|
||||
setWindowWidth(this.width);
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<pubVid:states>
|
||||
<!--http://stackoverflow.com/questions/369120/why-does-mxstates-have-trouble-being-resolved-to-a-component-implementation-->
|
||||
<mx:State name="dispVideo">
|
||||
</mx:State>
|
||||
<!--mx:State name="dispQuitControlBar">
|
||||
<mx:AddChild>
|
||||
<mx:ControlBar id="quitOptionsBar">
|
||||
<mx:Spacer width="50%"/>
|
||||
<mx:Button id="btnQuitPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.video.publish.close.tooltip')}" label="{ResourceUtil.getInstance().getString('bbb.video.publish.close.label')}" visible="true" click="closeThisWindow()" />
|
||||
<mx:Spacer width="50%"/>
|
||||
</mx:ControlBar>
|
||||
</mx:AddChild>
|
||||
</mx:State-->
|
||||
<mx:State name="dispVideoOptionsControlBar">
|
||||
<mx:AddChild>
|
||||
<mx:ControlBar id="videoOptionsBar">
|
||||
<mx:Button id="btnStartPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.toolTip')}" icon="{camIcon}" click="startPublishing()" />
|
||||
<mx:ComboBox id="cmbCameraSelector" dataProvider="{Camera.names}" width="150" visible="false" />
|
||||
<mx:ComboBox id="cmbResolution" dataProvider="{resolutions}" width="20%" visible="false" />
|
||||
</mx:ControlBar>
|
||||
</mx:AddChild>
|
||||
</mx:State>
|
||||
</pubVid:states>
|
||||
|
||||
|
||||
<mx:UIComponent id="videoHolder" width="{camWidth}" height="{camHeight}" />
|
||||
|
||||
<mx:ControlBar id="videoOptionsBar" visible="true">
|
||||
<mx:Button id="btnStartPublish" toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.toolTip')}" icon="{camIcon}" click="startPublishing()" />
|
||||
<mx:ComboBox id="cmbCameraSelector" dataProvider="{Camera.names}" width="150" visible="false" />
|
||||
<mx:ComboBox id="cmbResolution" dataProvider="{resolutions}" width="20%" visible="false" />
|
||||
</mx:ControlBar>
|
||||
|
||||
<mate:Listener type="{CloseAllWindowsEvent.CLOSE_ALL_WINDOWS}" method="closeWindow" />
|
||||
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
|
||||
</pubVid:MDIWindow>
|
||||
|
@ -34,8 +34,7 @@
|
||||
import flexlib.mdi.events.MDIWindowEvent;
|
||||
|
||||
import mx.controls.Alert;
|
||||
import mx.core.UIComponent;
|
||||
|
||||
import mx.core.UIComponent;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.main.events.BBBEvent;
|
||||
import org.bigbluebutton.main.views.MainCanvas;
|
||||
@ -108,7 +107,7 @@
|
||||
video.attachNetStream(ns);
|
||||
ns.play(stream);
|
||||
this.stream = stream;
|
||||
|
||||
|
||||
this.width = video.width + 6;
|
||||
this.height = video.height + 29;
|
||||
}
|
||||
@ -153,7 +152,14 @@
|
||||
break;
|
||||
case "NetStream.Play.Start":
|
||||
LogUtil.debug("Netstatus: " + e.info.code);
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.VIDEO_STARTED));
|
||||
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.VIDEO_STARTED));
|
||||
break;
|
||||
case "NetStream.Play.FileStructureInvalid":
|
||||
LogUtil.debug("The MP4's file structure is invalid.");
|
||||
break;
|
||||
case "NetStream.Play.NoSupportedTrackFound":
|
||||
LogUtil.debug("The MP4 doesn't contain any supported tracks");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ package org.bigbluebutton.modules.viewers.managers
|
||||
{
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.common.events.CloseWindowEvent;
|
||||
import org.bigbluebutton.common.events.OpenWindowEvent;
|
||||
import org.bigbluebutton.core.BBB;
|
||||
@ -39,16 +40,17 @@ package org.bigbluebutton.modules.viewers.managers
|
||||
|
||||
public function ViewersManager(){
|
||||
dispatcher = new Dispatcher();
|
||||
viewerOptions = new ViewerOptions();
|
||||
|
||||
var vxml:XML = BBB.initConfigManager().config.getModuleConfig("ViewersModule");
|
||||
if (vxml != null) {
|
||||
viewerOptions.windowVisible = (vxml.@windowVisible.toUpperCase() == "TRUE") ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
public function moduleStarted(e:ViewersModuleStartedEvent):void{
|
||||
_module = e.module;
|
||||
|
||||
viewerOptions = new ViewerOptions();
|
||||
|
||||
var vxml:XML = BBB.initConfigManager().config.getModuleConfig("ViewersModule");
|
||||
if (vxml != null) {
|
||||
viewerOptions.windowVisible = (vxml.@windowVisible.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
}
|
||||
|
||||
if (viewersWindow == null){
|
||||
viewersWindow = new ViewersWindow();
|
||||
|
@ -3,11 +3,6 @@ package org.bigbluebutton.modules.viewers.model
|
||||
public class ViewerOptions
|
||||
{
|
||||
[Bindable]
|
||||
public var windowVisible:Boolean = false;
|
||||
|
||||
public function ViewerOptions()
|
||||
{
|
||||
}
|
||||
|
||||
public var windowVisible:Boolean = true;
|
||||
}
|
||||
}
|
@ -29,6 +29,7 @@
|
||||
showCloseButton="false">
|
||||
|
||||
<mate:Listener type="{ConferenceCreatedEvent.CONFERENCE_CREATED_EVENT}" method="conferenceStarted" />
|
||||
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -47,6 +48,7 @@
|
||||
import org.bigbluebutton.common.Images;
|
||||
import org.bigbluebutton.common.Role;
|
||||
import org.bigbluebutton.common.UserManager;
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
import org.bigbluebutton.main.events.ParticipantJoinEvent;
|
||||
import org.bigbluebutton.main.model.users.BBBUser;
|
||||
import org.bigbluebutton.main.model.users.Conference;
|
||||
@ -140,6 +142,10 @@
|
||||
windowTitle = ResourceUtil.getInstance().getString('bbb.viewers.title', ["", ""]);
|
||||
}
|
||||
|
||||
private function localeChanged(e:LocaleChangeEvent):void{
|
||||
resourcesChanged();
|
||||
}
|
||||
|
||||
private function onItemRollOver(event:ListEvent):void{
|
||||
var item:IListItemRenderer = event.itemRenderer;
|
||||
var user:BBBUser = item.data as BBBUser;
|
||||
|
@ -18,32 +18,40 @@
|
||||
*/
|
||||
package org.bigbluebutton.util.i18n
|
||||
{
|
||||
import com.adobe.utils.StringUtil;
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
|
||||
import flash.events.Event;
|
||||
import flash.events.EventDispatcher;
|
||||
import flash.events.IEventDispatcher;
|
||||
import flash.events.IOErrorEvent;
|
||||
import flash.external.ExternalInterface;
|
||||
import flash.net.URLLoader;
|
||||
import flash.net.URLRequest;
|
||||
import flash.utils.Dictionary;
|
||||
|
||||
import mx.controls.Alert;
|
||||
import mx.events.ResourceEvent;
|
||||
import mx.resources.IResourceManager;
|
||||
import mx.resources.ResourceManager;
|
||||
import mx.utils.StringUtil;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.common.events.LocaleChangeEvent;
|
||||
|
||||
public class ResourceUtil extends EventDispatcher {
|
||||
private static var instance:ResourceUtil = null;
|
||||
public static const LOCALES_FILE:String = "conf/locales.xml";
|
||||
public static const VERSION:String = "0.8-PRE";
|
||||
private var inited:Boolean = false;
|
||||
|
||||
private static var BBB_RESOURCE_BUNDLE:String = 'bbbResources';
|
||||
public static var DEFAULT_LANGUAGE:String = "en_US";
|
||||
private static var currentLanguage:String = DEFAULT_LANGUAGE;
|
||||
private var eventDispatcher:IEventDispatcher;
|
||||
private var eventDispatcher:Dispatcher = new Dispatcher();
|
||||
|
||||
private var localeChain:Array = new Array();
|
||||
|
||||
private var resourceManager:IResourceManager;
|
||||
private var currentLocalization:Dictionary = new Dictionary();
|
||||
|
||||
public function ResourceUtil(enforcer:SingletonEnforcer) {
|
||||
if (enforcer == null) {
|
||||
@ -69,7 +77,7 @@ package org.bigbluebutton.util.i18n
|
||||
parse(new XML(e.target.data));
|
||||
}
|
||||
|
||||
public function parse(xml:XML):void{
|
||||
public function parse(xml:XML):void{
|
||||
var list:XMLList = xml.locale;
|
||||
LogUtil.debug("--- Supported locales --- \n" + xml.toString() + "\n --- \n");
|
||||
var locale:XML;
|
||||
@ -78,17 +86,17 @@ package org.bigbluebutton.util.i18n
|
||||
localeChain.push(locale.@code);
|
||||
}
|
||||
|
||||
resourceManager = ResourceManager.getInstance();
|
||||
resourceManager.localeChain = [ExternalInterface.call("getLanguage")];
|
||||
var localeAvailable:Boolean = false;
|
||||
var setLocale:String = ExternalInterface.call("getLanguage");
|
||||
|
||||
for (var i:Number = 0; i<localeChain.length; i++){
|
||||
if (resourceManager.localeChain[0] == localeChain[i]) localeAvailable = true;
|
||||
if (setLocale == localeChain[i]){
|
||||
changeLocale(setLocale);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!localeAvailable){
|
||||
resourceManager.localeChain = [DEFAULT_LANGUAGE];
|
||||
changeLocale([DEFAULT_LANGUAGE]);
|
||||
} else changeLocale(resourceManager.localeChain[0]);
|
||||
//Locale not found, set default
|
||||
changeLocale(DEFAULT_LANGUAGE);
|
||||
|
||||
}
|
||||
|
||||
@ -100,40 +108,62 @@ package org.bigbluebutton.util.i18n
|
||||
return instance;
|
||||
}
|
||||
|
||||
public function changeLocale(... chain):void{
|
||||
if(chain != null && chain.length > 0)
|
||||
{
|
||||
var localeURI:String = 'locale/' + chain[0] + '_resources.swf';
|
||||
eventDispatcher = resourceManager.loadResourceModule(localeURI,true);
|
||||
localeChain = [chain[0]];
|
||||
eventDispatcher.addEventListener(ResourceEvent.COMPLETE, localeChangeComplete);
|
||||
eventDispatcher.addEventListener(ResourceEvent.ERROR, handleResourceNotLoaded);
|
||||
public function changeLocale(language:String):void{
|
||||
var localeURI:String = 'locale/' + language + '/bbbResources.properties';
|
||||
|
||||
var date:Date = new Date();
|
||||
var _urlLoader:URLLoader = new URLLoader();
|
||||
_urlLoader.addEventListener(Event.COMPLETE, handleLocaleLoaded);
|
||||
_urlLoader.addEventListener(IOErrorEvent.IO_ERROR, handleResourceNotLoaded);
|
||||
_urlLoader.load(new URLRequest(localeURI + "?a=" + date.time));
|
||||
|
||||
currentLanguage = language;
|
||||
}
|
||||
|
||||
private function handleLocaleLoaded(e:Event):void{
|
||||
var fulltext:String = (e.target.data as String);
|
||||
fulltext = com.adobe.utils.StringUtil.remove(fulltext, "\r");
|
||||
|
||||
var allStrings:Array = fulltext.split("\n");
|
||||
for (var i:Number=0; i<allStrings.length; i++){
|
||||
var str:String = allStrings[i] as String;
|
||||
|
||||
currentLanguage = chain[0];
|
||||
}
|
||||
}
|
||||
|
||||
private function localeChangeComplete(event:ResourceEvent):void{
|
||||
resourceManager.localeChain = localeChain;
|
||||
update();
|
||||
}
|
||||
if (str.charAt(0) != '#'){
|
||||
var keyValue:Array = str.split("=");
|
||||
var key:String = mx.utils.StringUtil.trim(keyValue[0] as String);
|
||||
var value:String = mx.utils.StringUtil.trim(keyValue[1] as String);
|
||||
currentLocalization[key] = value;
|
||||
trace(key + "=" + value);
|
||||
}
|
||||
}
|
||||
|
||||
trace(currentLocalization['bbb.logout.usercommand']);
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
/**
|
||||
* Defaults to DEFAULT_LANGUAGE when an error is thrown by the ResourceManager
|
||||
* @param event
|
||||
*/
|
||||
private function handleResourceNotLoaded(event:ResourceEvent):void{
|
||||
resourceManager.localeChain = [DEFAULT_LANGUAGE];
|
||||
currentLanguage = DEFAULT_LANGUAGE;
|
||||
update();
|
||||
}
|
||||
|
||||
public function update():void{
|
||||
eventDispatcher.dispatchEvent(new LocaleChangeEvent(LocaleChangeEvent.LOCALE_CHANGED));
|
||||
dispatchEvent(new Event(Event.CHANGE));
|
||||
}
|
||||
|
||||
[Bindable("change")]
|
||||
public function getString(resourceName:String, parameters:Array = null, locale:String = null):String{
|
||||
return resourceManager.getString(BBB_RESOURCE_BUNDLE, resourceName, parameters, locale);
|
||||
if (!parameters) return currentLocalization[resourceName]; //resourceManager.getString(BBB_RESOURCE_BUNDLE, resourceName, parameters, locale);
|
||||
else return insertParameters(currentLocalization[resourceName], parameters);
|
||||
}
|
||||
|
||||
private function insertParameters(text:String, parameters:Array):String{
|
||||
return mx.utils.StringUtil.substitute(text, parameters);
|
||||
}
|
||||
|
||||
public function getCurrentLanguageCode():String{
|
||||
|
Loading…
Reference in New Issue
Block a user