diff --git a/index.html b/index.html
index fade156cc..12d59ae81 100644
--- a/index.html
+++ b/index.html
@@ -20,7 +20,7 @@
-
+
diff --git a/libs/app.bundle.js b/libs/app.bundle.js
index 159cc1326..f0ff92229 100644
--- a/libs/app.bundle.js
+++ b/libs/app.bundle.js
@@ -380,6 +380,7 @@ var APP =
this.settings = require("./modules/settings/Settings");
this.DTMF = require("./modules/DTMF/DTMF");
this.members = require("./modules/members/MemberList");
+ this.configFetch = require("./modules/config/HttpConfigFetch");
}
};
@@ -394,10 +395,38 @@ function init() {
APP.members.start();
}
+/**
+ * If we have HTTP endpoint for getting confgi.json configured we're going to
+ * read it and override properties from config.js and interfaceConfig.js.
+ * If there is no endpoint we'll just continue with initialization.
+ * Keep in mind that if the endpoint has been configured and we fail to obtain
+ * the config for any reason then the conference won't start and error message
+ * will be displayed to the user.
+ */
+function obtainConfigAndInit() {
+ if (config.configLocation) {
+ APP.configFetch.obtainConfig(
+ config.configLocation, APP.UI.getRoomNode(),
+ // Get config result callback
+ function(success, error) {
+ if (success) {
+ init();
+ } else {
+ // Show obtain config error,
+ // pass the error object for report
+ APP.UI.messageHandler.openReportDialog(
+ null, "dialog.connectError", error);
+ }
+ });
+ } else {
+ init();
+ }
+}
+
$(document).ready(function () {
- var URLProcessor = require("./modules/URLProcessor/URLProcessor");
+ var URLProcessor = require("./modules/config/URLProcessor");
URLProcessor.setConfigParametersFromUrl();
APP.init();
@@ -406,7 +435,7 @@ $(document).ready(function () {
if(APP.API.isEnabled())
APP.API.init();
- APP.UI.start(init);
+ APP.UI.start(obtainConfigAndInit);
});
@@ -418,7 +447,7 @@ $(window).bind('beforeunload', function () {
module.exports = APP;
-},{"./modules/API/API":4,"./modules/DTMF/DTMF":5,"./modules/RTC/RTC":9,"./modules/UI/UI":13,"./modules/URLProcessor/URLProcessor":44,"./modules/connectionquality/connectionquality":45,"./modules/desktopsharing/desktopsharing":46,"./modules/keyboardshortcut/keyboardshortcut":47,"./modules/members/MemberList":48,"./modules/settings/Settings":49,"./modules/statistics/statistics":53,"./modules/translation/translation":54,"./modules/xmpp/xmpp":70}],4:[function(require,module,exports){
+},{"./modules/API/API":4,"./modules/DTMF/DTMF":5,"./modules/RTC/RTC":9,"./modules/UI/UI":13,"./modules/config/HttpConfigFetch":44,"./modules/config/URLProcessor":45,"./modules/connectionquality/connectionquality":47,"./modules/desktopsharing/desktopsharing":48,"./modules/keyboardshortcut/keyboardshortcut":49,"./modules/members/MemberList":50,"./modules/settings/Settings":51,"./modules/statistics/statistics":55,"./modules/translation/translation":56,"./modules/xmpp/xmpp":72}],4:[function(require,module,exports){
/* global APP */
/**
* Implements API class that communicates with external api class
@@ -638,7 +667,7 @@ var API = {
};
module.exports = API;
-},{"../../service/xmpp/XMPPEvents":174}],5:[function(require,module,exports){
+},{"../../service/xmpp/XMPPEvents":176}],5:[function(require,module,exports){
/* global APP */
/**
@@ -880,7 +909,7 @@ function onPinnedEndpointChanged(userResource) {
module.exports = DataChannels;
-},{"../../service/RTC/RTCEvents":165}],7:[function(require,module,exports){
+},{"../../service/RTC/RTCEvents":167}],7:[function(require,module,exports){
/* global APP */
var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
var RTCEvents = require("../../service/RTC/RTCEvents");
@@ -1006,7 +1035,7 @@ LocalStream.prototype.getId = function () {
module.exports = LocalStream;
-},{"../../service/RTC/RTCEvents":165,"../../service/RTC/StreamEventTypes.js":167,"./RTCBrowserType":10}],8:[function(require,module,exports){
+},{"../../service/RTC/RTCEvents":167,"../../service/RTC/StreamEventTypes.js":169,"./RTCBrowserType":10}],8:[function(require,module,exports){
var MediaStreamType = require("../../service/RTC/MediaStreamTypes");
/**
@@ -1055,7 +1084,7 @@ MediaStream.prototype.setMute = function (value) {
module.exports = MediaStream;
-},{"../../service/RTC/MediaStreamTypes":164}],9:[function(require,module,exports){
+},{"../../service/RTC/MediaStreamTypes":166}],9:[function(require,module,exports){
/* global APP */
var EventEmitter = require("events");
var RTCBrowserType = require("./RTCBrowserType");
@@ -1332,7 +1361,7 @@ var RTC = {
module.exports = RTC;
-},{"../../service/RTC/MediaStreamTypes":164,"../../service/RTC/RTCEvents.js":165,"../../service/RTC/StreamEventTypes.js":167,"../../service/UI/UIEvents":168,"../../service/desktopsharing/DesktopSharingEventTypes":171,"../../service/xmpp/XMPPEvents":174,"./DataChannels":6,"./LocalStream.js":7,"./MediaStream.js":8,"./RTCBrowserType":10,"./RTCUtils.js":11,"events":1}],10:[function(require,module,exports){
+},{"../../service/RTC/MediaStreamTypes":166,"../../service/RTC/RTCEvents.js":167,"../../service/RTC/StreamEventTypes.js":169,"../../service/UI/UIEvents":170,"../../service/desktopsharing/DesktopSharingEventTypes":173,"../../service/xmpp/XMPPEvents":176,"./DataChannels":6,"./LocalStream.js":7,"./MediaStream.js":8,"./RTCBrowserType":10,"./RTCUtils.js":11,"events":1}],10:[function(require,module,exports){
var currentBrowser;
@@ -2066,7 +2095,7 @@ RTCUtils.prototype.createStream = function(stream, isVideo) {
module.exports = RTCUtils;
-},{"../../service/RTC/Resolutions":166,"../xmpp/SDPUtil":60,"./RTCBrowserType":10,"./adapter.screenshare":12}],12:[function(require,module,exports){
+},{"../../service/RTC/Resolutions":168,"../xmpp/SDPUtil":62,"./RTCBrowserType":10,"./adapter.screenshare":12}],12:[function(require,module,exports){
/*! adapterjs - custom version from - 2015-08-19 */
// Adapter's interface.
@@ -3267,6 +3296,7 @@ var UIEvents = require("../../service/UI/UIEvents");
var MemberEvents = require("../../service/members/Events");
var eventEmitter = new EventEmitter();
+var roomNode = null;
var roomName = null;
@@ -3918,17 +3948,16 @@ UI.getLargeVideoResource = function () {
return VideoLayout.getLargeVideoResource();
};
-UI.generateRoomName = function() {
- if(roomName)
- return roomName;
- var roomnode = null;
+UI.getRoomNode = function () {
+ if (roomNode)
+ return roomNode;
var path = window.location.pathname;
// determinde the room node from the url
// TODO: just the roomnode or the whole bare jid?
if (config.getroomnode && typeof config.getroomnode === 'function') {
// custom function might be responsible for doing the pushstate
- roomnode = config.getroomnode(path);
+ roomNode = config.getroomnode(path);
} else {
/* fall back to default strategy
* this is making assumptions about how the URL->room mapping happens.
@@ -3939,17 +3968,22 @@ UI.generateRoomName = function() {
}
*/
if (path.length > 1) {
- roomnode = path.substr(1).toLowerCase();
+ roomNode = path.substr(1).toLowerCase();
} else {
var word = RoomNameGenerator.generateRoomWithoutSeparator();
- roomnode = word.toLowerCase();
-
+ roomNode = word.toLowerCase();
window.history.pushState('VideoChat',
- 'Room: ' + word, window.location.pathname + word);
+ 'Room: ' + word, window.location.pathname + word);
}
}
+ return roomNode;
+};
- roomName = roomnode + '@' + config.hosts.muc;
+UI.generateRoomName = function () {
+ if (roomName)
+ return roomName;
+ var roomNode = UI.getRoomNode();
+ roomName = roomNode + '@' + config.hosts.muc;
return roomName;
};
@@ -4113,7 +4147,7 @@ UI.setVideoMute = setVideoMute;
module.exports = UI;
-},{"../../service/RTC/RTCEvents":165,"../../service/RTC/StreamEventTypes":167,"../../service/UI/UIEvents":168,"../../service/connectionquality/CQEvents":170,"../../service/desktopsharing/DesktopSharingEventTypes":171,"../../service/members/Events":172,"../../service/xmpp/XMPPEvents":174,"../RTC/RTCBrowserType":10,"./../settings/Settings":49,"./audio_levels/AudioLevels.js":14,"./authentication/Authentication":16,"./avatar/Avatar":18,"./etherpad/Etherpad.js":19,"./prezi/Prezi.js":20,"./side_pannels/SidePanelToggler":22,"./side_pannels/chat/Chat.js":23,"./side_pannels/contactlist/ContactList":27,"./side_pannels/settings/SettingsMenu":28,"./toolbars/BottomToolbar":29,"./toolbars/Toolbar":30,"./toolbars/ToolbarToggler":31,"./util/JitsiPopover":32,"./util/MessageHandler":33,"./util/NicknameHandler":34,"./util/UIUtil":35,"./videolayout/VideoLayout.js":41,"./welcome_page/RoomnameGenerator":42,"./welcome_page/WelcomePage":43,"events":1}],14:[function(require,module,exports){
+},{"../../service/RTC/RTCEvents":167,"../../service/RTC/StreamEventTypes":169,"../../service/UI/UIEvents":170,"../../service/connectionquality/CQEvents":172,"../../service/desktopsharing/DesktopSharingEventTypes":173,"../../service/members/Events":174,"../../service/xmpp/XMPPEvents":176,"../RTC/RTCBrowserType":10,"./../settings/Settings":51,"./audio_levels/AudioLevels.js":14,"./authentication/Authentication":16,"./avatar/Avatar":18,"./etherpad/Etherpad.js":19,"./prezi/Prezi.js":20,"./side_pannels/SidePanelToggler":22,"./side_pannels/chat/Chat.js":23,"./side_pannels/contactlist/ContactList":27,"./side_pannels/settings/SettingsMenu":28,"./toolbars/BottomToolbar":29,"./toolbars/Toolbar":30,"./toolbars/ToolbarToggler":31,"./util/JitsiPopover":32,"./util/MessageHandler":33,"./util/NicknameHandler":34,"./util/UIUtil":35,"./videolayout/VideoLayout.js":41,"./welcome_page/RoomnameGenerator":42,"./welcome_page/WelcomePage":43,"events":1}],14:[function(require,module,exports){
/* global APP, interfaceConfig, $, Strophe */
var CanvasUtil = require("./CanvasUtils");
@@ -4616,7 +4650,7 @@ var Authentication = {
};
module.exports = Authentication;
-},{"../../xmpp/moderator":62,"./LoginDialog":17}],17:[function(require,module,exports){
+},{"../../xmpp/moderator":64,"./LoginDialog":17}],17:[function(require,module,exports){
/* global $, APP, config*/
var XMPP = require('../../xmpp/xmpp');
@@ -4845,7 +4879,7 @@ var LoginDialog = {
};
module.exports = LoginDialog;
-},{"../../xmpp/moderator":62,"../../xmpp/xmpp":70}],18:[function(require,module,exports){
+},{"../../xmpp/moderator":64,"../../xmpp/xmpp":72}],18:[function(require,module,exports){
var Settings = require("../../settings/Settings");
var users = {};
@@ -4913,7 +4947,7 @@ var Avatar = {
module.exports = Avatar;
-},{"../../settings/Settings":49}],19:[function(require,module,exports){
+},{"../../settings/Settings":51}],19:[function(require,module,exports){
/* global $, config,
setLargeVideoVisible, Util */
@@ -5861,7 +5895,7 @@ var PanelToggler = (function(my) {
}(PanelToggler || {}));
module.exports = PanelToggler;
-},{"../toolbars/ToolbarToggler":31,"../util/UIUtil":35,"../videolayout/LargeVideo":37,"../videolayout/VideoLayout":41,"./../../settings/Settings":49,"./chat/Chat":23,"./contactlist/ContactList":27,"./settings/SettingsMenu":28}],23:[function(require,module,exports){
+},{"../toolbars/ToolbarToggler":31,"../util/UIUtil":35,"../videolayout/LargeVideo":37,"../videolayout/VideoLayout":41,"./../../settings/Settings":51,"./chat/Chat":23,"./contactlist/ContactList":27,"./settings/SettingsMenu":28}],23:[function(require,module,exports){
/* global APP, $, Util, nickname:true */
var Replacement = require("./Replacement");
var CommandsProcessor = require("./Commands");
@@ -6212,7 +6246,7 @@ var Chat = (function (my) {
return my;
}(Chat || {}));
module.exports = Chat;
-},{"../../../../service/UI/UIEvents":168,"../../toolbars/ToolbarToggler":31,"../../util/NicknameHandler":34,"../../util/UIUtil":35,"../SidePanelToggler":22,"./Commands":24,"./Replacement":25,"./smileys.json":26}],24:[function(require,module,exports){
+},{"../../../../service/UI/UIEvents":170,"../../toolbars/ToolbarToggler":31,"../../util/NicknameHandler":34,"../../util/UIUtil":35,"../SidePanelToggler":22,"./Commands":24,"./Replacement":25,"./smileys.json":26}],24:[function(require,module,exports){
/* global APP, require */
var UIUtil = require("../../util/UIUtil");
@@ -6717,7 +6751,7 @@ var SettingsMenu = {
module.exports = SettingsMenu;
-},{"../../../../service/translation/languages":173,"../../avatar/Avatar":18,"../../util/UIUtil":35,"./../../../settings/Settings":49}],29:[function(require,module,exports){
+},{"../../../../service/translation/languages":175,"../../avatar/Avatar":18,"../../util/UIUtil":35,"./../../../settings/Settings":51}],29:[function(require,module,exports){
/* global $ */
var PanelToggler = require("../side_pannels/SidePanelToggler");
@@ -7442,7 +7476,7 @@ var Toolbar = (function (my) {
}(Toolbar || {}));
module.exports = Toolbar;
-},{"../../../service/authentication/AuthenticationEvents":169,"../authentication/Authentication":16,"../etherpad/Etherpad":19,"../prezi/Prezi":20,"../side_pannels/SidePanelToggler":22,"../util/MessageHandler":33,"../util/UIUtil":35,"./BottomToolbar":29}],31:[function(require,module,exports){
+},{"../../../service/authentication/AuthenticationEvents":171,"../authentication/Authentication":16,"../etherpad/Etherpad":19,"../prezi/Prezi":20,"../side_pannels/SidePanelToggler":22,"../util/MessageHandler":33,"../util/UIUtil":35,"./BottomToolbar":29}],31:[function(require,module,exports){
/* global APP, config, $, interfaceConfig, Moderator,
DesktopStreaming.showDesktopSharingButton */
@@ -7967,7 +8001,7 @@ var NicknameHandler = {
};
module.exports = NicknameHandler;
-},{"../../../service/UI/UIEvents":168}],35:[function(require,module,exports){
+},{"../../../service/UI/UIEvents":170}],35:[function(require,module,exports){
/* global $ */
/**
* Created by hristo on 12/22/14.
@@ -9132,7 +9166,7 @@ var LargeVideo = {
};
module.exports = LargeVideo;
-},{"../../../service/UI/UIEvents":168,"../../RTC/RTCBrowserType":10,"../../xmpp/xmpp":70,"../avatar/Avatar":18,"../toolbars/ToolbarToggler":31,"../util/UIUtil":35}],38:[function(require,module,exports){
+},{"../../../service/UI/UIEvents":170,"../../RTC/RTCBrowserType":10,"../../xmpp/xmpp":72,"../avatar/Avatar":18,"../toolbars/ToolbarToggler":31,"../util/UIUtil":35}],38:[function(require,module,exports){
/* global $, interfaceConfig, APP */
var SmallVideo = require("./SmallVideo");
var ConnectionIndicator = require("./ConnectionIndicator");
@@ -9144,6 +9178,7 @@ var RTCBrowserType = require("../../RTC/RTCBrowserType");
function LocalVideo(VideoLayout) {
this.videoSpanId = "localVideoContainer";
this.container = $("#localVideoContainer").get(0);
+ this.bindHoverHandler();
this.VideoLayout = VideoLayout;
this.flipX = true;
this.isLocal = true;
@@ -9300,7 +9335,7 @@ LocalVideo.prototype.changeVideo = function (stream, isMuted) {
event.stopPropagation();
}
self.VideoLayout.handleVideoThumbClicked(
- false,
+ true,
APP.xmpp.myResource());
}
@@ -9308,19 +9343,6 @@ LocalVideo.prototype.changeVideo = function (stream, isMuted) {
localVideoContainerSelector.off('click');
localVideoContainerSelector.on('click', localVideoClick);
- // Add hover handler
- localVideoContainerSelector.hover(
- function() {
- self.showDisplayName(true);
- },
- function() {
- if (!LargeVideo.isLargeVideoVisible() ||
- !LargeVideo.isCurrentlyOnLarge(self.getResourceJid())) {
- self.showDisplayName(false);
- }
- }
- );
-
if(isMuted) {
APP.UI.setVideoMute(true);
return;
@@ -9400,6 +9422,7 @@ function RemoteVideo(peerJid, VideoLayout) {
nickfield.className = "nick";
nickfield.appendChild(document.createTextNode(this.resourceJid));
this.container.appendChild(nickfield);
+ this.bindHoverHandler();
this.flipX = false;
this.isLocal = false;
}
@@ -9571,7 +9594,7 @@ RemoteVideo.prototype.waitForPlayback = function (sel, stream) {
APP.RTC.attachMediaStream(sel, stream);
}
if (RTCBrowserType.isTemasysPluginUsed()) {
- sel = self.VideoLayout.getPeerVideoSel(resourceJid);
+ sel = self.selectVideoElement();
}
self.VideoLayout.videoactive(sel, resourceJid);
sel[0].onplaying = null;
@@ -9613,9 +9636,6 @@ RemoteVideo.prototype.addRemoteStreamElement = function (sid, stream, thessrc) {
};
- // Name of video element name is different for IE/Safari
- var videoElem = APP.RTC.getVideoElementName();
-
// Add click handler.
var onClickHandler = function (event) {
@@ -9635,21 +9655,6 @@ RemoteVideo.prototype.addRemoteStreamElement = function (sid, stream, thessrc) {
if (RTCBrowserType.isTemasysPluginUsed())
sel = $('#' + newElementId);
sel[0].onclick = onClickHandler;
-
- //FIXME
- // Add hover handler
- $(this.container).hover(
- function() {
- self.showDisplayName(true);
- },
- function() {
- // If the video has been "pinned" by the user we want to
- // keep the display name on place.
- if (!LargeVideo.isLargeVideoVisible() ||
- !LargeVideo.isCurrentlyOnLarge(self.getResourceJid()))
- self.showDisplayName(false);
- }
- );
},
/**
@@ -9918,6 +9923,26 @@ SmallVideo.createStreamElement = function (sid, stream) {
return element;
};
+/**
+ * Configures hoverIn/hoverOut handlers.
+ */
+SmallVideo.prototype.bindHoverHandler = function () {
+ // Add hover handler
+ var self = this;
+ $(this.container).hover(
+ function () {
+ self.showDisplayName(true);
+ },
+ function () {
+ // If the video has been "pinned" by the user we want to
+ // keep the display name on place.
+ if (!LargeVideo.isLargeVideoVisible() ||
+ !LargeVideo.isCurrentlyOnLarge(self.getResourceJid()))
+ self.showDisplayName(false);
+ }
+ );
+};
+
/**
* Updates the data for the indicator
* @param id the id of the indicator
@@ -10082,10 +10107,20 @@ SmallVideo.prototype.createModeratorIndicatorElement = function () {
APP.translation.translateElement($('#' + this.videoSpanId + ' .focusindicator'));
};
+SmallVideo.prototype.selectVideoElement = function () {
+ var videoElem = APP.RTC.getVideoElementName();
+ if (!RTCBrowserType.isTemasysPluginUsed()) {
+ return $('#' + this.videoSpanId).find(videoElem);
+ } else {
+ return $('#' + this.videoSpanId +
+ (this.isLocal ? '>>' : '>') +
+ videoElem + '>param[value="video"]').parent();
+ }
+};
+
SmallVideo.prototype.getSrc = function () {
- var videoElement = APP.RTC.getVideoElementName();
- return APP.RTC.getVideoSrc(
- $('#' + this.videoSpanId).find(videoElement).get(0));
+ var videoElement = this.selectVideoElement().get(0);
+ return APP.RTC.getVideoSrc(videoElement);
};
SmallVideo.prototype.focus = function(isFocused) {
@@ -10097,8 +10132,7 @@ SmallVideo.prototype.focus = function(isFocused) {
};
SmallVideo.prototype.hasVideo = function () {
- return $("#" + this.videoSpanId).find(
- APP.RTC.getVideoElementName()).length !== 0;
+ return this.selectVideoElement().length !== 0;
};
/**
@@ -10118,8 +10152,8 @@ SmallVideo.prototype.showAvatar = function (show) {
}
var resourceJid = this.getResourceJid();
- var videoElem = APP.RTC.getVideoElementName();
- var video = $('#' + this.videoSpanId).find(videoElem);
+ var video = this.selectVideoElement();
+
var avatar = $('#avatar_' + resourceJid);
if (show === undefined || show === null) {
@@ -10313,21 +10347,21 @@ var VideoLayout = (function (my) {
}
};
- my.electLastVisibleVideo = function() {
+ my.electLastVisibleVideo = function () {
// pick the last visible video in the row
// if nobody else is left, this picks the local video
var jid;
- var videoElem = RTC.getVideoElementName();
- var pick = $('#remoteVideos>span[id!="mixedstream"]:visible:last>' + videoElem);
- if (pick.length && APP.RTC.getVideoSrc(pick[0])) {
- jid = VideoLayout.getPeerContainerResourceJid(pick[0].parentNode);
+ var pick = $('#remoteVideos>span[id!="mixedstream"]:visible:last');
+ if (pick.length) {
+ jid = VideoLayout.getPeerContainerResourceJid(pick[0]);
} else {
console.info("Last visible video no longer exists");
- pick = $('#remoteVideos>span[id!="mixedstream"]>' + videoElem);
- if (pick.length && APP.RTC.getVideoSrc(pick[0])) {
- jid = VideoLayout.getPeerContainerResourceJid(pick[0].parentNode);
- } else {
- // Try local video
+ pick = $('#remoteVideos>span[id!="mixedstream"]');
+ if (pick.length) {
+ jid = VideoLayout.getPeerContainerResourceJid(pick[0]);
+ }
+ if (!jid) {
+ // Go with local video
console.info("Fallback to local video...");
jid = APP.xmpp.myResource();
}
@@ -10635,15 +10669,14 @@ var VideoLayout = (function (my) {
* DOM element
*/
my.getPeerContainerResourceJid = function (containerElement) {
+ if (localVideoThumbnail.container === containerElement) {
+ return localVideoThumbnail.getResourceJid();
+ }
+
var i = containerElement.id.indexOf('participant_');
if (i >= 0)
- return containerElement.id.substring(i + 12);
- };
-
- my.getPeerVideoSel = function (peerResourceJid) {
- return $('#participant_' + peerResourceJid +
- '>' + APP.RTC.getVideoElementName());
+ return containerElement.id.substring(i + 12);
};
/**
@@ -10660,9 +10693,9 @@ var VideoLayout = (function (my) {
}
var resource = Strophe.getResourceFromJid(jid);
- var videoSel = VideoLayout.getPeerVideoSel(resource);
- if (videoSel.length > 0) {
- var videoThumb = videoSel[0];
+ var remoteVideo = remoteVideos[resource];
+ if (remoteVideo && remoteVideo.selectVideoElement().length) {
+ var videoThumb = remoteVideo.selectVideoElement()[0];
// It is not always the case that a videoThumb exists (if there is
// no actual video).
if (RTC.getVideoSrc(videoThumb)) {
@@ -10721,9 +10754,10 @@ var VideoLayout = (function (my) {
var resource = Strophe.getResourceFromJid(jid);
VideoLayout.ensurePeerContainerExists(jid);
- remoteVideos[resource].showVideoIndicator(value);
+ var remoteVideo = remoteVideos[resource];
+ remoteVideo.showVideoIndicator(value);
- var el = VideoLayout.getPeerVideoSel(resource);
+ var el = remoteVideo.selectVideoElement();
if (!value)
el.show();
else
@@ -10755,18 +10789,19 @@ var VideoLayout = (function (my) {
if (resourceJid === APP.xmpp.myResource())
return;
+ var remoteVideo = remoteVideos[resourceJid];
var members = APP.xmpp.getMembers();
// Update the current dominant speaker.
if (resourceJid !== currentDominantSpeaker) {
var currentJID = APP.xmpp.findJidFromResource(currentDominantSpeaker);
var newJID = APP.xmpp.findJidFromResource(resourceJid);
- if(currentDominantSpeaker && (!members || !members[currentJID] ||
- !members[currentJID].displayName) && remoteVideos[resourceJid]) {
- remoteVideos[resourceJid].setDisplayName(null);
+ if (currentDominantSpeaker && (!members || !members[currentJID] ||
+ !members[currentJID].displayName) && remoteVideo) {
+ remoteVideo.setDisplayName(null);
}
- if(resourceJid && (!members || !members[newJID] ||
- !members[newJID].displayName) && remoteVideos[resourceJid]) {
- remoteVideos[resourceJid].setDisplayName(null,
+ if (resourceJid && (!members || !members[newJID] ||
+ !members[newJID].displayName) && remoteVideo) {
+ remoteVideo.setDisplayName(null,
interfaceConfig.DEFAULT_DOMINANT_SPEAKER_DISPLAY_NAME);
}
currentDominantSpeaker = resourceJid;
@@ -10774,8 +10809,11 @@ var VideoLayout = (function (my) {
return;
}
+ if (!remoteVideo)
+ return;
+
// Obtain container for new dominant speaker.
- var videoSel = VideoLayout.getPeerVideoSel(resourceJid);
+ var videoSel = remoteVideo.selectVideoElement();
// Local video will not have container found, but that's ok
// since we don't want to switch to local video.
@@ -10845,13 +10883,19 @@ var VideoLayout = (function (my) {
lastNEndpoints.indexOf(resourceJid) < 0 &&
localLastNSet.indexOf(resourceJid) < 0) {
console.log("Remove from last N", resourceJid);
- remoteVideos[resourceJid].showPeerContainer('hide');
+ if (remoteVideos[resourceJid])
+ remoteVideos[resourceJid].showPeerContainer('hide');
+ else if (APP.xmpp.myResource() !== resourceJid)
+ console.error("No remote video for: " + resourceJid);
isReceived = false;
} else if (resourceJid &&
$('#participant_' + resourceJid).is(':visible') &&
lastNEndpoints.indexOf(resourceJid) < 0 &&
localLastNSet.indexOf(resourceJid) >= 0) {
- remoteVideos[resourceJid].showPeerContainer('avatar');
+ if (remoteVideos[resourceJid])
+ remoteVideos[resourceJid].showPeerContainer('avatar');
+ else if (APP.xmpp.myResource() !== resourceJid)
+ console.error("No remote video for: " + resourceJid);
isReceived = false;
}
@@ -10874,14 +10918,15 @@ var VideoLayout = (function (my) {
endpointsEnteringLastN.forEach(function (resourceJid) {
var isVisible = $('#participant_' + resourceJid).is(':visible');
- remoteVideos[resourceJid].showPeerContainer('show');
+ var remoteVideo = remoteVideos[resourceJid];
+ remoteVideo.showPeerContainer('show');
if (!isVisible) {
console.log("Add to last N", resourceJid);
var jid = APP.xmpp.findJidFromResource(resourceJid);
var mediaStream =
APP.RTC.remoteStreams[jid][MediaStreamType.VIDEO_TYPE];
- var sel = VideoLayout.getPeerVideoSel(resourceJid);
+ var sel = remoteVideo.selectVideoElement();
APP.RTC.attachMediaStream(sel, mediaStream.stream);
if (lastNPickupJid == mediaStream.peerjid) {
@@ -11165,7 +11210,7 @@ var VideoLayout = (function (my) {
}(VideoLayout || {}));
module.exports = VideoLayout;
-},{"../../../service/RTC/MediaStreamTypes":164,"../../../service/UI/UIEvents":168,"../../RTC/RTC":9,"../../RTC/RTCBrowserType":10,"../audio_levels/AudioLevels":14,"../prezi/Prezi":20,"../side_pannels/contactlist/ContactList":27,"../util/UIUtil":35,"./LargeVideo":37,"./LocalVideo":38,"./RemoteVideo":39}],42:[function(require,module,exports){
+},{"../../../service/RTC/MediaStreamTypes":166,"../../../service/UI/UIEvents":170,"../../RTC/RTC":9,"../../RTC/RTCBrowserType":10,"../audio_levels/AudioLevels":14,"../prezi/Prezi":20,"../side_pannels/contactlist/ContactList":27,"../util/UIUtil":35,"./LargeVideo":37,"./LocalVideo":38,"./RemoteVideo":39}],42:[function(require,module,exports){
//var nouns = [
//];
var pluralNouns = [
@@ -11445,13 +11490,70 @@ function setupWelcomePage() {
module.exports = setupWelcomePage;
},{"./RoomnameGenerator":42}],44:[function(require,module,exports){
/* global $, $iq, config, interfaceConfig */
+
+var configUtil = require('./Util');
+
+var HttpConfig = {
+ /**
+ * Sends HTTP POST request to specified endpoint. In request
+ * the name of the room is included in JSON format:
+ * {
+ * "rooomName": "someroom12345"
+ * }
+ * @param endpoint the name of HTTP endpoint to which HTTP POST request will
+ * be sent.
+ * @param roomName the name of the conference room for which config will be
+ * requested.
+ * @param complete
+ */
+ obtainConfig: function (endpoint, roomName, complete) {
+ console.info(
+ "Send config request to " + endpoint + " for room: " + roomName);
+
+ var request = new XMLHttpRequest();
+ var error = null;
+ request.onreadystatechange = function (aEvt) {
+ if (request.readyState == 4) {
+ var status = request.status;
+ if (status === 200) {
+ try {
+ var data = JSON.parse(request.responseText);
+ configUtil.overrideConfigJSON(
+ config, interfaceConfig, data);
+ complete(true);
+ return;
+ } catch (exception) {
+ console.error("Parse config error: ", exception);
+ error = exception;
+ }
+ } else {
+ console.error("Get config error: ", request, status);
+ error = "Get config response status: " + status;
+ }
+ complete(false, error);
+ }
+ };
+
+ request.open("POST", endpoint, true);
+
+ request.setRequestHeader(
+ "Content-Type", "application/json;charset=UTF-8");
+
+ request.send({ "roomName": roomName });
+ }
+};
+
+module.exports = HttpConfig;
+},{"./Util":46}],45:[function(require,module,exports){
+/* global $, $iq, config, interfaceConfig */
+var configUtils = require('./Util');
var params = {};
function getConfigParamsFromUrl() {
- if(!location.hash)
+ if (!location.hash)
return {};
var hash = location.hash.substr(1);
var result = {};
- hash.split("&").forEach(function(part) {
+ hash.split("&").forEach(function (part) {
var item = part.split("=");
result[item[0]] = JSON.parse(
decodeURIComponent(item[1]).replace(/\\&/, "&"));
@@ -11463,38 +11565,102 @@ params = getConfigParamsFromUrl();
var URLProcessor = {
setConfigParametersFromUrl: function () {
- for(var key in params) {
- if(typeof key !== "string")
+ // Convert 'params' to JSON object
+ // We have:
+ // {
+ // "config.disableAudioLevels": false,
+ // "config.channelLastN": -1,
+ // "interfaceConfig.APP_NAME": "Jitsi Meet"
+ // }
+ // We want to have:
+ // {
+ // "config": {
+ // "disableAudioLevels": false,
+ // "channelLastN": -1
+ // },
+ // interfaceConfig: {
+ // APP_NAME: "Jitsi Meet"
+ // }
+ // }
+ var configJSON = {
+ config: {},
+ interfaceConfig: {}
+ };
+ for (var key in params) {
+ if (typeof key !== "string") {
+ console.warn("Invalid config key: ", key);
continue;
-
+ }
var confObj = null, confKey;
if (key.indexOf("config.") === 0) {
- confObj = config;
+ confObj = configJSON.config;
confKey = key.substr("config.".length);
} else if (key.indexOf("interfaceConfig.") === 0) {
- confObj = interfaceConfig;
+ confObj = configJSON.interfaceConfig;
confKey = key.substr("interfaceConfig.".length);
}
if (!confObj)
continue;
- var value = params[key];
- if (confObj[confKey] && typeof confObj[confKey] !== typeof value)
- {
- console.warn("The type of " + key +
- " is wrong. That parameter won't be updated in config.js.");
- continue;
- }
-
- confObj[confKey] = value;
+ confObj[confKey] = params[key];
}
-
+ configUtils.overrideConfigJSON(config, interfaceConfig, configJSON);
}
};
module.exports = URLProcessor;
-},{}],45:[function(require,module,exports){
+},{"./Util":46}],46:[function(require,module,exports){
+/* global $ */
+var ConfigUtil = {
+ /**
+ * Method overrides JSON properties in config and
+ * interfaceConfig Objects with the values from newConfig
+ * @param config the config object for which we'll be overriding properties
+ * @param interfaceConfig the interfaceConfig object for which we'll be
+ * overriding properties.
+ * @param newConfig object containing configuration properties. Destination
+ * object is selected based on root property name:
+ * {
+ * config: {
+ * // config.js properties to be
+ * },
+ * interfaceConfig: {
+ * // interfaceConfig.js properties here
+ * }
+ * }
+ */
+ overrideConfigJSON: function (config, interfaceConfig, newConfig) {
+ for (var configRoot in newConfig) {
+
+ var confObj = null;
+ if (configRoot == "config") {
+ confObj = config;
+ } else if (configRoot == "interfaceConfig") {
+ confObj = interfaceConfig;
+ } else {
+ continue;
+ }
+
+ for (var key in newConfig[configRoot]) {
+ var value = newConfig[configRoot][key];
+ if (confObj[key] && typeof confObj[key] !== typeof value)
+ {
+ console.warn(
+ "The type of " + key +
+ " is wrong. That parameter won't be updated in: ",
+ confObj);
+ continue;
+ }
+ console.info("Overriding " + key + " with: " + value);
+ confObj[key] = value;
+ }
+ }
+ }
+};
+
+module.exports = ConfigUtil;
+},{}],47:[function(require,module,exports){
/* global APP, require */
var EventEmitter = require("events");
var eventEmitter = new EventEmitter();
@@ -11629,7 +11795,7 @@ var ConnectionQuality = {
};
module.exports = ConnectionQuality;
-},{"../../service/connectionquality/CQEvents":170,"../../service/xmpp/XMPPEvents":174,"events":1}],46:[function(require,module,exports){
+},{"../../service/connectionquality/CQEvents":172,"../../service/xmpp/XMPPEvents":176,"events":1}],48:[function(require,module,exports){
/* global $, alert, APP, changeLocalVideo, chrome, config, getConferenceHandler,
getUserMediaWithConstraints */
/**
@@ -12018,7 +12184,7 @@ module.exports = {
};
-},{"../../service/RTC/RTCEvents":165,"../../service/desktopsharing/DesktopSharingEventTypes":171,"../RTC/RTCBrowserType":10,"../RTC/adapter.screenshare":12,"events":1}],47:[function(require,module,exports){
+},{"../../service/RTC/RTCEvents":167,"../../service/desktopsharing/DesktopSharingEventTypes":173,"../RTC/RTCBrowserType":10,"../RTC/adapter.screenshare":12,"events":1}],49:[function(require,module,exports){
/* global APP, $ */
//maps keycode to character, id of popover for given function and function
var shortcuts = {};
@@ -12116,7 +12282,7 @@ var KeyboardShortcut = {
module.exports = KeyboardShortcut;
-},{}],48:[function(require,module,exports){
+},{}],50:[function(require,module,exports){
/* global APP, require, $ */
/**
@@ -12246,7 +12412,7 @@ var Members = {
module.exports = Members;
-},{"../../service/members/Events":172,"../../service/xmpp/XMPPEvents":174,"events":1}],49:[function(require,module,exports){
+},{"../../service/members/Events":174,"../../service/xmpp/XMPPEvents":176,"events":1}],51:[function(require,module,exports){
var email = '';
var displayName = '';
var userId;
@@ -12311,7 +12477,7 @@ var Settings = {
module.exports = Settings;
-},{}],50:[function(require,module,exports){
+},{}],52:[function(require,module,exports){
/* global config, $, APP, Strophe, callstats */
var jsSHA = require('jssha');
var io = require('socket.io-client');
@@ -12390,7 +12556,7 @@ var CallStats = {
};
module.exports = CallStats;
-},{"jssha":73,"socket.io-client":111}],51:[function(require,module,exports){
+},{"jssha":75,"socket.io-client":113}],53:[function(require,module,exports){
/* global config */
/**
* Provides statistics for the local stream.
@@ -12517,7 +12683,7 @@ LocalStatsCollector.prototype.stop = function () {
};
module.exports = LocalStatsCollector;
-},{"../RTC/RTCBrowserType":10}],52:[function(require,module,exports){
+},{"../RTC/RTCBrowserType":10}],54:[function(require,module,exports){
/* global require, ssrc2jid */
/* jshint -W117 */
var RTCBrowserType = require("../RTC/RTCBrowserType");
@@ -13253,7 +13419,7 @@ StatsCollector.prototype.processAudioLevelReport = function () {
}
};
-},{"../RTC/RTCBrowserType":10}],53:[function(require,module,exports){
+},{"../RTC/RTCBrowserType":10}],55:[function(require,module,exports){
/* global require, APP */
/**
* Created by hristo on 8/4/14.
@@ -13395,7 +13561,7 @@ var statistics = {
module.exports = statistics;
-},{"../../service/RTC/RTCEvents":165,"../../service/RTC/StreamEventTypes.js":167,"../../service/xmpp/XMPPEvents":174,"./CallStats":50,"./LocalStatsCollector.js":51,"./RTPStatsCollector.js":52,"events":1}],54:[function(require,module,exports){
+},{"../../service/RTC/RTCEvents":167,"../../service/RTC/StreamEventTypes.js":169,"../../service/xmpp/XMPPEvents":176,"./CallStats":52,"./LocalStatsCollector.js":53,"./RTPStatsCollector.js":54,"events":1}],56:[function(require,module,exports){
/* global $, require, config, interfaceConfig */
var i18n = require("i18next-client");
var languages = require("../../service/translation/languages");
@@ -13533,7 +13699,7 @@ module.exports = {
}
};
-},{"../../service/translation/languages":173,"../settings/Settings":49,"i18next-client":72}],55:[function(require,module,exports){
+},{"../../service/translation/languages":175,"../settings/Settings":51,"i18next-client":74}],57:[function(require,module,exports){
/*
* JingleSession provides an API to manage a single Jingle session. We will
* have different implementations depending on the underlying interface used
@@ -13662,7 +13828,7 @@ JingleSession.prototype.setAnswer = function(jingle) {};
module.exports = JingleSession;
-},{}],56:[function(require,module,exports){
+},{}],58:[function(require,module,exports){
/* jshint -W117 */
var JingleSession = require("./JingleSession");
var TraceablePeerConnection = require("./TraceablePeerConnection");
@@ -15111,7 +15277,7 @@ JingleSessionPC.prototype.remoteStreamAdded = function (data, times) {
module.exports = JingleSessionPC;
-},{"../../service/xmpp/XMPPEvents":174,"../RTC/RTCBrowserType":10,"./JingleSession":55,"./LocalSSRCReplacement":57,"./SDP":58,"./SDPDiffer":59,"./SDPUtil":60,"./TraceablePeerConnection":61,"async":71,"sdp-transform":108}],57:[function(require,module,exports){
+},{"../../service/xmpp/XMPPEvents":176,"../RTC/RTCBrowserType":10,"./JingleSession":57,"./LocalSSRCReplacement":59,"./SDP":60,"./SDPDiffer":61,"./SDPUtil":62,"./TraceablePeerConnection":63,"async":73,"sdp-transform":110}],59:[function(require,module,exports){
/* global $ */
/*
@@ -15381,7 +15547,7 @@ var LocalSSRCReplacement = {
module.exports = LocalSSRCReplacement;
-},{"../RTC/RTCBrowserType":10,"./SDP":58}],58:[function(require,module,exports){
+},{"../RTC/RTCBrowserType":10,"./SDP":60}],60:[function(require,module,exports){
/* jshint -W117 */
var SDPUtil = require("./SDPUtil");
@@ -16007,7 +16173,7 @@ SDP.prototype.jingle2media = function (content) {
module.exports = SDP;
-},{"./SDPUtil":60}],59:[function(require,module,exports){
+},{"./SDPUtil":62}],61:[function(require,module,exports){
var SDPUtil = require("./SDPUtil");
@@ -16179,7 +16345,7 @@ SDPDiffer.prototype.toJingle = function(modify) {
};
module.exports = SDPDiffer;
-},{"./SDPUtil":60}],60:[function(require,module,exports){
+},{"./SDPUtil":62}],62:[function(require,module,exports){
SDPUtil = {
filter_special_chars: function (text) {
return text.replace(/[\\\/\{,\}\+]/g, "");
@@ -16532,7 +16698,7 @@ SDPUtil = {
}
};
module.exports = SDPUtil;
-},{}],61:[function(require,module,exports){
+},{}],63:[function(require,module,exports){
var RTC = require('../RTC/RTC');
var RTCBrowserType = require("../RTC/RTCBrowserType.js");
var XMPPEvents = require("../../service/xmpp/XMPPEvents");
@@ -16987,7 +17153,7 @@ TraceablePeerConnection.prototype.getStats = function(callback, errback) {
module.exports = TraceablePeerConnection;
-},{"../../service/xmpp/XMPPEvents":174,"../RTC/RTC":9,"../RTC/RTCBrowserType.js":10,"./LocalSSRCReplacement":57,"sdp-interop":94,"sdp-simulcast":101,"sdp-transform":108}],62:[function(require,module,exports){
+},{"../../service/xmpp/XMPPEvents":176,"../RTC/RTC":9,"../RTC/RTCBrowserType.js":10,"./LocalSSRCReplacement":59,"sdp-interop":96,"sdp-simulcast":103,"sdp-transform":110}],64:[function(require,module,exports){
/* global $, $iq, APP, config, messageHandler,
roomName, sessionTerminated, Strophe, Util */
var XMPPEvents = require("../../service/xmpp/XMPPEvents");
@@ -17025,7 +17191,7 @@ var externalAuthEnabled = false;
// Sip gateway can be enabled by configuring Jigasi host in config.js or
// it will be enabled automatically if focus detects the component through
// service discovery.
-var sipGatewayEnabled = config.hosts.call_control !== undefined;
+var sipGatewayEnabled;
var eventEmitter = null;
@@ -17055,6 +17221,9 @@ var Moderator = {
this.xmppService = xmpp;
eventEmitter = emitter;
+ sipGatewayEnabled =
+ config.hosts && config.hosts.call_control !== undefined;
+
// Message listener that talks to POPUP window
function listener(event) {
if (event.data && event.data.sessionId) {
@@ -17420,7 +17589,7 @@ module.exports = Moderator;
-},{"../../service/authentication/AuthenticationEvents":169,"../../service/xmpp/XMPPEvents":174,"../settings/Settings":49}],63:[function(require,module,exports){
+},{"../../service/authentication/AuthenticationEvents":171,"../../service/xmpp/XMPPEvents":176,"../settings/Settings":51}],65:[function(require,module,exports){
/* global $, $iq, config, connection, focusMucJid, messageHandler,
Toolbar, Util */
var Moderator = require("./moderator");
@@ -17433,7 +17602,7 @@ var recordingEnabled;
* Whether to use a jirecon component for recording, or use the videobridge
* through COLIBRI.
*/
-var useJirecon = (typeof config.hosts.jirecon != "undefined");
+var useJirecon;
/**
* The ID of the jirecon recording session. Jirecon generates it when we
@@ -17532,6 +17701,10 @@ function setRecording(state, token, callback, connection) {
}
var Recording = {
+ init: function () {
+ useJirecon = config.hosts &&
+ (typeof config.hosts.jirecon != "undefined");
+ },
toggleRecording: function (tokenEmptyCallback, recordingStateChangeCallback, connection) {
if (!Moderator.isModerator()) {
console.log(
@@ -17590,7 +17763,7 @@ var Recording = {
};
module.exports = Recording;
-},{"./moderator":62}],64:[function(require,module,exports){
+},{"./moderator":64}],66:[function(require,module,exports){
/* jshint -W117 */
/* a simple MUC connection plugin
* can only handle a single MUC room
@@ -18233,7 +18406,7 @@ module.exports = function(XMPP, eventEmitter) {
};
-},{"../../service/xmpp/XMPPEvents":174,"./moderator":62}],65:[function(require,module,exports){
+},{"../../service/xmpp/XMPPEvents":176,"./moderator":64}],67:[function(require,module,exports){
/* jshint -W117 */
var JingleSession = require("./JingleSessionPC");
@@ -18576,7 +18749,7 @@ module.exports = function(XMPP, eventEmitter) {
};
-},{"../../service/xmpp/XMPPEvents":174,"../RTC/RTCBrowserType":10,"./JingleSessionPC":56}],66:[function(require,module,exports){
+},{"../../service/xmpp/XMPPEvents":176,"../RTC/RTCBrowserType":10,"./JingleSessionPC":58}],68:[function(require,module,exports){
/* global Strophe */
module.exports = function () {
@@ -18597,7 +18770,7 @@ module.exports = function () {
}
});
};
-},{}],67:[function(require,module,exports){
+},{}],69:[function(require,module,exports){
/* global $, $iq, config, connection, focusMucJid, forceMuted,
setAudioMuted, Strophe */
/**
@@ -18658,7 +18831,7 @@ module.exports = function (XMPP, eventEmitter) {
}
});
}
-},{"../../service/xmpp/XMPPEvents":174}],68:[function(require,module,exports){
+},{"../../service/xmpp/XMPPEvents":176}],70:[function(require,module,exports){
/* jshint -W117 */
module.exports = function() {
Strophe.addConnectionPlugin('rayo',
@@ -18755,7 +18928,7 @@ module.exports = function() {
);
};
-},{}],69:[function(require,module,exports){
+},{}],71:[function(require,module,exports){
/**
* Strophe logger implementation. Logs from level WARN and above.
*/
@@ -18799,7 +18972,7 @@ module.exports = function () {
};
};
-},{}],70:[function(require,module,exports){
+},{}],72:[function(require,module,exports){
/* global $, APP, config, Strophe*/
var Moderator = require("./moderator");
var EventEmitter = require("events");
@@ -19072,6 +19245,7 @@ var XMPP = {
initStrophePlugins();
registerListeners();
Moderator.init(this, eventEmitter);
+ Recording.init();
var configDomain = config.hosts.anonymousdomain || config.hosts.domain;
// Force authenticated domain if room is appended with '?login=true'
if (config.hosts.anonymousdomain &&
@@ -19369,7 +19543,7 @@ var XMPP = {
module.exports = XMPP;
-},{"../../service/RTC/RTCEvents":165,"../../service/RTC/StreamEventTypes":167,"../../service/xmpp/XMPPEvents":174,"../settings/Settings":49,"./SDP":58,"./moderator":62,"./recording":63,"./strophe.emuc":64,"./strophe.jingle":65,"./strophe.logger":66,"./strophe.moderate":67,"./strophe.rayo":68,"./strophe.util":69,"events":1,"pako":74,"retry":90}],71:[function(require,module,exports){
+},{"../../service/RTC/RTCEvents":167,"../../service/RTC/StreamEventTypes":169,"../../service/xmpp/XMPPEvents":176,"../settings/Settings":51,"./SDP":60,"./moderator":64,"./recording":65,"./strophe.emuc":66,"./strophe.jingle":67,"./strophe.logger":68,"./strophe.moderate":69,"./strophe.rayo":70,"./strophe.util":71,"events":1,"pako":76,"retry":92}],73:[function(require,module,exports){
(function (process){
/*!
* async
@@ -20496,7 +20670,7 @@ module.exports = XMPP;
}());
}).call(this,require('_process'))
-},{"_process":2}],72:[function(require,module,exports){
+},{"_process":2}],74:[function(require,module,exports){
// i18next, v1.7.7
// Copyright (c)2014 Jan Mühlemann (jamuhl).
// Distributed under MIT license
@@ -22619,7 +22793,7 @@ module.exports = XMPP;
i18n.options = o;
})();
-},{"jquery":"jquery"}],73:[function(require,module,exports){
+},{"jquery":"jquery"}],75:[function(require,module,exports){
/*
A JavaScript implementation of the SHA family of hashes, as
defined in FIPS PUB 180-2 as well as the corresponding HMAC implementation
@@ -22655,7 +22829,7 @@ d[2]),new e(355462360,d[3]),new e(1731405415,d[4]),new e(41048885895,d[5]),new e
new e(a[m*x+p],a[m*x+p+1]):y(E(A[m-2]),A[m-7],D(A[m-15]),A[m-16]),v=C(u,G(l),H(l,r,t),k[m],A[m]),z=q(F(c),I(c,g,f)),u=t,t=r,r=l,l=q(h,v),h=f,f=g,g=c,c=q(v,z);d[0]=q(c,d[0]);d[1]=q(g,d[1]);d[2]=q(f,d[2]);d[3]=q(h,d[3]);d[4]=q(l,d[4]);d[5]=q(r,d[5]);d[6]=q(t,d[6]);d[7]=q(u,d[7])}if("SHA-224"===b)a=[d[0],d[1],d[2],d[3],d[4],d[5],d[6]];else if("SHA-256"===b)a=d;else if("SHA-384"===b)a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b];else if("SHA-512"===b)a=[d[0].a,
d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b,d[6].a,d[6].b,d[7].a,d[7].b];else throw"Unexpected error in SHA-2 implementation";return a}"function"===typeof define&&typeof define.amd?define(function(){return z}):"undefined"!==typeof exports?"undefined"!==typeof module&&module.exports?module.exports=exports=z:exports=z:T.jsSHA=z})(this);
-},{}],74:[function(require,module,exports){
+},{}],76:[function(require,module,exports){
// Top level file is just a mixin of submodules & constants
'use strict';
@@ -22671,7 +22845,7 @@ assign(pako, deflate, inflate, constants);
module.exports = pako;
-},{"./lib/deflate":75,"./lib/inflate":76,"./lib/utils/common":77,"./lib/zlib/constants":80}],75:[function(require,module,exports){
+},{"./lib/deflate":77,"./lib/inflate":78,"./lib/utils/common":79,"./lib/zlib/constants":82}],77:[function(require,module,exports){
'use strict';
@@ -23049,7 +23223,7 @@ exports.deflate = deflate;
exports.deflateRaw = deflateRaw;
exports.gzip = gzip;
-},{"./utils/common":77,"./utils/strings":78,"./zlib/deflate.js":82,"./zlib/messages":87,"./zlib/zstream":89}],76:[function(require,module,exports){
+},{"./utils/common":79,"./utils/strings":80,"./zlib/deflate.js":84,"./zlib/messages":89,"./zlib/zstream":91}],78:[function(require,module,exports){
'use strict';
@@ -23430,7 +23604,7 @@ exports.inflate = inflate;
exports.inflateRaw = inflateRaw;
exports.ungzip = inflate;
-},{"./utils/common":77,"./utils/strings":78,"./zlib/constants":80,"./zlib/gzheader":83,"./zlib/inflate.js":85,"./zlib/messages":87,"./zlib/zstream":89}],77:[function(require,module,exports){
+},{"./utils/common":79,"./utils/strings":80,"./zlib/constants":82,"./zlib/gzheader":85,"./zlib/inflate.js":87,"./zlib/messages":89,"./zlib/zstream":91}],79:[function(require,module,exports){
'use strict';
@@ -23534,7 +23708,7 @@ exports.setTyped = function (on) {
exports.setTyped(TYPED_OK);
-},{}],78:[function(require,module,exports){
+},{}],80:[function(require,module,exports){
// String encode/decode helpers
'use strict';
@@ -23721,7 +23895,7 @@ exports.utf8border = function(buf, max) {
return (pos + _utf8len[buf[pos]] > max) ? pos : max;
};
-},{"./common":77}],79:[function(require,module,exports){
+},{"./common":79}],81:[function(require,module,exports){
'use strict';
// Note: adler32 takes 12% for level 0 and 2% for level 6.
@@ -23755,7 +23929,7 @@ function adler32(adler, buf, len, pos) {
module.exports = adler32;
-},{}],80:[function(require,module,exports){
+},{}],82:[function(require,module,exports){
module.exports = {
/* Allowed flush values; see deflate() and inflate() below for details */
@@ -23804,7 +23978,7 @@ module.exports = {
//Z_NULL: null // Use -1 or null inline, depending on var type
};
-},{}],81:[function(require,module,exports){
+},{}],83:[function(require,module,exports){
'use strict';
// Note: we can't get significant speed boost here.
@@ -23847,7 +24021,7 @@ function crc32(crc, buf, len, pos) {
module.exports = crc32;
-},{}],82:[function(require,module,exports){
+},{}],84:[function(require,module,exports){
'use strict';
var utils = require('../utils/common');
@@ -25614,7 +25788,7 @@ exports.deflatePrime = deflatePrime;
exports.deflateTune = deflateTune;
*/
-},{"../utils/common":77,"./adler32":79,"./crc32":81,"./messages":87,"./trees":88}],83:[function(require,module,exports){
+},{"../utils/common":79,"./adler32":81,"./crc32":83,"./messages":89,"./trees":90}],85:[function(require,module,exports){
'use strict';
@@ -25656,7 +25830,7 @@ function GZheader() {
module.exports = GZheader;
-},{}],84:[function(require,module,exports){
+},{}],86:[function(require,module,exports){
'use strict';
// See state defs from inflate.js
@@ -25983,7 +26157,7 @@ module.exports = function inflate_fast(strm, start) {
return;
};
-},{}],85:[function(require,module,exports){
+},{}],87:[function(require,module,exports){
'use strict';
@@ -27488,7 +27662,7 @@ exports.inflateSyncPoint = inflateSyncPoint;
exports.inflateUndermine = inflateUndermine;
*/
-},{"../utils/common":77,"./adler32":79,"./crc32":81,"./inffast":84,"./inftrees":86}],86:[function(require,module,exports){
+},{"../utils/common":79,"./adler32":81,"./crc32":83,"./inffast":86,"./inftrees":88}],88:[function(require,module,exports){
'use strict';
@@ -27817,7 +27991,7 @@ module.exports = function inflate_table(type, lens, lens_index, codes, table, ta
return 0;
};
-},{"../utils/common":77}],87:[function(require,module,exports){
+},{"../utils/common":79}],89:[function(require,module,exports){
'use strict';
module.exports = {
@@ -27832,7 +28006,7 @@ module.exports = {
'-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
};
-},{}],88:[function(require,module,exports){
+},{}],90:[function(require,module,exports){
'use strict';
@@ -29033,7 +29207,7 @@ exports._tr_flush_block = _tr_flush_block;
exports._tr_tally = _tr_tally;
exports._tr_align = _tr_align;
-},{"../utils/common":77}],89:[function(require,module,exports){
+},{"../utils/common":79}],91:[function(require,module,exports){
'use strict';
@@ -29064,9 +29238,9 @@ function ZStream() {
module.exports = ZStream;
-},{}],90:[function(require,module,exports){
+},{}],92:[function(require,module,exports){
module.exports = require('./lib/retry');
-},{"./lib/retry":91}],91:[function(require,module,exports){
+},{"./lib/retry":93}],93:[function(require,module,exports){
var RetryOperation = require('./retry_operation');
exports.operation = function(options) {
@@ -29117,7 +29291,7 @@ exports._createTimeout = function(attempt, opts) {
return timeout;
};
-},{"./retry_operation":92}],92:[function(require,module,exports){
+},{"./retry_operation":94}],94:[function(require,module,exports){
function RetryOperation(timeouts) {
this._timeouts = timeouts;
this._fn = null;
@@ -29227,7 +29401,7 @@ RetryOperation.prototype.mainError = function() {
return mainError;
};
-},{}],93:[function(require,module,exports){
+},{}],95:[function(require,module,exports){
module.exports = function arrayEquals(array) {
// if the other array is a falsy value, return
if (!array)
@@ -29253,10 +29427,10 @@ module.exports = function arrayEquals(array) {
}
-},{}],94:[function(require,module,exports){
+},{}],96:[function(require,module,exports){
exports.Interop = require('./interop');
-},{"./interop":95}],95:[function(require,module,exports){
+},{"./interop":97}],97:[function(require,module,exports){
"use strict";
var transform = require('./transform');
@@ -29838,7 +30012,7 @@ Interop.prototype.toUnifiedPlan = function(desc) {
//#endregion
};
-},{"./array-equals":93,"./transform":96}],96:[function(require,module,exports){
+},{"./array-equals":95,"./transform":98}],98:[function(require,module,exports){
var transform = require('sdp-transform');
exports.write = function(session, opts) {
@@ -29937,7 +30111,7 @@ exports.parse = function(sdp) {
};
-},{"sdp-transform":98}],97:[function(require,module,exports){
+},{"sdp-transform":100}],99:[function(require,module,exports){
var grammar = module.exports = {
v: [{
name: 'version',
@@ -30186,7 +30360,7 @@ Object.keys(grammar).forEach(function (key) {
});
});
-},{}],98:[function(require,module,exports){
+},{}],100:[function(require,module,exports){
var parser = require('./parser');
var writer = require('./writer');
@@ -30196,7 +30370,7 @@ exports.parseFmtpConfig = parser.parseFmtpConfig;
exports.parsePayloads = parser.parsePayloads;
exports.parseRemoteCandidates = parser.parseRemoteCandidates;
-},{"./parser":99,"./writer":100}],99:[function(require,module,exports){
+},{"./parser":101,"./writer":102}],101:[function(require,module,exports){
var toIntIfInt = function (v) {
return String(Number(v)) === v ? Number(v) : v;
};
@@ -30291,7 +30465,7 @@ exports.parseRemoteCandidates = function (str) {
return candidates;
};
-},{"./grammar":97}],100:[function(require,module,exports){
+},{"./grammar":99}],102:[function(require,module,exports){
var grammar = require('./grammar');
// customized util.format - discards excess arguments and can void middle ones
@@ -30407,7 +30581,7 @@ module.exports = function (session, opts) {
return sdp.join('\r\n') + '\r\n';
};
-},{"./grammar":97}],101:[function(require,module,exports){
+},{"./grammar":99}],103:[function(require,module,exports){
var transform = require('sdp-transform');
var transformUtils = require('./transform-utils');
var parseSsrcs = transformUtils.parseSsrcs;
@@ -30809,7 +30983,7 @@ Simulcast.prototype.mungeLocalDescription = function (desc) {
module.exports = Simulcast;
-},{"./transform-utils":102,"sdp-transform":104}],102:[function(require,module,exports){
+},{"./transform-utils":104,"sdp-transform":106}],104:[function(require,module,exports){
exports.writeSsrcs = function(sources, order) {
var ssrcs = [];
@@ -30860,15 +31034,15 @@ exports.parseSsrcs = function (mLine) {
};
-},{}],103:[function(require,module,exports){
-arguments[4][97][0].apply(exports,arguments)
-},{"dup":97}],104:[function(require,module,exports){
-arguments[4][98][0].apply(exports,arguments)
-},{"./parser":105,"./writer":106,"dup":98}],105:[function(require,module,exports){
+},{}],105:[function(require,module,exports){
arguments[4][99][0].apply(exports,arguments)
-},{"./grammar":103,"dup":99}],106:[function(require,module,exports){
+},{"dup":99}],106:[function(require,module,exports){
arguments[4][100][0].apply(exports,arguments)
-},{"./grammar":103,"dup":100}],107:[function(require,module,exports){
+},{"./parser":107,"./writer":108,"dup":100}],107:[function(require,module,exports){
+arguments[4][101][0].apply(exports,arguments)
+},{"./grammar":105,"dup":101}],108:[function(require,module,exports){
+arguments[4][102][0].apply(exports,arguments)
+},{"./grammar":105,"dup":102}],109:[function(require,module,exports){
var grammar = module.exports = {
v: [{
name: 'version',
@@ -31119,9 +31293,9 @@ Object.keys(grammar).forEach(function (key) {
});
});
-},{}],108:[function(require,module,exports){
-arguments[4][98][0].apply(exports,arguments)
-},{"./parser":109,"./writer":110,"dup":98}],109:[function(require,module,exports){
+},{}],110:[function(require,module,exports){
+arguments[4][100][0].apply(exports,arguments)
+},{"./parser":111,"./writer":112,"dup":100}],111:[function(require,module,exports){
var toIntIfInt = function (v) {
return String(Number(v)) === v ? Number(v) : v;
};
@@ -31216,13 +31390,13 @@ exports.parseRemoteCandidates = function (str) {
return candidates;
};
-},{"./grammar":107}],110:[function(require,module,exports){
-arguments[4][100][0].apply(exports,arguments)
-},{"./grammar":107,"dup":100}],111:[function(require,module,exports){
+},{"./grammar":109}],112:[function(require,module,exports){
+arguments[4][102][0].apply(exports,arguments)
+},{"./grammar":109,"dup":102}],113:[function(require,module,exports){
module.exports = require('./lib/');
-},{"./lib/":112}],112:[function(require,module,exports){
+},{"./lib/":114}],114:[function(require,module,exports){
/**
* Module dependencies.
@@ -31311,7 +31485,7 @@ exports.connect = lookup;
exports.Manager = require('./manager');
exports.Socket = require('./socket');
-},{"./manager":113,"./socket":115,"./url":116,"debug":120,"socket.io-parser":157}],113:[function(require,module,exports){
+},{"./manager":115,"./socket":117,"./url":118,"debug":122,"socket.io-parser":159}],115:[function(require,module,exports){
/**
* Module dependencies.
@@ -31816,7 +31990,7 @@ Manager.prototype.onreconnect = function(){
this.emitAll('reconnect', attempt);
};
-},{"./on":114,"./socket":115,"./url":116,"backo2":117,"component-bind":118,"component-emitter":119,"debug":120,"engine.io-client":121,"indexof":153,"object-component":154,"socket.io-parser":157}],114:[function(require,module,exports){
+},{"./on":116,"./socket":117,"./url":118,"backo2":119,"component-bind":120,"component-emitter":121,"debug":122,"engine.io-client":123,"indexof":155,"object-component":156,"socket.io-parser":159}],116:[function(require,module,exports){
/**
* Module exports.
@@ -31842,7 +32016,7 @@ function on(obj, ev, fn) {
};
}
-},{}],115:[function(require,module,exports){
+},{}],117:[function(require,module,exports){
/**
* Module dependencies.
@@ -32229,7 +32403,7 @@ Socket.prototype.disconnect = function(){
return this;
};
-},{"./on":114,"component-bind":118,"component-emitter":119,"debug":120,"has-binary":151,"socket.io-parser":157,"to-array":163}],116:[function(require,module,exports){
+},{"./on":116,"component-bind":120,"component-emitter":121,"debug":122,"has-binary":153,"socket.io-parser":159,"to-array":165}],118:[function(require,module,exports){
(function (global){
/**
@@ -32306,7 +32480,7 @@ function url(uri, loc){
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"debug":120,"parseuri":155}],117:[function(require,module,exports){
+},{"debug":122,"parseuri":157}],119:[function(require,module,exports){
/**
* Expose `Backoff`.
@@ -32393,7 +32567,7 @@ Backoff.prototype.setJitter = function(jitter){
};
-},{}],118:[function(require,module,exports){
+},{}],120:[function(require,module,exports){
/**
* Slice reference.
*/
@@ -32418,7 +32592,7 @@ module.exports = function(obj, fn){
}
};
-},{}],119:[function(require,module,exports){
+},{}],121:[function(require,module,exports){
/**
* Expose `Emitter`.
@@ -32584,7 +32758,7 @@ Emitter.prototype.hasListeners = function(event){
return !! this.listeners(event).length;
};
-},{}],120:[function(require,module,exports){
+},{}],122:[function(require,module,exports){
/**
* Expose `debug()` as the module.
@@ -32723,11 +32897,11 @@ try {
if (window.localStorage) debug.enable(localStorage.debug);
} catch(e){}
-},{}],121:[function(require,module,exports){
+},{}],123:[function(require,module,exports){
module.exports = require('./lib/');
-},{"./lib/":122}],122:[function(require,module,exports){
+},{"./lib/":124}],124:[function(require,module,exports){
module.exports = require('./socket');
@@ -32739,7 +32913,7 @@ module.exports = require('./socket');
*/
module.exports.parser = require('engine.io-parser');
-},{"./socket":123,"engine.io-parser":136}],123:[function(require,module,exports){
+},{"./socket":125,"engine.io-parser":138}],125:[function(require,module,exports){
(function (global){
/**
* Module dependencies.
@@ -33448,7 +33622,7 @@ Socket.prototype.filterUpgrades = function (upgrades) {
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./transport":124,"./transports":125,"component-emitter":131,"debug":133,"engine.io-parser":136,"indexof":153,"parsejson":147,"parseqs":148,"parseuri":149}],124:[function(require,module,exports){
+},{"./transport":126,"./transports":127,"component-emitter":133,"debug":135,"engine.io-parser":138,"indexof":155,"parsejson":149,"parseqs":150,"parseuri":151}],126:[function(require,module,exports){
/**
* Module dependencies.
*/
@@ -33609,7 +33783,7 @@ Transport.prototype.onClose = function () {
this.emit('close');
};
-},{"component-emitter":131,"engine.io-parser":136}],125:[function(require,module,exports){
+},{"component-emitter":133,"engine.io-parser":138}],127:[function(require,module,exports){
(function (global){
/**
* Module dependencies
@@ -33666,7 +33840,7 @@ function polling(opts){
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./polling-jsonp":126,"./polling-xhr":127,"./websocket":129,"xmlhttprequest":130}],126:[function(require,module,exports){
+},{"./polling-jsonp":128,"./polling-xhr":129,"./websocket":131,"xmlhttprequest":132}],128:[function(require,module,exports){
(function (global){
/**
@@ -33903,7 +34077,7 @@ JSONPPolling.prototype.doWrite = function (data, fn) {
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./polling":128,"component-inherit":132}],127:[function(require,module,exports){
+},{"./polling":130,"component-inherit":134}],129:[function(require,module,exports){
(function (global){
/**
* Module requirements.
@@ -34291,7 +34465,7 @@ function unloadHandler() {
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./polling":128,"component-emitter":131,"component-inherit":132,"debug":133,"xmlhttprequest":130}],128:[function(require,module,exports){
+},{"./polling":130,"component-emitter":133,"component-inherit":134,"debug":135,"xmlhttprequest":132}],130:[function(require,module,exports){
/**
* Module dependencies.
*/
@@ -34538,7 +34712,7 @@ Polling.prototype.uri = function(){
return schema + '://' + this.hostname + port + this.path + query;
};
-},{"../transport":124,"component-inherit":132,"debug":133,"engine.io-parser":136,"parseqs":148,"xmlhttprequest":130}],129:[function(require,module,exports){
+},{"../transport":126,"component-inherit":134,"debug":135,"engine.io-parser":138,"parseqs":150,"xmlhttprequest":132}],131:[function(require,module,exports){
/**
* Module dependencies.
*/
@@ -34778,7 +34952,7 @@ WS.prototype.check = function(){
return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);
};
-},{"../transport":124,"component-inherit":132,"debug":133,"engine.io-parser":136,"parseqs":148,"ws":150}],130:[function(require,module,exports){
+},{"../transport":126,"component-inherit":134,"debug":135,"engine.io-parser":138,"parseqs":150,"ws":152}],132:[function(require,module,exports){
// browser shim for xmlhttprequest module
var hasCORS = require('has-cors');
@@ -34816,9 +34990,9 @@ module.exports = function(opts) {
}
}
-},{"has-cors":145}],131:[function(require,module,exports){
-arguments[4][119][0].apply(exports,arguments)
-},{"dup":119}],132:[function(require,module,exports){
+},{"has-cors":147}],133:[function(require,module,exports){
+arguments[4][121][0].apply(exports,arguments)
+},{"dup":121}],134:[function(require,module,exports){
module.exports = function(a, b){
var fn = function(){};
@@ -34826,7 +35000,7 @@ module.exports = function(a, b){
a.prototype = new fn;
a.prototype.constructor = a;
};
-},{}],133:[function(require,module,exports){
+},{}],135:[function(require,module,exports){
/**
* This is the web browser implementation of `debug()`.
@@ -34975,7 +35149,7 @@ function load() {
exports.enable(load());
-},{"./debug":134}],134:[function(require,module,exports){
+},{"./debug":136}],136:[function(require,module,exports){
/**
* This is the common logic for both the Node.js and web browser
@@ -35174,7 +35348,7 @@ function coerce(val) {
return val;
}
-},{"ms":135}],135:[function(require,module,exports){
+},{"ms":137}],137:[function(require,module,exports){
/**
* Helpers.
*/
@@ -35287,7 +35461,7 @@ function plural(ms, n, name) {
return Math.ceil(ms / n) + ' ' + name + 's';
}
-},{}],136:[function(require,module,exports){
+},{}],138:[function(require,module,exports){
(function (global){
/**
* Module dependencies.
@@ -35885,7 +36059,7 @@ exports.decodePayloadAsBinary = function (data, binaryType, callback) {
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./keys":137,"after":138,"arraybuffer.slice":139,"base64-arraybuffer":140,"blob":141,"has-binary":142,"utf8":144}],137:[function(require,module,exports){
+},{"./keys":139,"after":140,"arraybuffer.slice":141,"base64-arraybuffer":142,"blob":143,"has-binary":144,"utf8":146}],139:[function(require,module,exports){
/**
* Gets the keys for an object.
@@ -35906,7 +36080,7 @@ module.exports = Object.keys || function keys (obj){
return arr;
};
-},{}],138:[function(require,module,exports){
+},{}],140:[function(require,module,exports){
module.exports = after
function after(count, callback, err_cb) {
@@ -35936,7 +36110,7 @@ function after(count, callback, err_cb) {
function noop() {}
-},{}],139:[function(require,module,exports){
+},{}],141:[function(require,module,exports){
/**
* An abstraction for slicing an arraybuffer even when
* ArrayBuffer.prototype.slice is not supported
@@ -35967,7 +36141,7 @@ module.exports = function(arraybuffer, start, end) {
return result.buffer;
};
-},{}],140:[function(require,module,exports){
+},{}],142:[function(require,module,exports){
/*
* base64-arraybuffer
* https://github.com/niklasvh/base64-arraybuffer
@@ -36028,7 +36202,7 @@ module.exports = function(arraybuffer, start, end) {
};
})("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
-},{}],141:[function(require,module,exports){
+},{}],143:[function(require,module,exports){
(function (global){
/**
* Create a blob builder even when vendor prefixes exist
@@ -36081,7 +36255,7 @@ module.exports = (function() {
})();
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],142:[function(require,module,exports){
+},{}],144:[function(require,module,exports){
(function (global){
/*
@@ -36143,12 +36317,12 @@ function hasBinary(data) {
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"isarray":143}],143:[function(require,module,exports){
+},{"isarray":145}],145:[function(require,module,exports){
module.exports = Array.isArray || function (arr) {
return Object.prototype.toString.call(arr) == '[object Array]';
};
-},{}],144:[function(require,module,exports){
+},{}],146:[function(require,module,exports){
(function (global){
/*! http://mths.be/utf8js v2.0.0 by @mathias */
;(function(root) {
@@ -36391,7 +36565,7 @@ module.exports = Array.isArray || function (arr) {
}(this));
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],145:[function(require,module,exports){
+},{}],147:[function(require,module,exports){
/**
* Module dependencies.
@@ -36416,7 +36590,7 @@ try {
module.exports = false;
}
-},{"global":146}],146:[function(require,module,exports){
+},{"global":148}],148:[function(require,module,exports){
/**
* Returns `this`. Execute this without a "context" (i.e. without it being
@@ -36426,7 +36600,7 @@ try {
module.exports = (function () { return this; })();
-},{}],147:[function(require,module,exports){
+},{}],149:[function(require,module,exports){
(function (global){
/**
* JSON parse.
@@ -36461,7 +36635,7 @@ module.exports = function parsejson(data) {
}
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],148:[function(require,module,exports){
+},{}],150:[function(require,module,exports){
/**
* Compiles a querystring
* Returns string representation of the object
@@ -36500,7 +36674,7 @@ exports.decode = function(qs){
return qry;
};
-},{}],149:[function(require,module,exports){
+},{}],151:[function(require,module,exports){
/**
* Parses an URI
*
@@ -36541,7 +36715,7 @@ module.exports = function parseuri(str) {
return uri;
};
-},{}],150:[function(require,module,exports){
+},{}],152:[function(require,module,exports){
/**
* Module dependencies.
@@ -36586,7 +36760,7 @@ function ws(uri, protocols, opts) {
if (WebSocket) ws.prototype = WebSocket.prototype;
-},{}],151:[function(require,module,exports){
+},{}],153:[function(require,module,exports){
(function (global){
/*
@@ -36648,9 +36822,9 @@ function hasBinary(data) {
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"isarray":152}],152:[function(require,module,exports){
-arguments[4][143][0].apply(exports,arguments)
-},{"dup":143}],153:[function(require,module,exports){
+},{"isarray":154}],154:[function(require,module,exports){
+arguments[4][145][0].apply(exports,arguments)
+},{"dup":145}],155:[function(require,module,exports){
var indexOf = [].indexOf;
@@ -36661,7 +36835,7 @@ module.exports = function(arr, obj){
}
return -1;
};
-},{}],154:[function(require,module,exports){
+},{}],156:[function(require,module,exports){
/**
* HOP ref.
@@ -36746,7 +36920,7 @@ exports.length = function(obj){
exports.isEmpty = function(obj){
return 0 == exports.length(obj);
};
-},{}],155:[function(require,module,exports){
+},{}],157:[function(require,module,exports){
/**
* Parses an URI
*
@@ -36773,7 +36947,7 @@ module.exports = function parseuri(str) {
return uri;
};
-},{}],156:[function(require,module,exports){
+},{}],158:[function(require,module,exports){
(function (global){
/*global Blob,File*/
@@ -36918,7 +37092,7 @@ exports.removeBlobs = function(data, callback) {
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./is-buffer":158,"isarray":161}],157:[function(require,module,exports){
+},{"./is-buffer":160,"isarray":163}],159:[function(require,module,exports){
/**
* Module dependencies.
@@ -37320,7 +37494,7 @@ function error(data){
};
}
-},{"./binary":156,"./is-buffer":158,"component-emitter":159,"debug":160,"isarray":161,"json3":162}],158:[function(require,module,exports){
+},{"./binary":158,"./is-buffer":160,"component-emitter":161,"debug":162,"isarray":163,"json3":164}],160:[function(require,module,exports){
(function (global){
module.exports = isBuf;
@@ -37337,13 +37511,13 @@ function isBuf(obj) {
}
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],159:[function(require,module,exports){
-arguments[4][119][0].apply(exports,arguments)
-},{"dup":119}],160:[function(require,module,exports){
-arguments[4][120][0].apply(exports,arguments)
-},{"dup":120}],161:[function(require,module,exports){
-arguments[4][143][0].apply(exports,arguments)
-},{"dup":143}],162:[function(require,module,exports){
+},{}],161:[function(require,module,exports){
+arguments[4][121][0].apply(exports,arguments)
+},{"dup":121}],162:[function(require,module,exports){
+arguments[4][122][0].apply(exports,arguments)
+},{"dup":122}],163:[function(require,module,exports){
+arguments[4][145][0].apply(exports,arguments)
+},{"dup":145}],164:[function(require,module,exports){
/*! JSON v3.2.6 | http://bestiejs.github.io/json3 | Copyright 2012-2013, Kit Cambridge | http://kit.mit-license.org */
;(function (window) {
// Convenience aliases.
@@ -38206,7 +38380,7 @@ arguments[4][143][0].apply(exports,arguments)
}
}(this));
-},{}],163:[function(require,module,exports){
+},{}],165:[function(require,module,exports){
module.exports = toArray
function toArray(list, index) {
@@ -38221,14 +38395,14 @@ function toArray(list, index) {
return array
}
-},{}],164:[function(require,module,exports){
+},{}],166:[function(require,module,exports){
var MediaStreamType = {
VIDEO_TYPE: "Video",
AUDIO_TYPE: "Audio"
};
module.exports = MediaStreamType;
-},{}],165:[function(require,module,exports){
+},{}],167:[function(require,module,exports){
var RTCEvents = {
RTC_READY: "rtc.ready",
DATA_CHANNEL_OPEN: "rtc.data_channel_open",
@@ -38241,7 +38415,7 @@ var RTCEvents = {
};
module.exports = RTCEvents;
-},{}],166:[function(require,module,exports){
+},{}],168:[function(require,module,exports){
var Resolutions = {
"1080": {
width: 1920,
@@ -38295,7 +38469,7 @@ var Resolutions = {
}
};
module.exports = Resolutions;
-},{}],167:[function(require,module,exports){
+},{}],169:[function(require,module,exports){
var StreamEventTypes = {
EVENT_TYPE_LOCAL_CREATED: "stream.local_created",
@@ -38309,7 +38483,7 @@ var StreamEventTypes = {
};
module.exports = StreamEventTypes;
-},{}],168:[function(require,module,exports){
+},{}],170:[function(require,module,exports){
var UIEvents = {
NICKNAME_CHANGED: "UI.nickname_changed",
SELECTED_ENDPOINT: "UI.selected_endpoint",
@@ -38317,7 +38491,7 @@ var UIEvents = {
LARGEVIDEO_INIT: "UI.largevideo_init"
};
module.exports = UIEvents;
-},{}],169:[function(require,module,exports){
+},{}],171:[function(require,module,exports){
var AuthenticationEvents = {
/**
* Event callback arguments:
@@ -38331,7 +38505,7 @@ var AuthenticationEvents = {
};
module.exports = AuthenticationEvents;
-},{}],170:[function(require,module,exports){
+},{}],172:[function(require,module,exports){
var CQEvents = {
LOCALSTATS_UPDATED: "cq.localstats_updated",
REMOTESTATS_UPDATED: "cq.remotestats_updated",
@@ -38339,7 +38513,7 @@ var CQEvents = {
};
module.exports = CQEvents;
-},{}],171:[function(require,module,exports){
+},{}],173:[function(require,module,exports){
var DesktopSharingEventTypes = {
INIT: "ds.init",
@@ -38349,14 +38523,14 @@ var DesktopSharingEventTypes = {
};
module.exports = DesktopSharingEventTypes;
-},{}],172:[function(require,module,exports){
+},{}],174:[function(require,module,exports){
var Events = {
DTMF_SUPPORT_CHANGED: "members.dtmf_support_changed"
};
module.exports = Events;
-},{}],173:[function(require,module,exports){
+},{}],175:[function(require,module,exports){
module.exports = {
getLanguages : function () {
var languages = [];
@@ -38373,7 +38547,7 @@ module.exports = {
TR: "tr",
FR: "fr"
}
-},{}],174:[function(require,module,exports){
+},{}],176:[function(require,module,exports){
var XMPPEvents = {
// Designates an event indicating that the connection to the XMPP server
// failed.