Compare commits

...

10 Commits

Author SHA1 Message Date
Persevere Von
c02e812967 Fix #7263 (#7264) 2019-01-19 11:35:20 -05:00
Julian Lam
c1042ee471 fix: removal of timeago fallback middleware (#7259)
* fix: removal of timeago fallback middleware

Instead of loading English fallback on missing language, we opt
to not send a script tag for a missing language to begin with.

Timeago already loads with English as default, so it will just
continue to use English.

* fix: check userLang against supported language codes

* fix: cleaned up code as per @pitaj

* fix: added comments

* fix: more fixes as per @pitaj

* feat: added addl. test for timeago locales, fixed broken test
2019-01-18 16:17:45 -05:00
Barış Soner Uşaklı
53c13976b6 backport unread inf scroll fix 2019-01-08 18:57:12 -05:00
Barış Soner Uşaklı
1cdb6af5dc backport unread inf scroll fix 2018-12-16 10:25:17 -05:00
Misty (Bot)
b0a44d866b chore: incrementing version number - v1.11.1 2018-12-14 21:17:50 +00:00
Misty (Bot)
77b767331b Merge commit 'f3e8e065033025084e0b6752025f73286b10efc3' into v1.11.x 2018-12-14 21:17:50 +00:00
renovate[bot]
ab5035f4e2 fix(deps): update dependency nodebb-plugin-dbsearch to v3.0.3 (#7035) 2018-11-30 12:54:13 -05:00
Baris Usakli
2555d72c84 change deprecated message 2018-11-30 12:53:21 -05:00
Barış Soner Uşaklı
213582df8b dont crash for undefined categories 2018-11-29 10:41:37 -05:00
Misty (Bot)
543336070a Incremented version number - v1.11.0 2018-11-28 21:53:14 +00:00
8 changed files with 39 additions and 39 deletions

View File

@@ -2,7 +2,7 @@
"name": "nodebb", "name": "nodebb",
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "NodeBB Forum", "description": "NodeBB Forum",
"version": "1.11.0", "version": "1.11.1",
"homepage": "http://www.nodebb.org", "homepage": "http://www.nodebb.org",
"repository": { "repository": {
"type": "git", "type": "git",

View File

@@ -1 +1 @@
@echo off && cd %~dp0 && node ./src/cli %* @echo off && cd %~dp0 && node ./nodebb %*

View File

@@ -239,7 +239,7 @@ define('topicList', [
count: config.topicsPerPage, count: config.topicsPerPage,
cid: query.cid, cid: query.cid,
query: query, query: query,
term: ajaxify.data.selectedTerm.term, term: ajaxify.data.selectedTerm && ajaxify.data.selectedTerm.term,
filter: ajaxify.data.selectedFilter.filter, filter: ajaxify.data.selectedFilter.filter,
set: topicListEl.attr('data-set') ? topicListEl.attr('data-set') : 'topics:recent', set: topicListEl.attr('data-set') ? topicListEl.attr('data-set') : 'topics:recent',
}, callback); }, callback);

View File

@@ -1,5 +1,6 @@
'use strict'; 'use strict';
var path = require('path');
var async = require('async'); var async = require('async');
var nconf = require('nconf'); var nconf = require('nconf');
var jsesc = require('jsesc'); var jsesc = require('jsesc');
@@ -13,7 +14,9 @@ var plugins = require('../plugins');
var navigation = require('../navigation'); var navigation = require('../navigation');
var translator = require('../translator'); var translator = require('../translator');
var privileges = require('../privileges'); var privileges = require('../privileges');
var languages = require('../languages');
var utils = require('../utils'); var utils = require('../utils');
var file = require('../file');
var controllers = { var controllers = {
api: require('../controllers/api'), api: require('../controllers/api'),
@@ -208,11 +211,6 @@ module.exports = function (middleware) {
], callback); ], callback);
}; };
function addTimeagoLocaleScript(scripts, userLang) {
var languageCode = utils.userLangToTimeagoCode(userLang);
scripts.push({ src: nconf.get('relative_path') + '/assets/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js' });
}
middleware.renderFooter = function (req, res, data, callback) { middleware.renderFooter = function (req, res, data, callback) {
async.waterfall([ async.waterfall([
function (next) { function (next) {
@@ -225,15 +223,35 @@ module.exports = function (middleware) {
function (data, next) { function (data, next) {
async.parallel({ async.parallel({
scripts: async.apply(plugins.fireHook, 'filter:scripts.get', []), scripts: async.apply(plugins.fireHook, 'filter:scripts.get', []),
timeagoLocale: (next) => {
const userLang = res.locals.config.userLang;
const pathToLocaleFile = '/vendor/jquery/timeago/locales/jquery.timeago.' + utils.userLangToTimeagoCode(userLang) + '.js';
async.waterfall([
async.apply(languages.list),
(languages, next) => {
if (!languages.some(obj => obj.code === userLang)) {
return next(null, false);
}
file.exists(path.join(__dirname, '../../public', pathToLocaleFile), next);
},
(exists, next) => {
next(null, exists ? (nconf.get('relative_path') + '/assets' + pathToLocaleFile) : null);
},
], next);
},
}, function (err, results) { }, function (err, results) {
next(err, data, results); next(err, data, results);
}); });
}, },
function (data, results, next) { function (data, results, next) {
if (results.timeagoLocale) {
results.scripts.push(results.timeagoLocale);
}
data.templateValues.scripts = results.scripts.map(function (script) { data.templateValues.scripts = results.scripts.map(function (script) {
return { src: script }; return { src: script };
}); });
addTimeagoLocaleScript(data.templateValues.scripts, res.locals.config.userLang);
data.templateValues.useCustomJS = meta.config.useCustomJS; data.templateValues.useCustomJS = meta.config.useCustomJS;
data.templateValues.customJS = data.templateValues.useCustomJS ? meta.config.customJS : ''; data.templateValues.customJS = data.templateValues.useCustomJS ? meta.config.customJS : '';

View File

@@ -13,7 +13,6 @@ var plugins = require('../plugins');
var meta = require('../meta'); var meta = require('../meta');
var user = require('../user'); var user = require('../user');
var groups = require('../groups'); var groups = require('../groups');
var file = require('../file');
var analytics = require('../analytics'); var analytics = require('../analytics');
@@ -174,29 +173,6 @@ middleware.applyBlacklist = function (req, res, next) {
}); });
}; };
middleware.processTimeagoLocales = function (req, res, next) {
var fallback = !req.path.includes('-short') ? 'jquery.timeago.en.js' : 'jquery.timeago.en-short.js';
var localPath = path.join(__dirname, '../../public/vendor/jquery/timeago/locales', req.path);
async.waterfall([
function (next) {
file.exists(localPath, next);
},
function (exists, next) {
if (exists) {
next(null, localPath);
} else {
next(null, path.join(__dirname, '../../public/vendor/jquery/timeago/locales', fallback));
}
},
function (path) {
res.status(200).sendFile(path, {
maxAge: req.app.enabled('cache') ? 5184000000 : 0,
});
},
], next);
};
middleware.delayLoading = function (req, res, next) { middleware.delayLoading = function (req, res, next) {
// Introduces an artificial delay during load so that brute force attacks are effectively mitigated // Introduces an artificial delay during load so that brute force attacks are effectively mitigated

View File

@@ -184,7 +184,6 @@ function addCoreRoutes(app, router, middleware, callback) {
res.redirect(relativePath + '/assets/client.css?' + meta.config['cache-buster']); res.redirect(relativePath + '/assets/client.css?' + meta.config['cache-buster']);
}); });
app.use(relativePath + '/assets/vendor/jquery/timeago/locales', middleware.processTimeagoLocales);
app.use(controllers['404'].handle404); app.use(controllers['404'].handle404);
app.use(controllers.errors.handleURIErrors); app.use(controllers.errors.handleURIErrors);
app.use(controllers.errors.handleErrors); app.use(controllers.errors.handleErrors);

View File

@@ -51,7 +51,7 @@ module.exports = function (Topics) {
if (!topicData.length) { if (!topicData.length) {
return next(null, unreadTopics); return next(null, unreadTopics);
} }
Topics.calculateTopicIndices(topicData, params.start);
unreadTopics.topics = topicData; unreadTopics.topics = topicData;
unreadTopics.nextStart = params.stop + 1; unreadTopics.nextStart = params.stop + 1;
next(null, unreadTopics); next(null, unreadTopics);

View File

@@ -1778,11 +1778,18 @@ describe('Controllers', function () {
}); });
}); });
it('should load timeago locale', function (done) { it('should return not found if NodeBB language exists but timeago locale does not exist', function (done) {
request(nconf.get('url') + '/assets/vendor/jquery/timeago/locales/jquery.timeago.404.js', function (err, res, body) { request(nconf.get('url') + '/assets/vendor/jquery/timeago/locales/jquery.timeago.ms.js', function (err, res, body) {
assert.ifError(err); assert.ifError(err);
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 404);
assert(body.includes('English')); done();
});
});
it('should return not found if NodeBB language does not exist', function (done) {
request(nconf.get('url') + '/assets/vendor/jquery/timeago/locales/jquery.timeago.muggle.js', function (err, res, body) {
assert.ifError(err);
assert.equal(res.statusCode, 404);
done(); done();
}); });
}); });