mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-08 15:05:46 +01:00
refactor: move warnings/messages out of app.js
This commit is contained in:
@@ -11,9 +11,6 @@ app.cacheBuster = null;
|
|||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
let appLoaded = false;
|
let appLoaded = false;
|
||||||
const params = utils.params();
|
|
||||||
let showWelcomeMessage = !!params.loggedin;
|
|
||||||
let registerMessage = params.register;
|
|
||||||
const isTouchDevice = utils.isTouchDevice();
|
const isTouchDevice = utils.isTouchDevice();
|
||||||
|
|
||||||
app.cacheBuster = config['cache-buster'];
|
app.cacheBuster = config['cache-buster'];
|
||||||
@@ -97,8 +94,7 @@ app.cacheBuster = null;
|
|||||||
});
|
});
|
||||||
|
|
||||||
createHeaderTooltips();
|
createHeaderTooltips();
|
||||||
app.showEmailConfirmWarning();
|
|
||||||
app.showCookieWarning();
|
|
||||||
registerServiceWorker();
|
registerServiceWorker();
|
||||||
|
|
||||||
require([
|
require([
|
||||||
@@ -106,11 +102,12 @@ app.cacheBuster = null;
|
|||||||
'helpers',
|
'helpers',
|
||||||
'forum/pagination',
|
'forum/pagination',
|
||||||
'translator',
|
'translator',
|
||||||
|
'messages',
|
||||||
'forum/unread',
|
'forum/unread',
|
||||||
'forum/header/notifications',
|
'forum/header/notifications',
|
||||||
'forum/header/chat',
|
'forum/header/chat',
|
||||||
'timeago/jquery.timeago',
|
'timeago/jquery.timeago',
|
||||||
], function (taskbar, helpers, pagination, translator, unread, notifications, chat) {
|
], function (taskbar, helpers, pagination, translator, messages, unread, notifications, chat) {
|
||||||
notifications.prepareDOM();
|
notifications.prepareDOM();
|
||||||
chat.prepareDOM();
|
chat.prepareDOM();
|
||||||
translator.prepareDOM();
|
translator.prepareDOM();
|
||||||
@@ -123,7 +120,7 @@ app.cacheBuster = null;
|
|||||||
}
|
}
|
||||||
function finishLoad() {
|
function finishLoad() {
|
||||||
hooks.fire('action:app.load');
|
hooks.fire('action:app.load');
|
||||||
app.showMessages();
|
messages.show();
|
||||||
appLoaded = true;
|
appLoaded = true;
|
||||||
}
|
}
|
||||||
overrides.overrideTimeago();
|
overrides.overrideTimeago();
|
||||||
@@ -332,54 +329,6 @@ app.cacheBuster = null;
|
|||||||
app.createStatusTooltips();
|
app.createStatusTooltips();
|
||||||
};
|
};
|
||||||
|
|
||||||
app.showMessages = function () {
|
|
||||||
const messages = {
|
|
||||||
login: {
|
|
||||||
format: 'alert',
|
|
||||||
title: '[[global:welcome_back]] ' + app.user.username + '!',
|
|
||||||
message: '[[global:you_have_successfully_logged_in]]',
|
|
||||||
},
|
|
||||||
register: {
|
|
||||||
format: 'modal',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
function showAlert(type, message) {
|
|
||||||
switch (messages[type].format) {
|
|
||||||
case 'alert':
|
|
||||||
app.alert({
|
|
||||||
type: 'success',
|
|
||||||
title: messages[type].title,
|
|
||||||
message: messages[type].message,
|
|
||||||
timeout: 5000,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'modal':
|
|
||||||
require(['bootbox'], function (bootbox) {
|
|
||||||
bootbox.alert({
|
|
||||||
title: messages[type].title,
|
|
||||||
message: message || messages[type].message,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showWelcomeMessage) {
|
|
||||||
showWelcomeMessage = false;
|
|
||||||
$(document).ready(function () {
|
|
||||||
showAlert('login');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (registerMessage) {
|
|
||||||
$(document).ready(function () {
|
|
||||||
showAlert('register', utils.escapeHTML(decodeURIComponent(registerMessage)));
|
|
||||||
registerMessage = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
app.openChat = function (roomId, uid) {
|
app.openChat = function (roomId, uid) {
|
||||||
if (!app.user.uid) {
|
if (!app.user.uid) {
|
||||||
return app.alertError('[[error:not-logged-in]]');
|
return app.alertError('[[error:not-logged-in]]');
|
||||||
@@ -758,46 +707,6 @@ app.cacheBuster = null;
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
app.showEmailConfirmWarning = async (err) => {
|
|
||||||
const storage = await app.require('storage');
|
|
||||||
|
|
||||||
if (!config.emailPrompt || !app.user.uid || parseInt(storage.getItem('email-confirm-dismiss'), 10) === 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const msg = {
|
|
||||||
alert_id: 'email_confirm',
|
|
||||||
type: 'warning',
|
|
||||||
timeout: 0,
|
|
||||||
closefn: () => {
|
|
||||||
storage.setItem('email-confirm-dismiss', 1);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!app.user.email) {
|
|
||||||
msg.message = '[[error:no-email-to-confirm]]';
|
|
||||||
msg.clickfn = function () {
|
|
||||||
app.removeAlert('email_confirm');
|
|
||||||
ajaxify.go('user/' + app.user.userslug + '/edit/email');
|
|
||||||
};
|
|
||||||
app.alert(msg);
|
|
||||||
} else if (!app.user['email:confirmed'] && !app.user.isEmailConfirmSent) {
|
|
||||||
msg.message = err ? err.message : '[[error:email-not-confirmed]]';
|
|
||||||
msg.clickfn = function () {
|
|
||||||
app.removeAlert('email_confirm');
|
|
||||||
socket.emit('user.emailConfirm', {}, function (err) {
|
|
||||||
if (err) {
|
|
||||||
return app.alertError(err.message);
|
|
||||||
}
|
|
||||||
app.alertSuccess('[[notifications:email-confirm-sent]]');
|
|
||||||
});
|
|
||||||
};
|
|
||||||
app.alert(msg);
|
|
||||||
} else if (!app.user['email:confirmed'] && app.user.isEmailConfirmSent) {
|
|
||||||
msg.message = '[[error:email-not-confirmed-email-sent]]';
|
|
||||||
app.alert(msg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
app.parseAndTranslate = function (template, blockName, data, callback) {
|
app.parseAndTranslate = function (template, blockName, data, callback) {
|
||||||
if (typeof blockName !== 'string') {
|
if (typeof blockName !== 'string') {
|
||||||
callback = data;
|
callback = data;
|
||||||
@@ -822,39 +731,6 @@ app.cacheBuster = null;
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
app.showCookieWarning = function () {
|
|
||||||
require(['translator', 'storage'], function (translator, storage) {
|
|
||||||
if (!config.cookies.enabled || !navigator.cookieEnabled) {
|
|
||||||
// Skip warning if cookie consent subsystem disabled (obviously), or cookies not in use
|
|
||||||
return;
|
|
||||||
} else if (window.location.pathname.startsWith(config.relative_path + '/admin')) {
|
|
||||||
// No need to show cookie consent warning in ACP
|
|
||||||
return;
|
|
||||||
} else if (storage.getItem('cookieconsent') === '1') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
config.cookies.message = translator.unescape(config.cookies.message);
|
|
||||||
config.cookies.dismiss = translator.unescape(config.cookies.dismiss);
|
|
||||||
config.cookies.link = translator.unescape(config.cookies.link);
|
|
||||||
config.cookies.link_url = translator.unescape(config.cookies.link_url);
|
|
||||||
|
|
||||||
app.parseAndTranslate('partials/cookie-consent', config.cookies, function (html) {
|
|
||||||
$(document.body).append(html);
|
|
||||||
$(document.body).addClass('cookie-consent-open');
|
|
||||||
|
|
||||||
const warningEl = $('.cookie-consent');
|
|
||||||
const dismissEl = warningEl.find('button');
|
|
||||||
dismissEl.on('click', function () {
|
|
||||||
// Save consent cookie and remove warning element
|
|
||||||
storage.setItem('cookieconsent', '1');
|
|
||||||
warningEl.remove();
|
|
||||||
$(document.body).removeClass('cookie-consent-open');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
function registerServiceWorker() {
|
function registerServiceWorker() {
|
||||||
// Do not register for Safari browsers
|
// Do not register for Safari browsers
|
||||||
if (!ajaxify.data._locals.useragent.isSafari && 'serviceWorker' in navigator) {
|
if (!ajaxify.data._locals.useragent.isSafari && 'serviceWorker' in navigator) {
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks', 'bootbox'], function (components, translator, Benchpress, hooks, bootbox) {
|
define('forum/chats/messages', [
|
||||||
|
'components', 'translator', 'benchpress', 'hooks', 'bootbox', 'messages'
|
||||||
|
], function (components, translator, Benchpress, hooks, bootbox, messagesModule) {
|
||||||
const messages = {};
|
const messages = {};
|
||||||
|
|
||||||
messages.sendMessage = function (roomId, inputEl) {
|
messages.sendMessage = function (roomId, inputEl) {
|
||||||
@@ -30,7 +32,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks
|
|||||||
inputEl.val(msg);
|
inputEl.val(msg);
|
||||||
messages.updateRemainingLength(inputEl.parent());
|
messages.updateRemainingLength(inputEl.parent());
|
||||||
if (err.message === '[[error:email-not-confirmed-chat]]') {
|
if (err.message === '[[error:email-not-confirmed-chat]]') {
|
||||||
return app.showEmailConfirmWarning(err);
|
return messagesModule.showEmailConfirmWarning(err.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return app.alert({
|
return app.alert({
|
||||||
|
|||||||
100
public/src/modules/messages.js
Normal file
100
public/src/modules/messages.js
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
define('messages', ['bootbox', 'translator', 'storage'], function (bootbox, translator, storage) {
|
||||||
|
const messages = {};
|
||||||
|
|
||||||
|
let showWelcomeMessage;
|
||||||
|
let registerMessage;
|
||||||
|
|
||||||
|
messages.show = function () {
|
||||||
|
showQueryStringMessages();
|
||||||
|
showCookieWarning();
|
||||||
|
messages.showEmailConfirmWarning();
|
||||||
|
};
|
||||||
|
|
||||||
|
messages.showEmailConfirmWarning = function (message) {
|
||||||
|
if (!config.emailPrompt || !app.user.uid || parseInt(storage.getItem('email-confirm-dismiss'), 10) === 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const msg = {
|
||||||
|
alert_id: 'email_confirm',
|
||||||
|
type: 'warning',
|
||||||
|
timeout: 0,
|
||||||
|
closefn: () => {
|
||||||
|
storage.setItem('email-confirm-dismiss', 1);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!app.user.email) {
|
||||||
|
msg.message = '[[error:no-email-to-confirm]]';
|
||||||
|
msg.clickfn = function () {
|
||||||
|
app.removeAlert('email_confirm');
|
||||||
|
ajaxify.go('user/' + app.user.userslug + '/edit/email');
|
||||||
|
};
|
||||||
|
app.alert(msg);
|
||||||
|
} else if (!app.user['email:confirmed'] && !app.user.isEmailConfirmSent) {
|
||||||
|
msg.message = message || '[[error:email-not-confirmed]]';
|
||||||
|
msg.clickfn = function () {
|
||||||
|
app.removeAlert('email_confirm');
|
||||||
|
socket.emit('user.emailConfirm', {}, function (err) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
app.alertSuccess('[[notifications:email-confirm-sent]]');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
app.alert(msg);
|
||||||
|
} else if (!app.user['email:confirmed'] && app.user.isEmailConfirmSent) {
|
||||||
|
msg.message = '[[error:email-not-confirmed-email-sent]]';
|
||||||
|
app.alert(msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function showCookieWarning() {
|
||||||
|
if (!config.cookies.enabled || !navigator.cookieEnabled || app.inAdmin || storage.getItem('cookieconsent') === '1') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
config.cookies.message = translator.unescape(config.cookies.message);
|
||||||
|
config.cookies.dismiss = translator.unescape(config.cookies.dismiss);
|
||||||
|
config.cookies.link = translator.unescape(config.cookies.link);
|
||||||
|
config.cookies.link_url = translator.unescape(config.cookies.link_url);
|
||||||
|
|
||||||
|
app.parseAndTranslate('partials/cookie-consent', config.cookies, function (html) {
|
||||||
|
$(document.body).append(html);
|
||||||
|
$(document.body).addClass('cookie-consent-open');
|
||||||
|
|
||||||
|
const warningEl = $('.cookie-consent');
|
||||||
|
const dismissEl = warningEl.find('button');
|
||||||
|
dismissEl.on('click', function () {
|
||||||
|
// Save consent cookie and remove warning element
|
||||||
|
storage.setItem('cookieconsent', '1');
|
||||||
|
warningEl.remove();
|
||||||
|
$(document.body).removeClass('cookie-consent-open');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function showQueryStringMessages() {
|
||||||
|
const params = utils.params();
|
||||||
|
showWelcomeMessage = !!params.loggedin;
|
||||||
|
registerMessage = params.register;
|
||||||
|
|
||||||
|
if (showWelcomeMessage) {
|
||||||
|
app.alert({
|
||||||
|
type: 'success',
|
||||||
|
title: '[[global:welcome_back]] ' + app.user.username + '!',
|
||||||
|
message: '[[global:you_have_successfully_logged_in]]',
|
||||||
|
timeout: 5000,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (registerMessage) {
|
||||||
|
bootbox.alert({
|
||||||
|
message: utils.escapeHTML(decodeURIComponent(registerMessage)),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return messages;
|
||||||
|
});
|
||||||
@@ -74,6 +74,7 @@ JS.scripts = {
|
|||||||
'public/src/modules/helpers.js',
|
'public/src/modules/helpers.js',
|
||||||
'public/src/modules/storage.js',
|
'public/src/modules/storage.js',
|
||||||
'public/src/modules/handleBack.js',
|
'public/src/modules/handleBack.js',
|
||||||
|
'public/src/modules/messages.js',
|
||||||
],
|
],
|
||||||
|
|
||||||
admin: [
|
admin: [
|
||||||
|
|||||||
Reference in New Issue
Block a user