mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-14 17:56:16 +01:00
show day/week/month/year popular topics
This commit is contained in:
@@ -3,5 +3,6 @@
|
|||||||
"day": "Day",
|
"day": "Day",
|
||||||
"week": "Week",
|
"week": "Week",
|
||||||
"month": "Month",
|
"month": "Month",
|
||||||
|
"year": "Year",
|
||||||
"no_recent_topics": "There are no recent topics."
|
"no_recent_topics": "There are no recent topics."
|
||||||
}
|
}
|
||||||
@@ -3,8 +3,7 @@
|
|||||||
/* globals define, app, socket*/
|
/* globals define, app, socket*/
|
||||||
|
|
||||||
define('forum/popular', ['forum/recent', 'forum/infinitescroll'], function(recent, infinitescroll) {
|
define('forum/popular', ['forum/recent', 'forum/infinitescroll'], function(recent, infinitescroll) {
|
||||||
var Popular = {},
|
var Popular = {};
|
||||||
active = '';
|
|
||||||
|
|
||||||
$(window).on('action:ajaxify.start', function(ev, data) {
|
$(window).on('action:ajaxify.start', function(ev, data) {
|
||||||
if(data.url.indexOf('recent') !== 0) {
|
if(data.url.indexOf('recent') !== 0) {
|
||||||
@@ -21,28 +20,7 @@ define('forum/popular', ['forum/recent', 'forum/infinitescroll'], function(recen
|
|||||||
|
|
||||||
recent.watchForNewPosts();
|
recent.watchForNewPosts();
|
||||||
|
|
||||||
active = recent.selectActivePill();
|
recent.selectActivePill();
|
||||||
|
|
||||||
infinitescroll.init(loadMoreTopics);
|
|
||||||
|
|
||||||
function loadMoreTopics(direction) {
|
|
||||||
if(direction < 0 || !$('#topics-container').length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
infinitescroll.loadMore('topics.loadMoreFromSet', {
|
|
||||||
set: 'topics:' + $('.nav-pills .active a').html().toLowerCase(),
|
|
||||||
after: $('#topics-container').attr('data-nextstart')
|
|
||||||
}, function(data, done) {
|
|
||||||
if (data.topics && data.topics.length) {
|
|
||||||
recent.onTopicsLoaded('popular', data.topics, false, done);
|
|
||||||
$('#topics-container').attr('data-nextstart', data.nextStart);
|
|
||||||
} else {
|
|
||||||
done();
|
|
||||||
$('#load-more-btn').hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return Popular;
|
return Popular;
|
||||||
|
|||||||
@@ -22,17 +22,15 @@ categoriesController.recent = function(req, res, next) {
|
|||||||
|
|
||||||
categoriesController.popular = function(req, res, next) {
|
categoriesController.popular = function(req, res, next) {
|
||||||
var uid = req.user ? req.user.uid : 0;
|
var uid = req.user ? req.user.uid : 0;
|
||||||
var set = 'topics:' + req.params.set;
|
|
||||||
if(!req.params.set) {
|
|
||||||
set = 'topics:posts';
|
|
||||||
}
|
|
||||||
|
|
||||||
topics.getTopicsFromSet(uid, set, 0, 19, function(err, data) {
|
var term = req.params.term || 'daily';
|
||||||
|
|
||||||
|
topics.getPopular(term, uid, function(err, data) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
res.render('popular', data);
|
res.render('popular', {topics: data});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -71,8 +71,8 @@ function tagRoutes(app, middleware, controllers) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function categoryRoutes(app, middleware, controllers) {
|
function categoryRoutes(app, middleware, controllers) {
|
||||||
app.get('/popular/:set?', middleware.buildHeader, controllers.categories.popular);
|
app.get('/popular/:term?', middleware.buildHeader, controllers.categories.popular);
|
||||||
app.get('/api/popular/:set?', controllers.categories.popular);
|
app.get('/api/popular/:term?', controllers.categories.popular);
|
||||||
|
|
||||||
app.get('/recent/:term?', middleware.buildHeader, controllers.categories.recent);
|
app.get('/recent/:term?', middleware.buildHeader, controllers.categories.recent);
|
||||||
app.get('/api/recent/:term?', controllers.categories.recent);
|
app.get('/api/recent/:term?', controllers.categories.recent);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ var async = require('async'),
|
|||||||
require('./topics/delete')(Topics);
|
require('./topics/delete')(Topics);
|
||||||
require('./topics/unread')(Topics);
|
require('./topics/unread')(Topics);
|
||||||
require('./topics/recent')(Topics);
|
require('./topics/recent')(Topics);
|
||||||
|
require('./topics/popular')(Topics);
|
||||||
require('./topics/fork')(Topics);
|
require('./topics/fork')(Topics);
|
||||||
require('./topics/posts')(Topics);
|
require('./topics/posts')(Topics);
|
||||||
require('./topics/follow')(Topics);
|
require('./topics/follow')(Topics);
|
||||||
|
|||||||
46
src/topics/popular.js
Normal file
46
src/topics/popular.js
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var async = require('async'),
|
||||||
|
db = require('./../database');
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = function(Topics) {
|
||||||
|
|
||||||
|
Topics.getPopular = function(term, uid, callback) {
|
||||||
|
var terms = {
|
||||||
|
daily: 'day',
|
||||||
|
weekly: 'week',
|
||||||
|
monthly: 'month',
|
||||||
|
yearly: 'year'
|
||||||
|
};
|
||||||
|
|
||||||
|
var since = terms[term] || 'day';
|
||||||
|
|
||||||
|
Topics.getLatestTids(0, -1, since, function(err, tids) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
getTopics(tids, uid, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function getTopics(tids, uid, callback) {
|
||||||
|
var keys = tids.map(function(tid) {
|
||||||
|
return 'topic:' + tid;
|
||||||
|
});
|
||||||
|
|
||||||
|
db.getObjectsFields(keys, ['tid', 'postcount'], function(err, topics) {
|
||||||
|
topics.sort(function(a, b) {
|
||||||
|
return parseInt(b.postcount, 10) - parseInt(a.postcount, 10);
|
||||||
|
});
|
||||||
|
|
||||||
|
topics = topics.slice(0, 20).map(function(topic) {
|
||||||
|
return topic.tid;
|
||||||
|
});
|
||||||
|
|
||||||
|
Topics.getTopicsByTids(topics, uid, callback);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -20,7 +20,8 @@ module.exports = function(Topics) {
|
|||||||
var terms = {
|
var terms = {
|
||||||
day: 86400000,
|
day: 86400000,
|
||||||
week: 604800000,
|
week: 604800000,
|
||||||
month: 2592000000
|
month: 2592000000,
|
||||||
|
year: 31104000000
|
||||||
};
|
};
|
||||||
|
|
||||||
var since = terms.day;
|
var since = terms.day;
|
||||||
|
|||||||
Reference in New Issue
Block a user