refactor: remove general menu from ACP (#8347)

* refactor: remove general menu from ACP

* fix: incorrect translation keys, fixed tests
v1.18.x
Julian Lam 5 years ago committed by GitHub
parent d1df08269f
commit a51fff8bd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,11 +1,6 @@
{
"dashboard": "Dashboard",
"section-general": "General",
"general/dashboard": "Dashboard",
"general/homepage": "Home Page",
"general/navigation": "Navigation",
"general/languages": "Languages",
"general/sounds": "Sounds",
"general/social": "Social",
"section-manage": "Manage",
"manage/categories": "Categories",
@ -22,17 +17,22 @@
"section-settings": "Settings",
"settings/general": "General",
"settings/homepage": "Home Page",
"settings/navigation": "Navigation",
"settings/reputation": "Reputation",
"settings/email": "Email",
"settings/user": "User",
"settings/group": "Group",
"settings/guest": "Guests",
"settings/uploads": "Uploads",
"settings/languages": "Languages",
"settings/post": "Post",
"settings/chat": "Chat",
"settings/pagination": "Pagination",
"settings/tags": "Tags",
"settings/notifications": "Notifications",
"settings/sounds": "Sounds",
"settings/social": "Social",
"settings/cookies": "Cookies",
"settings/web-crawler": "Web Crawler",
"settings/sockets": "Sockets",

@ -260,7 +260,7 @@ paths:
imageClass:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/dashboard:
/api/admin/dashboard:
get:
tags:
- admin
@ -355,7 +355,7 @@ paths:
type: string
description: An ISO 8601 formatted date string (complementing `timestamp`)
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/languages:
/api/admin/settings/languages:
get:
tags:
- admin
@ -391,7 +391,7 @@ paths:
type: integer
description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/sounds:
/api/admin/settings/sounds:
get:
tags:
- admin
@ -460,7 +460,7 @@ paths:
selected:
type: boolean
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/navigation:
/api/admin/settings/navigation:
get:
tags:
- admin
@ -568,7 +568,7 @@ paths:
type: array
description: A clone of `enabled`
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/homepage:
/api/admin/settings/homepage:
get:
tags:
- admin
@ -592,7 +592,7 @@ paths:
name:
type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/social:
/api/admin/settings/social:
get:
tags:
- admin

@ -71,7 +71,7 @@
// If index is requested, load the dashboard
if (url === 'admin') {
url = 'admin/general/dashboard';
url = 'admin/dashboard';
}
url = [config.relative_path, url].join('/');
@ -100,12 +100,17 @@
pageTitle = '[[admin/menu:section-plugins]] > ' + mainTitle;
} else {
var matches = url.match(/admin\/(.+?)\/(.+?)$/);
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);
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:dashboard]]';
pageTitle = '[[admin/menu:dashboard]]';
}
}

