@ -48,7 +48,7 @@ var JitsiMeetExternalAPI = (function()
this . iframeHolder . style . width = width + "px" ;
this . iframeHolder . style . height = height + "px" ;
this . frameName = "jitsiConferenceFrame" + JitsiMeetExternalAPI . id ;
this . url = "https ://" + domain + "/" ;
this . url = "http://" + domain + "/" ;
if ( room _name )
this . url += room _name ;
this . url += "#external" ;
@ -57,12 +57,16 @@ var JitsiMeetExternalAPI = (function()
this . frame = document . createElement ( "iframe" ) ;
this . frame . src = this . url ;
this . frame . name = this . frameName ;
this . frame . id = this . frameName ;
this . frame . width = "100%" ;
this . frame . height = "100%" ;
this . frame . setAttribute ( "allowFullScreen" , "true" ) ;
this . frame = this . iframeHolder . appendChild ( this . frame ) ;
this . frameLoaded = false ;
this . initialCommands = [ ] ;
this . eventHandlers = { } ;
this . initListeners ( ) ;
}
@ -108,7 +112,7 @@ var JitsiMeetExternalAPI = (function()
var argumentsArray = argumentsList ;
if ( ! argumentsArray )
argumentsArray = [ ] ;
var object = { } ;
var object = { type : "command" , action : "execute" } ;
object [ name ] = argumentsArray ;
this . sendMessage ( object ) ;
} ;
@ -125,9 +129,147 @@ var JitsiMeetExternalAPI = (function()
* arguments for the command .
* /
JitsiMeetExternalAPI . prototype . executeCommands = function ( object ) {
object . type = "command" ;
object . action = "execute" ;
this . sendMessage ( object ) ;
} ;
/ * *
* Adds event listeners to Meet Jitsi . The object key should be the name of the
* event and value - the listener .
* Currently we support the following
* events :
* incommingMessage - receives event notifications about incomming
* messages . The listener will receive object with the following structure :
* { {
* "from" : from , //JID of the user that sent the message
* "nick" : nick , //the nickname of the user that sent the message
* "message" : txt //the text of the message
* } }
* outgoingMessage - receives event notifications about outgoing
* messages . The listener will receive object with the following structure :
* { {
* "message" : txt //the text of the message
* } }
* displayNameChanged - receives event notifications about display name
* change . The listener will receive object with the following structure :
* { {
* jid : jid , //the JID of the participant that changed his display name
* displayname : displayName //the new display name
* } }
* participantJoined - receives event notifications about new participant .
* The listener will receive object with the following structure :
* { {
* jid : jid //the jid of the participant
* } }
* participantLeft - receives event notifications about participant that left room .
* The listener will receive object with the following structure :
* { {
* jid : jid //the jid of the participant
* } }
* @ param object
* /
JitsiMeetExternalAPI . prototype . addEventListeners
= function ( object )
{
var message = { type : "event" , action : "add" , events : [ ] } ;
for ( var i in object )
{
message . events . push ( i ) ;
this . eventHandlers [ i ] = object [ i ] ;
}
this . sendMessage ( message ) ;
} ;
/ * *
* Adds event listeners to Meet Jitsi . Currently we support the following
* events :
* incommingMessage - receives event notifications about incomming
* messages . The listener will receive object with the following structure :
* { {
* "from" : from , //JID of the user that sent the message
* "nick" : nick , //the nickname of the user that sent the message
* "message" : txt //the text of the message
* } }
* outgoingMessage - receives event notifications about outgoing
* messages . The listener will receive object with the following structure :
* { {
* "message" : txt //the text of the message
* } }
* displayNameChanged - receives event notifications about display name
* change . The listener will receive object with the following structure :
* { {
* jid : jid , //the JID of the participant that changed his display name
* displayname : displayName //the new display name
* } }
* participantJoined - receives event notifications about new participant .
* The listener will receive object with the following structure :
* { {
* jid : jid //the jid of the participant
* } }
* participantLeft - receives event notifications about participant that left room .
* The listener will receive object with the following structure :
* { {
* jid : jid //the jid of the participant
* } }
* @ param event the name of the event
* @ param listener the listener
* /
JitsiMeetExternalAPI . prototype . addEventListener
= function ( event , listener )
{
var message = { type : "event" , action : "add" , events : [ event ] } ;
this . eventHandlers [ event ] = listener ;
this . sendMessage ( message ) ;
} ;
/ * *
* Removes event listener .
* @ param event the name of the event .
* /
JitsiMeetExternalAPI . prototype . removeEventListener
= function ( event )
{
if ( ! this . eventHandlers [ event ] )
{
console . error ( "The event " + event + " is not registered." ) ;
return ;
}
var message = { type : "event" , action : "remove" , events : [ event ] } ;
delete this . eventHandlers [ event ] ;
this . sendMessage ( message ) ;
} ;
/ * *
* Removes event listeners .
* @ param events array with the names of the events .
* /
JitsiMeetExternalAPI . prototype . removeEventListeners
= function ( events )
{
var eventsArray = [ ] ;
for ( var i = 0 ; i < events . length ; i ++ )
{
var event = events [ i ] ;
if ( ! this . eventHandlers [ event ] )
{
console . error ( "The event " + event + " is not registered." ) ;
continue ;
}
delete this . eventHandlers [ event ] ;
eventsArray . push ( event ) ;
}
if ( eventsArray . length > 0 )
{
this . sendMessage (
{ type : "event" , action : "remove" , events : eventsArray } ) ;
}
} ;
/ * *
* Processes message events sent from Jitsi Meet
* @ param event the event
@ -138,11 +280,34 @@ var JitsiMeetExternalAPI = (function()
try {
message = JSON . parse ( event . data ) ;
} catch ( e ) { }
if ( message . loaded )
if ( ! message . type ) {
console . error ( "Message without type is received." ) ;
return ;
}
switch ( message . type )
{
this . onFrameLoaded ( ) ;
case "system" :
if ( message . loaded )
{
this . onFrameLoaded ( ) ;
}
break ;
case "event" :
if ( message . action != "result" ||
! message . event || ! this . eventHandlers [ message . event ] )
{
console . warn ( "The received event cannot be parsed." ) ;
return ;
}
this . eventHandlers [ message . event ] ( message . result ) ;
break ;
default :
console . error ( "Unknown message type." ) ;
return ;
}
} ;
/ * *
@ -191,7 +356,14 @@ var JitsiMeetExternalAPI = (function()
window . detachEvent ( 'onmessage' ,
this . eventListener ) ;
}
this . iframeHolder . parentNode . removeChild ( this . iframeHolder ) ;
var frame = document . getElementById ( this . frameName ) ;
if ( frame )
frame . src = 'about:blank' ;
var self = this ;
window . setTimeout ( function ( ) {
self . iframeHolder . removeChild ( self . frame ) ;
self . iframeHolder . parentNode . removeChild ( self . iframeHolder ) ;
} , 10 ) ;
} ;
return JitsiMeetExternalAPI ;