mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 09:06:15 +01:00
feat: sorting an filtering in /world
This commit is contained in:
@@ -1,13 +1,46 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
define('forum/world', ['topicList'], function (topicList) {
|
define('forum/world', ['topicList', 'sort', 'hooks', 'alerts', 'api'], function (topicList, sort, hooks, alerts, api) {
|
||||||
const World = {};
|
const World = {};
|
||||||
|
|
||||||
World.init = function () {
|
World.init = function () {
|
||||||
app.enterRoom('world');
|
app.enterRoom('world');
|
||||||
|
|
||||||
topicList.init('world');
|
topicList.init('world');
|
||||||
|
|
||||||
|
sort.handleSort('categoryTopicSort', 'world');
|
||||||
|
|
||||||
|
handleIgnoreWatch(-1);
|
||||||
|
|
||||||
|
hooks.fire('action:topics.loaded', { topics: ajaxify.data.topics });
|
||||||
|
hooks.fire('action:category.loaded', { cid: ajaxify.data.cid });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function handleIgnoreWatch(cid) {
|
||||||
|
$('[component="category/watching"], [component="category/tracking"], [component="category/ignoring"], [component="category/notwatching"]').on('click', function () {
|
||||||
|
const $this = $(this);
|
||||||
|
const state = $this.attr('data-state');
|
||||||
|
|
||||||
|
api.put(`/categories/${cid}/watch`, { state }, (err) => {
|
||||||
|
if (err) {
|
||||||
|
return alerts.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('[component="category/watching/menu"]').toggleClass('hidden', state !== 'watching');
|
||||||
|
$('[component="category/watching/check"]').toggleClass('fa-check', state === 'watching');
|
||||||
|
|
||||||
|
$('[component="category/tracking/menu"]').toggleClass('hidden', state !== 'tracking');
|
||||||
|
$('[component="category/tracking/check"]').toggleClass('fa-check', state === 'tracking');
|
||||||
|
|
||||||
|
$('[component="category/notwatching/menu"]').toggleClass('hidden', state !== 'notwatching');
|
||||||
|
$('[component="category/notwatching/check"]').toggleClass('fa-check', state === 'notwatching');
|
||||||
|
|
||||||
|
$('[component="category/ignoring/menu"]').toggleClass('hidden', state !== 'ignoring');
|
||||||
|
$('[component="category/ignoring/check"]').toggleClass('fa-check', state === 'ignoring');
|
||||||
|
|
||||||
|
alerts.success('[[category:' + state + '.message]]');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return World;
|
return World;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ define('tagFilter', ['hooks', 'alerts', 'bootstrap'], function (hooks, alerts, b
|
|||||||
|
|
||||||
function loadList(query, callback) {
|
function loadList(query, callback) {
|
||||||
let cids = null;
|
let cids = null;
|
||||||
if (ajaxify.data.template.category) {
|
if (ajaxify.data.template.category || ajaxify.data.template.world) {
|
||||||
cids = [ajaxify.data.cid];
|
cids = [ajaxify.data.cid];
|
||||||
// selectedCids is avaiable on /recent, /unread, /popular etc.
|
// selectedCids is avaiable on /recent, /unread, /popular etc.
|
||||||
} else if (Array.isArray(ajaxify.data.selectedCids) && ajaxify.data.selectedCids.length) {
|
} else if (Array.isArray(ajaxify.data.selectedCids) && ajaxify.data.selectedCids.length) {
|
||||||
|
|||||||
@@ -26,7 +26,23 @@ controller.list = async function (req, res) {
|
|||||||
const start = Math.max(0, (page - 1) * topicsPerPage);
|
const start = Math.max(0, (page - 1) * topicsPerPage);
|
||||||
const stop = start + topicsPerPage - 1;
|
const stop = start + topicsPerPage - 1;
|
||||||
|
|
||||||
const sets = ['cid:-1:tids', `uid:${req.uid}:inbox`];
|
const sortToSet = {
|
||||||
|
recently_replied: `cid:-1:tids`,
|
||||||
|
recently_created: `cid:-1:tids:create`,
|
||||||
|
most_posts: `cid:-1:tids:posts`,
|
||||||
|
most_votes: `cid:-1:tids:votes`,
|
||||||
|
most_views: `cid:-1:tids:views`,
|
||||||
|
};
|
||||||
|
|
||||||
|
const [userPrivileges, tagData, userSettings, rssToken] = await Promise.all([
|
||||||
|
privileges.categories.get('-1', req.uid),
|
||||||
|
helpers.getSelectedTag(req.query.tag),
|
||||||
|
user.getSettings(req.uid),
|
||||||
|
user.auth.getFeedToken(req.uid),
|
||||||
|
]);
|
||||||
|
const sort = validSorts.includes(req.query.sort) ? req.query.sort : userSettings.categoryTopicSort;
|
||||||
|
|
||||||
|
const sets = [sortToSet[sort], `uid:${req.uid}:inbox`];
|
||||||
if (req.params.filter === 'all' || !req.uid) {
|
if (req.params.filter === 'all' || !req.uid) {
|
||||||
sets.pop();
|
sets.pop();
|
||||||
} else if (req.params.filter) {
|
} else if (req.params.filter) {
|
||||||
@@ -40,14 +56,7 @@ controller.list = async function (req, res) {
|
|||||||
weights: sets.map((s, index) => (index ? 0 : 1)),
|
weights: sets.map((s, index) => (index ? 0 : 1)),
|
||||||
});
|
});
|
||||||
|
|
||||||
const [userPrivileges, tagData, userSettings, rssToken] = await Promise.all([
|
|
||||||
privileges.categories.get('-1', req.uid),
|
|
||||||
helpers.getSelectedTag(req.query.tag),
|
|
||||||
user.getSettings(req.uid),
|
|
||||||
user.auth.getFeedToken(req.uid),
|
|
||||||
]);
|
|
||||||
const targetUid = await user.getUidByUserslug(req.query.author);
|
const targetUid = await user.getUidByUserslug(req.query.author);
|
||||||
const sort = validSorts.includes(req.query.sort) ? req.query.sort : userSettings.categoryTopicSort;
|
|
||||||
|
|
||||||
const data = await categories.getCategoryById({
|
const data = await categories.getCategoryById({
|
||||||
uid: req.uid,
|
uid: req.uid,
|
||||||
@@ -68,6 +77,8 @@ controller.list = async function (req, res) {
|
|||||||
|
|
||||||
data.title = translator.escape(data.name);
|
data.title = translator.escape(data.name);
|
||||||
data.privileges = userPrivileges;
|
data.privileges = userPrivileges;
|
||||||
|
data.selectedTag = tagData.selectedTag;
|
||||||
|
data.selectedTags = tagData.selectedTags;
|
||||||
|
|
||||||
data.breadcrumbs = helpers.buildBreadcrumbs([{ text: `[[pages:world]]` }]);
|
data.breadcrumbs = helpers.buildBreadcrumbs([{ text: `[[pages:world]]` }]);
|
||||||
data['feeds:disableRSS'] = meta.config['feeds:disableRSS'] || 0;
|
data['feeds:disableRSS'] = meta.config['feeds:disableRSS'] || 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user