@ -1,7 +1,7 @@
'use strict';
define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'], function (semver, Chart, translator, Benchpress) {
define('admin/dashboard', ['semver', 'Chart', 'translator', 'benchpress'], function (semver, Chart, translator, Benchpress) {
var Admin = {};
var intervals = {
rooms: false,
@ -64,19 +64,19 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
var html = '<div class="text-center pull-left">' +
'<span class="formatted-number">' + data.onlineRegisteredCount + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.users]]</div>' +
'<div class="stat">[[admin/dashboard:active-users.users]]</div>' +
'</div>' +
'<div class="text-center pull-left">' +
'<span class="formatted-number">' + data.onlineGuestCount + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.guests]]</div>' +
'<div class="stat">[[admin/dashboard:active-users.guests]]</div>' +
'</div>' +
'<div class="text-center pull-left">' +
'<span class="formatted-number">' + (data.onlineRegisteredCount + data.onlineGuestCount) + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.total]]</div>' +
'<div class="stat">[[admin/dashboard:active-users.total]]</div>' +
'</div>' +
'<div class="text-center pull-left">' +
'<span class="formatted-number">' + data.socketCount + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.connections]]</div>' +
'<div class="stat">[[admin/dashboard:active-users.connections]]</div>' +
'</div>';
updateRegisteredGraph(data.onlineRegisteredCount, data.onlineGuestCount);
@ -144,18 +144,18 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
var t = translator.Translator.create();
Promise.all([
t.translateKey('admin/general/dashboard:graphs.page-views', []),
t.translateKey('admin/general/dashboard:graphs.page-views-registered', []),
t.translateKey('admin/general/dashboard:graphs.page-views-guest', []),
t.translateKey('admin/general/dashboard:graphs.page-views-bot', []),
t.translateKey('admin/general/dashboard:graphs.unique-visitors', []),
t.translateKey('admin/general/dashboard:graphs.registered-users', []),
t.translateKey('admin/general/dashboard:graphs.anonymous-users', []),
t.translateKey('admin/general/dashboard:on-categories', []),
t.translateKey('admin/general/dashboard:reading-posts', []),
t.translateKey('admin/general/dashboard:browsing-topics', []),
t.translateKey('admin/general/dashboard:recent', []),
t.translateKey('admin/general/dashboard:unread', []),
t.translateKey('admin/dashboard:graphs.page-views', []),
t.translateKey('admin/dashboard:graphs.page-views-registered', []),
t.translateKey('admin/dashboard:graphs.page-views-guest', []),
t.translateKey('admin/dashboard:graphs.page-views-bot', []),
t.translateKey('admin/dashboard:graphs.unique-visitors', []),
t.translateKey('admin/dashboard:graphs.registered-users', []),
t.translateKey('admin/dashboard:graphs.anonymous-users', []),
t.translateKey('admin/dashboard:on-categories', []),
t.translateKey('admin/dashboard:reading-posts', []),
t.translateKey('admin/dashboard:browsing-topics', []),
t.translateKey('admin/dashboard:recent', []),
t.translateKey('admin/dashboard:unread', []),
]).then(function (translations) {
var data = {
labels: trafficLabels,
@ -334,7 +334,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
$(this).addClass('active');
require(['translator'], function (translator) {
translator.translate('[[admin/general/dashboard:page-views-custom]]', function (translated) {
translator.translate('[[admin/dashboard:page-views-custom]]', function (translated) {
$('[data-action="updateGraph"][data-units="custom"]').text(translated);
});
});
@ -345,7 +345,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
Benchpress.parse('admin/partials/pageviews-range-select', {}, function (html) {
var modal = bootbox.dialog({
title: '[[admin/general/dashboard:page-views-custom]]',
title: '[[admin/dashboard:page-views-custom]]',
message: html,
buttons: {
submit: {
@ -501,7 +501,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
function updateTopicsGraph(topics) {
if (!topics.length) {
topics = [{
title: '[[admin/general/dashboard:no-users-browsing]]',
title: '[[admin/dashboard:no-users-browsing]]',
count: 1,
}];
}

@ -1,12 +0,0 @@
'use strict';
define('admin/general/languages', ['admin/settings'], function (Settings) {
var Languages = {};
Languages.init = function () {
Settings.prepare();
};
return Languages;
});

@ -122,7 +122,7 @@ define('admin/settings', ['uploader'], function (uploader) {
accept: uploadBtn.attr('data-accept'),
}, function (image) {
// need to move these into template, ex data-callback
if (ajaxify.currentPage === 'admin/general/sounds') {
if (ajaxify.currentPage === 'admin/settings/sounds') {
ajaxify.refresh();
} else {
$('#' + uploadBtn.attr('data-target')).val(image);

@ -1,7 +1,7 @@
'use strict';
define('admin/general/homepage', ['admin/settings'], function () {
define('admin/settings/homepage', ['admin/settings'], function () {
function toggleCustomRoute() {
if ($('[data-field="homePageRoute"]').val()) {
$('#homePageCustom').hide();

@ -1,7 +1,7 @@
'use strict';
define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'jqueryui'], function (translator, iconSelect, Benchpress) {
define('admin/settings/navigation', ['translator', 'iconSelect', 'benchpress', 'jqueryui'], function (translator, iconSelect, Benchpress) {
var navigation = {};
var available;
@ -70,7 +70,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j
data.title = translator.escape(data.title);
data.text = translator.escape(data.text);
data.groups = ajaxify.data.groups;
Benchpress.parse('admin/general/navigation', 'navigation', { navigation: [data] }, function (li) {
Benchpress.parse('admin/settings/navigation', 'navigation', { navigation: [data] }, function (li) {
translator.translate(li, function (li) {
li = $(translator.unescape(li));
el.after(li);
@ -78,7 +78,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j
});
});
Benchpress.parse('admin/general/navigation', 'enabled', { enabled: [data] }, function (li) {
Benchpress.parse('admin/settings/navigation', 'enabled', { enabled: [data] }, function (li) {
translator.translate(li, function (li) {
li = $(translator.unescape(li));
$('#enabled').append(li);
@ -146,7 +146,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j
function toggle() {
var btn = $(this);
var disabled = btn.hasClass('btn-success');
translator.translate(disabled ? '[[admin/general/navigation:btn.disable]]' : '[[admin/general/navigation:btn.enable]]', function (html) {
translator.translate(disabled ? '[[admin/settings/navigation:btn.disable]]' : '[[admin/settings/navigation:btn.enable]]', function (html) {
btn.toggleClass('btn-warning').toggleClass('btn-success').html(html);
btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : '');
});

@ -1,7 +1,7 @@
'use strict';
define('admin/general/social', [], function () {
define('admin/settings/social', [], function () {
var social = {};
social.init = function () {
@ -18,7 +18,7 @@ define('admin/general/social', [], function () {
return app.alertError(err);
}
app.alertSuccess('[[admin/general/social:save-success]]');
app.alertSuccess('[[admin/settings/social:save-success]]');
});
});
};

@ -1,7 +1,7 @@
'use strict';
define('admin/general/sounds', ['sounds', 'settings', 'admin/settings'], function (Sounds, Settings, AdminSettings) {
define('admin/settings/sounds', ['sounds', 'settings', 'admin/settings'], function (Sounds, Settings, AdminSettings) {
var SoundsAdmin = {};
SoundsAdmin.init = function () {

@ -137,7 +137,7 @@ function initDict(language, callback) {
var title = namespace;
if (/admin\/general\/dashboard$/.test(title)) {
title = '[[admin/menu:general/dashboard]]';
title = '[[admin/menu:dashboard]]';
} else {
title = title.match(/admin\/(.+?)\/(.+?)$/);
title = '[[admin/menu:section-' +

@ -22,13 +22,8 @@ var adminController = {
database: require('./admin/database'),
cache: require('./admin/cache'),
plugins: require('./admin/plugins'),
languages: require('./admin/languages'),
settings: require('./admin/settings'),
logger: require('./admin/logger'),
sounds: require('./admin/sounds'),
homepage: require('./admin/homepage'),
navigation: require('./admin/navigation'),
social: require('./admin/social'),
themes: require('./admin/themes'),
users: require('./admin/users'),
uploads: require('./admin/uploads'),

@ -24,7 +24,7 @@ dashboardController.get = async function (req, res) {
]);
const version = nconf.get('version');
res.render('admin/general/dashboard', {
res.render('admin/dashboard', {
version: version,
lookupFailed: latestVersion === null,
latestVersion: latestVersion,
@ -41,14 +41,14 @@ async function getNotices() {
const notices = [
{
done: !meta.reloadRequired,
doneText: '[[admin/general/dashboard:restart-not-required]]',
notDoneText: '[[admin/general/dashboard:restart-required]]',
doneText: '[[admin/dashboard:restart-not-required]]',
notDoneText: '[[admin/dashboard:restart-required]]',
},
{
done: plugins.hasListeners('filter:search.query'),
doneText: '[[admin/general/dashboard:search-plugin-installed]]',
notDoneText: '[[admin/general/dashboard:search-plugin-not-installed]]',
tooltip: '[[admin/general/dashboard:search-plugin-tooltip]]',
doneText: '[[admin/dashboard:search-plugin-installed]]',
notDoneText: '[[admin/dashboard:search-plugin-not-installed]]',
tooltip: '[[admin/dashboard:search-plugin-tooltip]]',
link: '/admin/extend/plugins',
},
];
@ -56,7 +56,7 @@ async function getNotices() {
if (global.env !== 'production') {
notices.push({
done: false,
notDoneText: '[[admin/general/dashboard:running-in-development]]',
notDoneText: '[[admin/dashboard:running-in-development]]',
});
}
@ -120,10 +120,10 @@ async function getStats() {
getStatsForSet('posts:pid', 'postCount'),
getStatsForSet('topics:tid', 'topicCount'),
]);
results[0].name = '[[admin/general/dashboard:unique-visitors]]';
results[1].name = '[[admin/general/dashboard:new-users]]';
results[2].name = '[[admin/general/dashboard:posts]]';
results[3].name = '[[admin/general/dashboard:topics]]';
results[0].name = '[[admin/dashboard:unique-visitors]]';
results[1].name = '[[admin/dashboard:new-users]]';
results[2].name = '[[admin/dashboard:posts]]';
results[3].name = '[[admin/dashboard:topics]]';
cache.set('admin:stats', results, 600000);
return results;
}

@ -1,10 +0,0 @@
'use strict';
const helpers = require('../helpers');
const homePageController = module.exports;
homePageController.get = async function (req, res) {
const routes = await helpers.getHomePageRoutes(req.uid);
res.render('admin/general/homepage', { routes: routes });
};

@ -1,18 +0,0 @@
'use strict';
const languages = require('../../languages');
const meta = require('../../meta');
const languagesController = module.exports;
languagesController.get = async function (req, res) {
const languageData = await languages.list();
languageData.forEach(function (language) {
language.selected = language.code === meta.config.defaultLang;
});
res.render('admin/general/languages', {
languages: languageData,
autoDetectLang: meta.config.autoDetectLang,
});
};

@ -1,37 +0,0 @@
'use strict';
const navigationAdmin = require('../../navigation/admin');
const groups = require('../../groups');
const navigationController = module.exports;
navigationController.get = async function (req, res) {
const [admin, allGroups] = await Promise.all([
navigationAdmin.getAdmin(),
groups.getNonPrivilegeGroups('groups:createtime', 0, -1),
]);
allGroups.sort((a, b) => b.system - a.system);
admin.groups = allGroups.map(group => ({ name: group.name, displayName: group.displayName }));
admin.enabled.forEach(function (enabled, index) {
enabled.index = index;
enabled.selected = index === 0;
enabled.groups = admin.groups.map(function (group) {
return {
displayName: group.displayName,
selected: enabled.groups.includes(group.name),
};
});
});
admin.available.forEach(function (available) {
available.groups = admin.groups;
});
admin.navigation = admin.enabled.slice();
res.render('admin/general/navigation', admin);
};

@ -4,25 +4,21 @@ const meta = require('../../meta');
const emailer = require('../../emailer');
const notifications = require('../../notifications');
const groups = require('../../groups');
const languages = require('../../languages');
const plugins = require('../../plugins');
const navigationAdmin = require('../../navigation/admin');
const social = require('../../social');
const helpers = require('../helpers');
const settingsController = module.exports;
settingsController.get = async function (req, res, next) {
const term = req.params.term ? req.params.term : 'general';
if (term === 'email') {
await renderEmail(req, res, next);
} else if (term === 'user') {
await renderUser(req, res, next);
} else if (term === 'post') {
await renderPost(req, res, next);
} else {
res.render('admin/settings/' + term);
}
settingsController.get = async function (req, res) {
const term = req.params.term || 'general';
res.render('admin/settings/' + term);
};
async function renderEmail(req, res) {
settingsController.email = async (req, res) => {
const emails = await emailer.getTemplates(meta.config);
res.render('admin/settings/email', {
@ -30,9 +26,9 @@ async function renderEmail(req, res) {
sendable: emails.filter(e => !e.path.includes('_plaintext') && !e.path.includes('partials')),
services: emailer.listServices(),
});
}
};
async function renderUser(req, res) {
settingsController.user = async (req, res) => {
const notificationTypes = await notifications.getAllNotificationTypes();
const notificationSettings = notificationTypes.map(function (type) {
return {
@ -43,11 +39,97 @@ async function renderUser(req, res) {
res.render('admin/settings/user', {
notificationSettings: notificationSettings,
});
}
};
async function renderPost(req, res) {
settingsController.post = async (req, res) => {
const groupData = await groups.getNonPrivilegeGroups('groups:createtime', 0, -1);
res.render('admin/settings/post', {
groupsExemptFromPostQueue: groupData,
});
}
};
settingsController.languages = async function (req, res) {
const languageData = await languages.list();
languageData.forEach(function (language) {
language.selected = language.code === meta.config.defaultLang;
});
res.render('admin/settings/languages', {
languages: languageData,
autoDetectLang: meta.config.autoDetectLang,
});
};
settingsController.sounds = async function (req, res) {
const types = [
'notification',
'chat-incoming',
'chat-outgoing',
];
const settings = await meta.configs.getFields(types) || {};
var output = {};
types.forEach(function (type) {
var soundpacks = plugins.soundpacks.map(function (pack) {
var sounds = Object.keys(pack.sounds).map(function (soundName) {
var value = pack.name + ' | ' + soundName;
return {
name: soundName,
value: value,
selected: value === settings[type],
};
});
return {
name: pack.name,
sounds: sounds,
};
});
output[type + '-sound'] = soundpacks;
});
res.render('admin/settings/sounds', output);
};
settingsController.navigation = async function (req, res) {
const [admin, allGroups] = await Promise.all([
navigationAdmin.getAdmin(),
groups.getNonPrivilegeGroups('groups:createtime', 0, -1),
]);
allGroups.sort((a, b) => b.system - a.system);
admin.groups = allGroups.map(group => ({ name: group.name, displayName: group.displayName }));
admin.enabled.forEach(function (enabled, index) {
enabled.index = index;
enabled.selected = index === 0;
enabled.groups = admin.groups.map(function (group) {
return {
displayName: group.displayName,
selected: enabled.groups.includes(group.name),
};
});
});
admin.available.forEach(function (available) {
available.groups = admin.groups;
});
admin.navigation = admin.enabled.slice();
res.render('admin/settings/navigation', admin);
};
settingsController.homepage = async function (req, res) {
const routes = await helpers.getHomePageRoutes(req.uid);
res.render('admin/settings/homepage', { routes: routes });
};
settingsController.social = async function (req, res) {
const posts = await social.getPostSharing();
res.render('admin/settings/social', {
posts: posts,
});
};

@ -1,12 +0,0 @@
'use strict';
const social = require('../../social');
const socialController = module.exports;
socialController.get = async function (req, res) {
const posts = await social.getPostSharing();
res.render('admin/general/social', {
posts: posts,
});
};

@ -1,38 +0,0 @@
'use strict';
const plugins = require('../../plugins');
const meta = require('../../meta');
const soundsController = module.exports;
soundsController.get = async function (req, res) {
const types = [
'notification',
'chat-incoming',
'chat-outgoing',
];
const settings = await meta.configs.getFields(types) || {};
var output = {};
types.forEach(function (type) {
var soundpacks = plugins.soundpacks.map(function (pack) {
var sounds = Object.keys(pack.sounds).map(function (soundName) {
var value = pack.name + ' | ' + soundName;
return {
name: soundName,
value: value,
selected: value === settings[type],
};
});
return {
name: pack.name,
sounds: sounds,
};
});
output[type + '-sound'] = soundpacks;
});
res.render('admin/general/sounds', output);
};

@ -7,12 +7,7 @@ module.exports = function (app, middleware, controllers) {
helpers.setupAdminPageRoute(app, '/admin', middleware, middlewares, controllers.admin.dashboard.get);
helpers.setupAdminPageRoute(app, '/admin/general/dashboard', middleware, middlewares, controllers.admin.dashboard.get);
helpers.setupAdminPageRoute(app, '/admin/general/languages', middleware, middlewares, controllers.admin.languages.get);
helpers.setupAdminPageRoute(app, '/admin/general/sounds', middleware, middlewares, controllers.admin.sounds.get);
helpers.setupAdminPageRoute(app, '/admin/general/navigation', middleware, middlewares, controllers.admin.navigation.get);
helpers.setupAdminPageRoute(app, '/admin/general/homepage', middleware, middlewares, controllers.admin.homepage.get);
helpers.setupAdminPageRoute(app, '/admin/general/social', middleware, middlewares, controllers.admin.social.get);
helpers.setupAdminPageRoute(app, '/admin/dashboard', middleware, middlewares, controllers.admin.dashboard.get);
helpers.setupAdminPageRoute(app, '/admin/manage/categories', middleware, middlewares, controllers.admin.categories.getAll);
helpers.setupAdminPageRoute(app, '/admin/manage/categories/:category_id', middleware, middlewares, controllers.admin.categories.get);
@ -43,6 +38,14 @@ module.exports = function (app, middleware, controllers) {
helpers.setupAdminPageRoute(app, '/admin/manage/uploads', middleware, middlewares, controllers.admin.uploads.get);
helpers.setupAdminPageRoute(app, '/admin/manage/digest', middleware, middlewares, controllers.admin.digest.get);
helpers.setupAdminPageRoute(app, '/admin/settings/email', middleware, middlewares, controllers.admin.settings.email);
helpers.setupAdminPageRoute(app, '/admin/settings/user', middleware, middlewares, controllers.admin.settings.user);
helpers.setupAdminPageRoute(app, '/admin/settings/post', middleware, middlewares, controllers.admin.settings.post);
helpers.setupAdminPageRoute(app, '/admin/settings/languages', middleware, middlewares, controllers.admin.settings.languages);
helpers.setupAdminPageRoute(app, '/admin/settings/sounds', middleware, middlewares, controllers.admin.settings.sounds);
helpers.setupAdminPageRoute(app, '/admin/settings/navigation', middleware, middlewares, controllers.admin.settings.navigation);
helpers.setupAdminPageRoute(app, '/admin/settings/homepage', middleware, middlewares, controllers.admin.settings.homepage);
helpers.setupAdminPageRoute(app, '/admin/settings/social', middleware, middlewares, controllers.admin.settings.social);
helpers.setupAdminPageRoute(app, '/admin/settings/:term?', middleware, middlewares, controllers.admin.settings.get);
helpers.setupAdminPageRoute(app, '/admin/appearance/:term?', middleware, middlewares, controllers.admin.appearance.get);

@ -2,7 +2,7 @@
<div class="col-lg-9">
<div class="panel panel-default" id="analytics-panel">
<div class="panel-heading">
[[admin/general/dashboard:forum-traffic]]
[[admin/dashboard:forum-traffic]]
<div class="pull-right">
<a id="view-as-json" href="{config.relative_path}/api/admin/analytics&type=hourly"><i class="fa fa-terminal"></i></a>
<i class="fa fa-expand"></i>
@ -16,19 +16,19 @@
<div class="row">
<div class="col-sm-3 hidden-xs text-center pageview-stats">
<div><strong id="pageViewsThirty">0</strong></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="30">[[admin/general/dashboard:page-views-thirty]]</a></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="30">[[admin/dashboard:page-views-thirty]]</a></div>
</div>
<div class="col-sm-3 text-center pageview-stats">
<div><strong id="pageViewsSeven">0</strong></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="7">[[admin/general/dashboard:page-views-seven]]</a></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="7">[[admin/dashboard:page-views-seven]]</a></div>
</div>
<div class="col-sm-3 hidden-xs text-center pageview-stats">
<div><strong id="pageViewsPastDay">0</strong></div>
<div><a href="#" class="updatePageviewsGraph active" data-action="updateGraph" data-units="hours">[[admin/general/dashboard:page-views-last-day]]</a></div>
<div><a href="#" class="updatePageviewsGraph active" data-action="updateGraph" data-units="hours">[[admin/dashboard:page-views-last-day]]</a></div>
</div>
<div class="col-sm-3 text-center pageview-stats">
<div><strong><i class="fa fa-clock-o"></i></strong></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="custom">[[admin/general/dashboard:page-views-custom]]</a></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="custom">[[admin/dashboard:page-views-custom]]</a></div>
</div>
</div>
</div>
@ -40,16 +40,16 @@
<thead>
<tr>
<th></th>
<th class="text-right">[[admin/general/dashboard:stats.yesterday]]</th>
<th class="text-right">[[admin/general/dashboard:stats.today]]</th>
<th class="text-right">[[admin/dashboard:stats.yesterday]]</th>
<th class="text-right">[[admin/dashboard:stats.today]]</th>
<th></th>
<th class="text-right">[[admin/general/dashboard:stats.last-week]]</th>
<th class="text-right">[[admin/general/dashboard:stats.this-week]]</th>
<th class="text-right">[[admin/dashboard:stats.last-week]]</th>
<th class="text-right">[[admin/dashboard:stats.this-week]]</th>
<th></th>
<th class="text-right">[[admin/general/dashboard:stats.last-month]]</th>
<th class="text-right">[[admin/general/dashboard:stats.this-month]]</th>
<th class="text-right">[[admin/dashboard:stats.last-month]]</th>
<th class="text-right">[[admin/dashboard:stats.this-month]]</th>
<th></th>
<th class="text-right">[[admin/general/dashboard:stats.all]]</th>
<th class="text-right">[[admin/dashboard:stats.all]]</th>
</tr>
</thead>
<tbody>
@ -79,13 +79,13 @@
<div class="row">
<div class="col-lg-4">
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:anonymous-registered-users]]</div>
<div class="panel-heading">[[admin/dashboard:anonymous-registered-users]]</div>
<div class="panel-body">
<div class="graph-container pie-chart legend-down">
<canvas id="analytics-registered"></canvas>
<ul class="graph-legend" id="analytics-legend">
<li><div class="registered"></div><span>(<span class="count"></span>) [[admin/general/dashboard:registered]]</span></li>
<li><div class="anonymous"></div><span>(<span class="count"></span>) [[admin/general/dashboard:anonymous]]</span></li>
<li><div class="registered"></div><span>(<span class="count"></span>) [[admin/dashboard:registered]]</span></li>
<li><div class="anonymous"></div><span>(<span class="count"></span>) [[admin/dashboard:anonymous]]</span></li>
</ul>
</div>
</div>
@ -94,16 +94,16 @@
<div class="col-lg-4">
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:user-presence]]</div>
<div class="panel-heading">[[admin/dashboard:user-presence]]</div>
<div class="panel-body">
<div class="graph-container pie-chart legend-down">
<canvas id="analytics-presence"></canvas>
<ul class="graph-legend" id="analytics-presence-legend">
<li><div class="reading-posts"></div><span>(<span class="count"></span>) [[admin/general/dashboard:reading-posts]]</span></li>
<li><div class="on-categories"></div><span>(<span class="count"></span>) [[admin/general/dashboard:on-categories]]</span></li>
<li><div class="browsing-topics"></div><span>(<span class="count"></span>) [[admin/general/dashboard:browsing-topics]]</span></li>
<li><div class="recent"></div><span>(<span class="count"></span>) [[admin/general/dashboard:recent]]</span></li>
<li><div class="unread"></div><span>(<span class="count"></span>) [[admin/general/dashboard:unread]]</span></li>
<li><div class="reading-posts"></div><span>(<span class="count"></span>) [[admin/dashboard:reading-posts]]</span></li>
<li><div class="on-categories"></div><span>(<span class="count"></span>) [[admin/dashboard:on-categories]]</span></li>
<li><div class="browsing-topics"></div><span>(<span class="count"></span>) [[admin/dashboard:browsing-topics]]</span></li>
<li><div class="recent"></div><span>(<span class="count"></span>) [[admin/dashboard:recent]]</span></li>
<li><div class="unread"></div><span>(<span class="count"></span>) [[admin/dashboard:unread]]</span></li>
</ul>
</div>
</div>
@ -111,7 +111,7 @@
</div>
<div class="col-lg-4">
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:high-presence-topics]]</div>
<div class="panel-heading">[[admin/dashboard:high-presence-topics]]</div>
<div class="panel-body">
<div class="graph-container pie-chart legend-down">
<canvas id="analytics-topics"></canvas>
@ -125,74 +125,74 @@
<div class="col-lg-3">
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:control-panel]]</div>
<div class="panel-heading">[[admin/dashboard:control-panel]]</div>
<div class="panel-body text-center">
<p>
<button class="btn btn-block btn-warning restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/general/dashboard:restart]]</button>
<button class="btn btn-block btn-danger rebuild-and-restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/general/dashboard:rebuild-and-restart]]</button>
<button class="btn btn-block btn-warning restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/dashboard:restart]]</button>
<button class="btn btn-block btn-danger rebuild-and-restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/dashboard:rebuild-and-restart]]</button>
</p>
<!-- IF lastrestart -->
<p>
[[admin/general/dashboard:last-restarted-by]]<br />
[[admin/dashboard:last-restarted-by]]<br />
<a href="{config.relative_path}/uid/{lastrestart.uid}"><span class="label label-info">{lastrestart.user.username}</span></a> <span class="timeago" title="{lastrestart.timestampISO}"></span>
</p>
<!-- ENDIF lastrestart -->
<p class="<!-- IF canRestart -->help-block<!-- ELSE -->alert alert-warning<!-- END -->">
<!-- IF canRestart -->
[[admin/general/dashboard:restart-warning]]
[[admin/dashboard:restart-warning]]
<!-- ELSE -->
[[admin/general/dashboard:restart-disabled]]
[[admin/dashboard:restart-disabled]]
<!-- END -->
</p>
<p>
<a href="{config.relative_path}/admin/settings/advanced" class="btn btn-info btn-block" data-placement="bottom" data-toggle="tooltip" title="[[admin/general/dashboard:maintenance-mode-title]]">[[admin/general/dashboard:maintenance-mode]]</a>
<a href="{config.relative_path}/admin/settings/advanced" class="btn btn-info btn-block" data-placement="bottom" data-toggle="tooltip" title="[[admin/dashboard:maintenance-mode-title]]">[[admin/dashboard:maintenance-mode]]</a>
</p>
<hr />
<span id="toggle-realtime">[[admin/general/dashboard:realtime-chart-updates]] <strong>OFF</strong> <i class="fa fa fa-toggle-off pointer"></i></span>
<span id="toggle-realtime">[[admin/dashboard:realtime-chart-updates]] <strong>OFF</strong> <i class="fa fa fa-toggle-off pointer"></i></span>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:active-users]]</div>
<div class="panel-heading">[[admin/dashboard:active-users]]</div>
<div class="panel-body">
<div id="active-users" class="stats"></div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:updates]]</div>
<div class="panel-heading">[[admin/dashboard:updates]]</div>
<div class="panel-body">
<div class="alert <!-- IF lookupFailed -->alert-danger<!-- ELSE --><!-- IF upgradeAvailable -->alert-warning<!-- ELSE --><!-- IF currentPrerelease -->alert-info<!-- ELSE -->alert-success<!-- END --><!-- END --><!-- END --> version-check">
<p>[[admin/general/dashboard:running-version, {version}]]</p>
<p>[[admin/dashboard:running-version, {version}]]</p>
<p>
<!-- IF lookupFailed -->
[[admin/general/dashboard:latest-lookup-failed]]
[[admin/dashboard:latest-lookup-failed]]
<!-- ELSE -->
<!-- IF upgradeAvailable -->
<!-- IF currentPrerelease -->
[[admin/general/dashboard:prerelease-upgrade-available, {latestVersion}]]
[[admin/dashboard:prerelease-upgrade-available, {latestVersion}]]
<!-- ELSE -->
[[admin/general/dashboard:upgrade-available, {latestVersion}]]
[[admin/dashboard:upgrade-available, {latestVersion}]]
<!-- END -->
<!-- ELSE -->
<!-- IF currentPrerelease -->
[[admin/general/dashboard:prerelease-warning]]
[[admin/dashboard:prerelease-warning]]
<!-- ELSE -->
[[admin/general/dashboard:up-to-date]]
[[admin/dashboard:up-to-date]]
<!-- END -->
<!-- END -->
<!-- END -->
</p>
</div>
<p>
[[admin/general/dashboard:keep-updated]]
[[admin/dashboard:keep-updated]]
</p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:notices]]</div>
<div class="panel-heading">[[admin/dashboard:notices]]</div>
<div class="panel-body">
<!-- BEGIN notices -->
<div>

@ -1,36 +0,0 @@
<div class="languages">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/languages:language-settings]]</div>
<div class="col-sm-10 col-xs-12">
<p>
[[admin/general/languages:description]]
</p>
<form class="row">
<div class="form-group col-sm-6">
<label for="defaultLang">[[admin/general/languages:default-language]]</label>
<select id="language" data-field="defaultLang" class="form-control">
<!-- BEGIN languages -->
<option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
<!-- END languages -->
</select>
</div>
</form>
<form class="row">
<div class="form-group col-sm-6">
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="autoDetectLang" <!-- IF autoDetectLang -->checked<!-- ENDIF autoDetectLang -->/>
<span class="mdl-switch__label">[[admin/general/languages:auto-detect]]</span>
</label>
</div>
</div>
</form>
</div>
</div>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -9,18 +9,6 @@
</ul>
</section>
<section class="menu-section">
<h3 class="menu-section-title">[[admin/menu:section-general]]</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/general/dashboard">[[admin/menu:general/dashboard]]</a></li>
<li><a href="{relative_path}/admin/general/homepage">[[admin/menu:general/homepage]]</a></li>
<li><a href="{relative_path}/admin/general/navigation">[[admin/menu:general/navigation]]</a></li>
<li><a href="{relative_path}/admin/general/languages">[[admin/menu:general/languages]]</a></li>
<li><a href="{relative_path}/admin/general/sounds">[[admin/menu:general/sounds]]</a></li>
<li><a href="{relative_path}/admin/general/social">[[admin/menu:general/social]]</a></li>
</ul>
</section>
<section class="menu-section">
<h3 class="menu-section-title">[[admin/menu:section-manage]]</h3>
<ul class="menu-section-list">
@ -42,10 +30,13 @@
<h3 class="menu-section-title">[[admin/menu:section-settings]]</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/settings/general">[[admin/menu:section-general]]</a></li>
<li><a href="{relative_path}/admin/settings/homepage">[[admin/menu:settings/homepage]]</a></li>
<li><a href="{relative_path}/admin/settings/navigation">[[admin/menu:settings/navigation]]</a></li>
<li><a href="{relative_path}/admin/settings/user">[[admin/menu:settings/user]]</a></li>
<li><a href="{relative_path}/admin/settings/group">[[admin/menu:settings/group]]</a></li>
<li><a href="{relative_path}/admin/settings/tags">[[admin/menu:manage/tags]]</a></li>
<li><a href="{relative_path}/admin/settings/post">[[admin/menu:settings/post]]</a></li>
<li><a href="{relative_path}/admin/settings/languages">[[admin/menu:settings/languages]]</a></li>
<li><a href="{relative_path}/admin/settings/email">[[admin/menu:settings/email]]</a></li>
<li><a href="{relative_path}/admin/settings/reputation">[[admin/menu:settings/reputation]]</a></li>
<li><a href="{relative_path}/admin/settings/guest">[[admin/menu:settings/guest]]</a></li>
@ -53,6 +44,8 @@
<li><a href="{relative_path}/admin/settings/chat">[[admin/menu:settings/chat]]</a></li>
<li><a href="{relative_path}/admin/settings/pagination">[[admin/menu:settings/pagination]]</a></li>
<li><a href="{relative_path}/admin/settings/notifications">[[admin/menu:settings/notifications]]</a></li>
<li><a href="{relative_path}/admin/settings/sounds">[[admin/menu:settings/sounds]]</a></li>
<li><a href="{relative_path}/admin/settings/social">[[admin/menu:settings/social]]</a></li>
<li><a href="{relative_path}/admin/settings/cookies">[[admin/menu:settings/cookies]]</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">[[admin/menu:settings/web-crawler]]</a></li>
<li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li>
@ -171,17 +164,7 @@
<ul id="main-menu">
<li class="menu-item">
<a href="{relative_path}/admin/general/dashboard">[[admin/menu:general/dashboard]]</a>
</li>
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-general]]</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/general/homepage">[[admin/menu:general/homepage]]</a></li>
<li><a href="{relative_path}/admin/general/navigation">[[admin/menu:general/navigation]]</a></li>
<li><a href="{relative_path}/admin/general/languages">[[admin/menu:general/languages]]</a></li>
<li><a href="{relative_path}/admin/general/sounds">[[admin/menu:general/sounds]]</a></li>
<li><a href="{relative_path}/admin/general/social">[[admin/menu:general/social]]</a></li>
</ul>
<a href="{relative_path}/admin/dashboard">[[admin/menu:dashboard]]</a>
</li>
<li class="dropdown menu-item">
<a id="manage-menu" href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-manage]]</a>
@ -203,10 +186,13 @@
<a id="settings-menu" href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-settings]]</a>
<ul class="dropdown-menu" role="menu">
<li><a id="settings-general" href="{relative_path}/admin/settings/general">[[admin/menu:section-general]]</a></li>
<li><a href="{relative_path}/admin/settings/homepage">[[admin/menu:settings/homepage]]</a></li>
<li><a href="{relative_path}/admin/settings/navigation">[[admin/menu:settings/navigation]]</a></li>
<li><a href="{relative_path}/admin/settings/user">[[admin/menu:settings/user]]</a></li>
<li><a href="{relative_path}/admin/settings/group">[[admin/menu:settings/group]]</a></li>
<li><a href="{relative_path}/admin/settings/tags">[[admin/menu:manage/tags]]</a></li>
<li><a href="{relative_path}/admin/settings/post">[[admin/menu:settings/post]]</a></li>
<li><a href="{relative_path}/admin/settings/languages">[[admin/menu:settings/languages]]</a></li>
<li><a href="{relative_path}/admin/settings/email">[[admin/menu:settings/email]]</a></li>
<li><a href="{relative_path}/admin/settings/reputation">[[admin/menu:settings/reputation]]</a></li>
<li><a href="{relative_path}/admin/settings/guest">[[admin/menu:settings/guest]]</a></li>
@ -214,6 +200,8 @@
<li><a href="{relative_path}/admin/settings/chat">[[admin/menu:settings/chat]]</a></li>
<li><a href="{relative_path}/admin/settings/pagination">[[admin/menu:settings/pagination]]</a></li>
<li><a href="{relative_path}/admin/settings/notifications">[[admin/menu:settings/notifications]]</a></li>
<li><a href="{relative_path}/admin/settings/sounds">[[admin/menu:settings/sounds]]</a></li>
<li><a href="{relative_path}/admin/settings/social">[[admin/menu:settings/social]]</a></li>
<li><a href="{relative_path}/admin/settings/cookies">[[admin/menu:settings/cookies]]</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">[[admin/menu:settings/web-crawler]]</a></li>
<li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li>

@ -1,20 +1,20 @@
<form role="form">
<fieldset>
<div class="alert alert-danger hidden">[[admin/general/dashboard:page-views-custom-error]]</div>
<div class="alert alert-danger hidden">[[admin/dashboard:page-views-custom-error]]</div>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label for="startRange">[[admin/general/dashboard:page-views-custom-start]]</label>
<label for="startRange">[[admin/dashboard:page-views-custom-start]]</label>
<input class="form-control" type="date" id="startRange" name="startRange" />
</div>
</div>
<div class="col-xs-6">
<div class="form-group">
<label for="endRange">[[admin/general/dashboard:page-views-custom-end]]</label>
<label for="endRange">[[admin/dashboard:page-views-custom-end]]</label>
<input class="form-control" type="date" id="endRange" name="endRange" />
</div>
</div>
</div>
<p class="help-block">[[admin/general/dashboard:page-views-custom-help]]</p>
<p class="help-block">[[admin/dashboard:page-views-custom-help]]</p>
</fieldset>
</form>

@ -1,12 +1,12 @@
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/homepage:home-page]]</div>
<div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/homepage:home-page]]</div>
<div class="col-sm-10 col-xs-12">
<p>
[[admin/general/homepage:description]]
[[admin/settings/homepage:description]]
</p>
<form class="row">
<div class="col-sm-6">
<label>[[admin/general/homepage:home-page-route]]</label>
<label>[[admin/settings/homepage:home-page-route]]</label>
<select class="form-control" data-field="homePageRoute">
<!-- BEGIN routes -->
<option value="{routes.route}">{routes.name}</option>
@ -14,18 +14,18 @@
</select>
<div id="homePageCustom" style="display: none;">
<br>
<label>[[admin/general/homepage:custom-route]]</label>
<label>[[admin/settings/homepage:custom-route]]</label>
<input type="text" class="form-control" data-field="homePageCustom"/>
</div>
<br>
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowUserHomePage">
<span class="mdl-switch__label"><strong>[[admin/general/homepage:allow-user-home-pages]]</strong></span>
<span class="mdl-switch__label"><strong>[[admin/settings/homepage:allow-user-home-pages]]</strong></span>
</label>
</div>
<br>
<label>[[admin/general/homepage:home-page-title]]</label>
<label>[[admin/settings/homepage:home-page-title]]</label>
<input class="form-control" type="text" data-field="homePageTitle" placeholder="[[pages:home]]">
</div>
</form>

@ -0,0 +1,34 @@
<!-- IMPORT admin/partials/settings/header.tpl -->
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/languages:language-settings]]</div>
<div class="col-sm-10 col-xs-12">
<p>
[[admin/settings/languages:description]]
</p>
<form class="row">
<div class="form-group col-sm-6">
<label for="defaultLang">[[admin/settings/languages:default-language]]</label>
<select id="language" data-field="defaultLang" class="form-control">
<!-- BEGIN languages -->
<option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
<!-- END languages -->
</select>
</div>
</form>
<form class="row">
<div class="form-group col-sm-6">
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="autoDetectLang" <!-- IF autoDetectLang -->checked<!-- ENDIF autoDetectLang -->/>
<span class="mdl-switch__label">[[admin/settings/languages:auto-detect]]</span>
</label>
</div>
</div>
</form>
</div>
</div>
<!-- IMPORT admin/partials/settings/footer.tpl -->

@ -21,10 +21,10 @@
<div class="row">
<div class="col-sm-1">
<div class="form-group">
<label>[[admin/general/navigation:icon]]</label>
<label>[[admin/settings/navigation:icon]]</label>
<br/>
<span class="iconPicker"><i class="fa fa-2x {enabled.iconClass}"></i>
<a class="change-icon-link <!-- IF enabled.iconClass -->hidden<!-- ENDIF enabled.iconClass -->" href="#">[[admin/general/navigation:change-icon]]</a>
<a class="change-icon-link <!-- IF enabled.iconClass -->hidden<!-- ENDIF enabled.iconClass -->" href="#">[[admin/settings/navigation:change-icon]]</a>
<input class="form-control" type="hidden" name="iconClass" value="{enabled.iconClass}" />
</span>
</div>
@ -32,21 +32,21 @@
<div class="col-sm-3">
<div class="form-group">
<label>[[admin/general/navigation:route]]</label>
<label>[[admin/settings/navigation:route]]</label>
<input class="form-control" type="text" name="route" value="{enabled.route}" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>[[admin/general/navigation:class]]</label>
<label>[[admin/settings/navigation:class]]</label>
<input class="form-control" type="text" name="class" value="{enabled.class}" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>[[admin/general/navigation:id]]</label>
<label>[[admin/settings/navigation:id]]</label>
<input class="form-control" type="text" name="id" value="{enabled.id}" />
</div>
</div>
@ -54,26 +54,26 @@
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label>[[admin/general/navigation:text]]</label>
<label>[[admin/settings/navigation:text]]</label>
<input class="form-control unescape" type="text" name="text" value="{enabled.text}" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>[[admin/general/navigation:text-class]]</label>
<label>[[admin/settings/navigation:text-class]]</label>
<input class="form-control" type="text" name="textClass" value="{enabled.textClass}" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>[[admin/general/navigation:tooltip]]</label>
<label>[[admin/settings/navigation:tooltip]]</label>
<input class="form-control unescape" type="text" name="title" value="{enabled.title}" />
</div>
</div>
</div>
<strong>[[admin/general/navigation:groups]]</strong>
<strong>[[admin/settings/navigation:groups]]</strong>
<div>
<select name="groups" class="form-control" size="10" multiple>
<!-- BEGIN enabled.groups -->
@ -85,15 +85,15 @@
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" name="property:targetBlank" <!-- IF enabled.properties.targetBlank -->checked<!-- ENDIF enabled.properties.targetBlank -->/>
<span class="mdl-switch__label"><strong>[[admin/general/navigation:open-new-window]]</strong></span>
<span class="mdl-switch__label"><strong>[[admin/settings/navigation:open-new-window]]</strong></span>
</label>
</div>
<button class="btn btn-danger delete">[[admin/general/navigation:btn.delete]]</button>
<button class="btn btn-danger delete">[[admin/settings/navigation:btn.delete]]</button>
<!-- IF enabled.enabled -->
<button class="btn btn-warning toggle">[[admin/general/navigation:btn.disable]]</button>
<button class="btn btn-warning toggle">[[admin/settings/navigation:btn.disable]]</button>
<!-- ELSE -->
<button class="btn btn-success toggle">[[admin/general/navigation:btn.enable]]</button>
<button class="btn btn-success toggle">[[admin/settings/navigation:btn.enable]]</button>
<!-- ENDIF enabled.enabled -->
<input type="hidden" name="enabled" value="{enabled.enabled}" />
</form>
@ -104,7 +104,7 @@
<div class="col-lg-3">
<div class="panel panel-default">
<div class="panel-heading">[[admin/general/navigation:available-menu-items]]</div>
<div class="panel-heading">[[admin/settings/navigation:available-menu-items]]</div>
<div class="panel-body">
<ul id="available">
<li data-id="custom" class="clearfix">
@ -112,7 +112,7 @@
<i class="fa fa-fw fa-plus-circle"></i>
</div>
<p>
<strong>[[admin/general/navigation:custom-route]]</strong>
<strong>[[admin/settings/navigation:custom-route]]</strong>
</p>
</li>
<!-- BEGIN available -->
@ -122,7 +122,7 @@
</div>
<p>
<strong>{available.text}</strong> {available.route} <br/>
<!-- IF available.core --> [[admin/general/navigation:core]] <!-- ELSE --> [[admin/general/navigation:plugin]] <!-- ENDIF available.core -->
<!-- IF available.core --> [[admin/settings/navigation:core]] <!-- ELSE --> [[admin/settings/navigation:plugin]] <!-- ENDIF available.core -->
</p>
</li>
<!-- END available -->

@ -1,7 +1,7 @@
<div class="social settings">
<form role="form">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/social:post-sharing]]</div>
<div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/social:post-sharing]]</div>
<div class="col-sm-10 col-xs-12">
<div class="form-group" id="postSharingNetworks">
<!-- BEGIN posts -->
@ -12,7 +12,7 @@
</label>
</div>
<!-- END posts -->
<small>[[admin/general/social:info-plugins-additional]]</small>
<small>[[admin/settings/social:info-plugins-additional]]</small>
</div>
</div>
</div>

@ -2,9 +2,9 @@
<div class="col-xs-12">
<form role="form">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/sounds:notifications]]</div>
<div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/sounds:notifications]]</div>
<div class="col-sm-10 col-xs-12">
<label for="notification">[[admin/general/sounds:notifications]]</label>
<label for="notification">[[admin/settings/sounds:notifications]]</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="notification" data-field="notification">
@ -21,16 +21,16 @@
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/general/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/settings/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/sounds:chat-messages]]</div>
<div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/sounds:chat-messages]]</div>
<div class="col-sm-10 col-xs-12">
<label for="chat-incoming">[[admin/general/sounds:incoming-message]]</label>
<label for="chat-incoming">[[admin/settings/sounds:incoming-message]]</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="chat-incoming" data-field="chat-incoming">
@ -47,11 +47,11 @@
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/general/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/settings/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
</div>
</div>
<label for="chat-outgoing">[[admin/general/sounds:outgoing-message]]</label>
<label for="chat-outgoing">[[admin/settings/sounds:outgoing-message]]</label>
<div class="row">
<div class="form-group col-xs-9">
<select class="form-control" id="chat-outgoing" data-field="chat-outgoing">
@ -68,7 +68,7 @@
</select>
</div>
<div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/general/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/settings/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
</div>
</div>
@ -81,7 +81,7 @@
data-accept="audio/*"
type="button"
class="btn btn-primary"
value="[[admin/general/sounds:upload-new-sound]]"
value="[[admin/settings/sounds:upload-new-sound]]"
></input>
</span>
</div>

@ -174,8 +174,8 @@ describe('Admin Controllers', function () {
});
});
it('should load /admin/general/homepage', function (done) {
request(nconf.get('url') + '/api/admin/general/homepage', { jar: jar, json: true }, function (err, res, body) {
it('should load /admin/settings/homepage', function (done) {
request(nconf.get('url') + '/api/admin/settings/homepage', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert(body.routes);
@ -413,13 +413,13 @@ describe('Admin Controllers', function () {
});
});
it('should load /admin/general/navigation', function (done) {
it('should load /admin/settings/navigation', function (done) {
var navigation = require('../src/navigation/admin');
var data = require('../install/data/navigation.json');
navigation.save(data, function (err) {
assert.ifError(err);
request(nconf.get('url') + '/api/admin/general/navigation', { jar: jar, json: true }, function (err, res, body) {
request(nconf.get('url') + '/api/admin/settings/navigation', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err);
assert(body);
assert(body.available);
@ -456,8 +456,8 @@ describe('Admin Controllers', function () {
});
});
it('should load /admin/general/sounds', function (done) {
request(nconf.get('url') + '/api/admin/general/sounds', { jar: jar, json: true }, function (err, res, body) {
it('should load /admin/settings/sounds', function (done) {
request(nconf.get('url') + '/api/admin/settings/sounds', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert(body);
@ -510,8 +510,8 @@ describe('Admin Controllers', function () {
});
});
it('should load /admin/general/languages', function (done) {
request(nconf.get('url') + '/api/admin/general/languages', { jar: jar, json: true }, function (err, res, body) {
it('should load /admin/settings/languages', function (done) {
request(nconf.get('url') + '/api/admin/settings/languages', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert(body);
@ -519,11 +519,11 @@ describe('Admin Controllers', function () {
});
});
it('should load /admin/general/social', function (done) {
it('should load /admin/settings/social', function (done) {
var socketAdmin = require('../src/socket.io/admin');
socketAdmin.social.savePostSharingNetworks({ uid: adminUid }, ['facebook', 'twitter'], function (err) {
assert.ifError(err);
request(nconf.get('url') + '/api/admin/general/social', { jar: jar, json: true }, function (err, res, body) {
request(nconf.get('url') + '/api/admin/settings/social', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err);
assert(body);
body = body.posts.map(function (network) {

Loading…
Cancel
Save