mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-22 00:10:25 +01:00
closes #5497
This commit is contained in:
@@ -4,6 +4,12 @@
|
|||||||
define('forum/account/settings', ['forum/account/header', 'components', 'sounds'], function (header, components, sounds) {
|
define('forum/account/settings', ['forum/account/header', 'components', 'sounds'], function (header, components, sounds) {
|
||||||
var AccountSettings = {};
|
var AccountSettings = {};
|
||||||
|
|
||||||
|
$(window).on('action:ajaxify.start', function () {
|
||||||
|
if (ajaxify.data.template.name === 'account/settings' && $('#bootswatchSkin').val() !== config.bootswatchSkin) {
|
||||||
|
changePageSkin(config.bootswatchSkin);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
AccountSettings.init = function () {
|
AccountSettings.init = function () {
|
||||||
header.init();
|
header.init();
|
||||||
|
|
||||||
@@ -24,10 +30,7 @@ define('forum/account/settings', ['forum/account/header', 'components', 'sounds'
|
|||||||
});
|
});
|
||||||
|
|
||||||
$('#bootswatchSkin').on('change', function () {
|
$('#bootswatchSkin').on('change', function () {
|
||||||
var css = $('#bootswatchCSS');
|
changePageSkin($(this).val());
|
||||||
var val = $(this).val() === 'default' ? config['theme:src'] : '//maxcdn.bootstrapcdn.com/bootswatch/latest/' + $(this).val() + '/bootstrap.min.css';
|
|
||||||
|
|
||||||
css.attr('href', val);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('[data-property="homePageRoute"]').on('change', toggleCustomRoute);
|
$('[data-property="homePageRoute"]').on('change', toggleCustomRoute);
|
||||||
@@ -44,6 +47,26 @@ define('forum/account/settings', ['forum/account/header', 'components', 'sounds'
|
|||||||
components.get('user/sessions').find('.timeago').timeago();
|
components.get('user/sessions').find('.timeago').timeago();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function changePageSkin(skinName) {
|
||||||
|
var css = $('#bootswatchCSS');
|
||||||
|
if (skinName === 'default') {
|
||||||
|
css.remove();
|
||||||
|
} else {
|
||||||
|
var cssSource = '//maxcdn.bootstrapcdn.com/bootswatch/latest/' + skinName + '/bootstrap.min.css';
|
||||||
|
if (css.length) {
|
||||||
|
css.attr('href', cssSource);
|
||||||
|
} else {
|
||||||
|
css = $('<link id="bootswatchCSS" href="' + cssSource + '" rel="stylesheet" media="screen">');
|
||||||
|
$('head').append(css);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentSkinClassName = $('body').attr('class').split(/\s+/).filter(function (className) {
|
||||||
|
return className.startsWith('skin-');
|
||||||
|
});
|
||||||
|
$('body').removeClass(currentSkinClassName.join(' ')).addClass('skin-' + skinName);
|
||||||
|
}
|
||||||
|
|
||||||
function loadSettings() {
|
function loadSettings() {
|
||||||
var settings = {};
|
var settings = {};
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ apiController.getConfig = function (req, res, next) {
|
|||||||
config.categoryTopicSort = meta.config.categoryTopicSort || 'newest_to_oldest';
|
config.categoryTopicSort = meta.config.categoryTopicSort || 'newest_to_oldest';
|
||||||
config.csrf_token = req.csrfToken();
|
config.csrf_token = req.csrfToken();
|
||||||
config.searchEnabled = plugins.hasListeners('filter:search.query');
|
config.searchEnabled = plugins.hasListeners('filter:search.query');
|
||||||
config.bootswatchSkin = 'default';
|
config.bootswatchSkin = meta.config.bootswatchSkin || 'default';
|
||||||
|
|
||||||
var timeagoCutoff = meta.config.timeagoCutoff === undefined ? 30 : meta.config.timeagoCutoff;
|
var timeagoCutoff = meta.config.timeagoCutoff === undefined ? 30 : meta.config.timeagoCutoff;
|
||||||
config.timeagoCutoff = timeagoCutoff !== '' ? Math.max(0, parseInt(timeagoCutoff, 10)) : timeagoCutoff;
|
config.timeagoCutoff = timeagoCutoff !== '' ? Math.max(0, parseInt(timeagoCutoff, 10)) : timeagoCutoff;
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ module.exports = function (Meta) {
|
|||||||
themeData['theme:templates'] = config.templates ? config.templates : '';
|
themeData['theme:templates'] = config.templates ? config.templates : '';
|
||||||
themeData['theme:src'] = '';
|
themeData['theme:src'] = '';
|
||||||
|
|
||||||
db.setObject('config', themeData, next);
|
Meta.configs.setMultiple(themeData, next);
|
||||||
|
|
||||||
// Re-set the themes path (for when NodeBB is reloaded)
|
// Re-set the themes path (for when NodeBB is reloaded)
|
||||||
Meta.themes.setPath(config);
|
Meta.themes.setPath(config);
|
||||||
@@ -115,7 +115,10 @@ module.exports = function (Meta) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'bootswatch':
|
case 'bootswatch':
|
||||||
Meta.configs.set('theme:src', data.src, callback);
|
Meta.configs.setMultiple({
|
||||||
|
'theme:src': data.src,
|
||||||
|
bootswatchSkin: data.id.toLowerCase(),
|
||||||
|
}, callback);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ module.exports = function (middleware) {
|
|||||||
middleware.renderHeader = function (req, res, data, callback) {
|
middleware.renderHeader = function (req, res, data, callback) {
|
||||||
var registrationType = meta.config.registrationType || 'normal';
|
var registrationType = meta.config.registrationType || 'normal';
|
||||||
var templateValues = {
|
var templateValues = {
|
||||||
bootswatchCSS: meta.config['theme:src'],
|
|
||||||
title: meta.config.title || '',
|
title: meta.config.title || '',
|
||||||
description: meta.config.description || '',
|
description: meta.config.description || '',
|
||||||
'cache-buster': meta.config['cache-buster'] || '',
|
'cache-buster': meta.config['cache-buster'] || '',
|
||||||
@@ -117,9 +116,7 @@ module.exports = function (middleware) {
|
|||||||
results.user['email:confirmed'] = parseInt(results.user['email:confirmed'], 10) === 1;
|
results.user['email:confirmed'] = parseInt(results.user['email:confirmed'], 10) === 1;
|
||||||
results.user.isEmailConfirmSent = !!results.isEmailConfirmSent;
|
results.user.isEmailConfirmSent = !!results.isEmailConfirmSent;
|
||||||
|
|
||||||
if (res.locals.config && parseInt(meta.config.disableCustomUserSkins, 10) !== 1 && res.locals.config.bootswatchSkin !== 'default') {
|
setBootswatchCSS(templateValues, res.locals.config);
|
||||||
templateValues.bootswatchCSS = '//maxcdn.bootstrapcdn.com/bootswatch/latest/' + res.locals.config.bootswatchSkin + '/bootstrap.min.css';
|
|
||||||
}
|
|
||||||
|
|
||||||
templateValues.browserTitle = controllers.helpers.buildTitle(data.title);
|
templateValues.browserTitle = controllers.helpers.buildTitle(data.title);
|
||||||
templateValues.navigation = results.navigation;
|
templateValues.navigation = results.navigation;
|
||||||
@@ -191,5 +188,21 @@ module.exports = function (middleware) {
|
|||||||
|
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setBootswatchCSS(obj, config) {
|
||||||
|
if (config && config.bootswatchSkin !== 'default') {
|
||||||
|
var skinToUse = '';
|
||||||
|
|
||||||
|
if (parseInt(meta.config.disableCustomUserSkins, 10) !== 1) {
|
||||||
|
skinToUse = config.bootswatchSkin;
|
||||||
|
} else if (meta.config.bootswatchSkin !== 'default') {
|
||||||
|
skinToUse = meta.config.bootswatchSkin;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skinToUse) {
|
||||||
|
obj.bootswatchCSS = '//maxcdn.bootstrapcdn.com/bootswatch/latest/' + skinToUse + '/bootstrap.min.css';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ module.exports = function (User) {
|
|||||||
settings.restrictChat = parseInt(getSetting(settings, 'restrictChat', 0), 10) === 1;
|
settings.restrictChat = parseInt(getSetting(settings, 'restrictChat', 0), 10) === 1;
|
||||||
settings.topicSearchEnabled = parseInt(getSetting(settings, 'topicSearchEnabled', 0), 10) === 1;
|
settings.topicSearchEnabled = parseInt(getSetting(settings, 'topicSearchEnabled', 0), 10) === 1;
|
||||||
settings.delayImageLoading = parseInt(getSetting(settings, 'delayImageLoading', 1), 10) === 1;
|
settings.delayImageLoading = parseInt(getSetting(settings, 'delayImageLoading', 1), 10) === 1;
|
||||||
settings.bootswatchSkin = settings.bootswatchSkin || 'default';
|
settings.bootswatchSkin = settings.bootswatchSkin || meta.config.bootswatchSkin || 'default';
|
||||||
settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) === 1;
|
settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) === 1;
|
||||||
|
|
||||||
callback(null, settings);
|
callback(null, settings);
|
||||||
|
|||||||
@@ -427,11 +427,16 @@ describe('socket.io', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should set theme to bootswatch', function (done) {
|
it('should set theme to bootswatch', function (done) {
|
||||||
socketAdmin.themes.set({ uid: adminUid }, { type: 'bootswatch', src: 'darkly' }, function (err) {
|
socketAdmin.themes.set({ uid: adminUid }, {
|
||||||
|
type: 'bootswatch',
|
||||||
|
src: '//maxcdn.bootstrapcdn.com/bootswatch/latest/darkly/bootstrap.min.css',
|
||||||
|
id: 'darkly',
|
||||||
|
}, function (err) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
meta.configs.get('theme:src', function (err, id) {
|
meta.configs.getFields(['theme:src', 'bootswatchSkin'], function (err, fields) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(id, 'darkly');
|
assert.equal(fields['theme:src'], '//maxcdn.bootstrapcdn.com/bootswatch/latest/darkly/bootstrap.min.css');
|
||||||
|
assert.equal(fields.bootswatchSkin, 'darkly');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user