mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-18 13:32:58 +01:00
205 lines
5.7 KiB
JavaScript
205 lines
5.7 KiB
JavaScript
'use strict';
|
|
|
|
require('../app');
|
|
|
|
// scripts-admin.js is generated during build, it contains javascript files
|
|
// from plugins that add files to "acpScripts" block in plugin.json
|
|
// eslint-disable-next-line
|
|
require('../../scripts-admin');
|
|
|
|
app.onDomReady();
|
|
|
|
(function () {
|
|
let logoutTimer = 0;
|
|
let logoutMessage;
|
|
function startLogoutTimer() {
|
|
if (app.config.adminReloginDuration <= 0) {
|
|
return;
|
|
}
|
|
if (logoutTimer) {
|
|
clearTimeout(logoutTimer);
|
|
}
|
|
// pre-translate language string gh#9046
|
|
if (!logoutMessage) {
|
|
require(['translator'], function (translator) {
|
|
translator.translate('[[login:logged-out-due-to-inactivity]]', function (translated) {
|
|
logoutMessage = translated;
|
|
});
|
|
});
|
|
}
|
|
|
|
logoutTimer = setTimeout(function () {
|
|
require(['bootbox'], function (bootbox) {
|
|
bootbox.alert({
|
|
closeButton: false,
|
|
message: logoutMessage,
|
|
callback: function () {
|
|
window.location.reload();
|
|
},
|
|
});
|
|
});
|
|
}, 3600000);
|
|
}
|
|
|
|
require(['hooks', 'admin/settings'], (hooks, Settings) => {
|
|
hooks.on('action:ajaxify.end', (data) => {
|
|
updatePageTitle(data.url);
|
|
setupRestartLinks();
|
|
showCorrectNavTab();
|
|
startLogoutTimer();
|
|
|
|
$('[data-bs-toggle="tooltip"]').tooltip({
|
|
animation: false,
|
|
container: '#content',
|
|
});
|
|
|
|
if ($('.settings').length) {
|
|
Settings.prepare();
|
|
}
|
|
if ($('[component="settings/toc"]').length) {
|
|
Settings.populateTOC();
|
|
}
|
|
});
|
|
hooks.on('action:ajaxify.start', function () {
|
|
require(['bootstrap'], function (boostrap) {
|
|
const offcanvas = boostrap.Offcanvas.getInstance('#offcanvas');
|
|
if (offcanvas) {
|
|
offcanvas.hide();
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
function showCorrectNavTab() {
|
|
const accordionEl = $('[component="acp/accordion"]');
|
|
let pathname = window.location.pathname;
|
|
if (pathname === '/admin') {
|
|
pathname = '/admin/dashboard';
|
|
}
|
|
const selectedButton = accordionEl.find(`a[href="${pathname}"]`);
|
|
if (selectedButton.length) {
|
|
accordionEl.find('a').removeClass('active');
|
|
accordionEl.find('.accordion-collapse').removeClass('show');
|
|
selectedButton.addClass('active');
|
|
selectedButton.parents('.accordion-collapse').addClass('show');
|
|
}
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
require(['admin/modules/search'], function (search) {
|
|
search.init();
|
|
});
|
|
|
|
$('[component="logout"]').on('click', function () {
|
|
require(['logout'], function (logout) {
|
|
logout();
|
|
});
|
|
return false;
|
|
});
|
|
|
|
setupNProgress();
|
|
fixAccordionIds();
|
|
});
|
|
|
|
function fixAccordionIds() {
|
|
// fix mobile accordion, so it doesn't have same ids as desktop
|
|
// the same accordion partial is used in both places
|
|
const offcanvasAccordion = $('#offcanvas #accordionACP');
|
|
offcanvasAccordion.attr('id', 'accordionACP-offcanvas');
|
|
offcanvasAccordion.find('[data-bs-target]').each((i, el) => {
|
|
$(el).attr('data-bs-target', $(el).attr('data-bs-target') + '-offcanvas');
|
|
});
|
|
offcanvasAccordion.find('[data-bs-parent]').each((i, el) => {
|
|
$(el).attr('data-bs-parent', '#accordionACP-offcanvas');
|
|
});
|
|
offcanvasAccordion.find('.accordion-collapse').each((i, el) => {
|
|
$(el).attr('id', $(el).attr('id') + '-offcanvas');
|
|
});
|
|
}
|
|
|
|
function setupNProgress() {
|
|
require(['nprogress', 'hooks'], function (NProgress, hooks) {
|
|
$(window).on('action:ajaxify.start', function () {
|
|
NProgress.set(0.7);
|
|
});
|
|
|
|
hooks.on('action:ajaxify.end', function () {
|
|
NProgress.done();
|
|
});
|
|
});
|
|
}
|
|
|
|
function updatePageTitle(url) {
|
|
require(['translator'], function (translator) {
|
|
url = url
|
|
.replace(/\/\d+$/, '')
|
|
.split('/').slice(0, 3).join('/')
|
|
.split(/[?#]/)[0].replace(/(\/+$)|(^\/+)/, '');
|
|
|
|
// If index is requested, load the dashboard
|
|
if (url === 'admin') {
|
|
url = 'admin/dashboard';
|
|
}
|
|
|
|
url = [config.relative_path, url].join('/');
|
|
let fallback;
|
|
|
|
$(`[component="acp/accordion"] a[href="${url}"]`).each(function () {
|
|
fallback = $(this).text();
|
|
});
|
|
|
|
let mainTitle;
|
|
let pageTitle;
|
|
if (/admin\/plugins\//.test(url)) {
|
|
mainTitle = fallback;
|
|
pageTitle = '[[admin/menu:section-plugins]] > ' + mainTitle;
|
|
} else {
|
|
const matches = url.match(/admin\/(.+?)\/(.+?)$/);
|
|
if (matches) {
|
|
mainTitle = '[[admin/menu:' + matches[1] + '/' + matches[2] + ']]';
|
|
pageTitle = '[[admin/menu:section-' +
|
|
(matches[1] === 'development' ? 'advanced' : matches[1]) +
|
|
']]' + (matches[2] ? (' > ' + mainTitle) : '');
|
|
if (matches[2] === 'settings') {
|
|
mainTitle = translator.compile('admin/menu:settings.page-title', mainTitle);
|
|
}
|
|
} else {
|
|
mainTitle = '[[admin/menu:section-dashboard]]';
|
|
pageTitle = '[[admin/menu:section-dashboard]]';
|
|
}
|
|
}
|
|
|
|
pageTitle = translator.compile('admin/admin:acp-title', pageTitle);
|
|
|
|
translator.translate(pageTitle, function (title) {
|
|
document.title = title.replace(/>/g, '>');
|
|
});
|
|
});
|
|
}
|
|
|
|
function setupRestartLinks() {
|
|
require(['benchpress', 'bootbox', 'admin/modules/instance'], function (benchpress, bootbox, instance) {
|
|
// need to preload the compiled alert template
|
|
// otherwise it can be unloaded when rebuild & restart is run
|
|
// the client can't fetch the template file, resulting in an error
|
|
benchpress.render('partials/toast', {}).then(function () {
|
|
$('[component="rebuild-and-restart"]').off('click').on('click', function () {
|
|
bootbox.confirm('[[admin/admin:alert.confirm-rebuild-and-restart]]', function (confirm) {
|
|
if (confirm) {
|
|
instance.rebuildAndRestart();
|
|
}
|
|
});
|
|
});
|
|
|
|
$('[component="restart"]').off('click').on('click', function () {
|
|
bootbox.confirm('[[admin/admin:alert.confirm-restart]]', function (confirm) {
|
|
if (confirm) {
|
|
instance.restart();
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
}());
|