mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
feat: automatically attempt socket.io reconnection on ajaxify
Also, updated messaging and toaster to accurately reflect offline-mode state
This commit is contained in:
@@ -208,7 +208,7 @@
|
|||||||
"already-blocked": "This user is already blocked",
|
"already-blocked": "This user is already blocked",
|
||||||
"already-unblocked": "This user is already unblocked",
|
"already-unblocked": "This user is already unblocked",
|
||||||
"no-connection": "There seems to be a problem with your internet connection",
|
"no-connection": "There seems to be a problem with your internet connection",
|
||||||
"socket-reconnect-failed": "Reconnect failed, please try again later",
|
"socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later",
|
||||||
|
|
||||||
"plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP"
|
"plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,10 @@ ajaxify = window.ajaxify || {};
|
|||||||
ajaxify.currentPage = null;
|
ajaxify.currentPage = null;
|
||||||
|
|
||||||
ajaxify.go = function (url, callback, quiet) {
|
ajaxify.go = function (url, callback, quiet) {
|
||||||
|
// Automatically reconnect to socket and re-ajaxify on success
|
||||||
if (!socket.connected) {
|
if (!socket.connected) {
|
||||||
|
app.reconnect();
|
||||||
|
|
||||||
if (ajaxify.reconnectAction) {
|
if (ajaxify.reconnectAction) {
|
||||||
$(window).off('action:reconnected', ajaxify.reconnectAction);
|
$(window).off('action:reconnected', ajaxify.reconnectAction);
|
||||||
}
|
}
|
||||||
@@ -410,6 +413,7 @@ ajaxify = window.ajaxify || {};
|
|||||||
require(['translator', 'benchpress'], function (translator, Benchpress) {
|
require(['translator', 'benchpress'], function (translator, Benchpress) {
|
||||||
translator.translate('[[error:no-connection]]');
|
translator.translate('[[error:no-connection]]');
|
||||||
translator.translate('[[error:socket-reconnect-failed]]');
|
translator.translate('[[error:socket-reconnect-failed]]');
|
||||||
|
translator.translate(`[[global:reconnecting-message, ${config.siteTitle}]]`);
|
||||||
Benchpress.registerLoader(ajaxify.loadTemplate);
|
Benchpress.registerLoader(ajaxify.loadTemplate);
|
||||||
Benchpress.setGlobal('config', config);
|
Benchpress.setGlobal('config', config);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -39,16 +39,37 @@ socket = window.socket;
|
|||||||
addHandlers();
|
addHandlers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.app.reconnect = () => {
|
||||||
|
if (socket.connected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var reconnectEl = $('#reconnect');
|
||||||
|
$('#reconnect-alert')
|
||||||
|
.removeClass('alert-danger pointer')
|
||||||
|
.addClass('alert-warning')
|
||||||
|
.find('p')
|
||||||
|
.translateText(`[[global:reconnecting-message, ${config.siteTitle}]]`);
|
||||||
|
|
||||||
|
reconnectEl.html('<i class="fa fa-spinner fa-spin"></i>');
|
||||||
|
socket.connect();
|
||||||
|
};
|
||||||
|
|
||||||
function addHandlers() {
|
function addHandlers() {
|
||||||
socket.on('connect', onConnect);
|
socket.on('connect', onConnect);
|
||||||
|
|
||||||
socket.on('disconnect', onDisconnect);
|
socket.on('disconnect', onDisconnect);
|
||||||
|
|
||||||
socket.io.on('reconnect_failed', function () {
|
socket.io.on('reconnect_failed', function () {
|
||||||
$('#reconnect-alert').removeClass('alert-warning')
|
var reconnectEl = $('#reconnect');
|
||||||
.addClass('alert-danger')
|
reconnectEl.html('<i class="fa fa-plug text-danger"></i>');
|
||||||
|
|
||||||
|
$('#reconnect-alert')
|
||||||
|
.removeClass('alert-warning')
|
||||||
|
.addClass('alert-danger pointer')
|
||||||
.find('p')
|
.find('p')
|
||||||
.translateText('[[error:socket-reconnect-failed]]');
|
.translateText('[[error:socket-reconnect-failed]]')
|
||||||
|
.one('click', app.reconnect);
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('checkSession', function (uid) {
|
socket.on('checkSession', function (uid) {
|
||||||
@@ -105,7 +126,7 @@ socket = window.socket;
|
|||||||
var reconnectAlert = $('#reconnect-alert');
|
var reconnectAlert = $('#reconnect-alert');
|
||||||
|
|
||||||
reconnectEl.tooltip('destroy');
|
reconnectEl.tooltip('destroy');
|
||||||
reconnectEl.html('<i class="fa fa-check"></i>');
|
reconnectEl.html('<i class="fa fa-check text-success"></i>');
|
||||||
reconnectAlert.fadeOut(500);
|
reconnectAlert.fadeOut(500);
|
||||||
reconnecting = false;
|
reconnecting = false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user