diff --git a/public/src/app.js b/public/src/app.js
index af06b1cf80..6b96358e7c 100644
--- a/public/src/app.js
+++ b/public/src/app.js
@@ -13,150 +13,156 @@ var socket,
(function () {
var showWelcomeMessage = false;
+ var reconnecting = false;
+
+ function onSocketConnect(data) {
+ if (reconnecting) {
+ var reconnectEl = $('#reconnect');
+
+ reconnectEl.tooltip('destroy');
+ reconnectEl.html('');
+ reconnecting = false;
+
+ // Rejoin room that was left when we disconnected
+ var url_parts = document.location.pathname.slice(RELATIVE_PATH.length).split('/').slice(1);
+ var room;
+
+ switch(url_parts[0]) {
+ case 'user':
+ room = 'user/' + ajaxify.variables.get('theirid');
+ break;
+ case 'topic':
+ room = 'topic_' + url_parts[1];
+ break;
+ case 'category':
+ room = 'category_' + url_parts[1];
+ break;
+ case 'recent': // intentional fall-through
+ case 'unread':
+ room = 'recent_posts';
+ break;
+ case 'admin':
+ room = 'admin';
+ break;
+ default:
+ room = 'global';
+ break;
+ }
+
+ app.enterRoom(room, true);
+
+ socket.emit('meta.reconnected');
+ $(window).trigger('action:reconnected');
+
+ setTimeout(function() {
+ reconnectEl.removeClass('active').addClass("hide");
+ }, 3000);
+ }
+
+ socket.emit('meta.updateHeader', {
+ fields: ['username', 'picture', 'userslug']
+ }, app.updateHeader);
+ }
+
+ function onConfigLoad(data) {
+ config = data;
+
+ exposeConfigToTemplates();
+
+ if(socket) {
+ socket.disconnect();
+ setTimeout(function() {
+ socket.socket.connect();
+ }, 200);
+ } else {
+ var ioParams = {
+ 'max reconnection attempts': config.maxReconnectionAttempts,
+ 'reconnection delay': config.reconnectionDelay,
+ resource: RELATIVE_PATH.length ? RELATIVE_PATH.slice(1) + '/socket.io' : 'socket.io'
+ };
+
+ if (utils.isAndroidBrowser()) {
+ ioParams.transports = ['xhr-polling'];
+ }
+
+ socket = io.connect('', ioParams);
+ reconnecting = false;
+
+ socket.on('event:connect', function (data) {
+ app.username = data.username;
+ app.uid = data.uid;
+ app.isAdmin = data.isAdmin;
+
+ templates.setGlobal('loggedIn', parseInt(data.uid, 10) !== 0);
+
+ app.showLoginMessage();
+
+ socket.emit('meta.updateHeader', {
+ fields: ['username', 'picture', 'userslug']
+ }, app.updateHeader);
+
+ $(window).trigger('action:connected');
+ });
+
+ socket.on('event:alert', function (data) {
+ app.alert(data);
+ });
+
+ socket.on('connect', onSocketConnect);
+
+ socket.on('event:disconnect', function() {
+ $(window).trigger('action:disconnected');
+ socket.socket.connect();
+ });
+
+ socket.on('reconnecting', function (data, attempt) {
+ if(attempt === config.maxReconnectionAttempts) {
+ socket.socket.reconnectionAttempts = 0;
+ socket.socket.reconnectionDelay = config.reconnectionDelay;
+ return;
+ }
+
+ reconnecting = true;
+ var reconnectEl = $('#reconnect');
+
+ if (!reconnectEl.hasClass('active')) {
+ reconnectEl.html('');
+ }
+
+ reconnectEl.addClass('active').removeClass("hide").tooltip({
+ placement: 'bottom'
+ });
+ });
+
+ socket.on('event:banned', function() {
+ app.alert({
+ title: '[[global:alert.banned]]',
+ message: '[[global:alert.banned.message]]',
+ type: 'warning',
+ timeout: 1000
+ });
+
+ setTimeout(app.logout, 1000);
+ });
+
+ socket.on('meta.updateHeader', app.updateHeader);
+
+ app.enterRoom('global');
+
+ if (config.environment === 'development' && console && console.log) {
+ var log = console.log;
+ console.log = function() {
+ log.apply(this, arguments);
+ socket.emit('tools.log', arguments);
+ };
+ }
+ }
+ }
app.loadConfig = function() {
$.ajax({
url: RELATIVE_PATH + '/api/config',
- success: function (data) {
- config = data;
-
- exposeConfigToTemplates();
-
- if(socket) {
- socket.disconnect();
- setTimeout(function() {
- socket.socket.connect();
- }, 200);
- } else {
- var ioParams = {
- 'max reconnection attempts': config.maxReconnectionAttempts,
- 'reconnection delay': config.reconnectionDelay,
- resource: RELATIVE_PATH.length ? RELATIVE_PATH.slice(1) + '/socket.io' : 'socket.io'
- };
-
- if (utils.isAndroidBrowser()) {
- ioParams.transports = ['xhr-polling'];
- }
-
- socket = io.connect('', ioParams);
-
- var reconnecting = false,
- reconnectEl, reconnectTimer;
-
- socket.on('event:connect', function (data) {
- app.username = data.username;
- app.uid = data.uid;
- app.isAdmin = data.isAdmin;
-
- templates.setGlobal('loggedIn', parseInt(data.uid, 10) !== 0);
-
- app.showLoginMessage();
-
- socket.emit('meta.updateHeader', {
- fields: ['username', 'picture', 'userslug']
- }, app.updateHeader);
-
- $(window).trigger('action:connected');
- });
-
- socket.on('event:alert', function (data) {
- app.alert(data);
- });
-
- socket.on('connect', function (data) {
- if (reconnecting) {
- reconnectEl.tooltip('destroy');
- reconnectEl.html('');
- reconnecting = false;
-
- // Rejoin room that was left when we disconnected
- var url_parts = document.location.pathname.slice(RELATIVE_PATH.length).split('/').slice(1),
- room;
- switch(url_parts[0]) {
- case 'user':
- room = 'user/' + ajaxify.variables.get('theirid');
- break;
- case 'topic':
- room = 'topic_' + url_parts[1];
- break;
- case 'category':
- room = 'category_' + url_parts[1];
- break;
- case 'recent': // intentional fall-through
- case 'unread':
- room = 'recent_posts';
- break;
- case 'admin':
- room = 'admin';
- break;
-
- default:
- room = 'global';
- break;
- }
- app.enterRoom(room, true);
-
- socket.emit('meta.reconnected');
- $(window).trigger('action:reconnected');
-
- setTimeout(function() {
- reconnectEl.removeClass('active').addClass("hide");
- }, 3000);
- }
-
- socket.emit('meta.updateHeader', {
- fields: ['username', 'picture', 'userslug']
- }, app.updateHeader);
- });
-
- socket.on('event:disconnect', function() {
- $(window).trigger('action:disconnected');
- socket.socket.connect();
- });
-
- socket.on('reconnecting', function (data, attempt) {
- if(attempt === config.maxReconnectionAttempts) {
- socket.socket.reconnectionAttempts = 0;
- socket.socket.reconnectionDelay = config.reconnectionDelay;
- return;
- }
-
- reconnectEl = reconnectEl || $('#reconnect');
- reconnecting = true;
-
- if (!reconnectEl.hasClass('active')) {
- reconnectEl.html('');
- }
-
- reconnectEl.addClass('active').removeClass("hide").tooltip({
- placement: 'bottom'
- });
- });
-
- socket.on('event:banned', function() {
- app.alert({
- title: '[[global:alert.banned]]',
- message: '[[global:alert.banned.message]]',
- type: 'warning',
- timeout: 1000
- });
-
- setTimeout(app.logout, 1000);
- });
-
- socket.on('meta.updateHeader', app.updateHeader);
-
- app.enterRoom('global');
-
- if (config.environment === 'development' && console && console.log) {
- var log = console.log;
- console.log = function() {
- log.apply(this, arguments);
- socket.emit('tools.log', arguments);
- };
- }
- }
- },
+ success: onConfigLoad,
async: false
});
};
@@ -586,4 +592,4 @@ var socket,
app.loadConfig();
app.alternatingTitle('');
-}());
\ No newline at end of file
+}());