mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-28 09:36:16 +01:00
closes #5167
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
"connect-multiparty": "^2.0.0",
|
||||
"connect-redis": "~3.1.0",
|
||||
"cookie-parser": "^1.3.3",
|
||||
"cookieconsent": "^3.0.1",
|
||||
"cron": "^1.0.5",
|
||||
"csurf": "^1.6.1",
|
||||
"daemon": "~1.1.0",
|
||||
|
||||
@@ -125,5 +125,9 @@
|
||||
|
||||
"unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?",
|
||||
"reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.",
|
||||
"play": "Play"
|
||||
"play": "Play",
|
||||
|
||||
"cookies.message": "This website uses cookies to ensure you get the best experience on our website.",
|
||||
"cookies.accept": "Got it!",
|
||||
"cookies.learn_more": "Learn More"
|
||||
}
|
||||
|
||||
15
public/src/admin/settings/cookies.js
Normal file
15
public/src/admin/settings/cookies.js
Normal file
@@ -0,0 +1,15 @@
|
||||
'use strict';
|
||||
|
||||
/* globals define */
|
||||
|
||||
define('admin/settings/cookies', [
|
||||
'admin/modules/colorpicker'
|
||||
], function (colorpicker) {
|
||||
var Module = {};
|
||||
|
||||
Module.init = function () {
|
||||
colorpicker.enable($('[data-colorpicker="1"]'));
|
||||
};
|
||||
|
||||
return Module;
|
||||
});
|
||||
@@ -55,6 +55,7 @@ app.cacheBuster = null;
|
||||
overrides.overrideTimeago();
|
||||
createHeaderTooltips();
|
||||
app.showEmailConfirmWarning();
|
||||
app.showCookieWarning();
|
||||
|
||||
socket.removeAllListeners('event:nodebb.ready');
|
||||
socket.on('event:nodebb.ready', function (data) {
|
||||
@@ -622,4 +623,39 @@ app.cacheBuster = null;
|
||||
|
||||
document.head.appendChild(linkEl);
|
||||
};
|
||||
|
||||
app.showCookieWarning = function () {
|
||||
if (!config.cookies.enabled) {
|
||||
// Only show warning if enabled (obviously)
|
||||
return;
|
||||
} else if (window.location.pathname.startsWith(config.relative_path + '/admin')) {
|
||||
// No need to show cookie consent warning in ACP
|
||||
return;
|
||||
}
|
||||
|
||||
var consentConfig = {
|
||||
"palette": {
|
||||
"popup": {
|
||||
"background": config.cookies.palette.background,
|
||||
"text": config.cookies.palette.text
|
||||
},
|
||||
"button": {
|
||||
"background": config.cookies.palette.button,
|
||||
"text": config.cookies.palette.buttonText
|
||||
}
|
||||
},
|
||||
"theme": config.cookies.style,
|
||||
"position": config.cookies.position,
|
||||
"content": {
|
||||
"dismiss": config.cookies.dismiss,
|
||||
"link": config.cookies.link
|
||||
}
|
||||
};
|
||||
|
||||
if (config.cookies.message) {
|
||||
consentConfig.content.message = config.cookies.message;
|
||||
}
|
||||
|
||||
window.cookieconsent.initialise(consentConfig);
|
||||
};
|
||||
}());
|
||||
|
||||
@@ -63,6 +63,21 @@ apiController.getConfig = function (req, res, next) {
|
||||
config.searchEnabled = plugins.hasListeners('filter:search.query');
|
||||
config.bootswatchSkin = 'default';
|
||||
|
||||
config.cookies = {
|
||||
enabled: parseInt(meta.config.cookieConsentEnabled, 10) === 1,
|
||||
position: meta.config.cookieConsentPosition || 'bottom',
|
||||
style: meta.config.cookieConsentStyle || 'edgeless',
|
||||
message: meta.config.cookieConsentMessage || '[[global:cookies.message]]',
|
||||
dismiss: meta.config.cookieConsentDismiss || '[[global:cookies.accept]]',
|
||||
link: meta.config.cookieConsentLink || '[[global:cookies.learn_more]]',
|
||||
palette: {
|
||||
background: meta.config.cookieConsentPaletteBackground || '#edeff5',
|
||||
text: meta.config.cookieConsentPaletteText || '#838391',
|
||||
button: meta.config.cookieConsentPaletteButton || '#59b3d0',
|
||||
buttonText: meta.config.cookieConsentPaletteButtonText || '#ffffff',
|
||||
}
|
||||
};
|
||||
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
if (!req.user) {
|
||||
|
||||
@@ -48,11 +48,11 @@ module.exports = function (Meta) {
|
||||
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
getStyleSource(plugins.lessFiles, '\n@import ".', '.less', next);
|
||||
getStyleSource(plugins.cssFiles, '\n@import (inline) ".', '.css', next);
|
||||
},
|
||||
function (src, next) {
|
||||
source += src;
|
||||
getStyleSource(plugins.cssFiles, '\n@import (inline) ".', '.css', next);
|
||||
getStyleSource(plugins.lessFiles, '\n@import ".', '.less', next);
|
||||
},
|
||||
function (src, next) {
|
||||
source += src;
|
||||
@@ -67,6 +67,7 @@ module.exports = function (Meta) {
|
||||
|
||||
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/css/smoothness/jquery-ui.css";';
|
||||
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css";';
|
||||
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'node_modules/cookieconsent/build/cookieconsent.min.css";';
|
||||
source += '\n@import (inline) "..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";';
|
||||
source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/flags.less";';
|
||||
source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/blacklist.less";';
|
||||
|
||||
@@ -38,7 +38,8 @@ module.exports = function (Meta) {
|
||||
'public/src/ajaxify.js',
|
||||
'public/src/overrides.js',
|
||||
'public/src/widgets.js',
|
||||
"./node_modules/promise-polyfill/promise.js"
|
||||
"./node_modules/promise-polyfill/promise.js",
|
||||
"./node_modules/cookieconsent/build/cookieconsent.min.js"
|
||||
],
|
||||
|
||||
// files listed below are only available client-side, or are bundled in to reduce # of network requests on cold load
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
<li><a href="{relative_path}/admin/settings/pagination">Pagination</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/tags">Tags</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/notifications">Notifications</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/cookies">Cookies</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/web-crawler">Web Crawler</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/sockets">Sockets</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/advanced">Advanced</a></li>
|
||||
@@ -189,6 +190,7 @@
|
||||
<li><a href="{relative_path}/admin/settings/pagination">Pagination</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/tags">Tags</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/notifications">Notifications</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/cookies">Cookies</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/web-crawler">Web Crawler</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/sockets">Sockets</a></li>
|
||||
<li><a href="{relative_path}/admin/settings/advanced">Advanced</a></li>
|
||||
|
||||
@@ -53,21 +53,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-xs-12 settings-header">Cookies</div>
|
||||
<div class="col-sm-10 col-xs-12">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="cookieDomain">Set domain for session cookie</label>
|
||||
<input class="form-control" id="cookieDomain" type="text" placeholder=".domain.tld" data-field="cookieDomain" /><br />
|
||||
<p class="help-block">
|
||||
Leave blank for default
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-xs-12 settings-header">Traffic Management</div>
|
||||
<div class="col-sm-10 col-xs-12">
|
||||
|
||||
98
src/views/admin/settings/cookies.tpl
Normal file
98
src/views/admin/settings/cookies.tpl
Normal file
@@ -0,0 +1,98 @@
|
||||
<!-- IMPORT admin/settings/header.tpl -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-xs-12 settings-header">EU Consent</div>
|
||||
<div class="col-sm-10 col-xs-12">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<div class="checkbox">
|
||||
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
|
||||
<input type="checkbox" class="mdl-switch__input" id="cookieConsentEnabled" data-field="cookieConsentEnabled">
|
||||
<span class="mdl-switch__label"><strong>Enabled</strong></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentMessage">Notification message</label>
|
||||
<input class="form-control" id="cookieConsentMessage" type="text" data-field="cookieConsentMessage" />
|
||||
<p class="help-block">
|
||||
Leave blank to use NodeBB localised defaults
|
||||
</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentDismiss">Notification message</label>
|
||||
<input class="form-control" id="cookieConsentDismiss" type="text" data-field="cookieConsentDismiss" />
|
||||
<p class="help-block">
|
||||
Leave blank to use NodeBB localised defaults
|
||||
</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentLink">Policy Link Text</label>
|
||||
<input class="form-control" id="cookieConsentLink" type="text" data-field="cookieConsentLink" />
|
||||
<p class="help-block">
|
||||
Leave blank to use NodeBB localised defaults
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-xs-12 settings-header">EU Consent</div>
|
||||
<div class="col-sm-10 col-xs-12">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentStyle">Notification style</label>
|
||||
<select class="form-control" id="cookieConsentStyle" data-field="cookieConsentStyle">
|
||||
<option value="block">Block</option>
|
||||
<option value="edgeless" selected>Edgeless</option>
|
||||
<option value="classic">Classic</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentPosition">Position</label>
|
||||
<select class="form-control" id="cookieConsentPosition" data-field="cookieConsentPosition">
|
||||
<option value="top">Top</option>
|
||||
<option value="bottom" selected>Bottom</option>
|
||||
<option value="top-left">Top Left</option>
|
||||
<option value="top-right">Top Right</option>
|
||||
<option value="bottom-left" selected>Bottom Left</option>
|
||||
<option value="bottom-right">Bottom Right</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentPaletteBackground">Background Color</label>
|
||||
<input class="form-control" id="cookieConsentPaletteBackground" type="text" placeholder="#edeff5" data-field="cookieConsentPaletteBackground" data-colorpicker="1" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentPaletteText">Text Color</label>
|
||||
<input class="form-control" id="cookieConsentPaletteText" type="text" placeholder="#838391" data-field="cookieConsentPaletteText" data-colorpicker="1" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentPaletteButton">Button Background Color</label>
|
||||
<input class="form-control" id="cookieConsentPaletteButton" type="text" placeholder="#59b3d0" data-field="cookieConsentPaletteButton" data-colorpicker="1" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="cookieConsentPaletteButtonText">Button Text Color</label>
|
||||
<input class="form-control" id="cookieConsentPaletteButtonText" type="text" placeholder="#ffffff" data-field="cookieConsentPaletteButtonText" data-colorpicker="1" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-2 col-xs-12 settings-header">Settings</div>
|
||||
<div class="col-sm-10 col-xs-12">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="cookieDomain">Session cookie domain</label>
|
||||
<input class="form-control" id="cookieDomain" type="text" placeholder=".domain.tld" data-field="cookieDomain" /><br />
|
||||
<p class="help-block">
|
||||
Leave blank for default
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- IMPORT admin/settings/footer.tpl -->
|
||||
Reference in New Issue
Block a user