show day/week/month/year popular topics

v1.18.x
barisusakli 11 years ago
parent 13f94ee32a
commit 0362c1a3b0

@ -3,5 +3,6 @@
"day": "Day",
"week": "Week",
"month": "Month",
"year": "Year",
"no_recent_topics": "There are no recent topics."
}

@ -3,8 +3,7 @@
/* globals define, app, socket*/
define('forum/popular', ['forum/recent', 'forum/infinitescroll'], function(recent, infinitescroll) {
var Popular = {},
active = '';
var Popular = {};
$(window).on('action:ajaxify.start', function(ev, data) {
if(data.url.indexOf('recent') !== 0) {
@ -21,28 +20,7 @@ define('forum/popular', ['forum/recent', 'forum/infinitescroll'], function(recen
recent.watchForNewPosts();
active = 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();
}
});
}
recent.selectActivePill();
};
return Popular;

@ -22,17 +22,15 @@ categoriesController.recent = function(req, res, next) {
categoriesController.popular = function(req, res, next) {
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) {
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) {
app.get('/popular/:set?', middleware.buildHeader, controllers.categories.popular);
app.get('/api/popular/:set?', controllers.categories.popular);
app.get('/popular/:term?', middleware.buildHeader, controllers.categories.popular);
app.get('/api/popular/:term?', controllers.categories.popular);
app.get('/recent/:term?', middleware.buildHeader, 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/unread')(Topics);
require('./topics/recent')(Topics);
require('./topics/popular')(Topics);
require('./topics/fork')(Topics);
require('./topics/posts')(Topics);
require('./topics/follow')(Topics);

@ -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 = {
day: 86400000,
week: 604800000,
month: 2592000000
month: 2592000000,
year: 31104000000
};
var since = terms.day;

Loading…
Cancel
Save