Merge branch 'master' of github.com:bigbluebutton/bigbluebutton into fix-typos
This commit is contained in:
commit
75798be97d
@ -13,49 +13,36 @@ task resolveDeps(type: Copy) {
|
||||
}
|
||||
|
||||
repositories {
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "googlecode"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "blindside-repos"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
mavenCentral()
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "maven2-central"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
name = "googlecode"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "testng_ibiblio_maven2"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "netty-dependency"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.jboss.org/nexus/content/groups/public-jboss/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "spring-bundles"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "Red5"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
name = "blindside-repos"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "testng_ibiblio_maven2"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "spring-bundles"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
mavenRepo name: "jboss", urls: "http://repository.jboss.org/nexus/content/groups/public-jboss"
|
||||
mavenRepo name: "sonatype-snapshot", urls: "http://oss.sonatype.org/content/repositories/snapshots"
|
||||
mavenRepo name: "sonatype-releases", urls: "http://oss.sonatype.org/content/repositories/releases"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,10 +62,10 @@ dependencies {
|
||||
providedCompile 'org.springframework:spring-core:4.0.7.RELEASE@jar'
|
||||
|
||||
// Red5
|
||||
providedCompile 'org/red5:red5-server:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org.red5:red5-io:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org/red5:red5-server-common:1.0.4-RELEASE@jar'
|
||||
|
||||
providedCompile 'org/red5:red5-server:1.0.5-jan122015-SNAPSHOT@jar'
|
||||
providedCompile 'org.red5:red5-server-common:1.0.5-SNAPSHOT@jar'
|
||||
providedCompile 'org.red5:red5-io:1.0.5-SNAPSHOT@jar'
|
||||
|
||||
// Logging
|
||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||
providedCompile 'ch.qos.logback:logback-classic:1.1.2@jar'
|
||||
@ -96,7 +83,7 @@ dependencies {
|
||||
providedCompile 'net.jcip:jcip-annotations:1.0@jar'
|
||||
|
||||
// Testing
|
||||
compile 'org.testng:testng:5.8@jar'
|
||||
// compile 'org.testng:testng:5.8@jar'
|
||||
compile 'org.easymock:easymock:2.4@jar'
|
||||
|
||||
//redis
|
||||
|
@ -13,52 +13,40 @@ task resolveDeps(type: Copy) {
|
||||
}
|
||||
|
||||
repositories {
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "googlecode"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "blindside-repos"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
mavenCentral()
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "maven2-central"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
name = "googlecode"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "testng_ibiblio_maven2"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "netty-dependency"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.jboss.org/nexus/content/groups/public-jboss/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "spring-bundles"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "Red5"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
}
|
||||
name = "blindside-repos"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "testng_ibiblio_maven2"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "spring-bundles"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
mavenRepo name: "jboss", urls: "http://repository.jboss.org/nexus/content/groups/public-jboss"
|
||||
mavenRepo name: "sonatype-snapshot", urls: "http://oss.sonatype.org/content/repositories/snapshots"
|
||||
mavenRepo name: "sonatype-releases", urls: "http://oss.sonatype.org/content/repositories/releases"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dependencies {
|
||||
// Servlet
|
||||
providedCompile 'javax.servlet:servlet-api:2.5@jar'
|
||||
@ -74,10 +62,9 @@ dependencies {
|
||||
providedCompile 'org.springframework:spring-context:4.0.8.RELEASE@jar'
|
||||
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||
|
||||
// Red5
|
||||
providedCompile 'org/red5:red5-server:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org.red5:red5-io:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org/red5:red5-server-common:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org/red5:red5-server:1.0.5-jan122015-SNAPSHOT@jar'
|
||||
providedCompile 'org.red5:red5-server-common:1.0.5-SNAPSHOT@jar'
|
||||
providedCompile 'org.red5:red5-io:1.0.5-SNAPSHOT@jar'
|
||||
|
||||
// Logging
|
||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||
@ -96,11 +83,11 @@ dependencies {
|
||||
//providedCompile 'net.jcip:jcip-annotations:1.0@jar'
|
||||
|
||||
// Testing
|
||||
compile 'org.testng:testng:5.8@jar'
|
||||
// compile 'org.testng:testng:5.8@jar'
|
||||
compile 'org.easymock:easymock:2.4@jar'
|
||||
|
||||
// Testing
|
||||
testRuntime 'org/testng:testng:5.8@jar'
|
||||
// testRuntime 'org/testng:testng:5.8@jar'
|
||||
testRuntime 'org.easymock:easymock:2.4@jar'
|
||||
|
||||
compile 'javax/media:jmf:2.1.1e@jar'
|
||||
|
@ -17,6 +17,7 @@ task resolveDeps(type: Copy) {
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
@ -29,31 +30,23 @@ repositories {
|
||||
name = "blindside-repos"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://blindside.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "maven2-central"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "testng_ibiblio_maven2"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision])-jdk15.[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "netty-dependency"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.jboss.org/nexus/content/groups/public-jboss/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
|
||||
addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
|
||||
}
|
||||
add(new org.apache.ivy.plugins.resolver.URLResolver()) {
|
||||
name = "spring-bundles"
|
||||
m2compatible = true
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
mavenRepo name: "jboss", urls: "http://repository.jboss.org/nexus/content/groups/public-jboss"
|
||||
mavenRepo name: "sonatype-snapshot", urls: "http://oss.sonatype.org/content/repositories/snapshots"
|
||||
mavenRepo name: "sonatype-releases", urls: "http://oss.sonatype.org/content/repositories/releases"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,8 +66,8 @@ dependencies {
|
||||
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||
|
||||
// Red5
|
||||
providedCompile 'org/red5:red5-server:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org/red5:red5-server-common:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org/red5:red5-server:1.0.5-jan122015-SNAPSHOT@jar'
|
||||
providedCompile 'org.red5:red5-server-common:1.0.5-SNAPSHOT@jar'
|
||||
|
||||
// Logging
|
||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||
@ -98,7 +91,7 @@ dependencies {
|
||||
compile 'aopalliance:aopalliance:1.0@jar'
|
||||
|
||||
// Testing
|
||||
compile 'org.testng:testng:5.8@jar'
|
||||
//compile 'org.testng:testng:5.8-jdk15@jar'
|
||||
compile 'org.easymock:easymock:2.4@jar'
|
||||
|
||||
//redis
|
||||
|
25
bigbluebutton-client/branding/default/style/css/BBBDefault.css
Normal file → Executable file
25
bigbluebutton-client/branding/default/style/css/BBBDefault.css
Normal file → Executable file
@ -29,6 +29,10 @@ ToolTip {
|
||||
cornerRadius : 3;
|
||||
}
|
||||
|
||||
.errorTip {
|
||||
borderColor : #3b3b3b;
|
||||
}
|
||||
|
||||
.mypanelTitle {
|
||||
color: #444444;
|
||||
fontFamily: Arial;
|
||||
@ -827,3 +831,24 @@ Alert {
|
||||
.recordButtonStyleStop {
|
||||
icon: Embed('assets/images/control-record-stop.png');
|
||||
}
|
||||
|
||||
.statusImageStyle {
|
||||
successImage: Embed(source='assets/images/status_success.png');
|
||||
warningImage: Embed(source='assets/images/status_warning.png');
|
||||
failImage: Embed(source='assets/images/status_fail.png');
|
||||
}
|
||||
|
||||
.warningButtonStyle {
|
||||
icon: Embed('assets/images/status_warning_20.png');
|
||||
}
|
||||
|
||||
.statusTitleStyle {
|
||||
fontWeight: bold;
|
||||
fontSize: 12;
|
||||
paddingBottom: 0;
|
||||
}
|
||||
|
||||
.statusMessageStyle {
|
||||
fontSize: 12;
|
||||
paddingTop: 0;
|
||||
}
|
BIN
bigbluebutton-client/branding/default/style/css/assets/images/status_fail.png
Executable file
BIN
bigbluebutton-client/branding/default/style/css/assets/images/status_fail.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 382 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/status_success.png
Executable file
BIN
bigbluebutton-client/branding/default/style/css/assets/images/status_success.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 485 B |
BIN
bigbluebutton-client/branding/default/style/css/assets/images/status_warning.png
Executable file
BIN
bigbluebutton-client/branding/default/style/css/assets/images/status_warning.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 774 B |
Binary file not shown.
After Width: | Height: | Size: 529 B |
283
bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ToolTipSkin.as
Normal file → Executable file
283
bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ToolTipSkin.as
Normal file → Executable file
@ -16,19 +16,25 @@
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
// Most of the source is adapted from the ToolTipBorder class and the functionality is replicated here for performance reasons
|
||||
|
||||
package org.bigbluebutton.skins
|
||||
{
|
||||
import flash.display.Graphics;
|
||||
import flash.events.Event;
|
||||
import flash.geom.Point;
|
||||
|
||||
import mx.core.EdgeMetrics;
|
||||
import flash.filters.DropShadowFilter;
|
||||
import mx.graphics.RectangularDropShadow;
|
||||
import mx.managers.ToolTipManager;
|
||||
import mx.skins.halo.ToolTipBorder;
|
||||
import mx.skins.RectangularBorder;
|
||||
|
||||
public class ToolTipSkin extends ToolTipBorder
|
||||
public class ToolTipSkin extends RectangularBorder
|
||||
{
|
||||
|
||||
private static const TOP : String = "top";
|
||||
private static const LOG : String = "ToolTipSkin - ";
|
||||
|
||||
private static const TOP : String = "top";
|
||||
private static const BOTTOM : String = "bottom";
|
||||
|
||||
private var _arrowPosition : String = TOP;
|
||||
@ -38,11 +44,219 @@ package org.bigbluebutton.skins
|
||||
visible = false;
|
||||
addEventListener(Event.ENTER_FRAME, this.enterFrameHandler);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
// Overridden properties
|
||||
//
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------
|
||||
// borderMetrics
|
||||
//----------------------------------
|
||||
|
||||
/**
|
||||
* @private
|
||||
* Storage for the borderMetrics property.
|
||||
*/
|
||||
private var _borderMetrics:EdgeMetrics;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
override public function get borderMetrics():EdgeMetrics
|
||||
{
|
||||
if (_borderMetrics)
|
||||
return _borderMetrics;
|
||||
|
||||
var borderStyle:String = getStyle("borderStyle");
|
||||
switch (borderStyle)
|
||||
{
|
||||
case "errorTipRight":
|
||||
{
|
||||
_borderMetrics = new EdgeMetrics(15, 1, 3, 3);
|
||||
break;
|
||||
}
|
||||
|
||||
case "errorTipAbove":
|
||||
{
|
||||
_borderMetrics = new EdgeMetrics(3, 1, 3, 15);
|
||||
break;
|
||||
}
|
||||
|
||||
case "errorTipBelow":
|
||||
{
|
||||
_borderMetrics = new EdgeMetrics(3, 13, 3, 3);
|
||||
break;
|
||||
}
|
||||
|
||||
default: // "toolTip"
|
||||
{
|
||||
_borderMetrics = new EdgeMetrics(3, 1, 3, 3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return _borderMetrics;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
// Overridden methods
|
||||
//
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @private
|
||||
* If borderStyle may have changed, clear the cached border metrics.
|
||||
*/
|
||||
override public function styleChanged(styleProp:String):void
|
||||
{
|
||||
super.styleChanged(styleProp);
|
||||
|
||||
if (styleProp == "borderStyle" ||
|
||||
styleProp == "styleName" ||
|
||||
styleProp == null)
|
||||
{
|
||||
_borderMetrics = null;
|
||||
|
||||
var borderStyle:String = getStyle("borderStyle");
|
||||
switch (borderStyle)
|
||||
{
|
||||
case "errorTipRight":
|
||||
case "errorTipAbove":
|
||||
case "errorTipBelow":
|
||||
{
|
||||
visible = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* Draw the background and border.
|
||||
*/
|
||||
override protected function updateDisplayList(w:Number, h:Number):void
|
||||
{
|
||||
super.updateDisplayList(w, h);
|
||||
|
||||
var borderStyle:String = getStyle("borderStyle");
|
||||
var backgroundColor:uint = getStyle("backgroundColor");
|
||||
var backgroundAlpha:Number= getStyle("backgroundAlpha");
|
||||
var borderColor:uint = getStyle("borderColor");
|
||||
var cornerRadius:Number = getStyle("cornerRadius");
|
||||
|
||||
var g:Graphics = graphics;
|
||||
g.clear();
|
||||
|
||||
filters = [];
|
||||
|
||||
switch (borderStyle)
|
||||
{
|
||||
case "none":
|
||||
{
|
||||
// Don't draw anything
|
||||
break;
|
||||
}
|
||||
case "errorTipRight":
|
||||
{
|
||||
// border
|
||||
drawRoundRect(
|
||||
11, 0, w - 11, h - 2, 3,
|
||||
borderColor, backgroundAlpha);
|
||||
|
||||
// left pointer
|
||||
g.beginFill(borderColor, backgroundAlpha);
|
||||
g.moveTo(11, 7);
|
||||
g.lineTo(0, 13);
|
||||
g.lineTo(11, 19);
|
||||
g.moveTo(11, 7);
|
||||
g.endFill();
|
||||
|
||||
filters = [ new DropShadowFilter(2, 90, 0, 0.4) ];
|
||||
break;
|
||||
}
|
||||
|
||||
case "errorTipAbove":
|
||||
{
|
||||
// border
|
||||
drawRoundRect(
|
||||
0, 0, w, h - 13, 3,
|
||||
borderColor, backgroundAlpha);
|
||||
|
||||
// bottom pointer
|
||||
g.beginFill(borderColor, backgroundAlpha);
|
||||
g.moveTo(w/2-6, h - 13);
|
||||
g.lineTo(w/2, h - 2);
|
||||
g.lineTo(w/2+6, h - 13);
|
||||
g.moveTo(w/2-6, h - 13);
|
||||
g.endFill();
|
||||
|
||||
filters = [ new DropShadowFilter(2, 90, 0, 0.4) ];
|
||||
break;
|
||||
}
|
||||
|
||||
case "errorTipBelow":
|
||||
{
|
||||
// border
|
||||
drawRoundRect(
|
||||
0, 11, w, h - 13, 3,
|
||||
borderColor, backgroundAlpha);
|
||||
|
||||
// top pointer
|
||||
g.beginFill(borderColor, backgroundAlpha);
|
||||
g.moveTo(9, 11);
|
||||
g.lineTo(15, 0);
|
||||
g.lineTo(21, 11);
|
||||
g.moveTo(10, 11);
|
||||
g.endFill();
|
||||
|
||||
filters = [ new DropShadowFilter(2, 90, 0, 0.4) ];
|
||||
break;
|
||||
}
|
||||
|
||||
default: //Tooltip
|
||||
{
|
||||
// face
|
||||
drawRoundRect(
|
||||
3, 1, w - 6, h - 4, cornerRadius,
|
||||
backgroundColor, backgroundAlpha)
|
||||
|
||||
// top pointer
|
||||
if (_arrowPosition == TOP) {
|
||||
g.beginFill(backgroundColor, backgroundAlpha);
|
||||
g.moveTo((w / 2) - 6, 1);
|
||||
g.lineTo((w / 2), -10);
|
||||
g.lineTo((w / 2) + 6, 1);
|
||||
g.moveTo((w / 2) - 5, -10);
|
||||
g.endFill();
|
||||
}
|
||||
else {
|
||||
g.beginFill(backgroundColor, backgroundAlpha);
|
||||
g.moveTo((w / 2) - 6, h - 3);
|
||||
g.lineTo((w / 2), h + 7);
|
||||
g.lineTo((w / 2) + 6, h - 3);
|
||||
g.moveTo((w / 2) - 5, h + 7);
|
||||
g.endFill();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
// Methods
|
||||
//
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
private function enterFrameHandler( event : Event ) : void {
|
||||
this.position();
|
||||
}
|
||||
|
||||
|
||||
private function position() : void {
|
||||
if (!stage || !ToolTipManager.currentToolTip || !ToolTipManager.currentTarget)
|
||||
{
|
||||
@ -54,11 +268,11 @@ package org.bigbluebutton.skins
|
||||
var globalPoint : Point = ToolTipManager.currentTarget.localToGlobal(parentCoords);
|
||||
var xp : Number = globalPoint.x + 5 - (ToolTipManager.currentToolTip.width / 2);
|
||||
var yp : Number = globalPoint.y + ToolTipManager.currentToolTip.height;
|
||||
|
||||
|
||||
var overhangRight : Number = ToolTipManager.currentToolTip.width + xp;
|
||||
var overhangBottom : Number = ToolTipManager.currentToolTip.height + yp;
|
||||
updateArrowPosition(TOP);
|
||||
|
||||
|
||||
if (overhangRight > stage.stageWidth) {
|
||||
xp = stage.stageWidth - ToolTipManager.currentToolTip.width;
|
||||
}
|
||||
@ -81,61 +295,14 @@ package org.bigbluebutton.skins
|
||||
ToolTipManager.currentToolTip.y = yp;
|
||||
visible = true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function updateArrowPosition( value : String ) : void {
|
||||
if (_arrowPosition != value) {
|
||||
_arrowPosition = value;
|
||||
validateDisplayList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
// Overridden methods
|
||||
//
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
|
||||
override protected function updateDisplayList( w : Number, h : Number ) : void {
|
||||
super.updateDisplayList(w, h);
|
||||
|
||||
var backgroundColor : uint = getStyle("backgroundColor");
|
||||
var backgroundAlpha : Number = getStyle("backgroundAlpha");
|
||||
var borderColor : uint = getStyle("borderColor");
|
||||
var cornerRadius : Number = getStyle("cornerRadius");
|
||||
|
||||
var g : Graphics = graphics;
|
||||
g.clear();
|
||||
|
||||
filters = [];
|
||||
|
||||
// face
|
||||
drawRoundRect(
|
||||
3, 1, w - 6, h - 4, cornerRadius,
|
||||
backgroundColor, backgroundAlpha)
|
||||
|
||||
// top pointer
|
||||
if (_arrowPosition == TOP) {
|
||||
g.beginFill(backgroundColor, backgroundAlpha);
|
||||
g.moveTo((w / 2) - 6, 1);
|
||||
g.lineTo((w / 2), -10);
|
||||
g.lineTo((w / 2) + 6, 1);
|
||||
g.moveTo((w / 2) - 5, -10);
|
||||
g.endFill();
|
||||
}
|
||||
else {
|
||||
g.beginFill(backgroundColor, backgroundAlpha);
|
||||
g.moveTo((w / 2) - 6, h - 3);
|
||||
g.lineTo((w / 2), h + 7);
|
||||
g.lineTo((w / 2) + 6, h - 3);
|
||||
g.moveTo((w / 2) - 5, h + 7);
|
||||
g.endFill();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -418,10 +418,7 @@
|
||||
</copy>
|
||||
<copy todir="${OUTPUT_DIR}/lib/" >
|
||||
<fileset dir="${PROD_RESOURCES_DIR}/lib"/>
|
||||
</copy>
|
||||
<copy todir="${OUTPUT_DIR}/check/" >
|
||||
<fileset dir="${PROD_RESOURCES_DIR}/check"/>
|
||||
</copy>
|
||||
</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"/>
|
||||
|
@ -64,9 +64,7 @@ bbb.micWarning.joinBtn.label = Join anyway
|
||||
bbb.micWarning.testAgain.label = Test again
|
||||
bbb.micWarning.message = Your microphone did not show any activity, others probably won't be able to hear you during the session.
|
||||
bbb.webrtcWarning.message = Detected the following WebRTC issue: {0}. Do you want to try Flash instead?
|
||||
bbb.webrtcWarning.mediamessage = Could not get your microphone for a WebRTC call. Do you want to try Flash instead?
|
||||
bbb.webrtcWarning.endedunexpectedly = The WebRTC echo test ended unexpectedly. Do you want to try Flash instead?
|
||||
bbb.webrtcWarning.title = WebRTC Connection Failed
|
||||
bbb.webrtcWarning.title = WebRTC Audio Failure
|
||||
bbb.webrtcWarning.failedError.1001 = Error 1001: WebSocket disconnected
|
||||
bbb.webrtcWarning.failedError.1002 = Error 1002: Could not make a WebSocket connection
|
||||
bbb.webrtcWarning.failedError.1003 = Error 1003: Browser version not supported
|
||||
@ -75,6 +73,8 @@ bbb.webrtcWarning.failedError.1005 = Error 1005: Call ended unexpectedly
|
||||
bbb.webrtcWarning.failedError.1006 = Error 1006: Call timed out
|
||||
bbb.webrtcWarning.failedError.1007 = Error 1007: ICE negotiation failed
|
||||
bbb.webrtcWarning.failedError.unknown = Error {0}: Unknown error code
|
||||
bbb.webrtcWarning.failedError.mediamissing = Could not get your microphone for a WebRTC call
|
||||
bbb.webrtcWarning.failedError.endedunexpectedly = The WebRTC echo test ended unexpectedly
|
||||
bbb.mainToolbar.helpBtn = Help
|
||||
bbb.mainToolbar.logoutBtn = Logout
|
||||
bbb.mainToolbar.logoutBtn.toolTip = Log Out
|
||||
@ -95,6 +95,16 @@ bbb.mainToolbar.recordBtn..notification.message1 = You can record this meeting.
|
||||
bbb.mainToolbar.recordBtn..notification.message2 = You must click the Start/Stop Recording button in the title bar to begin/end recording.
|
||||
bbb.mainToolbar.recordingLabel.recording = (Recording)
|
||||
bbb.mainToolbar.recordingLabel.notRecording = Not Recording
|
||||
bbb.clientstatus.title = Configuration Warnings
|
||||
bbb.clientstatus.notification = There is an unread notification
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = A firewall is preventing your client from connecting directly on port 1935 to the remote server. Recommend joining a less restrictive network for a more stable connection
|
||||
bbb.clientstatus.browser.title = Browser Version
|
||||
bbb.clientstatus.browser.message = Your browser ({0}) is not up-to-date. Recommend updating to the latest version.
|
||||
bbb.clientstatus.flash.title = Flash Player Version
|
||||
bbb.clientstatus.flash.message = Your Flash Player plugin ({0}) is out of date. Recommend updating to the latest version.
|
||||
bbb.clientstatus.webrtc.title = Audio
|
||||
bbb.clientstatus.webrtc.message = Your browser doesn't support higher quality audio (WebRTC). Recommend you use an up-to-date version of either Firefox or Chrome.
|
||||
bbb.window.minimizeBtn.toolTip = Minimize
|
||||
bbb.window.maximizeRestoreBtn.toolTip = Maximize
|
||||
bbb.window.closeBtn.toolTip = Close
|
||||
|
@ -10,6 +10,7 @@
|
||||
<language userSelectionEnabled="true" />
|
||||
<skinning enabled="true" url="http://HOST/client/branding/css/BBBDefault.css.swf" />
|
||||
<shortcutKeys showButton="true" />
|
||||
<browserVersions chrome="CHROME_VERSION" firefox="FIREFOX_VERSION" flash="FLASH_VERSION" />
|
||||
<layout showLogButton="false" showVideoLayout="false" showResetLayout="true" defaultLayout="bbb.layout.name.defaultlayout"
|
||||
showToolbar="true" showFooter="true" showMeetingName="true" showHelpButton="true"
|
||||
showLogoutWindow="true" showLayoutTools="true" showNetworkMonitor="false" confirmLogout="true"
|
||||
|
@ -1,89 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<title></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<style type="text/css" media="screen">
|
||||
html, body, #flashclient { height:100%; }
|
||||
body { margin:0; padding:0; overflow:hidden; }
|
||||
#altContent { /* style alt content */ }
|
||||
</style>
|
||||
<script type="text/javascript" src="../swfobject/swfobject.js"></script>
|
||||
<script type="text/javascript">
|
||||
swfobject.registerObject("MicrophoneCheck", "11", "expressInstall.swf");
|
||||
swfobject.registerObject("RTMPConnCheck", "11", "expressInstall.swf");
|
||||
</script>
|
||||
<script type="text/javascript" src="../lib/jquery-1.5.1.min.js" language="javascript"></script>
|
||||
<script type="text/javascript" src="lib/deployJava.js" language="javascript"></script>
|
||||
<script type="text/javascript" src="lib/bbb_check.js" language="javascript"></script>
|
||||
<script type="text/javascript" src="lib/pre_flight_check.js" language="javascript"></script>
|
||||
<script>
|
||||
var testJava = function() {
|
||||
window.open("http://www.java.com/en/download/testjava.jsp")
|
||||
}
|
||||
window.onload = function() {
|
||||
registerListeners();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="controls">
|
||||
<button type="button" onclick="bbbCheckFlashVersion()">Check Flash Version</button>
|
||||
<button type="button" onclick="bbbHasMinFlashVersion('9.0.18')">Min Version</button>
|
||||
<button type="button" onclick="bbbGetBrowser()">Get browser</button>
|
||||
<button type="button" onclick="bbbGetJREs()">Get JREs</button>
|
||||
<button type="button" onclick="testJava()">test Java</button>
|
||||
<button type="button" onclick="bbbCheckShowMicSettings()">show mic settings</button>
|
||||
<button type="button" onclick="bbbCheckStartTestMic()">Start Mic</button>
|
||||
<button type="button" onclick="bbbCheckStopTestMic()">Stop Mic</button>
|
||||
<button type="button" onclick="bbbCheckShowCamSettings()">show cam settings</button>
|
||||
<button type="button" onclick="bbbCheckTestRTMPConnection('192.168.0.249', 'video/portTest')">Test RTMP</button>
|
||||
<button type="button" onclick="bbbCheckSetSocketPolicyFileURL('http://192.168.0.249/socketpolicy.xml')">Load Socket Policy File</button>
|
||||
<button type="button" onclick="bbbCheckTestSocketConnection('192.168.0.249', 9123)">Test Deskshare conn</button>
|
||||
</div>
|
||||
<div id="webcamview" style="background-color:#FFD700;height:215px;width:138px;float:left;">
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540002" width="215" height="138" id="MicrophoneCheck" name="MicrophoneCheck" align="middle">
|
||||
<param name="movie" value="http://192.168.0.249/client/MicrophoneCheck.swf?v=VERSION" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="allowfullscreen" value="true" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="wmode" value="window" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="http://192.168.0.249/client/MicrophoneCheck.swf?v=VERSION" width="215" height="138" align="middle">
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--<![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>
|
||||
</div>
|
||||
<div id="webcamview" style="background-color:#FFD700;height:215px;width:138px;float:left;">
|
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540002" width="215" height="138" id="RTMPConnCheck" name="RTMPConnCheck" align="middle">
|
||||
<param name="movie" value="http://192.168.0.249/client/RTMPConnCheck.swf?v=VERSION" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="allowfullscreen" value="true" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="wmode" value="window" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="http://192.168.0.249/client/RTMPConnCheck.swf?v=VERSION" width="215" height="138" align="middle">
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#869ca7" />
|
||||
<param name="allowScriptAccess" value="always" />
|
||||
<!--<![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>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,215 +0,0 @@
|
||||
(function(window, undefined) {
|
||||
|
||||
var BBBCheck = {};
|
||||
|
||||
/**
|
||||
* Internal function to get the BBB embed object. Seems like we have to do this
|
||||
* each time and can't create a var for it.
|
||||
*
|
||||
* To get the object, see https://code.google.com/p/swfobject/wiki/api
|
||||
*/
|
||||
function getSwfObj() {
|
||||
return swfobject.getObjectById("MicrophoneCheck");
|
||||
}
|
||||
|
||||
function getConnObj() {
|
||||
return swfobject.getObjectById("RTMPConnCheck");
|
||||
}
|
||||
|
||||
BBBCheck.getFlashPlayerVersion = function() {
|
||||
return swfobject.getFlashPlayerVersion();
|
||||
}
|
||||
|
||||
BBBCheck.hasMinFlashPlayerVersion = function(flashVersion) {
|
||||
return swfobject.hasFlashPlayerVersion(flashVersion);
|
||||
}
|
||||
|
||||
BBBCheck.getBrowser = function() {
|
||||
return deployJava.getBrowser();
|
||||
}
|
||||
|
||||
BBBCheck.getJREs = function() {
|
||||
return deployJava.getJREs();
|
||||
}
|
||||
|
||||
BBBCheck.installJRE = function(version) {
|
||||
deployJava.installJRE(version);
|
||||
}
|
||||
|
||||
BBBCheck.installLatestJRE = function() {
|
||||
deployJava.installLatestJRE();
|
||||
}
|
||||
|
||||
BBBCheck.runApplet = function(attributes, parameters, minimumVersion) {
|
||||
deployJava.runApplet(attributes, parameters, minimumVersion);
|
||||
}
|
||||
|
||||
BBBCheck.runApplet = function(attributes, parameters, minimumVersion) {
|
||||
deployJava.runApplet(attributes, parameters, minimumVersion);
|
||||
}
|
||||
|
||||
BBBCheck.showCamSettings = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.showCamSettings();
|
||||
}
|
||||
}
|
||||
|
||||
BBBCheck.showMicSettings = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.showMicSettings();
|
||||
}
|
||||
}
|
||||
|
||||
BBBCheck.startTestMicrophone = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.startTestMicrophone();
|
||||
}
|
||||
}
|
||||
|
||||
BBBCheck.stopTestMicrophone = function() {
|
||||
var swfObj = getSwfObj();
|
||||
if (swfObj) {
|
||||
swfObj.stopTestMicrophone();
|
||||
}
|
||||
}
|
||||
|
||||
BBBCheck.testRTMPConnection = function(host, app) {
|
||||
var swfObj = getConnObj();
|
||||
if (swfObj) {
|
||||
swfObj.testRTMPConnection(host, app);
|
||||
}
|
||||
}
|
||||
|
||||
BBBCheck.testSocketConnection = function(host, port) {
|
||||
var swfObj = getConnObj();
|
||||
if (swfObj) {
|
||||
swfObj.testSocketConnection(host, port);
|
||||
}
|
||||
}
|
||||
|
||||
BBBCheck.setSocketPolicyFileURL = function(url) {
|
||||
var swfObj = getConnObj();
|
||||
if (swfObj) {
|
||||
swfObj.setPolicyFileURL(url);
|
||||
}
|
||||
}
|
||||
|
||||
/*** Callbacks from Flash test apps **/
|
||||
BBBCheck.microphoneCheckAppReady = function() {
|
||||
console.log("microphone check app ready.");
|
||||
broadcast("MicCheckAppReadyEvent");
|
||||
}
|
||||
|
||||
BBBCheck.noAvailableMicrophoneError = function() {
|
||||
console.log("no available microphone");
|
||||
}
|
||||
|
||||
BBBCheck.microphoneAccessDenied = function() {
|
||||
console.log("Mic access has been denied.");
|
||||
}
|
||||
|
||||
BBBCheck.microphoneAccessAllowed = function() {
|
||||
console.log("Mic access has been allowed.");
|
||||
}
|
||||
|
||||
BBBCheck.camAccessDenied = function() {
|
||||
console.log("Cam access has been denied.");
|
||||
}
|
||||
|
||||
BBBCheck.camAccessAllowed = function() {
|
||||
console.log("Cam access has been allowed.");
|
||||
}
|
||||
|
||||
BBBCheck.invalidParamsForRtmpConnectionTest = function() {
|
||||
console.log("Invalid host or app for rtmp connection test.");
|
||||
}
|
||||
|
||||
BBBCheck.rtmpConnectionTestSuccess = function(rtmp, server, application) {
|
||||
console.log("Connection succeeded using rtmp[" + rtmp + "]");
|
||||
}
|
||||
|
||||
BBBCheck.rtmpConnectionTestFailed = function(host, app) {
|
||||
console.log("Failed to connect to [" + host + "][" + app + "]");
|
||||
}
|
||||
|
||||
BBBCheck.socketConnTestFailed = function(host, port) {
|
||||
console.log("Failed to connect to [" + host + "][" + port + "]");
|
||||
}
|
||||
|
||||
BBBCheck.socketConnTestClosed = function(host, port) {
|
||||
console.log("Connection closed to [" + host + "][" + port + "]");
|
||||
}
|
||||
|
||||
BBBCheck.socketConnTestSuccess = function(host, port) {
|
||||
console.log("Connection success to [" + host + "][" + port + "]");
|
||||
}
|
||||
|
||||
BBBCheck.socketConnTestIOError = function(host, port) {
|
||||
console.log("Connection IO error to [" + host + "][" + port + "]");
|
||||
}
|
||||
|
||||
BBBCheck.socketConnTestSecurityError = function(host, port) {
|
||||
console.log("Connection security error to [" + host + "][" + port + "]");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ***********************************************************************************
|
||||
* Broadcasting of events to 3rd-party apps.
|
||||
*************************************************************************************/
|
||||
|
||||
/** Stores the 3rd-party app event listeners ***/
|
||||
var listeners = {};
|
||||
|
||||
/**
|
||||
* 3rd-party apps should user this method to register to listen for events.
|
||||
*/
|
||||
BBBCheck.listen = function(eventName, handler) {
|
||||
if (typeof listeners[eventName] === 'undefined')
|
||||
listeners[eventName] = [];
|
||||
|
||||
listeners[eventName].push(handler);
|
||||
};
|
||||
|
||||
/**
|
||||
* 3rd-party app should use this method to unregister listener for a given event.
|
||||
*/
|
||||
BBBCheck.unlisten = function(eventName, handler) {
|
||||
if (!listeners[eventName])
|
||||
return;
|
||||
|
||||
for (var i = 0; i < listeners[eventName].length; i++) {
|
||||
if (listeners[eventName][i] === handler) {
|
||||
listeners.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Private function to broadcast received event from the BigBlueButton Flash client to
|
||||
* 3rd-parties.
|
||||
*/
|
||||
function broadcast(eventName, params) {
|
||||
if (!listeners[eventName]) {
|
||||
console.log("No listeners for [" + eventName + "]");
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < listeners[eventName].length; i++) {
|
||||
console.log("Notifying listeners for [" + eventName + "]");
|
||||
if (params == null) {
|
||||
listeners[eventName][i]();
|
||||
} else {
|
||||
listeners[eventName][i](params);
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
window.BBBCheck = BBBCheck;
|
||||
})(this);
|
||||
|
@ -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();
|
@ -1,55 +0,0 @@
|
||||
var registerListeners = function() {
|
||||
console.log("Listening for events.");
|
||||
BBBCheck.listen("MicCheckAppReadyEvent", function() {
|
||||
console.log("Received [MicCheckAppReadyEvent].");
|
||||
});
|
||||
BBBCheck.listen("NewRoleEvent", function(bbbCheckEvent) {
|
||||
console.log("New Role Event [amIPresenter=" + bbbCheckEvent.amIPresenter + ",role=" + bbbCheckEvent.role + ",newPresenterUserID=" + bbbCheckEvent.newPresenterUserID + "].");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
var bbbCheckFlashVersion = function() {
|
||||
var playerVersion = BBBCheck.getFlashPlayerVersion();
|
||||
console.log("You have Flash player " + playerVersion.major + "." + playerVersion.minor + "." + playerVersion.release + " installed");
|
||||
}
|
||||
|
||||
var bbbHasMinFlashVersion = function(version) {
|
||||
console.log("Q: Do I have Flash player 9.0.18 or higher installed?\nA: " + BBBCheck.hasMinFlashPlayerVersion(version));
|
||||
}
|
||||
|
||||
var bbbGetBrowser = function() {
|
||||
console.log("Browser = " + BBBCheck.getBrowser());
|
||||
}
|
||||
|
||||
var bbbGetJREs = function() {
|
||||
console.log("JREs = " + BBBCheck.getJREs());
|
||||
}
|
||||
|
||||
var bbbCheckShowMicSettings = function() {
|
||||
BBBCheck.showMicSettings();
|
||||
}
|
||||
|
||||
var bbbCheckStartTestMic = function() {
|
||||
BBBCheck.startTestMicrophone();
|
||||
}
|
||||
|
||||
var bbbCheckStopTestMic = function() {
|
||||
BBBCheck.stopTestMicrophone();
|
||||
}
|
||||
|
||||
var bbbCheckShowCamSettings = function() {
|
||||
BBBCheck.showCamSettings();
|
||||
}
|
||||
|
||||
var bbbCheckTestRTMPConnection = function(host, app) {
|
||||
BBBCheck.testRTMPConnection(host, app);
|
||||
}
|
||||
|
||||
var bbbCheckTestSocketConnection = function(host, port) {
|
||||
BBBCheck.testSocketConnection(host, port);
|
||||
}
|
||||
|
||||
var bbbCheckSetSocketPolicyFileURL = function(url) {
|
||||
BBBCheck.setSocketPolicyFileURL(url);
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
// Backbone.js 0.9.2
|
||||
|
||||
// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
||||
// Backbone may be freely distributed under the MIT license.
|
||||
// For all details and documentation:
|
||||
// http://backbonejs.org
|
||||
(function(h,g){typeof exports!=="undefined"?g(h,exports,require("underscore")):typeof define==="function"&&define.amd?define(["underscore","jquery","exports"],function(f,i,p){h.Backbone=g(h,p,f,i)}):h.Backbone=g(h,{},h._,h.jQuery||h.Zepto||h.ender)})(this,function(h,g,f,i){var p=h.Backbone,y=Array.prototype.slice,z=Array.prototype.splice;g.VERSION="0.9.2";g.setDomLibrary=function(a){i=a};g.noConflict=function(){h.Backbone=p;return g};g.emulateHTTP=false;g.emulateJSON=false;var q=/\s+/,l=g.Events=
|
||||
{on:function(a,b,c){var d,e,f,g,j;if(!b)return this;a=a.split(q);for(d=this._callbacks||(this._callbacks={});e=a.shift();)f=(j=d[e])?j.tail:{},f.next=g={},f.context=c,f.callback=b,d[e]={tail:g,next:j?j.next:f};return this},off:function(a,b,c){var d,e,k,g,j,h;if(e=this._callbacks){if(!a&&!b&&!c)return delete this._callbacks,this;for(a=a?a.split(q):f.keys(e);d=a.shift();)if(k=e[d],delete e[d],k&&(b||c))for(g=k.tail;(k=k.next)!==g;)if(j=k.callback,h=k.context,b&&j!==b||c&&h!==c)this.on(d,j,h);return this}},
|
||||
trigger:function(a){var b,c,d,e,f,g;if(!(d=this._callbacks))return this;f=d.all;a=a.split(q);for(g=y.call(arguments,1);b=a.shift();){if(c=d[b])for(e=c.tail;(c=c.next)!==e;)c.callback.apply(c.context||this,g);if(c=f){e=c.tail;for(b=[b].concat(g);(c=c.next)!==e;)c.callback.apply(c.context||this,b)}}return this}};l.bind=l.on;l.unbind=l.off;var o=g.Model=function(a,b){var c;a||(a={});b&&b.parse&&(a=this.parse(a));if(c=n(this,"defaults"))a=f.extend({},c,a);if(b&&b.collection)this.collection=b.collection;
|
||||
this.attributes={};this._escapedAttributes={};this.cid=f.uniqueId("c");this.changed={};this._silent={};this._pending={};this.set(a,{silent:true});this.changed={};this._silent={};this._pending={};this._previousAttributes=f.clone(this.attributes);this.initialize.apply(this,arguments)};f.extend(o.prototype,l,{changed:null,_silent:null,_pending:null,idAttribute:"id",initialize:function(){},toJSON:function(){return f.clone(this.attributes)},get:function(a){return this.attributes[a]},escape:function(a){var b;
|
||||
if(b=this._escapedAttributes[a])return b;b=this.get(a);return this._escapedAttributes[a]=f.escape(b==null?"":""+b)},has:function(a){return this.get(a)!=null},set:function(a,b,c){var d,e;f.isObject(a)||a==null?(d=a,c=b):(d={},d[a]=b);c||(c={});if(!d)return this;if(d instanceof o)d=d.attributes;if(c.unset)for(e in d)d[e]=void 0;if(!this._validate(d,c))return false;if(this.idAttribute in d)this.id=d[this.idAttribute];var b=c.changes={},g=this.attributes,h=this._escapedAttributes,j=this._previousAttributes||
|
||||
{};for(e in d){a=d[e];if(!f.isEqual(g[e],a)||c.unset&&f.has(g,e))delete h[e],(c.silent?this._silent:b)[e]=true;c.unset?delete g[e]:g[e]=a;!f.isEqual(j[e],a)||f.has(g,e)!=f.has(j,e)?(this.changed[e]=a,c.silent||(this._pending[e]=true)):(delete this.changed[e],delete this._pending[e])}c.silent||this.change(c);return this},unset:function(a,b){(b||(b={})).unset=true;return this.set(a,null,b)},clear:function(a){(a||(a={})).unset=true;return this.set(f.clone(this.attributes),a)},fetch:function(a){var a=
|
||||
a?f.clone(a):{},b=this,c=a.success;a.success=function(d,e,f){if(!b.set(b.parse(d,f),a))return false;c&&c(b,d)};a.error=g.wrapError(a.error,b,a);return(this.sync||g.sync).call(this,"read",this,a)},save:function(a,b,c){var d,e;f.isObject(a)||a==null?(d=a,c=b):(d={},d[a]=b);c=c?f.clone(c):{};if(c.wait){if(!this._validate(d,c))return false;e=f.clone(this.attributes)}a=f.extend({},c,{silent:true});if(d&&!this.set(d,c.wait?a:c))return false;var k=this,h=c.success;c.success=function(a,b,e){b=k.parse(a,e);
|
||||
c.wait&&(delete c.wait,b=f.extend(d||{},b));if(!k.set(b,c))return false;h?h(k,a):k.trigger("sync",k,a,c)};c.error=g.wrapError(c.error,k,c);b=this.isNew()?"create":"update";b=(this.sync||g.sync).call(this,b,this,c);c.wait&&this.set(e,a);return b},destroy:function(a){var a=a?f.clone(a):{},b=this,c=a.success,d=function(){b.trigger("destroy",b,b.collection,a)};if(this.isNew())return d(),false;a.success=function(e){a.wait&&d();c?c(b,e):b.trigger("sync",b,e,a)};a.error=g.wrapError(a.error,b,a);var e=(this.sync||
|
||||
g.sync).call(this,"delete",this,a);a.wait||d();return e},url:function(){var a=n(this,"urlRoot")||n(this.collection,"url")||t();return this.isNew()?a:a+(a.charAt(a.length-1)=="/"?"":"/")+encodeURIComponent(this.id)},parse:function(a){return a},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return this.id==null},change:function(a){a||(a={});var b=this._changing;this._changing=true;for(var c in this._silent)this._pending[c]=true;var d=f.extend({},a.changes,this._silent);
|
||||
this._silent={};for(c in d)this.trigger("change:"+c,this,this.get(c),a);if(b)return this;for(;!f.isEmpty(this._pending);){this._pending={};this.trigger("change",this,a);for(c in this.changed)!this._pending[c]&&!this._silent[c]&&delete this.changed[c];this._previousAttributes=f.clone(this.attributes)}this._changing=false;return this},hasChanged:function(a){return!arguments.length?!f.isEmpty(this.changed):f.has(this.changed,a)},changedAttributes:function(a){if(!a)return this.hasChanged()?f.clone(this.changed):
|
||||
false;var b,c=false,d=this._previousAttributes,e;for(e in a)if(!f.isEqual(d[e],b=a[e]))(c||(c={}))[e]=b;return c},previous:function(a){return!arguments.length||!this._previousAttributes?null:this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},isValid:function(){return!this.validate(this.attributes)},_validate:function(a,b){if(b.silent||!this.validate)return true;var a=f.extend({},this.attributes,a),c=this.validate(a,b);if(!c)return true;b&&b.error?
|
||||
b.error(this,c,b):this.trigger("error",this,c,b);return false}});var r=g.Collection=function(a,b){b||(b={});if(b.model)this.model=b.model;if(b.comparator)this.comparator=b.comparator;this._reset();this.initialize.apply(this,arguments);a&&this.reset(a,{silent:true,parse:b.parse})};f.extend(r.prototype,l,{model:o,initialize:function(){},toJSON:function(a){return this.map(function(b){return b.toJSON(a)})},add:function(a,b){var c,d,e,g,h,j={},i={},l=[];b||(b={});a=f.isArray(a)?a.slice():[a];for(c=0,d=
|
||||
a.length;c<d;c++){if(!(e=a[c]=this._prepareModel(a[c],b)))throw Error("Can't add an invalid model to a collection");g=e.cid;h=e.id;j[g]||this._byCid[g]||h!=null&&(i[h]||this._byId[h])?l.push(c):j[g]=i[h]=e}for(c=l.length;c--;)a.splice(l[c],1);for(c=0,d=a.length;c<d;c++)(e=a[c]).on("all",this._onModelEvent,this),this._byCid[e.cid]=e,e.id!=null&&(this._byId[e.id]=e);this.length+=d;z.apply(this.models,[b.at!=null?b.at:this.models.length,0].concat(a));this.comparator&&this.sort({silent:true});if(b.silent)return this;
|
||||
for(c=0,d=this.models.length;c<d;c++)if(j[(e=this.models[c]).cid])b.index=c,e.trigger("add",e,this,b);return this},remove:function(a,b){var c,d,e,g;b||(b={});a=f.isArray(a)?a.slice():[a];for(c=0,d=a.length;c<d;c++)if(g=this.getByCid(a[c])||this.get(a[c])){delete this._byId[g.id];delete this._byCid[g.cid];e=this.indexOf(g);this.models.splice(e,1);this.length--;if(!b.silent)b.index=e,g.trigger("remove",g,this,b);this._removeReference(g)}return this},push:function(a,b){a=this._prepareModel(a,b);this.add(a,
|
||||
b);return a},pop:function(a){var b=this.at(this.length-1);this.remove(b,a);return b},unshift:function(a,b){a=this._prepareModel(a,b);this.add(a,f.extend({at:0},b));return a},shift:function(a){var b=this.at(0);this.remove(b,a);return b},get:function(a){return a==null?void 0:this._byId[a.id!=null?a.id:a]},getByCid:function(a){return a&&this._byCid[a.cid||a]},at:function(a){return this.models[a]},where:function(a){return f.isEmpty(a)?[]:this.filter(function(b){for(var c in a)if(a[c]!==b.get(c))return false;
|
||||
return true})},sort:function(a){a||(a={});if(!this.comparator)throw Error("Cannot sort a set without a comparator");var b=f.bind(this.comparator,this);this.comparator.length==1?this.models=this.sortBy(b):this.models.sort(b);a.silent||this.trigger("reset",this,a);return this},pluck:function(a){return f.map(this.models,function(b){return b.get(a)})},reset:function(a,b){a||(a=[]);b||(b={});for(var c=0,d=this.models.length;c<d;c++)this._removeReference(this.models[c]);this._reset();this.add(a,f.extend({silent:true},
|
||||
b));b.silent||this.trigger("reset",this,b);return this},fetch:function(a){a=a?f.clone(a):{};if(a.parse===void 0)a.parse=true;var b=this,c=a.success;a.success=function(d,e,f){b[a.add?"add":"reset"](b.parse(d,f),a);c&&c(b,d)};a.error=g.wrapError(a.error,b,a);return(this.sync||g.sync).call(this,"read",this,a)},create:function(a,b){var c=this,b=b?f.clone(b):{},a=this._prepareModel(a,b);if(!a)return false;b.wait||c.add(a,b);var d=b.success;b.success=function(e,f){b.wait&&c.add(e,b);d?d(e,f):e.trigger("sync",
|
||||
a,f,b)};a.save(null,b);return a},parse:function(a){return a},chain:function(){return f(this.models).chain()},_reset:function(){this.length=0;this.models=[];this._byId={};this._byCid={}},_prepareModel:function(a,b){b||(b={});if(a instanceof o){if(!a.collection)a.collection=this}else{var c;b.collection=this;a=new this.model(a,b);a._validate(a.attributes,b)||(a=false)}return a},_removeReference:function(a){this==a.collection&&delete a.collection;a.off("all",this._onModelEvent,this)},_onModelEvent:function(a,
|
||||
b,c,d){(a=="add"||a=="remove")&&c!=this||(a=="destroy"&&this.remove(b,d),b&&a==="change:"+b.idAttribute&&(delete this._byId[b.previous(b.idAttribute)],this._byId[b.id]=b),this.trigger.apply(this,arguments))}});f.each("forEach,each,map,reduce,reduceRight,find,detect,filter,select,reject,every,all,some,any,include,contains,invoke,max,min,sortBy,sortedIndex,toArray,size,first,initial,rest,last,without,indexOf,shuffle,lastIndexOf,isEmpty,groupBy".split(","),function(a){r.prototype[a]=function(){return f[a].apply(f,
|
||||
[this.models].concat(f.toArray(arguments)))}});var u=g.Router=function(a){a||(a={});if(a.routes)this.routes=a.routes;this._bindRoutes();this.initialize.apply(this,arguments)},A=/:\w+/g,B=/\*\w+/g,C=/[-[\]{}()+?.,\\^$|#\s]/g;f.extend(u.prototype,l,{initialize:function(){},route:function(a,b,c){g.history||(g.history=new m);f.isRegExp(a)||(a=this._routeToRegExp(a));c||(c=this[b]);g.history.route(a,f.bind(function(d){d=this._extractParameters(a,d);c&&c.apply(this,d);this.trigger.apply(this,["route:"+
|
||||
b].concat(d));g.history.trigger("route",this,b,d)},this));return this},navigate:function(a,b){g.history.navigate(a,b)},_bindRoutes:function(){if(this.routes){var a=[],b;for(b in this.routes)a.unshift([b,this.routes[b]]);b=0;for(var c=a.length;b<c;b++)this.route(a[b][0],a[b][1],this[a[b][1]])}},_routeToRegExp:function(a){a=a.replace(C,"\\$&").replace(A,"([^/]+)").replace(B,"(.*?)");return RegExp("^"+a+"$")},_extractParameters:function(a,b){return a.exec(b).slice(1)}});var m=g.History=function(){this.handlers=
|
||||
[];f.bindAll(this,"checkUrl")},s=/^[#\/]/,D=/msie [\w.]+/;m.started=false;f.extend(m.prototype,l,{interval:50,getHash:function(a){return(a=(a?a.location:window.location).href.match(/#(.*)$/))?a[1]:""},getFragment:function(a,b){if(a==null)if(this._hasPushState||b){var a=window.location.pathname,c=window.location.search;c&&(a+=c)}else a=this.getHash();a.indexOf(this.options.root)||(a=a.substr(this.options.root.length));return a.replace(s,"")},start:function(a){if(m.started)throw Error("Backbone.history has already been started");
|
||||
m.started=true;this.options=f.extend({},{root:"/"},this.options,a);this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!(!this.options.pushState||!window.history||!window.history.pushState);var a=this.getFragment(),b=document.documentMode;if(b=D.exec(navigator.userAgent.toLowerCase())&&(!b||b<=7))this.iframe=i('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(a);if(this._hasPushState)i(window).bind("popstate",
|
||||
this.checkUrl);else if(this._wantsHashChange&&"onhashchange"in window&&!b)i(window).bind("hashchange",this.checkUrl);else if(this._wantsHashChange)this._checkUrlInterval=setInterval(this.checkUrl,this.interval);this.fragment=a;a=window.location;b=a.pathname==this.options.root;if(this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!b)return this.fragment=this.getFragment(null,true),window.location.replace(this.options.root+"#"+this.fragment),true;else if(this._wantsPushState&&this._hasPushState&&
|
||||
b&&a.hash)this.fragment=this.getHash().replace(s,""),window.history.replaceState({},document.title,a.protocol+"//"+a.host+this.options.root+this.fragment);if(!this.options.silent)return this.loadUrl()},stop:function(){i(window).unbind("popstate",this.checkUrl).unbind("hashchange",this.checkUrl);clearInterval(this._checkUrlInterval);m.started=false},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();a==this.fragment&&this.iframe&&(a=this.getFragment(this.getHash(this.iframe)));
|
||||
if(a==this.fragment)return false;this.iframe&&this.navigate(a);this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(a){var b=this.fragment=this.getFragment(a);return f.any(this.handlers,function(a){if(a.route.test(b))return a.callback(b),true})},navigate:function(a,b){if(!m.started)return false;if(!b||b===true)b={trigger:b};var c=(a||"").replace(s,"");if(this.fragment!=c)this._hasPushState?(c.indexOf(this.options.root)!=0&&(c=this.options.root+c),this.fragment=c,window.history[b.replace?
|
||||
"replaceState":"pushState"]({},document.title,c)):this._wantsHashChange?(this.fragment=c,this._updateHash(window.location,c,b.replace),this.iframe&&c!=this.getFragment(this.getHash(this.iframe))&&(b.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,c,b.replace))):window.location.assign(this.options.root+a),b.trigger&&this.loadUrl(a)},_updateHash:function(a,b,c){c?a.replace(a.toString().replace(/(javascript:|#).*$/,"")+"#"+b):a.hash=b}});var v=g.View=function(a){this.cid=
|
||||
f.uniqueId("view");this._configure(a||{});this._ensureElement();this.initialize.apply(this,arguments);this.delegateEvents()},E=/^(\S+)\s*(.*)$/,w="model,collection,el,id,attributes,className,tagName".split(",");f.extend(v.prototype,l,{tagName:"div",$:function(a){return this.$el.find(a)},initialize:function(){},render:function(){return this},remove:function(){this.$el.remove();return this},make:function(a,b,c){a=document.createElement(a);b&&i(a).attr(b);c!=null&&i(a).html(c);return a},setElement:function(a,
|
||||
b){this.$el&&this.undelegateEvents();this.$el=a instanceof i?a:i(a);this.el=this.$el[0];b!==false&&this.delegateEvents();return this},delegateEvents:function(a){if(a||(a=n(this,"events"))){this.undelegateEvents();for(var b in a){var c=a[b];f.isFunction(c)||(c=this[a[b]]);if(!c)throw Error('Method "'+a[b]+'" does not exist');var d=b.match(E),e=d[1],d=d[2],c=f.bind(c,this);e+=".delegateEvents"+this.cid;d===""?this.$el.bind(e,c):this.$el.delegate(d,e,c)}}},undelegateEvents:function(){this.$el.unbind(".delegateEvents"+
|
||||
this.cid)},_configure:function(a){this.options&&(a=f.extend({},this.options,a));for(var b=0,c=w.length;b<c;b++){var d=w[b];a[d]&&(this[d]=a[d])}this.options=a},_ensureElement:function(){if(this.el)this.setElement(this.el,false);else{var a=n(this,"attributes")||{};if(this.id)a.id=this.id;if(this.className)a["class"]=this.className;this.setElement(this.make(this.tagName,a),false)}}});o.extend=r.extend=u.extend=v.extend=function(a,b){var c=F(this,a,b);c.extend=this.extend;return c};var G={create:"POST",
|
||||
update:"PUT","delete":"DELETE",read:"GET"};g.sync=function(a,b,c){var d=G[a];c||(c={});var e={type:d,dataType:"json"};if(!c.url)e.url=n(b,"url")||t();if(!c.data&&b&&(a=="create"||a=="update"))e.contentType="application/json",e.data=JSON.stringify(b.toJSON());if(g.emulateJSON)e.contentType="application/x-www-form-urlencoded",e.data=e.data?{model:e.data}:{};if(g.emulateHTTP&&(d==="PUT"||d==="DELETE")){if(g.emulateJSON)e.data._method=d;e.type="POST";e.beforeSend=function(a){a.setRequestHeader("X-HTTP-Method-Override",
|
||||
d)}}if(e.type!=="GET"&&!g.emulateJSON)e.processData=false;return i.ajax(f.extend(e,c))};g.wrapError=function(a,b,c){return function(d,e){e=d===b?e:d;a?a(b,e,c):b.trigger("error",b,e,c)}};var x=function(){},F=function(a,b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){a.apply(this,arguments)};f.extend(d,a);x.prototype=a.prototype;d.prototype=new x;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},n=function(a,b){return!a||
|
||||
!a[b]?null:f.isFunction(a[b])?a[b]():a[b]},t=function(){throw Error('A "url" property or function must be specified');};return g});
|
@ -1,34 +0,0 @@
|
||||
/*
|
||||
RequireJS 2.1.1 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
|
||||
Available via the MIT or new BSD license.
|
||||
see: http://github.com/jrburke/requirejs for details
|
||||
*/
|
||||
var requirejs,require,define;
|
||||
(function(W){function D(b){return M.call(b)==="[object Function]"}function E(b){return M.call(b)==="[object Array]"}function t(b,c){if(b){var d;for(d=0;d<b.length;d+=1)if(b[d]&&c(b[d],d,b))break}}function N(b,c){if(b){var d;for(d=b.length-1;d>-1;d-=1)if(b[d]&&c(b[d],d,b))break}}function A(b,c){for(var d in b)if(b.hasOwnProperty(d)&&c(b[d],d))break}function O(b,c,d,g){c&&A(c,function(c,j){if(d||!F.call(b,j))g&&typeof c!=="string"?(b[j]||(b[j]={}),O(b[j],c,d,g)):b[j]=c});return b}function r(b,c){return function(){return c.apply(b,
|
||||
arguments)}}function X(b){if(!b)return b;var c=W;t(b.split("."),function(b){c=c[b]});return c}function G(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;if(d)c.originalError=d;return c}function ba(){if(H&&H.readyState==="interactive")return H;N(document.getElementsByTagName("script"),function(b){if(b.readyState==="interactive")return H=b});return H}var g,s,u,y,q,B,H,I,Y,Z,ca=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,da=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
|
||||
$=/\.js$/,ea=/^\.\//;s=Object.prototype;var M=s.toString,F=s.hasOwnProperty,fa=Array.prototype.splice,v=!!(typeof window!=="undefined"&&navigator&&document),aa=!v&&typeof importScripts!=="undefined",ga=v&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/,R=typeof opera!=="undefined"&&opera.toString()==="[object Opera]",w={},n={},P=[],J=!1;if(typeof define==="undefined"){if(typeof requirejs!=="undefined"){if(D(requirejs))return;n=requirejs;requirejs=void 0}typeof require!=="undefined"&&
|
||||
!D(require)&&(n=require,require=void 0);g=requirejs=function(b,c,d,p){var i,j="_";!E(b)&&typeof b!=="string"&&(i=b,E(c)?(b=c,c=d,d=p):b=[]);if(i&&i.context)j=i.context;(p=w[j])||(p=w[j]=g.s.newContext(j));i&&p.configure(i);return p.require(b,c,d)};g.config=function(b){return g(b)};g.nextTick=typeof setTimeout!=="undefined"?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.1.1";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=v;s=g.s={contexts:w,newContext:function(b){function c(a,
|
||||
f,x){var e,m,b,c,d,h,i,g=f&&f.split("/");e=g;var j=k.map,l=j&&j["*"];if(a&&a.charAt(0)===".")if(f){e=k.pkgs[f]?g=[f]:g.slice(0,g.length-1);f=a=e.concat(a.split("/"));for(e=0;f[e];e+=1)if(m=f[e],m===".")f.splice(e,1),e-=1;else if(m==="..")if(e===1&&(f[2]===".."||f[0]===".."))break;else e>0&&(f.splice(e-1,2),e-=2);e=k.pkgs[f=a[0]];a=a.join("/");e&&a===f+"/"+e.main&&(a=f)}else a.indexOf("./")===0&&(a=a.substring(2));if(x&&(g||l)&&j){f=a.split("/");for(e=f.length;e>0;e-=1){b=f.slice(0,e).join("/");if(g)for(m=
|
||||
g.length;m>0;m-=1)if(x=j[g.slice(0,m).join("/")])if(x=x[b]){c=x;d=e;break}if(c)break;!h&&l&&l[b]&&(h=l[b],i=e)}!c&&h&&(c=h,d=i);c&&(f.splice(0,d,c),a=f.join("/"))}return a}function d(a){v&&t(document.getElementsByTagName("script"),function(f){if(f.getAttribute("data-requiremodule")===a&&f.getAttribute("data-requirecontext")===h.contextName)return f.parentNode.removeChild(f),!0})}function p(a){var f=k.paths[a];if(f&&E(f)&&f.length>1)return d(a),f.shift(),h.require.undef(a),h.require([a]),!0}function i(a){var f,
|
||||
b=a?a.indexOf("!"):-1;b>-1&&(f=a.substring(0,b),a=a.substring(b+1,a.length));return[f,a]}function j(a,f,b,e){var m,K,d=null,g=f?f.name:null,j=a,l=!0,k="";a||(l=!1,a="_@r"+(M+=1));a=i(a);d=a[0];a=a[1];d&&(d=c(d,g,e),K=o[d]);a&&(d?k=K&&K.normalize?K.normalize(a,function(a){return c(a,g,e)}):c(a,g,e):(k=c(a,g,e),a=i(k),d=a[0],k=a[1],b=!0,m=h.nameToUrl(k)));b=d&&!K&&!b?"_unnormalized"+(N+=1):"";return{prefix:d,name:k,parentMap:f,unnormalized:!!b,url:m,originalName:j,isDefine:l,id:(d?d+"!"+k:k)+b}}function n(a){var f=
|
||||
a.id,b=l[f];b||(b=l[f]=new h.Module(a));return b}function q(a,f,b){var e=a.id,m=l[e];if(F.call(o,e)&&(!m||m.defineEmitComplete))f==="defined"&&b(o[e]);else n(a).on(f,b)}function z(a,f){var b=a.requireModules,e=!1;if(f)f(a);else if(t(b,function(f){if(f=l[f])f.error=a,f.events.error&&(e=!0,f.emit("error",a))}),!e)g.onError(a)}function s(){P.length&&(fa.apply(C,[C.length-1,0].concat(P)),P=[])}function u(a,f,b){var e=a.map.id;a.error?a.emit("error",a.error):(f[e]=!0,t(a.depMaps,function(e,c){var d=e.id,
|
||||
g=l[d];g&&!a.depMatched[c]&&!b[d]&&(f[d]?(a.defineDep(c,o[d]),a.check()):u(g,f,b))}),b[e]=!0)}function w(){var a,f,b,e,m=(b=k.waitSeconds*1E3)&&h.startTime+b<(new Date).getTime(),c=[],g=[],i=!1,j=!0;if(!S){S=!0;A(l,function(b){a=b.map;f=a.id;if(b.enabled&&(a.isDefine||g.push(b),!b.error))if(!b.inited&&m)p(f)?i=e=!0:(c.push(f),d(f));else if(!b.inited&&b.fetched&&a.isDefine&&(i=!0,!a.prefix))return j=!1});if(m&&c.length)return b=G("timeout","Load timeout for modules: "+c,null,c),b.contextName=h.contextName,
|
||||
z(b);j&&t(g,function(a){u(a,{},{})});if((!m||e)&&i)if((v||aa)&&!T)T=setTimeout(function(){T=0;w()},50);S=!1}}function y(a){n(j(a[0],null,!0)).init(a[1],a[2])}function B(a){var a=a.currentTarget||a.srcElement,b=h.onScriptLoad;a.detachEvent&&!R?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=h.onScriptError;a.detachEvent&&!R||a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function I(){var a;for(s();C.length;)if(a=C.shift(),a[0]===
|
||||
null)return z(G("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));else y(a)}var S,U,h,L,T,k={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{},shim:{},map:{},config:{}},l={},V={},C=[],o={},Q={},M=1,N=1;L={require:function(a){return a.require?a.require:a.require=h.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?a.exports:a.exports=o[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return k.config&&
|
||||
k.config[a.map.id]||{}},exports:o[a.map.id]}}};U=function(a){this.events=V[a.id]||{};this.map=a;this.shim=k.shim[a.id];this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};U.prototype={init:function(a,b,c,e){e=e||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=r(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=e.ignore;e.enabled||this.enabled?this.enable():this.check()}},
|
||||
defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;h.startTime=(new Date).getTime();var a=this.map;if(this.shim)h.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],r(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=this.map.url;Q[a]||(Q[a]=!0,h.load(this.map.id,a))},check:function(){if(this.enabled&&
|
||||
!this.enabling){var a,b,c=this.map.id;b=this.depExports;var e=this.exports,m=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(this.depCount<1&&!this.defined){if(D(m)){if(this.events.error)try{e=h.execCb(c,m,b,e)}catch(d){a=d}else e=h.execCb(c,m,b,e);if(this.map.isDefine)if((b=this.module)&&b.exports!==void 0&&b.exports!==this.exports)e=b.exports;else if(e===void 0&&this.usingExports)e=this.exports;if(a)return a.requireMap=this.map,
|
||||
a.requireModules=[this.map.id],a.requireType="define",z(this.error=a)}else e=m;this.exports=e;if(this.map.isDefine&&!this.ignore&&(o[c]=e,g.onResourceLoad))g.onResourceLoad(h,this.map,this.depMaps);delete l[c];this.defined=!0}this.defining=!1;if(this.defined&&!this.defineEmitted)this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=j(a.prefix);this.depMaps.push(d);q(d,"defined",r(this,function(e){var m,
|
||||
d;d=this.map.name;var x=this.map.parentMap?this.map.parentMap.name:null,i=h.makeRequire(a.parentMap,{enableBuildCallback:!0,skipMap:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,x,!0)})||""),e=j(a.prefix+"!"+d,this.map.parentMap),q(e,"defined",r(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=l[e.id]){this.depMaps.push(e);if(this.events.error)d.on("error",r(this,function(a){this.emit("error",a)}));d.enable()}}else m=r(this,
|
||||
function(a){this.init([],function(){return a},null,{enabled:!0})}),m.error=r(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];A(l,function(a){a.map.id.indexOf(b+"_unnormalized")===0&&delete l[a.map.id]});z(a)}),m.fromText=r(this,function(b,e){var f=a.name,c=j(f),d=J;e&&(b=e);d&&(J=!1);n(c);try{g.exec(b)}catch(x){throw Error("fromText eval for "+f+" failed: "+x);}d&&(J=!0);this.depMaps.push(c);h.completeLoad(f);i([f],m)}),e.load(a.name,i,m,k)}));h.enable(d,this);this.pluginMaps[d.id]=
|
||||
d},enable:function(){this.enabling=this.enabled=!0;t(this.depMaps,r(this,function(a,b){var c,e;if(typeof a==="string"){a=j(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=L[a.id]){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",r(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&q(a,"error",this.errback)}c=a.id;e=l[c];!L[c]&&e&&!e.enabled&&h.enable(a,this)}));A(this.pluginMaps,r(this,function(a){var b=l[a.id];b&&!b.enabled&&
|
||||
h.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){t(this.events[a],function(a){a(b)});a==="error"&&delete this.events[a]}};h={config:k,contextName:b,registry:l,defined:o,urlFetched:Q,defQueue:C,Module:U,makeModuleMap:j,nextTick:g.nextTick,configure:function(a){a.baseUrl&&a.baseUrl.charAt(a.baseUrl.length-1)!=="/"&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};A(a,function(a,b){e[b]?
|
||||
b==="map"?O(k[b],a,!0,!0):O(k[b],a,!0):k[b]=a});if(a.shim)A(a.shim,function(a,b){E(a)&&(a={deps:a});if(a.exports&&!a.exportsFn)a.exportsFn=h.makeShimExports(a);c[b]=a}),k.shim=c;if(a.packages)t(a.packages,function(a){a=typeof a==="string"?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||"main").replace(ea,"").replace($,"")}}),k.pkgs=b;A(l,function(a,b){if(!a.inited&&!a.map.unnormalized)a.map=j(b)});if(a.deps||a.callback)h.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;
|
||||
a.init&&(b=a.init.apply(W,arguments));return b||X(a.exports)}},makeRequire:function(a,f){function d(e,c,i){var k,p;if(f.enableBuildCallback&&c&&D(c))c.__requireJsBuild=!0;if(typeof e==="string"){if(D(c))return z(G("requireargs","Invalid require call"),i);if(a&&L[e])return L[e](l[a.id]);if(g.get)return g.get(h,e,a);k=j(e,a,!1,!0);k=k.id;return!F.call(o,k)?z(G("notloaded",'Module name "'+k+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):o[k]}I();h.nextTick(function(){I();p=
|
||||
n(j(null,a));p.skipMap=f.skipMap;p.init(e,c,i,{enabled:!0});w()});return d}f=f||{};O(d,{isBrowser:v,toUrl:function(b){var d=b.lastIndexOf("."),f=null;d!==-1&&(f=b.substring(d,b.length),b=b.substring(0,d));return h.nameToUrl(c(b,a&&a.id,!0),f)},defined:function(b){b=j(b,a,!1,!0).id;return F.call(o,b)},specified:function(b){b=j(b,a,!1,!0).id;return F.call(o,b)||F.call(l,b)}});if(!a)d.undef=function(b){s();var c=j(b,a,!0),d=l[b];delete o[b];delete Q[c.url];delete V[b];if(d){if(d.events.defined)V[b]=
|
||||
d.events;delete l[b]}};return d},enable:function(a){l[a.id]&&n(a).enable()},completeLoad:function(a){var b,c,d=k.shim[a]||{},g=d.exports;for(s();C.length;){c=C.shift();if(c[0]===null){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);y(c)}c=l[a];if(!b&&!o[a]&&c&&!c.inited)if(k.enforceDefine&&(!g||!X(g)))if(p(a))return;else return z(G("nodefine","No define call for "+a,null,[a]));else y([a,d.deps||[],d.exportsFn]);w()},nameToUrl:function(a,b){var c,d,i,h,j,l;if(g.jsExtRegExp.test(a))h=a+(b||"");else{c=
|
||||
k.paths;d=k.pkgs;h=a.split("/");for(j=h.length;j>0;j-=1)if(l=h.slice(0,j).join("/"),i=d[l],l=c[l]){E(l)&&(l=l[0]);h.splice(0,j,l);break}else if(i){c=a===i.name?i.location+"/"+i.main:i.location;h.splice(0,j,c);break}h=h.join("/");h+=b||(/\?/.test(h)?"":".js");h=(h.charAt(0)==="/"||h.match(/^[\w\+\.\-]+:/)?"":k.baseUrl)+h}return k.urlArgs?h+((h.indexOf("?")===-1?"?":"&")+k.urlArgs):h},load:function(a,b){g.load(h,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if(a.type===
|
||||
"load"||ga.test((a.currentTarget||a.srcElement).readyState))H=null,a=B(a),h.completeLoad(a.id)},onScriptError:function(a){var b=B(a);if(!p(b.id))return z(G("scripterror","Script error",a,[b.id]))}};h.require=h.makeRequire();return h}};g({});t(["toUrl","undef","defined","specified"],function(b){g[b]=function(){var c=w._;return c.require[b].apply(c,arguments)}});if(v&&(u=s.head=document.getElementsByTagName("head")[0],y=document.getElementsByTagName("base")[0]))u=s.head=y.parentNode;g.onError=function(b){throw b;
|
||||
};g.load=function(b,c,d){var g=b&&b.config||{},i;if(v)return i=g.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script"),i.type=g.scriptType||"text/javascript",i.charset="utf-8",i.async=!0,i.setAttribute("data-requirecontext",b.contextName),i.setAttribute("data-requiremodule",c),i.attachEvent&&!(i.attachEvent.toString&&i.attachEvent.toString().indexOf("[native code")<0)&&!R?(J=!0,i.attachEvent("onreadystatechange",b.onScriptLoad)):(i.addEventListener("load",
|
||||
b.onScriptLoad,!1),i.addEventListener("error",b.onScriptError,!1)),i.src=d,I=i,y?u.insertBefore(i,y):u.appendChild(i),I=null,i;else aa&&(importScripts(d),b.completeLoad(c))};v&&N(document.getElementsByTagName("script"),function(b){if(!u)u=b.parentNode;if(q=b.getAttribute("data-main")){if(!n.baseUrl)B=q.split("/"),Y=B.pop(),Z=B.length?B.join("/")+"/":"./",n.baseUrl=Z,q=Y;q=q.replace($,"");n.deps=n.deps?n.deps.concat(q):[q];return!0}});define=function(b,c,d){var g,i;typeof b!=="string"&&(d=c,c=b,b=
|
||||
null);E(c)||(d=c,c=[]);!c.length&&D(d)&&d.length&&(d.toString().replace(ca,"").replace(da,function(b,d){c.push(d)}),c=(d.length===1?["require"]:["require","exports","module"]).concat(c));if(J&&(g=I||ba()))b||(b=g.getAttribute("data-requiremodule")),i=w[g.getAttribute("data-requirecontext")];(i?i.defQueue:P).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(n)}})(this);
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,99 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
|
||||
implements="org.bigbluebutton.common.IBigBlueButtonModule"
|
||||
creationComplete="init()" xmlns:mate="http://mate.asfusion.com/">
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import com.asfusion.mate.events.Dispatcher;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.managers.PopUpManager;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.main.events.SettingsEvent;
|
||||
import org.bigbluebutton.modules.settings.SettingsPanel;
|
||||
import org.bigbluebutton.modules.settings.util.PersistUserPreferences;
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
|
||||
private var _moduleName:String = "Settings Module";
|
||||
private var _attributes:Object;
|
||||
|
||||
private var globalDispatcher:Dispatcher;
|
||||
|
||||
private function init():void{
|
||||
LogUtil.debug("SettingsModule::init");
|
||||
}
|
||||
|
||||
public function get moduleName():String {
|
||||
return _moduleName;
|
||||
}
|
||||
|
||||
public function get uri():String {
|
||||
return _attributes.uri + "/" + _attributes.room;
|
||||
}
|
||||
|
||||
public function get username():String {
|
||||
return _attributes.username;
|
||||
}
|
||||
|
||||
public function get userid():Number {
|
||||
return _attributes.userid as Number;
|
||||
}
|
||||
|
||||
public function get role():String {
|
||||
return _attributes.userrole as String;
|
||||
}
|
||||
|
||||
public function start(attributes:Object):void {
|
||||
_attributes = attributes;
|
||||
globalDispatcher = new Dispatcher();
|
||||
Requirements.setRequirements(attributes);
|
||||
|
||||
globalDispatcher.dispatchEvent(new SettingsEvent(SettingsEvent.SETTINGS_MODULE_LOADED));
|
||||
|
||||
var sharedObject:SharedObject = SharedObject.getLocal("bbbUserProperties", "/");
|
||||
var firstTime:Boolean = sharedObject.data["previouslyvisited"] as Boolean;
|
||||
if (!firstTime) openSettingsPanel();
|
||||
|
||||
}
|
||||
|
||||
public function stop():void {
|
||||
}
|
||||
|
||||
private function openSettingsPanel(e:SettingsEvent = null):void{
|
||||
var settingsPanel:SettingsPanel = SettingsPanel(PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, SettingsPanel, true));
|
||||
|
||||
var point1:Point = new Point();
|
||||
// Calculate position of TitleWindow in Application's coordinates.
|
||||
settingsPanel.x = 0;
|
||||
settingsPanel.y = 0;
|
||||
// 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();
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<mate:Listener type="{SettingsEvent.OPEN_SETTINGS_PANEL}" method="openSettingsPanel" />
|
||||
</mx:Module>
|
4
bigbluebutton-client/src/org/bigbluebutton/core/model/Config.as
Normal file → Executable file
4
bigbluebutton-client/src/org/bigbluebutton/core/model/Config.as
Normal file → Executable file
@ -83,6 +83,10 @@ package org.bigbluebutton.core.model
|
||||
a.url = config.skinning.@url;
|
||||
return a
|
||||
}
|
||||
|
||||
public function get browserVersions():XML {
|
||||
return new XML(config.browserVersions.toXMLString());
|
||||
}
|
||||
|
||||
public function get layout():XML {
|
||||
return new XML(config.layout.toXMLString());
|
||||
|
@ -1,37 +1,40 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.uihelpers
|
||||
{
|
||||
import flash.events.Event;
|
||||
|
||||
public class WarningEvent extends Event
|
||||
{
|
||||
public static const WARNING_EVENT:String = "BBB_CHECKER_WARNING";
|
||||
|
||||
public var warningLabel:String;
|
||||
public var warningText:String;
|
||||
public var optionalCommandText:String;
|
||||
public var optionalCallbackFunction:Function;
|
||||
|
||||
public function WarningEvent(type:String)
|
||||
{
|
||||
super(type, true, false);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.bigbluebutton.main.events
|
||||
{
|
||||
import flash.events.Event;
|
||||
|
||||
public class ClientStatusEvent extends Event
|
||||
{
|
||||
public static const SUCCESS_MESSAGE_EVENT:String = "SUCCESS_MESSAGE_EVENT";
|
||||
public static const WARNING_MESSAGE_EVENT:String = "WARNING_MESSAGE_EVENT";
|
||||
public static const FAIL_MESSAGE_EVENT:String = "FAIL_MESSAGE_EVENT";
|
||||
|
||||
public var title:String;
|
||||
public var message:String;
|
||||
|
||||
public function ClientStatusEvent(type:String, title:String, message:String)
|
||||
{
|
||||
super(type);
|
||||
this.title = title;
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
}
|
21
bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
Normal file → Executable file
21
bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
Normal file → Executable file
@ -132,25 +132,7 @@ package org.bigbluebutton.main.model.users
|
||||
_conferenceParameters.internalUserID
|
||||
); //_netConnection.call
|
||||
}
|
||||
|
||||
private function joinMeeting():void {
|
||||
sendMessage(
|
||||
"joinMeeting",// Remote function name
|
||||
// result - On successful result
|
||||
function(result:Object):void {
|
||||
trace(LOG + "joining meeting for [" + _conferenceParameters.internalUserID + "]");
|
||||
},
|
||||
// status - On error occurred
|
||||
function(status:Object):void {
|
||||
LogUtil.error(LOG + "Error occurred:");
|
||||
for (var x:Object in status) {
|
||||
LogUtil.error(x + " : " + status[x]);
|
||||
}
|
||||
},
|
||||
_conferenceParameters.internalUserID
|
||||
); //_netConnection.call
|
||||
}
|
||||
|
||||
|
||||
private function handleValidateAuthTokenReply(msg: Object):void {
|
||||
trace(LOG + "*** handleValidateAuthTokenReply " + msg.msg + " **** \n");
|
||||
var map:Object = JSON.parse(msg.msg);
|
||||
@ -160,7 +142,6 @@ package org.bigbluebutton.main.model.users
|
||||
if (tokenValid) {
|
||||
authenticated = true;
|
||||
trace(LOG + "*** handleValidateAuthTokenReply. valid=[ " + tokenValid + "] **** \n");
|
||||
joinMeeting();
|
||||
} else {
|
||||
trace(LOG + "*** handleValidateAuthTokenReply. valid=[ " + tokenValid + "] **** \n");
|
||||
dispatcher.dispatchEvent(new InvalidAuthTokenEvent());
|
||||
|
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
verticalScrollPolicy="off" horizontalScrollPolicy="off" verticalAlign="middle">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
override public function set data(value:Object):void {
|
||||
super.data = value;
|
||||
|
||||
if (value == null) return;
|
||||
|
||||
switch (value.type) {
|
||||
case "success":
|
||||
typeImg.source = typeImg.getStyle("successImage");
|
||||
break;
|
||||
case "warning":
|
||||
typeImg.source = typeImg.getStyle("warningImage");
|
||||
break;
|
||||
case "fail":
|
||||
typeImg.source = typeImg.getStyle("failImage");
|
||||
break
|
||||
}
|
||||
titleLbl.text = value.title;
|
||||
messageTxt.text = value.message;
|
||||
|
||||
validateNow();
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
<mx:Image id="typeImg" width="34" height="34" styleName="statusImageStyle" />
|
||||
<mx:VBox width="100%" verticalGap="0">
|
||||
<mx:Label id="titleLbl" width="100%" styleName="statusTitleStyle"/>
|
||||
<mx:Text id="messageTxt" width="100%" styleName="statusMessageStyle"/>
|
||||
</mx:VBox>
|
||||
</mx:HBox>
|
@ -1,44 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="300"
|
||||
paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
public function addWarning(e:WarningEvent):void{
|
||||
//Remove the No Issues label if an issue comes in.
|
||||
if (lblNoIssues.visible){
|
||||
//here i'm just using visible as a flag so I don't have to create another local variable.
|
||||
lblNoIssues.visible = false;
|
||||
this.removeChild(lblNoIssues);
|
||||
}
|
||||
var warningItem:WarningItem = new WarningItem();
|
||||
this.addChild(warningItem);
|
||||
warningItem.setWarning(e);
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<mx:Label text="Possible Issues:" />
|
||||
<mx:Label id="lblNoIssues" text="{ResourceUtil.getInstance().getString('bbb.settings.noissues')}" />
|
||||
</mx:VBox>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
xmlns:chat="org.bigbluebutton.modules.chat.views.*"
|
||||
width="500" height="400"
|
||||
title="{ResourceUtil.getInstance().getString('bbb.clientstatus.title')}"
|
||||
horizontalAlign="center">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
public function setMessages(messages:Array):void {
|
||||
messageList.dataProvider = messages;
|
||||
}
|
||||
|
||||
private function handleCloseButtonClick():void {
|
||||
PopUpManager.removePopUp(this);
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
<chat:AdvancedList id="messageList" width="100%" height="100%" dragEnabled="false" variableRowHeight="true" wordWrap="true" alternatingItemColors="[#EFEFEF, #FEFEFE]" itemRenderer="org.bigbluebutton.main.views.ClientStatusItemRenderer"/>
|
||||
<mx:Button label="Close" click="handleCloseButtonClick();" />
|
||||
</mx:TitleWindow>
|
@ -31,60 +31,66 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.controls.Alert;
|
||||
import mx.controls.Alert;
|
||||
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.main.events.ModuleLoadEvent;
|
||||
import org.bigbluebutton.main.events.PortTestEvent;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
import org.bigbluebutton.common.LogUtil;
|
||||
import org.bigbluebutton.main.events.ModuleLoadEvent;
|
||||
import org.bigbluebutton.main.events.PortTestEvent;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private var modules:Dictionary = new Dictionary();
|
||||
private var numModules:int = 0;
|
||||
private var portUpdateStr:String = 'Connecting to the server';
|
||||
private function moduleLoadingStarted(e:ModuleLoadEvent):void{
|
||||
var list:XMLList = e.modules;
|
||||
var item:XML;
|
||||
for each(item in list){
|
||||
modules[item.@name] = 0;
|
||||
numModules++;
|
||||
}
|
||||
this.label = ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.loading', [numModules]);
|
||||
}
|
||||
private var modules:Dictionary = new Dictionary();
|
||||
private var numModules:int = 0;
|
||||
private var portUpdateStr:String = 'Connecting to the server';
|
||||
|
||||
private function moduleLoadingStarted(e:ModuleLoadEvent):void{
|
||||
var list:XMLList = e.modules;
|
||||
var item:XML;
|
||||
|
||||
numModules = 0;
|
||||
trace("LoadingBar.mxml numModules=[" + numModules + "]");
|
||||
for each(item in list){
|
||||
modules[item.@name] = 0;
|
||||
numModules++;
|
||||
trace("LoadingBar.mxml numModules=[" + numModules + "] modulename=[" + item.@name + "]");
|
||||
}
|
||||
|
||||
this.label = ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.loading', [numModules]);
|
||||
}
|
||||
|
||||
private function moduleLoadProgress(e:ModuleLoadEvent):void{
|
||||
modules[e.moduleName] = e.progress;
|
||||
updateProgress();
|
||||
}
|
||||
private function moduleLoadProgress(e:ModuleLoadEvent):void{
|
||||
modules[e.moduleName] = e.progress;
|
||||
updateProgress();
|
||||
}
|
||||
|
||||
private function updateProgress():void{
|
||||
var totalProgress:Number = 0;
|
||||
for (var key:Object in modules) {
|
||||
var progress:Number = modules[key] as Number;
|
||||
totalProgress += progress;
|
||||
}
|
||||
//LogUtil.debug("Progress: " + totalProgress);
|
||||
this.setProgress(totalProgress/numModules, 100);
|
||||
}
|
||||
private function updateProgress():void{
|
||||
var totalProgress:Number = 0;
|
||||
for (var key:Object in modules) {
|
||||
var progress:Number = modules[key] as Number;
|
||||
totalProgress += progress;
|
||||
}
|
||||
//LogUtil.debug("Progress: " + totalProgress);
|
||||
this.setProgress(totalProgress/numModules, 100);
|
||||
}
|
||||
|
||||
private function allModulesLoaded(e:ModuleLoadEvent):void{
|
||||
parent.removeChild(this);
|
||||
}
|
||||
private function allModulesLoaded(e:ModuleLoadEvent):void{
|
||||
parent.removeChild(this);
|
||||
}
|
||||
|
||||
private function testRTMP(e:PortTestEvent):void{
|
||||
//- Cannot get locale string this early in loading process
|
||||
portUpdateStr += "."
|
||||
this.label = portUpdateStr; //ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.connecting');
|
||||
}
|
||||
private function testRTMP(e:PortTestEvent):void{
|
||||
//- Cannot get locale string this early in loading process
|
||||
portUpdateStr += "."
|
||||
this.label = portUpdateStr; //ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.connecting');
|
||||
}
|
||||
|
||||
private function testRTMPupdate(e:PortTestEvent):void{
|
||||
//- Cannot get locale string this early in loading process
|
||||
portUpdateStr += "...";
|
||||
this.label = portUpdateStr; //ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.connecting');
|
||||
}
|
||||
private function testRTMPupdate(e:PortTestEvent):void{
|
||||
//- Cannot get locale string this early in loading process
|
||||
portUpdateStr += "...";
|
||||
this.label = portUpdateStr; //ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.connecting');
|
||||
}
|
||||
|
||||
private function tunnelingFailed(e:PortTestEvent):void{
|
||||
this.label = ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.cannotConnectServer');
|
||||
}
|
||||
private function tunnelingFailed(e:PortTestEvent):void{
|
||||
this.label = ResourceUtil.getInstance().getString('bbb.mainshell.statusProgress.cannotConnectServer');
|
||||
}
|
||||
|
||||
|
||||
]]>
|
||||
|
@ -91,6 +91,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
import org.bigbluebutton.core.vo.LockSettingsVO;
|
||||
import org.bigbluebutton.main.events.AppVersionEvent;
|
||||
import org.bigbluebutton.main.events.BBBEvent;
|
||||
import org.bigbluebutton.main.events.ClientStatusEvent;
|
||||
import org.bigbluebutton.main.events.ConfigEvent;
|
||||
import org.bigbluebutton.main.events.InvalidAuthTokenEvent;
|
||||
import org.bigbluebutton.main.events.LogoutEvent;
|
||||
@ -299,8 +300,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
}
|
||||
|
||||
private function handleOpenWindowEvent(event:OpenWindowEvent):void {
|
||||
isTunneling = BBB.initConnectionManager().isTunnelling;
|
||||
var window:IBbbModuleWindow = event.window;
|
||||
// this is a terrible place for these checks because this function runs 4 times on startup
|
||||
if (BBB.initConnectionManager().isTunnelling) {
|
||||
isTunneling = true;
|
||||
globalDispatcher.dispatchEvent(new ClientStatusEvent(ClientStatusEvent.WARNING_MESSAGE_EVENT, ResourceUtil.getInstance().getString("bbb.clientstatus.tunneling.title"), ResourceUtil.getInstance().getString("bbb.clientstatus.tunneling.message")));
|
||||
}
|
||||
versionCheck();
|
||||
|
||||
var window:IBbbModuleWindow = event.window;
|
||||
mdiCanvas.addWindow(window);
|
||||
}
|
||||
|
||||
@ -309,6 +316,49 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
mdiCanvas.removeWindow(window);
|
||||
}
|
||||
|
||||
private function versionCheck():void {
|
||||
var xml:XML = BBB.initConfigManager().config.browserVersions;
|
||||
if (xml.@chrome != undefined && xml.@firefox != undefined && xml.@flash != undefined) {
|
||||
//find browser version
|
||||
var browserVersion:Array = ExternalInterface.call("determineBrowser");
|
||||
//check browser version
|
||||
if ((browserVersion[0].toString().toLowerCase() == "chrome" && browserVersion[1] < xml.@chrome) || browserVersion[0].toString().toLowerCase() == "firefox" && browserVersion[1] < xml.@firefox) {
|
||||
globalDispatcher.dispatchEvent(new ClientStatusEvent(ClientStatusEvent.WARNING_MESSAGE_EVENT,
|
||||
ResourceUtil.getInstance().getString("bbb.clientstatus.browser.title"),
|
||||
ResourceUtil.getInstance().getString("bbb.clientstatus.browser.message", [browserVersion[0]+" "+browserVersion[1]])));
|
||||
}
|
||||
|
||||
//find flash version
|
||||
var flashVersion:Object = getFlashVersion();
|
||||
//check flash version
|
||||
if ((flashVersion.os == 'LNX' && browserVersion[0].toString().toLowerCase() != "chrome" && flashVersion.major < 11) ||
|
||||
((flashVersion.os != 'LNX' || browserVersion[0].toString().toLowerCase() == "chrome") && flashVersion.major < xml.@flash)) {
|
||||
globalDispatcher.dispatchEvent(new ClientStatusEvent(ClientStatusEvent.WARNING_MESSAGE_EVENT,
|
||||
ResourceUtil.getInstance().getString("bbb.clientstatus.flash.title"),
|
||||
ResourceUtil.getInstance().getString("bbb.clientstatus.flash.message", [flashVersion.major+"."+flashVersion.minor+"."+flashVersion.build])));
|
||||
}
|
||||
}
|
||||
|
||||
//Alert.show(LOG + "version check- os: "+flashVersion.os+" major:"+flashVersion.major+" minor:"+flashVersion.minor+" build:"+flashVersion.build+" browser:"+browserVersion[0]+" version:"+browserVersion[1]);
|
||||
|
||||
//find java version
|
||||
//check flash version
|
||||
}
|
||||
|
||||
//function found here, http://www.mediacollege.com/adobe/flash/actionscript/3/player-version.html
|
||||
private function getFlashVersion():Object {
|
||||
var flashVersion:Object = new Object();
|
||||
var versionNumber:String = Capabilities.version;// Get the whole version string
|
||||
var versionArray:Array = versionNumber.split(",");// Split it up
|
||||
var osPlusVersion:Array = versionArray[0].split(" ");// The main version contains the OS (e.g. WIN), so we split that off as well.
|
||||
// Populate the version object (the OS is a string, others are numbers):
|
||||
flashVersion["os"] = osPlusVersion[0];
|
||||
flashVersion["major"] = parseInt(osPlusVersion[1]);
|
||||
flashVersion["minor"] = parseInt(versionArray[1]);
|
||||
flashVersion["build"] = parseInt(versionArray[2]);
|
||||
return flashVersion;
|
||||
}
|
||||
|
||||
private function resetLayout():void{
|
||||
mdiCanvas.resetWindowLayout();
|
||||
}
|
||||
@ -627,6 +677,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
id="isTunnellingLbl"
|
||||
visible="{isTunneling}"
|
||||
includeInLayout="{isTunneling}" />
|
||||
<views:WarningButton id="warningBtn"
|
||||
width="23"
|
||||
height="20"/>
|
||||
<views:LanguageSelector id="langSelector"
|
||||
visible="false"
|
||||
height="20"
|
||||
|
105
bigbluebutton-client/src/org/bigbluebutton/main/views/WarningButton.mxml
Executable file
105
bigbluebutton-client/src/org/bigbluebutton/main/views/WarningButton.mxml
Executable file
@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
styleName="warningButtonStyle"
|
||||
toolTip="{ResourceUtil.getInstance().getString('bbb.clientstatus.title')}"
|
||||
click="handleButtonClick();"
|
||||
move="handleMove();">
|
||||
<mate:Listener type="{ClientStatusEvent.SUCCESS_MESSAGE_EVENT}" method="handleSuccessMessageEvent" />
|
||||
<mate:Listener type="{ClientStatusEvent.WARNING_MESSAGE_EVENT}" method="handleWarningMessageEvent" />
|
||||
<mate:Listener type="{ClientStatusEvent.FAIL_MESSAGE_EVENT}" method="handleFailMessageEvent" />
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.controls.ToolTip;
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.events.FlexEvent;
|
||||
import mx.managers.PopUpManager;
|
||||
import mx.managers.ToolTipManager;
|
||||
|
||||
import org.bigbluebutton.main.events.ClientStatusEvent;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private static const LOG:String = "WarningButton - ";
|
||||
|
||||
[Bindable]
|
||||
private var messages:Array = new Array();
|
||||
|
||||
private var notification:ToolTip;
|
||||
|
||||
private function handleSuccessMessageEvent(e:ClientStatusEvent):void {
|
||||
if(isUniqueMessage("success", e.title, e.message)) {
|
||||
messages.push({type:"success",title:e.title,message:e.message});
|
||||
showNotification();
|
||||
}
|
||||
}
|
||||
|
||||
private function handleWarningMessageEvent(e:ClientStatusEvent):void {
|
||||
if(isUniqueMessage("warning", e.title, e.message)) {
|
||||
messages.push({type:"warning",title:e.title,message:e.message});
|
||||
showNotification();
|
||||
}
|
||||
}
|
||||
|
||||
private function handleFailMessageEvent(e:ClientStatusEvent):void {
|
||||
if(isUniqueMessage("fail", e.title, e.message)) {
|
||||
messages.push({type:"fail",title:e.title,message:e.message});
|
||||
showNotification();
|
||||
}
|
||||
}
|
||||
|
||||
private function showNotification():void {
|
||||
if (!notification) {
|
||||
notification = ToolTipManager.createToolTip(ResourceUtil.getInstance().getString("bbb.clientstatus.notification"), 100, 100, "errorTipAbove", this) as ToolTip;
|
||||
handleMove();
|
||||
}
|
||||
}
|
||||
|
||||
private function isUniqueMessage(type:String, title:String, message:String):Boolean {
|
||||
for (var i:Number=0; i<messages.length; i++) {
|
||||
if (messages[i].type == type && messages[i].title == title && messages[i].message == message)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private function handleButtonClick():void {
|
||||
if (notification) {
|
||||
ToolTipManager.destroyToolTip(notification);
|
||||
notification = null;
|
||||
}
|
||||
|
||||
var clientStatusWindow:ClientStatusWindow = PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, ClientStatusWindow, true) as ClientStatusWindow;
|
||||
clientStatusWindow.setMessages(messages);
|
||||
PopUpManager.centerPopUp(clientStatusWindow);
|
||||
}
|
||||
|
||||
private function handleMove():void {
|
||||
if (notification) {
|
||||
var location:Point = localToGlobal(new Point(0,0));
|
||||
notification.move(location.x - notification.width/2 + this.width/2, location.y - notification.height);
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
</mx:Button>
|
@ -27,7 +27,7 @@ package org.bigbluebutton.modules.chat.model
|
||||
public var privateEnabled:Boolean = true;
|
||||
|
||||
[Bindable]
|
||||
public var fontSize:String = "10";
|
||||
public var fontSize:String = "12";
|
||||
|
||||
[Bindable]
|
||||
public var position:String = "top-right";
|
||||
|
@ -20,8 +20,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
|
||||
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" verticalAlign="top"
|
||||
verticalScrollPolicy="off" horizontalScrollPolicy="off"
|
||||
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
|
||||
verticalAlign="top" verticalGap="0" paddingTop="0" paddingBottom="0"
|
||||
verticalScrollPolicy="off" horizontalScrollPolicy="off"
|
||||
xmlns:common="org.bigbluebutton.common.*">
|
||||
|
||||
<mx:Script>
|
||||
|
@ -13,6 +13,7 @@ package org.bigbluebutton.modules.phone.managers
|
||||
|
||||
import org.bigbluebutton.core.UsersUtil;
|
||||
import org.bigbluebutton.main.api.JSAPI;
|
||||
import org.bigbluebutton.main.events.ClientStatusEvent;
|
||||
import org.bigbluebutton.modules.phone.PhoneModel;
|
||||
import org.bigbluebutton.modules.phone.PhoneOptions;
|
||||
import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
|
||||
@ -49,7 +50,14 @@ package org.bigbluebutton.modules.phone.managers
|
||||
browserType = browserInfo[0];
|
||||
browserVersion = browserInfo[1];
|
||||
}
|
||||
options = new PhoneOptions();
|
||||
options = new PhoneOptions();
|
||||
|
||||
// only show the warning if the admin has enabled WebRTC
|
||||
if (options.useWebRTCIfAvailable && !isWebRTCSupported()) {
|
||||
dispatcher.dispatchEvent(new ClientStatusEvent(ClientStatusEvent.WARNING_MESSAGE_EVENT,
|
||||
ResourceUtil.getInstance().getString("bbb.clientstatus.webrtc.title"),
|
||||
ResourceUtil.getInstance().getString("bbb.clientstatus.webrtc.message")));
|
||||
}
|
||||
}
|
||||
|
||||
private function isWebRTCSupported():Boolean {
|
||||
@ -79,17 +87,17 @@ package org.bigbluebutton.modules.phone.managers
|
||||
}
|
||||
|
||||
private function startWebRTCEchoTest():void {
|
||||
model.state = Constants.CALLING_INTO_ECHO_TEST;
|
||||
model.state = Constants.CALLING_INTO_ECHO_TEST;
|
||||
ExternalInterface.call("startWebRTCAudioTest");
|
||||
}
|
||||
|
||||
private function endEchoTest():void {
|
||||
ExternalInterface.call("stopWebRTCAudioTest");
|
||||
}
|
||||
|
||||
private function endEchoTestJoinConference():void {
|
||||
ExternalInterface.call("stopWebRTCAudioTestJoinConference");
|
||||
}
|
||||
|
||||
private function endEchoTestJoinConference():void {
|
||||
ExternalInterface.call("stopWebRTCAudioTestJoinConference");
|
||||
}
|
||||
|
||||
private function hangup():void {
|
||||
ExternalInterface.call("stopWebRTCAudioTest");
|
||||
@ -108,16 +116,16 @@ package org.bigbluebutton.modules.phone.managers
|
||||
dispatcher.dispatchEvent(new UseFlashModeCommand());
|
||||
}
|
||||
|
||||
private var t:Timer;
|
||||
|
||||
private var t:Timer;
|
||||
|
||||
public function handleWebRTCEchoTestHasAudioEvent():void {
|
||||
trace(LOG + "handleWebRTCEchoTestHasAudioEvent");
|
||||
model.state = Constants.STOP_ECHO_THEN_JOIN_CONF;
|
||||
endEchoTestJoinConference();
|
||||
endEchoTestJoinConference();
|
||||
}
|
||||
|
||||
public function handleWebRTCCallStartedEvent():void {
|
||||
trace(LOG + "setting state to IN_CONFERENCE");
|
||||
trace(LOG + "setting state to IN_CONFERENCE");
|
||||
model.state = Constants.IN_CONFERENCE;
|
||||
dispatcher.dispatchEvent(new WebRTCJoinedVoiceConferenceEvent());
|
||||
|
||||
@ -175,31 +183,33 @@ package org.bigbluebutton.modules.phone.managers
|
||||
public function handleWebRTCEchoTestFailedEvent(errorCode:Number):void {
|
||||
model.state = Constants.INITED;
|
||||
endEchoTest();
|
||||
var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError." + errorCode);
|
||||
if (!errorString) {
|
||||
errorString = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.unknown", [errorCode]);
|
||||
}
|
||||
|
||||
var alert:Alert = Alert.show(ResourceUtil.getInstance().getString("bbb.webrtcWarning.message", [errorString]), ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), Alert.YES | Alert.NO, null, handleCallFailedUserResponse, null, Alert.YES);
|
||||
var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError." + errorCode);
|
||||
if (!errorString) {
|
||||
errorString = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.unknown", [errorCode]);
|
||||
}
|
||||
|
||||
sendWebRTCAlert(ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), ResourceUtil.getInstance().getString("bbb.webrtcWarning.message", [errorString]), errorString);
|
||||
}
|
||||
|
||||
public function handleWebRTCEchoTestEndedUnexpectedly():void {
|
||||
model.state = Constants.INITED;
|
||||
var alert:Alert = Alert.show(ResourceUtil.getInstance().getString("bbb.webrtcWarning.endedunexpectedly"), ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), Alert.YES | Alert.NO, null, handleCallFailedUserResponse, null, Alert.YES);
|
||||
var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.endedunexpectedly");
|
||||
sendWebRTCAlert(ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), ResourceUtil.getInstance().getString("bbb.webrtcWarning.message", [errorString]), errorString);
|
||||
}
|
||||
|
||||
public function handleWebRTCCallFailedEvent(errorCode:Number):void {
|
||||
model.state = Constants.INITED;
|
||||
var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError." + errorCode);
|
||||
if (!errorString) {
|
||||
errorString = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.unknown", [errorCode]);
|
||||
}
|
||||
var alert:Alert = Alert.show(ResourceUtil.getInstance().getString("bbb.webrtcWarning.message", [errorString]), ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), Alert.YES | Alert.NO, null, handleCallFailedUserResponse, null, Alert.YES);
|
||||
var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError." + errorCode);
|
||||
if (!errorString) {
|
||||
errorString = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.unknown", [errorCode]);
|
||||
}
|
||||
sendWebRTCAlert(ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), ResourceUtil.getInstance().getString("bbb.webrtcWarning.message", [errorString]), errorString);
|
||||
}
|
||||
|
||||
public function handleWebRTCMediaFailedEvent():void {
|
||||
model.state = Constants.INITED;
|
||||
var alert:Alert = Alert.show(ResourceUtil.getInstance().getString("bbb.webrtcWarning.mediamessage"), ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), Alert.YES | Alert.NO, null, handleCallFailedUserResponse, null, Alert.YES);
|
||||
var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.mediamissing");
|
||||
sendWebRTCAlert(ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), ResourceUtil.getInstance().getString("bbb.webrtcWarning.message", [errorString]), errorString);
|
||||
}
|
||||
|
||||
private function handleCallFailedUserResponse(e:CloseEvent):void {
|
||||
@ -209,5 +219,10 @@ package org.bigbluebutton.modules.phone.managers
|
||||
dispatcher.dispatchEvent(new AudioSelectionWindowEvent(AudioSelectionWindowEvent.CLOSED_AUDIO_SELECTION));
|
||||
}
|
||||
}
|
||||
|
||||
private function sendWebRTCAlert(title:String, message:String, error:String):void {
|
||||
Alert.show(message, title, Alert.YES | Alert.NO, null, handleCallFailedUserResponse, null, Alert.YES);
|
||||
dispatcher.dispatchEvent(new ClientStatusEvent(ClientStatusEvent.FAIL_MESSAGE_EVENT, title, error));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,102 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="450" xmlns:checkers="checkers.*"
|
||||
creationComplete="init();" xmlns:uihelpers="uihelpers.*" xmlns:checkers1="org.bigbluebutton.modules.settings.checkers.*"
|
||||
xmlns:uihelpers1="org.bigbluebutton.modules.settings.uihelpers.*" showCloseButton="true" close="onSaveClose()">
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.managers.PopUpManager;
|
||||
import mx.rpc.events.HeaderEvent;
|
||||
|
||||
import org.bigbluebutton.modules.settings.uihelpers.JavaOKEvent;
|
||||
import org.bigbluebutton.modules.settings.uihelpers.WarningEvent;
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private var isJavaOk:Boolean = false;
|
||||
|
||||
private function init():void{
|
||||
requirementsLoaded();
|
||||
setText();
|
||||
startTest();
|
||||
}
|
||||
|
||||
private function setText():void{
|
||||
txtInstructions.text = ResourceUtil.getInstance().getString('bbb.settings.instructions');
|
||||
}
|
||||
|
||||
private function requirementsLoaded():void{
|
||||
webcamCheck.addEventListener(WarningEvent.WARNING_EVENT, onWarningEvent);
|
||||
micCheck.addEventListener(WarningEvent.WARNING_EVENT, onWarningEvent);
|
||||
systemCheck.addEventListener(WarningEvent.WARNING_EVENT, onWarningEvent);
|
||||
systemCheck.addEventListener(JavaOKEvent.JAVA_A_OK, onJavaOKEvent);
|
||||
|
||||
systemCheck.init();
|
||||
}
|
||||
|
||||
private function onWarningEvent(e:WarningEvent):void{
|
||||
warningsList.addWarning(e);
|
||||
}
|
||||
|
||||
private function onJavaOKEvent(e:JavaOKEvent):void{
|
||||
isJavaOk = true;
|
||||
}
|
||||
|
||||
private function startTest():void{
|
||||
webcamCheck.init();
|
||||
micCheck.init();
|
||||
|
||||
if (Requirements.check_deskshare == "true") checkDesktopSharing();
|
||||
|
||||
//btnStart.enabled = false;
|
||||
}
|
||||
|
||||
private function onSaveClose(e:Event = null):void{
|
||||
webcamCheck.stop();
|
||||
micCheck.stop();
|
||||
deskshareCheck.stop();
|
||||
//this.removeAllChildren();
|
||||
PopUpManager.removePopUp(this);
|
||||
}
|
||||
|
||||
private function checkDesktopSharing():void{
|
||||
//deskshareCheck.startTheApplet();
|
||||
|
||||
deskshareCheck.visible = true;
|
||||
//this.width = 955;
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
<mx:VBox x="338" y="10">
|
||||
<checkers1:WebcamChecker id="webcamCheck" />
|
||||
<checkers1:MicChecker id="micCheck" />
|
||||
</mx:VBox>
|
||||
<checkers1:SystemCheck id="systemCheck" width="52" height="11" x="10" y="494"/>
|
||||
<checkers1:DeskShareChecker id="deskshareCheck" x="540" y="20" visible="false" />
|
||||
<uihelpers1:WarningsList id="warningsList" x="10" y="201" width="300" height="195"/>
|
||||
<mx:Text x="10" y="10" width="300"
|
||||
id="txtInstructions" height="108" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10"
|
||||
selectable="false"/>
|
||||
<mx:Button id="btnSaveClose" label="Save Settings and Close" click="onSaveClose()" bottom="15" horizontalCenter="0" />
|
||||
|
||||
</mx:TitleWindow>
|
@ -1,157 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" creationComplete="onCreationComplete()" horizontalAlign="center" verticalAlign="middle">
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.core.UIComponent;
|
||||
|
||||
import org.bigbluebutton.modules.settings.connectors.DeskShareConnector;
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private var deskshareConnector:DeskShareConnector;
|
||||
private var ns:NetStream;
|
||||
private var video:Video;
|
||||
private var videoHolder:UIComponent;
|
||||
|
||||
private function onCreationComplete():void{
|
||||
deskshareConnector = new DeskShareConnector(appletStarted, startViewing, stopViewing);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call only if the Java check passed. Otherwise launching the applet definitely won't work.
|
||||
*/
|
||||
public function startTheApplet():void{
|
||||
ExternalInterface.call("startApplet", getCaptureServerUri(), deskshareConnector.room, true);
|
||||
this.removeAllChildren();
|
||||
}
|
||||
|
||||
private function appletStarted(videoWidth:Number, videoHeight:Number):void{
|
||||
startVideo(deskshareConnector.nc, deskshareConnector.room, videoWidth, videoHeight);
|
||||
}
|
||||
|
||||
private function startViewing(videoWidth:Number, videoHeight:Number):void{
|
||||
startVideo(deskshareConnector.nc, deskshareConnector.room, videoWidth, videoHeight);
|
||||
}
|
||||
|
||||
private function stopViewing():void{
|
||||
ns.close();
|
||||
}
|
||||
|
||||
private function startVideo(connection:NetConnection, stream:String, videoWidth:Number, videoHeight:Number):void{
|
||||
ns = new NetStream(connection);
|
||||
ns.addEventListener( NetStatusEvent.NET_STATUS, onNetStatus );
|
||||
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
|
||||
ns.client = this;
|
||||
ns.bufferTime = 0;
|
||||
ns.receiveVideo(true);
|
||||
ns.receiveAudio(false);
|
||||
video = new Video(videoWidth, videoHeight);
|
||||
video.attachNetStream(ns);
|
||||
|
||||
this.width = this.height * (videoWidth/videoHeight);
|
||||
|
||||
videoHolder = new UIComponent();
|
||||
calculateDisplayDimensions(video, videoHolder);
|
||||
videoHolder.addChild(video);
|
||||
//videoHolder.addChild(cursor);
|
||||
//videoHolder.addChild(cursorImg);
|
||||
centerVideo();
|
||||
ns.play(stream);
|
||||
this.addChild(videoHolder);
|
||||
}
|
||||
|
||||
private function onAsyncError(e:AsyncErrorEvent):void{
|
||||
trace("VIdeoWindow::asyncerror " + e.toString());
|
||||
}
|
||||
|
||||
private function onNetStatus(e:NetStatusEvent):void{
|
||||
switch(e.info.code){
|
||||
case "NetStream.Play.Start":
|
||||
trace("NetStream.Publish.Start for deskshare broadcast test stream ");
|
||||
trace("Dispatching start viewing event");
|
||||
deskshareConnector.sendStartedViewingNotification();
|
||||
break;
|
||||
case "NetStream.Play.UnpublishNotify":
|
||||
trace("NetStream.Play.UnpublishNotify for deskshare broadcast test stream ");
|
||||
stopViewing();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function centerVideo():void {
|
||||
videoHolder.x = this.width/2 - video.width/2;
|
||||
videoHolder.y = this.height/2 - video.height/2;
|
||||
}
|
||||
|
||||
private function calculateDisplayDimensions(video:Video, videoHolder:UIComponent):void {
|
||||
if (videoIsSmallerThanDisplay(video, videoHolder)) {
|
||||
videoHolder.width = video.width;
|
||||
videoHolder.height = video.height;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.width < this.height) {
|
||||
fitToWidthAndAdjustHeightToMaintainAspectRatio();
|
||||
} else {
|
||||
fitToHeightAndAdjustWidthToMaintainAspectRatio();
|
||||
}
|
||||
}
|
||||
|
||||
private function videoIsSmallerThanDisplay(video:Video, videoHolder:UIComponent):Boolean {
|
||||
return (video.height < this.height) && (video.width < this.width);
|
||||
}
|
||||
|
||||
private function fitToWidthAndAdjustHeightToMaintainAspectRatio():void {
|
||||
var aspectRatio:Number = video.height/video.width;
|
||||
video.width = this.width;
|
||||
videoHolder.width = this.height;
|
||||
// Maintain aspect-ratio
|
||||
video.height = this.width * aspectRatio;
|
||||
videoHolder.height = video.height;
|
||||
}
|
||||
|
||||
private function fitToHeightAndAdjustWidthToMaintainAspectRatio():void {
|
||||
var aspectRatio:Number = video.width/video.height;
|
||||
video.height = this.height;
|
||||
videoHolder.height = video.height;
|
||||
// Maintain aspect-ratio
|
||||
video.width = aspectRatio * this.height;
|
||||
videoHolder.width = video.width;
|
||||
}
|
||||
|
||||
public function getCaptureServerUri():String{
|
||||
var uri:String = Requirements.bbb_deskshare_url;
|
||||
uri = uri.split("/")[2];
|
||||
return uri;
|
||||
}
|
||||
|
||||
public function stop():void{
|
||||
if (ns != null) ns.close();
|
||||
ExternalInterface.call("stopApplet");
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<mx:Button id="btnStartDeskshare" click="startTheApplet()" label="{ResourceUtil.getInstance().getString('bbb.settings.deskshare.start')}" />
|
||||
<mx:Text width="200" textAlign="center" text="{ResourceUtil.getInstance().getString('bbb.settings.deskshare.instructions')}" id="txtInstructions" />
|
||||
</mx:VBox>
|
@ -1,83 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="180" height="250"
|
||||
paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10"
|
||||
horizontalAlign="center" visible="false" >
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import org.bigbluebutton.modules.settings.connectors.AudioConnector;
|
||||
import org.bigbluebutton.modules.settings.util.PersistUserPreferences;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private var timer:Timer;
|
||||
private var mic:Microphone;
|
||||
|
||||
private var audioConnector:AudioConnector;
|
||||
|
||||
public function init():void{
|
||||
this.visible = true;
|
||||
initMic();
|
||||
audioConnector = new AudioConnector(mic);
|
||||
|
||||
timer = new Timer(100);
|
||||
timer.addEventListener(TimerEvent.TIMER, updateMicLevel);
|
||||
timer.start();
|
||||
}
|
||||
|
||||
private function initMic():void{
|
||||
mic = Microphone.getMicrophone();
|
||||
if (mic == null) return;
|
||||
|
||||
sldVolume.value = mic.gain;
|
||||
}
|
||||
|
||||
public function saveCurrentMic():void{
|
||||
PersistUserPreferences.saveMicrophonePreference(Microphone.names[cmbMicSelector.selectedIndex]);
|
||||
}
|
||||
|
||||
private function updateMicLevel(e:TimerEvent):void{
|
||||
micLevel.setProgress(mic.activityLevel,100);
|
||||
}
|
||||
|
||||
private function changeMic():void{
|
||||
mic = Microphone.getMicrophone(cmbMicSelector.selectedIndex);
|
||||
if (mic == null) return;
|
||||
|
||||
saveCurrentMic();
|
||||
}
|
||||
|
||||
private function changeVolume():void{
|
||||
mic.gain = sldVolume.value;
|
||||
PersistUserPreferences.saveMicrophoneGain(mic.gain);
|
||||
}
|
||||
|
||||
public function stop():void{
|
||||
audioConnector.stop();
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<mx:ProgressBar id="micLevel" minimum="0" maximum="100" label="{ResourceUtil.getInstance().getString('bbb.settings.voice.volume')}" labelPlacement="top"
|
||||
direction="right" mode="manual" visible="true" width="120"/>
|
||||
<mx:HSlider id="sldVolume" minimum="0" maximum="100" change="changeVolume()" labels="[silent, loud]" />
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.settings.voice.volume')}" />
|
||||
<mx:ComboBox id="cmbMicSelector" dataProvider="{Microphone.names}" change="changeMic()" textAlign="left" width="150" />
|
||||
</mx:VBox>
|
@ -1,169 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" visible="false" >
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import flash.net.navigateToURL;
|
||||
|
||||
import mx.core.Application;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
import org.bigbluebutton.modules.settings.connectors.AppsConnector;
|
||||
import org.bigbluebutton.modules.settings.uihelpers.JavaOKEvent;
|
||||
import org.bigbluebutton.modules.settings.uihelpers.WarningEvent;
|
||||
import org.bigbluebutton.modules.settings.util.JavaCheck;
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
public function init():void{
|
||||
checkFlash();
|
||||
checkOS();
|
||||
checkJava();
|
||||
}
|
||||
|
||||
private function checkFlash():void{
|
||||
var flashVersion:String = Capabilities.version;
|
||||
|
||||
var flashVersions:Array = (Capabilities.version.split(" ")[1] as String).split(",");
|
||||
var flashRequired:Array = Requirements.flash_required_version.split(",");
|
||||
|
||||
trace("version is: " + flashVersions);
|
||||
trace("required is " + flashRequired);
|
||||
|
||||
for (var i:Number = 0; i< flashRequired.length; i++){
|
||||
if (Number(flashRequired[i]) > Number(flashVersions[i])) showFlashError(flashVersion, Requirements.flash_required_version);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function checkOS():void{
|
||||
trace("Operating System: " + Capabilities.os);
|
||||
var os:Array = Capabilities.os.split(" ");
|
||||
//Check for this bug: http://reviews.cnet.com/8301-13727_7-20022842-263.html
|
||||
//Fix is to download new flash player 10.2 or above
|
||||
if (os[0] == "Mac" && os[1] == "OS" && os[2] == "10.6.5"){
|
||||
showMacOS1065iSightError();
|
||||
}
|
||||
}
|
||||
|
||||
private function checkJava():void{
|
||||
var javas:Array = JavaCheck.getJREs();
|
||||
|
||||
if (javas.length == 0) showFlashError("NO JAVA INSTALLED", Requirements.java_required_version);
|
||||
|
||||
trace("Java version required is: " + Requirements.java_required_version);
|
||||
trace("Java versions installed: ");
|
||||
var highestJava:String = javas[0];
|
||||
for each (var java:String in javas){
|
||||
trace("Found java " + java);
|
||||
var highest:Array = highestJava.split(".");
|
||||
var iter:Array = java.split(".");
|
||||
|
||||
if (Number(iter[0]) > Number(highest[0])){
|
||||
highestJava = java;
|
||||
} else if (Number(iter[0]) == Number(highest[0]) && Number(iter[1]) > Number(highest[1])){
|
||||
highestJava = java;
|
||||
} else if (Number(iter[0]) == Number(highest[0]) && Number(iter[1]) == Number(highest[1])){
|
||||
var iterMinor:Number = Number((iter[2] as String).split("_")[1]);
|
||||
var highestMinor:Number = Number((highest[2] as String).split("_")[1]);
|
||||
if (iterMinor > highestMinor) highestJava = java;
|
||||
}
|
||||
}
|
||||
|
||||
var passedJava:Boolean = true;
|
||||
var required:Array = Requirements.java_required_version.split(".");
|
||||
highest = highestJava.split(".");
|
||||
if (Number(required[0]) > Number(highest[0])){
|
||||
passedJava = false;
|
||||
} else if (Number(required[0]) == Number(highest[0]) && Number(required[1]) > Number(highest[1])){
|
||||
passedJava = false;
|
||||
} else if (Number(required[0]) == Number(highest[0]) && Number(required[1]) == Number(highest[1])){
|
||||
var requiredMinor:Number = Number((required[2] as String).split("_")[1]);
|
||||
var highestJavaMinor:Number = Number((highest[2] as String).split("_")[1]);
|
||||
if (requiredMinor > highestJavaMinor) passedJava = false;
|
||||
}
|
||||
|
||||
if (!passedJava) showJavaError(highestJava, Requirements.java_required_version);
|
||||
else sendJavaOK();
|
||||
}
|
||||
|
||||
private function checkBBBApps():void{
|
||||
var appsConnector:AppsConnector = new AppsConnector();
|
||||
}
|
||||
|
||||
private function sendJavaOK():void{
|
||||
dispatchEvent(new JavaOKEvent(JavaOKEvent.JAVA_A_OK));
|
||||
}
|
||||
|
||||
private function showJavaError(hasVersion:String, needsVersion:String):void{
|
||||
var e:WarningEvent = new WarningEvent(WarningEvent.WARNING_EVENT);
|
||||
e.warningLabel = ResourceUtil.getInstance().getString('bbb.settings.java.label');
|
||||
e.warningText = javaError(hasVersion, needsVersion);
|
||||
e.optionalCommandText = ResourceUtil.getInstance().getString('bbb.settings.java.command');
|
||||
e.optionalCallbackFunction = installNewestJava;
|
||||
dispatchEvent(e);
|
||||
}
|
||||
|
||||
private function installNewestJava():void{
|
||||
JavaCheck.installLatestJRE();
|
||||
}
|
||||
|
||||
private function showFlashError(hasVersion:String, needsVersion:String):void{
|
||||
var e:WarningEvent = new WarningEvent(WarningEvent.WARNING_EVENT);
|
||||
e.warningLabel = ResourceUtil.getInstance().getString('bbb.settings.flash.label');
|
||||
e.warningText = flashError(hasVersion, needsVersion);
|
||||
e.optionalCommandText = ResourceUtil.getInstance().getString('bbb.settings.flash.command');
|
||||
e.optionalCallbackFunction = installNewestFlash;
|
||||
dispatchEvent(e);
|
||||
}
|
||||
|
||||
private function installNewestFlash():void{
|
||||
navigateToURL(new URLRequest("http://get.adobe.com/flashplayer/"), "_self");
|
||||
}
|
||||
|
||||
private function showMacOS1065iSightError():void{
|
||||
var e:WarningEvent = new WarningEvent(WarningEvent.WARNING_EVENT);
|
||||
e.warningLabel = ResourceUtil.getInstance().getString('bbb.settings.isight.label');
|
||||
e.warningText = iSightErrorOSX1065();
|
||||
e.optionalCommandText = ResourceUtil.getInstance().getString('bbb.settings.isight.command');
|
||||
e.optionalCallbackFunction = installFlash102RC2;
|
||||
dispatchEvent(e);
|
||||
}
|
||||
|
||||
private function installFlash102RC2():void{
|
||||
navigateToURL(new URLRequest("http://labs.adobe.com/downloads/flashplayer10.html"), "_self");
|
||||
}
|
||||
|
||||
private static function iSightErrorOSX1065():String{
|
||||
return ResourceUtil.getInstance().getString('bbb.settings.isight.text');
|
||||
}
|
||||
|
||||
private static function javaError(hasVersion:String, needsVersion:String):String{
|
||||
return ResourceUtil.getInstance().getString('bbb.settings.java.text', [hasVersion, needsVersion]);
|
||||
}
|
||||
|
||||
private static function flashError(hasVersion:String, needsVersion:String):String{
|
||||
return ResourceUtil.getInstance().getString('bbb.settings.flash.text', [hasVersion, needsVersion]);
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
</mx:VBox>
|
@ -1,191 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="180" height="180"
|
||||
paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10"
|
||||
visible="false">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.controls.Alert;
|
||||
import mx.core.Application;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
import org.bigbluebutton.modules.settings.connectors.VideoConnector;
|
||||
import org.bigbluebutton.modules.settings.uihelpers.WarningEvent;
|
||||
import org.bigbluebutton.modules.settings.util.PersistUserPreferences;
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
|
||||
private var video:Video;
|
||||
private var camera:Camera;
|
||||
|
||||
[Bindable] private var camWidth:Number = 160;
|
||||
[Bindable] private var camHeight:Number = 120;
|
||||
private var quality:Number = 0;
|
||||
|
||||
private var videoConnector:VideoConnector;
|
||||
private var ns:NetStream;
|
||||
|
||||
public function init():void{
|
||||
this.visible = true;
|
||||
this.videoConnector = new VideoConnector(onNetStatus);
|
||||
|
||||
checkIfNoCamera();
|
||||
var isMac:Boolean = checkIfMacCamera();
|
||||
if (isMac) checkIfGoogleTalkPluginInstalled();
|
||||
}
|
||||
|
||||
public function saveCurrentWebcam():void{
|
||||
PersistUserPreferences.saveWebcamPreference(Camera.names[cmbCameraSelector.selectedIndex]);
|
||||
}
|
||||
|
||||
private function checkIfNoCamera():void{
|
||||
if (Camera.names.length == 0 || Camera.names[0] == ""){
|
||||
var e:WarningEvent = new WarningEvent(WarningEvent.WARNING_EVENT);
|
||||
e.warningLabel = "No Camera Detected";
|
||||
e.warningText = "We did not detect a webcam connected to your system. If you do have a webcam connected, make sure it is installed and working " +
|
||||
"properly, and is not currently in use by another program.";
|
||||
dispatchEvent(e);
|
||||
}
|
||||
}
|
||||
|
||||
private function checkIfMacCamera():Boolean{
|
||||
for (var i:int = 0; i<Camera.names.length; i++){
|
||||
if (Camera.names[i] == "USB Video Class Video" || Camera.names[i] == "Built-in iSight") {
|
||||
/**
|
||||
* Set as default for Macs
|
||||
*/
|
||||
cmbCameraSelector.selectedIndex = i;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private function checkIfGoogleTalkPluginInstalled():void{
|
||||
for (var i:int = 0; i<Camera.names.length; i++){
|
||||
if (Camera.names[i] == "Google Camera Adapter 1" || Camera.names[i] == "Google Camera Adapter 0") {
|
||||
showGoogleAdapterError();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function showCamera():void{
|
||||
camera = Camera.getCamera(cmbCameraSelector.selectedIndex.toString());
|
||||
if (camera == null) return;
|
||||
|
||||
camera.setKeyFrameInterval(5);
|
||||
camera.setMode(camWidth,camHeight,15);
|
||||
camera.setQuality(0,quality);
|
||||
|
||||
//The following few lines will just show the camera locally captured. What we want to do is stream it
|
||||
/*video = new Video(camWidth, camHeight);
|
||||
//Next two lines may seem redundant but they're not. Do not delete. They force the video to proper width & height
|
||||
video.width = camWidth;
|
||||
video.height = camHeight;
|
||||
video.attachCamera(camera);
|
||||
videoHolder.addChild(video);*/
|
||||
|
||||
videoConnector.connectVideo(camera, onNetStatus);
|
||||
saveCurrentWebcam();
|
||||
|
||||
}
|
||||
|
||||
public function onNetStatus(e:NetStatusEvent):void{
|
||||
trace("WebcamChecker::onNetStatus - " + e.info.code);
|
||||
switch(e.info.code){
|
||||
case VideoConnector.CONNECT_SUCCESS:
|
||||
showCamera();
|
||||
break;
|
||||
case VideoConnector.NETSTREAM_PUBLISH:
|
||||
startVideo();
|
||||
break;
|
||||
case VideoConnector.CONNECT_FAILED:
|
||||
showConnectionError();
|
||||
break;
|
||||
case VideoConnector.CONNECT_REJECTED:
|
||||
//showConnectionError();
|
||||
break;
|
||||
case VideoConnector.CONNECT_CLOSED:
|
||||
showConnectionError();
|
||||
break
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function startVideo():void{
|
||||
ns = new NetStream(videoConnector.connection);
|
||||
ns.client = this;
|
||||
ns.bufferTime = 0;
|
||||
ns.receiveVideo(true);
|
||||
ns.receiveAudio(false);
|
||||
|
||||
video = new Video(camWidth, camHeight);
|
||||
video.width = camWidth;
|
||||
video.height = camHeight;
|
||||
video.attachNetStream(ns);
|
||||
videoHolder.addChild(video);
|
||||
ns.play(videoConnector.streamName);
|
||||
}
|
||||
|
||||
private function showGoogleAdapterError():void{
|
||||
var e:WarningEvent = new WarningEvent(WarningEvent.WARNING_EVENT);
|
||||
e.warningLabel = "Google Camera Adapter Error";
|
||||
e.warningText = googleAdapterError();
|
||||
dispatchEvent(e);
|
||||
}
|
||||
|
||||
private function showConnectionError():void{
|
||||
var e:WarningEvent = new WarningEvent(WarningEvent.WARNING_EVENT);
|
||||
e.warningLabel = "Connection Error";
|
||||
e.warningText = connectionError(Requirements.bbb_video_url);
|
||||
dispatchEvent(e);
|
||||
}
|
||||
|
||||
private static function googleAdapterError():String{
|
||||
return "It seems like you have Google Voice and Video plugin installed. " +
|
||||
"This plugin interferes with normal functioning of the Webcams on Macs with certain Flash versions. \n\n" +
|
||||
"To fix this problem: \n" +
|
||||
"- If you are using Google Chrome, try using Safari instead. \n" +
|
||||
"Or, you can uninstall the Google Voice and Video plugin. To do this: \n" +
|
||||
"- Go to /Library/Application Support/Google/ \n" +
|
||||
"- You will see 'GoogleVoiceAndVideoUninstaller.app'. \n" +
|
||||
"- Close all browser windows and then open this app.";
|
||||
}
|
||||
|
||||
private static function connectionError(serverUrl:String):String{
|
||||
return "The connection failed while trying to check video connectivity with the " +
|
||||
"server at " + serverUrl + ". Please contact your server administrator.";
|
||||
}
|
||||
|
||||
public function stop():void{
|
||||
if (ns != null) ns.close();
|
||||
}
|
||||
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<mx:UIComponent id="videoHolder" width="{camWidth}" height="{camHeight}" />
|
||||
<mx:HBox horizontalAlign="center" verticalAlign="middle" width="100%">
|
||||
<mx:ComboBox id="cmbCameraSelector" dataProvider="{Camera.names}" y="250" width="150"
|
||||
change="showCamera()" textAlign="left"/>
|
||||
</mx:HBox>
|
||||
</mx:VBox>
|
@ -1,27 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.connectors
|
||||
{
|
||||
public class AppsConnector
|
||||
{
|
||||
public function AppsConnector()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -1,142 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.connectors
|
||||
{
|
||||
import flash.events.AsyncErrorEvent;
|
||||
import flash.events.IOErrorEvent;
|
||||
import flash.events.NetStatusEvent;
|
||||
import flash.events.SecurityErrorEvent;
|
||||
import flash.media.Microphone;
|
||||
import flash.media.SoundCodec;
|
||||
import flash.net.NetConnection;
|
||||
import flash.net.NetStream;
|
||||
|
||||
import mx.controls.Alert;
|
||||
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
|
||||
public class AudioConnector
|
||||
{
|
||||
public static const CONNECT_SUCCESS:String = "NetConnection.Connect.Success";
|
||||
public static const CONNECT_FAILED:String = "NetConnection.Connect.Failed";
|
||||
public static const CONNECT_CLOSED:String = "NetConnection.Connect.Closed";
|
||||
public static const INVALID_APP:String = "NetConnection.Connect.InvalidApp";
|
||||
public static const APP_SHUTDOWN:String = "NetConnection.Connect.AppShutDown";
|
||||
public static const CONNECT_REJECTED:String = "NetConnection.Connect.Rejected";
|
||||
|
||||
private var audioCodec:String = "SPEEX";
|
||||
|
||||
private var connection:NetConnection;
|
||||
private var outgoingStream:NetStream;
|
||||
private var incomingStream:NetStream;
|
||||
|
||||
private var streamName:String;
|
||||
|
||||
private var mic:Microphone;
|
||||
|
||||
public function AudioConnector(mic:Microphone)
|
||||
{
|
||||
this.mic = mic;
|
||||
|
||||
connection = new NetConnection();
|
||||
connection.proxyType = "best";
|
||||
connection.client = this;
|
||||
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
|
||||
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
|
||||
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
|
||||
connection.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
|
||||
connection.connect(Requirements.bbb_voice_url);
|
||||
}
|
||||
|
||||
private function onNetStatus(e:NetStatusEvent):void{
|
||||
switch(e.info.code){
|
||||
case CONNECT_SUCCESS:
|
||||
connectAudio();
|
||||
break;
|
||||
case CONNECT_FAILED:
|
||||
trace("AudioConnector::onNetStatus - connection to Audio App failed");
|
||||
break;
|
||||
case CONNECT_CLOSED:
|
||||
trace("AudioConnector::onNetStatus - connection to Audio App closed");
|
||||
break;
|
||||
case CONNECT_REJECTED:
|
||||
trace("AudioConnector::onNetStatus - connection to Audio App rejected");
|
||||
break;
|
||||
default:
|
||||
trace("AudioConnector::onNetStatus - something else happened: " + e.info.code);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function onAsyncError(e:AsyncErrorEvent):void{
|
||||
trace("AudioConnector::onAsyncError - an async error occured on the audio connection");
|
||||
}
|
||||
|
||||
private function onSecurityError(e:SecurityErrorEvent):void{
|
||||
trace("AudioConnector::onSecurityError - a security error occured on the audio connection");
|
||||
}
|
||||
|
||||
private function onIOError(e:IOErrorEvent):void{
|
||||
trace("AudioConnector::onIOError - an IO error occured on the audio connection");
|
||||
}
|
||||
|
||||
private function connectAudio():void{
|
||||
outgoingStream = new NetStream(connection);
|
||||
outgoingStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
|
||||
|
||||
streamName = Math.random().toString();
|
||||
|
||||
setupMicrophone();
|
||||
outgoingStream.attachAudio(mic);
|
||||
outgoingStream.publish(streamName, "live");
|
||||
}
|
||||
|
||||
public function changeMic(mic:Microphone):void{
|
||||
this.mic = mic;
|
||||
setupMicrophone();
|
||||
outgoingStream.attachAudio(mic);
|
||||
}
|
||||
|
||||
private function setupMicrophone():void {
|
||||
mic.setUseEchoSuppression(true);
|
||||
//TODO Set loopBack to false once this is connected to the Asterisk/Freeswitch echo application
|
||||
mic.setLoopBack(true);
|
||||
mic.setSilenceLevel(0,20000);
|
||||
if (audioCodec == "SPEEX") {
|
||||
mic.encodeQuality = 6;
|
||||
mic.codec = SoundCodec.SPEEX;
|
||||
mic.framesPerPacket = 1;
|
||||
mic.rate = 16;
|
||||
} else {
|
||||
mic.codec = SoundCodec.NELLYMOSER;
|
||||
mic.rate = 8;
|
||||
}
|
||||
mic.gain = 60;
|
||||
}
|
||||
|
||||
public function stop():void{
|
||||
if (mic != null){
|
||||
mic.setLoopBack(false);
|
||||
mic = null;
|
||||
}
|
||||
if (outgoingStream != null) outgoingStream.close();
|
||||
if (incomingStream != null) incomingStream.close();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,249 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.connectors
|
||||
{
|
||||
import flash.events.AsyncErrorEvent;
|
||||
import flash.events.IOErrorEvent;
|
||||
import flash.events.NetStatusEvent;
|
||||
import flash.events.SecurityErrorEvent;
|
||||
import flash.net.NetConnection;
|
||||
import flash.net.Responder;
|
||||
import flash.net.SharedObject;
|
||||
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
|
||||
/**
|
||||
* The DeskShareProxy communicates with the Red5 deskShare server application
|
||||
* @author Snap
|
||||
*
|
||||
*/
|
||||
public class DeskShareConnector
|
||||
{
|
||||
public static const CONNECT_SUCCESS:String = "NetConnection.Connect.Success";
|
||||
public static const CONNECT_FAILED:String = "NetConnection.Connect.Failed";
|
||||
public static const CONNECT_CLOSED:String = "NetConnection.Connect.Closed";
|
||||
public static const INVALID_APP:String = "NetConnection.Connect.InvalidApp";
|
||||
public static const APP_SHUTDOWN:String = "NetConnection.Connect.AppShutDown";
|
||||
public static const CONNECT_REJECTED:String = "NetConnection.Connect.Rejected";
|
||||
public static const NETSTREAM_PUBLISH:String = "NetStream.Publish.Start";
|
||||
|
||||
public var nc:NetConnection;
|
||||
private var deskSO:SharedObject;
|
||||
private var responder:Responder;
|
||||
|
||||
private var width:Number;
|
||||
private var height:Number;
|
||||
private var uri:String;
|
||||
|
||||
public var room:String = Math.random().toString();;
|
||||
|
||||
private var appletStartedCallback:Function;
|
||||
private var startViewingCallback:Function;
|
||||
private var stopViewingCallback:Function;
|
||||
|
||||
public function DeskShareConnector(appletStartedCallback:Function, startViewingCallback:Function, stopViewingCallback:Function)
|
||||
{
|
||||
this.appletStartedCallback = appletStartedCallback;
|
||||
this.startViewingCallback = startViewingCallback;
|
||||
this.stopViewingCallback = stopViewingCallback;
|
||||
|
||||
connect();
|
||||
}
|
||||
|
||||
public function connect():void {
|
||||
this.uri = Requirements.bbb_deskshare_url + "/" + this.room;
|
||||
trace("Deskshare Service connecting to " + uri);
|
||||
nc = new NetConnection()
|
||||
nc.proxyType = "best";
|
||||
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
|
||||
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
|
||||
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
|
||||
nc.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
|
||||
nc.connect(uri);
|
||||
|
||||
responder = new Responder(
|
||||
function(result:Object):void{
|
||||
if (result != null && (result.publishing as Boolean)){
|
||||
width = result.width as Number;
|
||||
height = result.height as Number;
|
||||
trace("Desk Share stream is streaming [" + width + "," + height + "]");
|
||||
|
||||
startViewingCallback(width, height);
|
||||
} else {
|
||||
trace("No deskshare stream being published");
|
||||
}
|
||||
},
|
||||
function(status:Object):void{
|
||||
trace("Error while trying to call remote mathod on server");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function disconnect():void{
|
||||
if (nc != null) nc.close();
|
||||
}
|
||||
|
||||
private function onNetStatus(e:NetStatusEvent):void{
|
||||
switch(e.info.code){
|
||||
case CONNECT_SUCCESS:
|
||||
connectionSuccessHandler();
|
||||
break;
|
||||
case CONNECT_FAILED:
|
||||
trace("VideoConnector::onNetStatus - connection to Video App failed");
|
||||
break;
|
||||
case CONNECT_CLOSED:
|
||||
trace("VideoConnector::onNetStatus - connection to Video App closed");
|
||||
break;
|
||||
case CONNECT_REJECTED:
|
||||
trace("VideoConnector::onNetStatus - connection to Video App rejected");
|
||||
break;
|
||||
case NETSTREAM_PUBLISH:
|
||||
|
||||
break;
|
||||
default:
|
||||
trace("VideoConnector::onNetStatus - something else happened: " + e.info.code);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function onAsyncError(e:AsyncErrorEvent):void{
|
||||
trace("VideoConnector::onAsyncError - an async error occured on the video connection");
|
||||
}
|
||||
|
||||
private function onSecurityError(e:SecurityErrorEvent):void{
|
||||
trace("VideoConnector::onSecurityError - a security error occured on the video connection");
|
||||
}
|
||||
|
||||
private function onIOError(e:IOErrorEvent):void{
|
||||
trace("VideoConnector::onIOError - an IO error occured on the video connection");
|
||||
}
|
||||
|
||||
private function connectionSuccessHandler():void{
|
||||
trace("Successully connection to " + uri);
|
||||
deskSO = SharedObject.getRemote("deskSO", uri, false);
|
||||
deskSO.client = this;
|
||||
deskSO.connect(nc);
|
||||
|
||||
checkIfStreamIsPublishing();
|
||||
}
|
||||
|
||||
public function getConnection():NetConnection{
|
||||
return nc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by server when client connects.
|
||||
*/
|
||||
public function onBWDone():void{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoked on the server once the clients' applet has started sharing and the server has started a video stream
|
||||
*
|
||||
*/
|
||||
public function appletStarted(videoWidth:Number, videoHeight:Number):void{
|
||||
trace("Got applet started");
|
||||
|
||||
appletStartedCallback(videoWidth, videoHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this method to send out a room-wide notification to start viewing the stream
|
||||
*
|
||||
*/
|
||||
public function sendStartViewingNotification(captureWidth:Number, captureHeight:Number):void{
|
||||
try{
|
||||
deskSO.send("startViewing", captureWidth, captureHeight);
|
||||
} catch(e:Error){
|
||||
trace("error while trying to send start viewing notification");
|
||||
}
|
||||
}
|
||||
|
||||
public function sendStartedViewingNotification():void{
|
||||
trace("Sending start viewing to server");
|
||||
nc.call("deskshare.startedToViewStream", null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the server when a notification is received to start viewing the broadcast stream .
|
||||
* This method is called on successful execution of sendStartViewingNotification()
|
||||
*
|
||||
*/
|
||||
public function startViewing(videoWidth:Number, videoHeight:Number):void{
|
||||
trace("startViewing invoked by server");
|
||||
|
||||
startViewingCallback(videoWidth, videoHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a notification through the server to all the participants in the room to stop viewing the stream
|
||||
*
|
||||
*/
|
||||
public function sendStopViewingNotification():void{
|
||||
trace("Sending stop viewing notification to other clients.");
|
||||
try{
|
||||
deskSO.send("stopViewing");
|
||||
} catch(e:Error){
|
||||
trace("could not send stop viewing notification");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the server to notify clients that the deskshare stream has stooped.
|
||||
*/
|
||||
public function deskshareStreamStopped():void {
|
||||
stopViewing();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a notification to the module to stop viewing the stream
|
||||
* This method is called on successful execution of sendStopViewingNotification()
|
||||
*
|
||||
*/
|
||||
public function stopViewing():void{
|
||||
trace("Received dekskshareStreamStopped");
|
||||
|
||||
stopViewingCallback();
|
||||
}
|
||||
|
||||
public function mouseLocationCallback(x:Number, y:Number):void {
|
||||
//var event:CursorEvent = new CursorEvent(CursorEvent.UPDATE_CURSOR_LOC_EVENT);
|
||||
//event.x = x;
|
||||
//event.y = y;
|
||||
//dispatcher.dispatchEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if anybody is publishing the stream for this room
|
||||
* This method is useful for clients which have joined a room where somebody is already publishing
|
||||
*
|
||||
*/
|
||||
private function checkIfStreamIsPublishing():void{
|
||||
trace("checking if desk share stream is publishing");
|
||||
nc.call("deskshare.checkIfStreamIsPublishing", responder);
|
||||
}
|
||||
|
||||
public function calculateEncodingDimensions(captureWidth:Number, captureHeight:Number):void{
|
||||
height = captureHeight;
|
||||
width = captureWidth;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,120 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.connectors
|
||||
{
|
||||
import flash.events.AsyncErrorEvent;
|
||||
import flash.events.IOErrorEvent;
|
||||
import flash.events.NetStatusEvent;
|
||||
import flash.events.SecurityErrorEvent;
|
||||
import flash.media.Camera;
|
||||
import flash.media.Video;
|
||||
import flash.net.NetConnection;
|
||||
import flash.net.NetStream;
|
||||
|
||||
import org.bigbluebutton.modules.settings.util.Requirements;
|
||||
|
||||
public class VideoConnector
|
||||
{
|
||||
public static const CONNECT_SUCCESS:String = "NetConnection.Connect.Success";
|
||||
public static const CONNECT_FAILED:String = "NetConnection.Connect.Failed";
|
||||
public static const CONNECT_CLOSED:String = "NetConnection.Connect.Closed";
|
||||
public static const INVALID_APP:String = "NetConnection.Connect.InvalidApp";
|
||||
public static const APP_SHUTDOWN:String = "NetConnection.Connect.AppShutDown";
|
||||
public static const CONNECT_REJECTED:String = "NetConnection.Connect.Rejected";
|
||||
public static const NETSTREAM_PUBLISH:String = "NetStream.Publish.Start";
|
||||
|
||||
public var connection:NetConnection;
|
||||
private var outgoingStream:NetStream;
|
||||
private var incomingStream:NetStream;
|
||||
|
||||
private var camera:Camera;
|
||||
private var streamListener:Function;
|
||||
|
||||
public var streamName:String;
|
||||
|
||||
public function VideoConnector(connectionListener:Function)
|
||||
{
|
||||
connection = new NetConnection();
|
||||
connection.proxyType = "best";
|
||||
connection.client = this;
|
||||
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
|
||||
connection.addEventListener(NetStatusEvent.NET_STATUS, connectionListener);
|
||||
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
|
||||
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
|
||||
connection.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
|
||||
|
||||
connectToServer();
|
||||
}
|
||||
|
||||
public function connectToServer():void{
|
||||
connection.connect(Requirements.bbb_video_url);
|
||||
}
|
||||
|
||||
private function onNetStatus(e:NetStatusEvent):void{
|
||||
switch(e.info.code){
|
||||
case CONNECT_SUCCESS:
|
||||
//connectVideo();
|
||||
break;
|
||||
case CONNECT_FAILED:
|
||||
trace("VideoConnector::onNetStatus - connection to Video App failed");
|
||||
break;
|
||||
case CONNECT_CLOSED:
|
||||
trace("VideoConnector::onNetStatus - connection to Video App closed");
|
||||
break;
|
||||
case CONNECT_REJECTED:
|
||||
trace("VideoConnector::onNetStatus - connection to Video App rejected");
|
||||
break;
|
||||
case NETSTREAM_PUBLISH:
|
||||
|
||||
break;
|
||||
default:
|
||||
trace("VideoConnector::onNetStatus - something else happened: " + e.info.code);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function onAsyncError(e:AsyncErrorEvent):void{
|
||||
trace("VideoConnector::onAsyncError - an async error occured on the video connection");
|
||||
}
|
||||
|
||||
private function onSecurityError(e:SecurityErrorEvent):void{
|
||||
trace("VideoConnector::onSecurityError - a security error occured on the video connection");
|
||||
}
|
||||
|
||||
private function onIOError(e:IOErrorEvent):void{
|
||||
trace("VideoConnector::onIOError - an IO error occured on the video connection");
|
||||
}
|
||||
|
||||
public function connectVideo(camera:Camera, streamListener:Function):void{
|
||||
outgoingStream = new NetStream(connection);
|
||||
outgoingStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
|
||||
outgoingStream.addEventListener(NetStatusEvent.NET_STATUS, streamListener);
|
||||
|
||||
streamName = Math.random().toString();
|
||||
|
||||
outgoingStream.attachCamera(camera);
|
||||
outgoingStream.publish(streamName);
|
||||
}
|
||||
|
||||
public function changeCamera(camera:Camera):void{
|
||||
this.camera = camera;
|
||||
outgoingStream.attachCamera(camera);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.uihelpers
|
||||
{
|
||||
import flash.events.Event;
|
||||
|
||||
public class JavaOKEvent extends Event
|
||||
{
|
||||
public static const JAVA_A_OK:String = "Java is alright, sometimes";
|
||||
|
||||
public function JavaOKEvent(type:String)
|
||||
{
|
||||
super(type, true, false);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="330">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
private var callback:Function;
|
||||
|
||||
public function setAlert(text:String, optionalButtonLabel:String = null, optionalButtonCallback:Function = null):void{
|
||||
txtAlert.htmlText = text;
|
||||
if (optionalButtonLabel != null) {
|
||||
btnOptionalAction.label = optionalButtonLabel;
|
||||
btnOptionalAction.visible = true;
|
||||
}
|
||||
if (optionalButtonCallback != null) callback = optionalButtonCallback;
|
||||
}
|
||||
|
||||
public function closePopUp():void{
|
||||
PopUpManager.removePopUp(this);
|
||||
}
|
||||
|
||||
private function onOptionalButtonClick():void{
|
||||
callback();
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
<mx:VBox horizontalAlign="center" width="100%" height="100%">
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.settings.warning.label')}" fontSize="24" height="10%" color="red" />
|
||||
<mx:Text id="txtAlert" width="100%" height="65%" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" />
|
||||
<mx:Button id="btnOptionalAction" click="onOptionalButtonClick()" label="" visible="false" />
|
||||
<mx:Button id="btnClose" label="{ResourceUtil.getInstance().getString('bbb.settings.warning.close')}" click="closePopUp()" />
|
||||
</mx:VBox>
|
||||
|
||||
</mx:TitleWindow>
|
@ -1,52 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
|
||||
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Lesser General Public License as published by the Free Software
|
||||
Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-->
|
||||
<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml" width="250"
|
||||
click="showWarning()" textAlign="left" >
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.core.FlexGlobals;
|
||||
import mx.managers.PopUpManager;
|
||||
|
||||
private var warningLabel:String;
|
||||
private var warningText:String
|
||||
private var optionalLabel:String;
|
||||
private var optionalCallback:Function;
|
||||
|
||||
public function setWarning(e:WarningEvent):void{
|
||||
this.warningLabel = e.warningLabel;
|
||||
this.warningText = e.warningText;
|
||||
this.optionalLabel = e.optionalCommandText;
|
||||
this.optionalCallback = e.optionalCallbackFunction;
|
||||
this.label = warningLabel;
|
||||
}
|
||||
|
||||
private function showWarning():void{
|
||||
var userAlert:UserAlert = UserAlert(PopUpManager.createPopUp(this.parent, UserAlert, true));
|
||||
userAlert.setAlert(warningText, optionalLabel, optionalCallback);
|
||||
// userAlert.x = FlexGlobals.topLevelApplication.mx_internal.Application.width/2 - userAlert.width/2;
|
||||
// userAlert.y = FlexGlobals.topLevelApplication.mx_internal.Application.height/2 - userAlert.height/2;
|
||||
userAlert.x = 0;
|
||||
userAlert.y = 0;
|
||||
}
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
</mx:Button>
|
@ -1,27 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.util
|
||||
{
|
||||
public class FlashCheck
|
||||
{
|
||||
public function FlashCheck()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -1,115 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.util
|
||||
{
|
||||
import flash.external.ExternalInterface;
|
||||
|
||||
public class JavaCheck
|
||||
{
|
||||
public static function createWebStartLaunchButton(jnlp:String, minimumVersion:String):void{
|
||||
var response:Object = ExternalInterface.call("deployJava.createWebStartLaunchButton", jnlp, minimumVersion);
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
|
||||
public static function createWebStartLaunchButtonEx(jnlp:String, minimumVersion:String):void{
|
||||
var response:Object = ExternalInterface.call("deployJava.createWebStartLaunchButtonEx", jnlp, minimumVersion);
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
|
||||
public static function getBrowser():String{
|
||||
var browser:String = ExternalInterface.call("deployJava.getBrowser");
|
||||
|
||||
if (browser == null) throw new Error("Javascript files not found.");
|
||||
|
||||
return browser;
|
||||
}
|
||||
|
||||
public static function getJREs():Array{
|
||||
var installedJREs:Array = ExternalInterface.call("deployJava.getJREs");
|
||||
|
||||
if (installedJREs == null) throw new Error("Javascript files not found.");
|
||||
|
||||
return installedJREs;
|
||||
}
|
||||
|
||||
public static function installJRE(requestVersion:String):void{
|
||||
var response:Object = ExternalInterface.call("deployJava.installJRE", requestVersion);
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
|
||||
public static function installLatestJRE():void{
|
||||
var response:Object = ExternalInterface.call("deployJava.installLatestJRE");
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
|
||||
public static function isPlugin2():Boolean{
|
||||
var plugin2:String = ExternalInterface.call("deployJava.isPlugin2");
|
||||
|
||||
if (plugin2 == null) throw new Error("Javascript files not found.");
|
||||
|
||||
if (plugin2 == "true") return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static function isWebStartInstalled(minimumVersion:String):Boolean{
|
||||
var webstartInstalled:String = ExternalInterface.call("deployJava.isWebStartInstalled", minimumVersion);
|
||||
|
||||
if (webstartInstalled == null) throw new Error("Javascript files not found.");
|
||||
|
||||
if (webstartInstalled == "true") return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static function runApplet(attributes:Object, parameters:Object, minimumVersion:String):void{
|
||||
var response:Object = ExternalInterface.call("deployJava.runApplet", attributes, parameters, minimumVersion);
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
|
||||
public static function setAdditionalPackages(packageList:Object):void{
|
||||
var response:Object = ExternalInterface.call("deployJava.setAdditionalPackages", packageList);
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
|
||||
public static function setInstallerType(type:String):void{
|
||||
var response:Object = ExternalInterface.call("deployJava.setInstallerType", type);
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
|
||||
public static function versionCheck(version:String):String{
|
||||
var version:String = ExternalInterface.call("deployJava.versionCheck", version);
|
||||
|
||||
if (version == null) throw new Error("Javascript files not found.");
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
public static function writeAppletTag(attributes:Object, parameters:Object = null):void{
|
||||
var response:Object = ExternalInterface.call("deployJava.writeAppletTag", attributes, parameters);
|
||||
|
||||
if (response == null) throw new Error("Javascript files not found.");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.util
|
||||
{
|
||||
import flash.net.SharedObject;
|
||||
|
||||
public class PersistUserPreferences
|
||||
{
|
||||
private static var sharedObject:SharedObject = SharedObject.getLocal("bbbUserProperties", "/");
|
||||
|
||||
public static function storeData(preference:String, data:String):void{
|
||||
sharedObject.data[preference] = data;
|
||||
try{
|
||||
sharedObject.flush(1000);
|
||||
} catch(err:Error){
|
||||
trace("Could not flush shared object");
|
||||
}
|
||||
}
|
||||
|
||||
public static function saveWebcamPreference(webcam:String):void{
|
||||
sharedObject.data["webcam"] = webcam;
|
||||
try{
|
||||
sharedObject.flush(1000);
|
||||
} catch(err:Error){
|
||||
trace("Could not flush shared object");
|
||||
}
|
||||
}
|
||||
|
||||
public static function saveMicrophonePreference(microphone:String):void{
|
||||
sharedObject.data["microphone"] = microphone;
|
||||
try{
|
||||
sharedObject.flush(1000);
|
||||
} catch(err:Error){
|
||||
trace("Could not flush shared object");
|
||||
}
|
||||
}
|
||||
|
||||
public static function saveMicrophoneGain(gain:Number):void{
|
||||
if (gain > 100 || gain < 0) return;
|
||||
|
||||
sharedObject.data["gain"] = gain;
|
||||
try{
|
||||
sharedObject.flush(1000);
|
||||
} catch(err:Error){
|
||||
trace("Could not flush shared object");
|
||||
}
|
||||
}
|
||||
|
||||
public static function saveSettingsVisited():void{
|
||||
sharedObject.data["previouslyvisited"] = true;
|
||||
try{
|
||||
sharedObject.flush(1000);
|
||||
} catch(err:Error){
|
||||
trace("Could not flush shared object");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package org.bigbluebutton.modules.settings.util
|
||||
{
|
||||
import flash.events.Event;
|
||||
import flash.net.URLLoader;
|
||||
import flash.net.URLRequest;
|
||||
import flash.net.URLRequestHeader;
|
||||
import flash.net.URLRequestMethod;
|
||||
|
||||
import mx.collections.ArrayCollection;
|
||||
|
||||
public class Requirements
|
||||
{
|
||||
public static var bbb_apps_url:String;
|
||||
public static var bbb_voice_url:String;
|
||||
public static var bbb_video_url:String;
|
||||
public static var bbb_deskshare_url:String;
|
||||
public static var flash_required_version:String;
|
||||
public static var java_required_version:String;
|
||||
public static var check_deskshare:String = "false";
|
||||
|
||||
private static var loader:URLLoader;
|
||||
private static var isLoaded:Boolean = false;
|
||||
private static var loadingStarted:Boolean = false;
|
||||
|
||||
|
||||
public static function setRequirements(attributes:Object):void{
|
||||
isLoaded = true;
|
||||
|
||||
//bbb_apps_url = xml.bigbluebutton_apps.@url;
|
||||
bbb_video_url = attributes.video;
|
||||
bbb_voice_url = attributes.voice;
|
||||
bbb_deskshare_url = attributes.deskshare;
|
||||
|
||||
flash_required_version = attributes.flash_required;
|
||||
java_required_version = attributes.java_required;
|
||||
check_deskshare = attributes.check_deskshare;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -194,7 +194,7 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="span twelve center">
|
||||
<p>Copyright © 2014 BigBlueButton Inc.<br>
|
||||
<p>Copyright © 2015 BigBlueButton Inc.<br>
|
||||
<small>Version <a href="https://code.google.com/p/bigbluebutton/wiki/090Docs">0.9.0-beta</a></small>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -19,6 +19,7 @@ task resolveDeps(type: Copy) {
|
||||
* (ralam Oct 4, 2009)
|
||||
*/
|
||||
repositories {
|
||||
mavenCentral()
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
@ -62,6 +63,8 @@ repositories {
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
mavenRepo name: "sonatype-snapshot", urls: "http://oss.sonatype.org/content/repositories/snapshots"
|
||||
mavenRepo name: "sonatype-releases", urls: "http://oss.sonatype.org/content/repositories/releases"
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,9 +84,9 @@ dependencies {
|
||||
providedCompile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||
|
||||
// Red5
|
||||
providedCompile 'org/red5:red5-server:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org.red5:red5-io:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org/red5:red5-server-common:1.0.4-RELEASE@jar'
|
||||
providedCompile 'org/red5:red5-server:1.0.5-jan122015-SNAPSHOT@jar'
|
||||
providedCompile 'org.red5:red5-server-common:1.0.5-SNAPSHOT@jar'
|
||||
providedCompile 'org.red5:red5-io:1.0.5-SNAPSHOT@jar'
|
||||
|
||||
// Logging
|
||||
providedCompile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||
@ -100,11 +103,11 @@ dependencies {
|
||||
providedCompile 'aopalliance:aopalliance:1.0@jar'
|
||||
|
||||
// Testing
|
||||
compile 'org.testng:testng:5.8@jar'
|
||||
//compile 'org.testng:testng:5.8@jar'
|
||||
compile 'org.easymock:easymock:2.4@jar'
|
||||
|
||||
// Testing
|
||||
testRuntime 'org/testng:testng:5.8@jar'
|
||||
//testRuntime 'org/testng:testng:5.8@jar'
|
||||
testRuntime 'org.easymock:easymock:2.4@jar'
|
||||
|
||||
// Tunnelling servlet
|
||||
@ -129,7 +132,7 @@ dependencies {
|
||||
|
||||
// Libraries needed for scala api
|
||||
compile 'org.scala-lang:scala-library:2.9.2'
|
||||
compile 'net.lag:configgy:2.0.0'
|
||||
compile 'net.lag:configgy:2.0.0@jar'
|
||||
|
||||
//redis
|
||||
compile 'redis.clients:jedis:1.5.1'
|
||||
|
@ -13,6 +13,7 @@ task resolveDeps(type: Copy) {
|
||||
* (ralam Oct 4, 2009)
|
||||
*/
|
||||
repositories {
|
||||
mavenCentral()
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
@ -56,6 +57,8 @@ repositories {
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
mavenRepo name: "sonatype-snapshot", urls: "http://oss.sonatype.org/content/repositories/snapshots"
|
||||
mavenRepo name: "sonatype-releases", urls: "http://oss.sonatype.org/content/repositories/releases"
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,9 +82,9 @@ dependencies {
|
||||
compile 'org.springframework:spring-core:4.0.8.RELEASE@jar'
|
||||
|
||||
// Red5
|
||||
compile 'org/red5:red5-server:1.0.4-RELEASE@jar'
|
||||
compile 'org.red5:red5-io:1.0.4-RELEASE@jar'
|
||||
compile 'org/red5:red5-server-common:1.0.4-RELEASE@jar'
|
||||
compile 'org/red5:red5-server:1.0.5-jan122015-SNAPSHOT@jar'
|
||||
compile 'org.red5:red5-server-common:1.0.5-SNAPSHOT@jar'
|
||||
compile 'org.red5:red5-io:1.0.5-SNAPSHOT@jar'
|
||||
|
||||
// Logging
|
||||
compile 'ch.qos.logback:logback-core:1.1.2@jar'
|
||||
@ -97,7 +100,7 @@ dependencies {
|
||||
compile 'aopalliance:aopalliance:1.0@jar'
|
||||
|
||||
// Testing
|
||||
compile 'org.testng:testng:5.8@jar'
|
||||
// compile 'org.testng:testng:5.8@jar'
|
||||
compile 'org.easymock:easymock:2.4@jar'
|
||||
|
||||
compile project(':common')
|
||||
@ -111,7 +114,7 @@ dependencies {
|
||||
// Libraries needed for scala api
|
||||
compile 'org.scala-lang:scala-library:2.9.2'
|
||||
|
||||
compile 'net.lag:configgy:2.0.0'
|
||||
compile 'net.lag:configgy:2.0.0@jar'
|
||||
|
||||
//redis
|
||||
compile 'redis.clients:jedis:2.0.0'
|
||||
@ -127,6 +130,7 @@ subprojects {
|
||||
apply plugin: 'eclipse'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
|
||||
name = 'remote'
|
||||
returnFirst = true
|
||||
@ -165,6 +169,8 @@ subprojects {
|
||||
addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
|
||||
}
|
||||
}
|
||||
mavenRepo name: "sonatype-snapshot", urls: "http://oss.sonatype.org/content/repositories/snapshots"
|
||||
mavenRepo name: "sonatype-releases", urls: "http://oss.sonatype.org/content/repositories/releases"
|
||||
}
|
||||
|
||||
group = 'org.bigbluebutton'
|
||||
|
Loading…
Reference in New Issue
Block a user