ref(iframe_api): ESLint support for API.js

This commit is contained in:
hristoterezov 2017-04-11 13:02:59 -05:00 committed by Lyubo Marinov
parent e7a3ee477d
commit 0f42f18100
4 changed files with 141 additions and 103 deletions

View File

@ -1360,10 +1360,15 @@ export default {
room.on(ConferenceEvents.CONNECTION_RESTORED, () => {
APP.UI.markVideoInterrupted(false);
});
room.on(ConferenceEvents.MESSAGE_RECEIVED, (id, text, ts) => {
room.on(ConferenceEvents.MESSAGE_RECEIVED, (id, body, ts) => {
let nick = getDisplayName(id);
APP.API.notifyReceivedChatMessage(id, nick, text, ts);
APP.UI.addMessage(id, nick, text, ts);
APP.API.notifyReceivedChatMessage({
id,
nick,
body,
ts
});
APP.UI.addMessage(id, nick, body, ts);
});
APP.UI.addListener(UIEvents.MESSAGE_CREATED, (message) => {
APP.API.notifySendingChatMessage(message);

3
modules/API/.eslintrc.js Normal file
View File

@ -0,0 +1,3 @@
module.exports = {
'extends': '../../react/.eslintrc.js'
};

View File

@ -1,11 +1,5 @@
/* global APP, getConfigParamsFromUrl */
/**
* Implements API class that communicates with external api class
* and provides interface to access Jitsi Meet features by external
* applications that embed Jitsi Meet
*/
import postisInit from 'postis';
import * as JitsiMeetConferenceEvents from '../../ConferenceEvents';
@ -13,27 +7,27 @@ import * as JitsiMeetConferenceEvents from '../../ConferenceEvents';
/**
* List of the available commands.
* @type {{
* displayName: inputDisplayNameHandler,
* toggleAudio: toggleAudio,
* toggleVideo: toggleVideo,
* toggleFilmStrip: toggleFilmStrip,
* toggleChat: toggleChat,
* toggleContactList: toggleContactList
* }}
* displayName: inputDisplayNameHandler,
* toggleAudio: toggleAudio,
* toggleVideo: toggleVideo,
* toggleFilmStrip: toggleFilmStrip,
* toggleChat: toggleChat,
* toggleContactList: toggleContactList
* }}
*/
let commands = {};
let hashParams = getConfigParamsFromUrl();
const hashParams = getConfigParamsFromUrl();
/**
* JitsiMeetExternalAPI id - unique for a webpage.
*/
let jitsi_meet_external_api_id = hashParams.jitsi_meet_external_api_id;
const jitsiMeetExternalApiId = hashParams.jitsi_meet_external_api_id;
/**
* Object that will execute sendMessage
*/
let target = window.opener ? window.opener : window.parent;
const target = window.opener ? window.opener : window.parent;
/**
* Postis instance. Used to communicate with the external application.
@ -64,56 +58,64 @@ function toggleScreenSharing() {
}
}
/**
* Initializes supported commands.
*
* @returns {void}
*/
function initCommands() {
commands = {
"display-name":
'display-name':
APP.conference.changeLocalDisplayName.bind(APP.conference),
"toggle-audio": APP.conference.toggleAudioMuted.bind(APP.conference),
"toggle-video": APP.conference.toggleVideoMuted.bind(APP.conference),
"toggle-film-strip": APP.UI.toggleFilmstrip,
"toggle-chat": APP.UI.toggleChat,
"toggle-contact-list": APP.UI.toggleContactList,
"toggle-share-screen": toggleScreenSharing,
"video-hangup": () => APP.conference.hangup(),
"email": APP.conference.changeLocalEmail,
"avatar-url": APP.conference.changeLocalAvatarUrl,
"remote-control-event": event =>
APP.remoteControl.onRemoteControlAPIEvent(event)
'toggle-audio': APP.conference.toggleAudioMuted.bind(APP.conference),
'toggle-video': APP.conference.toggleVideoMuted.bind(APP.conference),
'toggle-film-strip': APP.UI.toggleFilmstrip,
'toggle-chat': APP.UI.toggleChat,
'toggle-contact-list': APP.UI.toggleContactList,
'toggle-share-screen': toggleScreenSharing,
'video-hangup': () => APP.conference.hangup(),
'email': APP.conference.changeLocalEmail,
'avatar-url': APP.conference.changeLocalAvatarUrl,
'remote-control-event':
event => APP.remoteControl.onRemoteControlAPIEvent(event)
};
Object.keys(commands).forEach(function (key) {
postis.listen(key, args => commands[key](...args));
});
Object.keys(commands).forEach(
key => postis.listen(key, args => commands[key](...args)));
}
/**
* Sends message to the external application.
* @param message {object}
* @param method {string}
* @param params {object} the object that will be sent as JSON string
*
* @param {Object} message - The message to be sent.
* @returns {void}
*/
function sendMessage(message) {
if(enabled) {
if (enabled) {
postis.send(message);
}
}
/**
* Check whether the API should be enabled or not.
*
* @returns {boolean}
*/
function shouldBeEnabled () {
return (typeof jitsi_meet_external_api_id === "number");
function shouldBeEnabled() {
return typeof jitsiMeetExternalApiId === 'number';
}
/**
* Sends event object to the external application that has been subscribed
* for that event.
* @param name the name event
* @param object data associated with the event
*
* @param {string} name - The name event.
* @param {Object} object - Data associated with the event.
* @returns {void}
*/
function triggerEvent (name, object) {
if(enabled) {
sendMessage({method: name, params: object});
function triggerEvent(name, object) {
if (enabled) {
sendMessage({ method: name,
params: object });
}
}
@ -130,24 +132,27 @@ function onScreenSharingEnable(enabled = false) {
}
}
/**
* Implements API class that communicates with external api class
* and provides interface to access Jitsi Meet features by external
* applications that embed Jitsi Meet
*/
class API {
/**
* Constructs new instance
* @constructor
*/
constructor() { }
/**
* Initializes the APIConnector. Setups message event listeners that will
* receive information from external applications that embed Jitsi Meet.
* It also sends a message to the external application that APIConnector
* is initialized.
* @param options {object}
* @param forceEnable {boolean} if true the module will be enabled.
*
* @param {Object} options - Optional parameters.
* @param {boolean} options.forceEnable - If true the module will be
* enabled.
* @returns {void}
*/
init (options = {}) {
if(!shouldBeEnabled() && !options.forceEnable)
init(options = {}) {
if (!shouldBeEnabled() && !options.forceEnable) {
return;
}
if(!enabled) {
APP.conference.addListener(
@ -156,122 +161,150 @@ class API {
enabled = true;
}
if(!postis) {
if (!postis) {
this._initPostis();
}
}
/**
* initializes postis library.
* Initializes postis library.
*
* @returns {void}
*
* @private
*/
_initPostis() {
let postisOptions = {
const postisOptions = {
window: target
};
if(typeof jitsi_meet_external_api_id === "number")
if (typeof jitsiMeetExternalApiId === 'number') {
postisOptions.scope
= "jitsi_meet_external_api_" + jitsi_meet_external_api_id;
= `jitsi_meet_external_api_${jitsiMeetExternalApiId}`;
}
postis = postisInit(postisOptions);
initCommands();
}
/**
* Notify external application (if API is enabled) that message was sent.
* @param {string} body message body
*
* @param {string} body - Message body.
* @returns {void}
*/
notifySendingChatMessage (body) {
triggerEvent("outgoing-message", {"message": body});
notifySendingChatMessage(body) {
triggerEvent('outgoing-message', { 'message': body });
}
/**
* Notify external application (if API is enabled) that
* message was received.
* @param {string} id user id
* @param {string} nick user nickname
* @param {string} body message body
* @param {number} ts message creation timestamp
*
* @param {Object} options - Object with the message properties.
* @returns {void}
*/
notifyReceivedChatMessage (id, nick, body, ts) {
notifyReceivedChatMessage(options = {}) {
const { id, nick, body, ts } = options;
if (APP.conference.isLocalId(id)) {
return;
}
triggerEvent(
"incoming-message",
{"from": id, "nick": nick, "message": body, "stamp": ts}
'incoming-message',
{ 'from': id,
'nick': nick,
'message': body,
'stamp': ts }
);
}
/**
* Notify external application (if API is enabled) that
* user joined the conference.
* @param {string} id user id
*
* @param {string} id - User id.
* @returns {void}
*/
notifyUserJoined (id) {
triggerEvent("participant-joined", {id});
notifyUserJoined(id) {
triggerEvent('participant-joined', { id });
}
/**
* Notify external application (if API is enabled) that
* user left the conference.
* @param {string} id user id
*
* @param {string} id - User id.
* @returns {void}
*/
notifyUserLeft (id) {
triggerEvent("participant-left", {id});
notifyUserLeft(id) {
triggerEvent('participant-left', { id });
}
/**
* Notify external application (if API is enabled) that
* user changed their nickname.
* @param {string} id user id
* @param {string} displayName user nickname
*
* @param {string} id - User id.
* @param {string} displayName - User nickname.
* @returns {void}
*/
notifyDisplayNameChanged (id, displayName) {
triggerEvent("display-name-change", {id, displayname: displayName});
notifyDisplayNameChanged(id, displayName) {
triggerEvent('display-name-change', { id,
displayname: displayName });
}
/**
* Notify external application (if API is enabled) that
* the conference has been joined.
*
* @param {string} room - The room name.
* @returns {void}
*/
notifyConferenceJoined(room) {
triggerEvent('video-conference-joined', { roomName: room });
}
/**
* Notify external application (if API is enabled) that
* user changed their nickname.
* @param {string} id user id
* @param {string} displayName user nickname
*
* @param {string} room - User id.
* @param {string} displayName - User nickname.
* @returns {void}
*/
notifyConferenceJoined (room) {
triggerEvent("video-conference-joined", {roomName: room});
}
/**
* Notify external application (if API is enabled) that
* user changed their nickname.
* @param {string} id user id
* @param {string} displayName user nickname
*/
notifyConferenceLeft (room) {
triggerEvent("video-conference-left", {roomName: room});
notifyConferenceLeft(room) {
triggerEvent('video-conference-left', { roomName: room });
}
/**
* Notify external application (if API is enabled) that
* we are ready to be closed.
*
* @returns {void}
*/
notifyReadyToClose () {
triggerEvent("video-ready-to-close", {});
notifyReadyToClose() {
triggerEvent('video-ready-to-close', {});
}
/**
* Sends remote control event.
* @param {RemoteControlEvent} event the remote control event.
*
* @param {RemoteControlEvent} event - The remote control event.
* @returns {void}
*/
sendRemoteControlEvent(event) {
sendMessage({method: "remote-control-event", params: event});
sendMessage({ method: 'remote-control-event',
params: event });
}
/**
* Removes the listeners.
*
* @returns {void}
*/
dispose () {
if(enabled) {
dispose() {
if (enabled) {
postis.destroy();
APP.conference.removeListener(
JitsiMeetConferenceEvents.DESKTOP_SHARING_ENABLED_CHANGED,

View File

@ -1,3 +0,0 @@
module.exports = {
'extends': '../../../react/.eslintrc.js'
};