2015-12-31 15:23:23 +00:00
|
|
|
/* global $, JitsiMeetJS, config */
|
2013-12-16 11:22:23 +00:00
|
|
|
/* application specific logic */
|
2014-05-12 09:56:33 +00:00
|
|
|
|
2015-12-04 13:46:25 +00:00
|
|
|
import "babel-polyfill";
|
2015-12-04 14:57:28 +00:00
|
|
|
import "jquery";
|
|
|
|
import "jquery-ui";
|
|
|
|
import "strophe";
|
|
|
|
import "strophe-disco";
|
|
|
|
import "strophe-caps";
|
|
|
|
import "tooltip";
|
|
|
|
import "popover";
|
|
|
|
import "jQuery-Impromptu";
|
|
|
|
import "autosize";
|
2015-09-10 17:15:56 +00:00
|
|
|
window.toastr = require("toastr");
|
|
|
|
|
2015-12-14 12:26:50 +00:00
|
|
|
import URLProcessor from "./modules/config/URLProcessor";
|
2015-12-04 14:57:28 +00:00
|
|
|
import RoomnameGenerator from './modules/util/RoomnameGenerator';
|
2015-12-17 15:31:11 +00:00
|
|
|
|
2015-12-29 12:41:43 +00:00
|
|
|
import UI from "./modules/UI/UI";
|
|
|
|
import settings from "./modules/settings/Settings";
|
2016-01-06 22:39:13 +00:00
|
|
|
import conference from './conference';
|
2016-01-14 15:05:54 +00:00
|
|
|
import API from './modules/API/API';
|
2015-12-29 22:30:50 +00:00
|
|
|
|
2016-01-14 15:05:54 +00:00
|
|
|
import UIEvents from './service/UI/UIEvents';
|
2015-12-29 22:30:50 +00:00
|
|
|
|
2015-12-02 13:05:29 +00:00
|
|
|
|
2015-12-04 14:57:28 +00:00
|
|
|
function buildRoomName () {
|
|
|
|
let path = window.location.pathname;
|
|
|
|
let roomName;
|
|
|
|
|
|
|
|
// 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
|
|
|
|
roomName = config.getroomnode(path);
|
|
|
|
} else {
|
|
|
|
/* fall back to default strategy
|
|
|
|
* this is making assumptions about how the URL->room mapping happens.
|
|
|
|
* It currently assumes deployment at root, with a rewrite like the
|
|
|
|
* following one (for nginx):
|
|
|
|
location ~ ^/([a-zA-Z0-9]+)$ {
|
|
|
|
rewrite ^/(.*)$ / break;
|
|
|
|
}
|
2015-12-17 15:31:11 +00:00
|
|
|
*/
|
2015-12-04 14:57:28 +00:00
|
|
|
if (path.length > 1) {
|
|
|
|
roomName = path.substr(1).toLowerCase();
|
|
|
|
} else {
|
|
|
|
let word = RoomnameGenerator.generateRoomWithoutSeparator();
|
|
|
|
roomName = word.toLowerCase();
|
|
|
|
window.history.pushState(
|
2015-12-07 16:26:25 +00:00
|
|
|
'VideoChat', `Room: ${word}`, window.location.pathname + word
|
2015-12-04 14:57:28 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return roomName;
|
|
|
|
}
|
|
|
|
|
|
|
|
const APP = {
|
2015-12-29 12:41:43 +00:00
|
|
|
UI,
|
|
|
|
settings,
|
2016-01-14 15:05:54 +00:00
|
|
|
conference,
|
|
|
|
API,
|
2015-12-04 14:57:28 +00:00
|
|
|
init () {
|
2015-09-11 02:42:15 +00:00
|
|
|
this.keyboardshortcut =
|
|
|
|
require("./modules/keyboardshortcut/keyboardshortcut");
|
2015-02-06 15:46:50 +00:00
|
|
|
this.translation = require("./modules/translation/translation");
|
2015-08-21 12:33:05 +00:00
|
|
|
this.configFetch = require("./modules/config/HttpConfigFetch");
|
2015-01-28 14:35:22 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-11-30 11:54:54 +00:00
|
|
|
function init() {
|
2016-01-11 20:26:04 +00:00
|
|
|
var isUIReady = APP.UI.start();
|
|
|
|
if (isUIReady) {
|
|
|
|
APP.conference.init({roomName: buildRoomName()}).then(function () {
|
|
|
|
APP.UI.initConference();
|
2015-12-01 12:53:01 +00:00
|
|
|
|
2016-01-11 20:26:04 +00:00
|
|
|
APP.UI.addListener(UIEvents.LANG_CHANGED, function (language) {
|
|
|
|
APP.translation.setLanguage(language);
|
|
|
|
APP.settings.setLanguage(language);
|
|
|
|
});
|
2015-12-01 13:41:58 +00:00
|
|
|
|
2016-01-11 20:26:04 +00:00
|
|
|
APP.keyboardshortcut.init();
|
|
|
|
}).catch(function (err) {
|
|
|
|
console.error(err);
|
|
|
|
});
|
|
|
|
}
|
2013-12-16 11:22:23 +00:00
|
|
|
}
|
|
|
|
|
2015-08-21 12:33:05 +00:00
|
|
|
/**
|
2015-10-20 15:41:15 +00:00
|
|
|
* If we have an HTTP endpoint for getting config.json configured we're going to
|
2015-08-21 12:33:05 +00:00
|
|
|
* 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() {
|
2015-12-04 14:57:28 +00:00
|
|
|
let roomName = APP.conference.roomName;
|
2015-10-20 15:41:15 +00:00
|
|
|
|
2015-08-21 12:33:05 +00:00
|
|
|
if (config.configLocation) {
|
|
|
|
APP.configFetch.obtainConfig(
|
2015-10-20 15:41:15 +00:00
|
|
|
config.configLocation, roomName,
|
2015-08-21 12:33:05 +00:00
|
|
|
// Get config result callback
|
|
|
|
function(success, error) {
|
|
|
|
if (success) {
|
2015-10-06 21:36:41 +00:00
|
|
|
console.log("(TIME) configuration fetched:\t",
|
|
|
|
window.performance.now());
|
2015-08-21 12:33:05 +00:00
|
|
|
init();
|
|
|
|
} else {
|
|
|
|
// Show obtain config error,
|
|
|
|
// pass the error object for report
|
|
|
|
APP.UI.messageHandler.openReportDialog(
|
|
|
|
null, "dialog.connectError", error);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
2015-10-20 15:41:15 +00:00
|
|
|
require("./modules/config/BoshAddressChoice").chooseAddress(
|
|
|
|
config, roomName);
|
|
|
|
|
2015-08-21 12:33:05 +00:00
|
|
|
init();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-28 11:31:32 +00:00
|
|
|
|
2013-12-16 11:22:23 +00:00
|
|
|
$(document).ready(function () {
|
2015-10-06 21:36:41 +00:00
|
|
|
console.log("(TIME) document ready:\t", window.performance.now());
|
2015-01-07 14:54:03 +00:00
|
|
|
|
2015-07-22 18:34:44 +00:00
|
|
|
URLProcessor.setConfigParametersFromUrl();
|
2015-01-28 14:35:22 +00:00
|
|
|
APP.init();
|
2014-08-21 16:42:54 +00:00
|
|
|
|
2015-12-29 12:41:43 +00:00
|
|
|
APP.translation.init(settings.getLanguage());
|
2015-02-06 15:46:50 +00:00
|
|
|
|
2016-01-14 15:05:54 +00:00
|
|
|
APP.API.init();
|
2015-01-28 14:35:22 +00:00
|
|
|
|
2015-11-30 11:54:54 +00:00
|
|
|
obtainConfigAndInit();
|
2013-12-16 11:22:23 +00:00
|
|
|
});
|
|
|
|
|
2013-12-30 08:31:08 +00:00
|
|
|
$(window).bind('beforeunload', function () {
|
2016-01-14 15:05:54 +00:00
|
|
|
APP.API.dispose();
|
2013-12-16 11:22:23 +00:00
|
|
|
});
|
|
|
|
|
2015-12-14 12:26:50 +00:00
|
|
|
module.exports = APP;
|