mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-03-12 23:50:47 +01:00
* feat: wip categories pagination * feat: add subCategoriesPerPage setting * feat: add load more sub categories button to category page * fix: openapi spec * feat: show sub categories left on category page hide button when no more categories left * breaking: rename categories to allCategories on /search categories contains the search results * fix: spec * refactor: remove cidsPerPage * fix: tests * feat: use component for subcategories * fix: prevent negative subCategoriesLeft * feat: new category filter/search WIP * feat: remove categories from /tag * fix: dont load all categories when showing move modal * feat: allow adding custom categories to list * breaking: dont load entire category tree on post queue removed unused code add hooks to filter/selector add options to filter/selector * feat: make selector modal work again * feat: replace old search module * fix: topic move selector * feat: dont load all categories on create category modal * fix: fix more categorySelectors * feat: dont load entire category tree on group details page * feat: dont load all categories on home page and user settings page * feat: add pagination to /user/:userslug/categories * fix: update schemas * fix: more tests * fix: test * feat: flags page, dont return entire category tree * fix: flag test * feat: categories manage page dont load all categories allow changing root category clear caches properly * fix: spec * feat: admins&mods page dont load all categories * fix: spec * fix: dont load all children when opening dropdown * fix: on search results dont return all children * refactor: pass all options, rename options.cids to options.selectedCids * fix: #9266 * fix: index 0 * fix: spec * feat: #9265, add setObjectBulk * refactor: shoter updateOrder * feat: selectors on categories/category * fix: tests and search filter * fix: category update test * feat: pagination on acp categories page show order in set order modal * fix: allow drag&drop on pages > 1 in /admin/manage/categories * fix: teasers for deep nested categories fix sub category display on /category page * fix: spec * refactor: use eslint-disable-next-line * refactor: shorter
123 lines
3.4 KiB
JavaScript
123 lines
3.4 KiB
JavaScript
'use strict';
|
|
|
|
|
|
define('forum/post-queue', [
|
|
'categoryFilter', 'categorySelector', 'api',
|
|
], function (categoryFilter, categorySelector, api) {
|
|
var PostQueue = {};
|
|
|
|
PostQueue.init = function () {
|
|
$('[data-toggle="tooltip"]').tooltip();
|
|
|
|
categoryFilter.init($('[component="category/dropdown"]'), {
|
|
privilege: 'moderate',
|
|
});
|
|
|
|
$('.posts-list').on('click', '[data-action]', function () {
|
|
var parent = $(this).parents('[data-id]');
|
|
var action = $(this).attr('data-action');
|
|
var id = parent.attr('data-id');
|
|
var listContainer = parent.get(0).parentNode;
|
|
|
|
if (!['accept', 'reject'].some(function (valid) {
|
|
return action === valid;
|
|
})) {
|
|
return;
|
|
}
|
|
|
|
socket.emit('posts.' + action, { id: id }, function (err) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
parent.remove();
|
|
|
|
if (listContainer.childElementCount === 0) {
|
|
ajaxify.refresh();
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
|
|
handleContentEdit('.post-content', '.post-content-editable', 'textarea');
|
|
handleContentEdit('.topic-title', '.topic-title-editable', 'input');
|
|
|
|
$('.posts-list').on('click', '.topic-category[data-editable]', function () {
|
|
var $this = $(this);
|
|
var id = $this.parents('[data-id]').attr('data-id');
|
|
categorySelector.modal({
|
|
onSubmit: function (selectedCategory) {
|
|
Promise.all([
|
|
api.get(`/categories/${selectedCategory.cid}`, {}),
|
|
socket.emit('posts.editQueuedContent', {
|
|
id: id,
|
|
cid: selectedCategory.cid,
|
|
}),
|
|
]).then(function (result) {
|
|
var category = result[0];
|
|
app.parseAndTranslate('post-queue', 'posts', {
|
|
posts: [{
|
|
category: category,
|
|
}],
|
|
}, function (html) {
|
|
if ($this.find('.category-text').length) {
|
|
$this.find('.category-text').text(html.find('.topic-category .category-text').text());
|
|
} else {
|
|
// for backwards compatibility, remove in 1.16.0
|
|
$this.replaceWith(html.find('.topic-category'));
|
|
}
|
|
});
|
|
}).catch(function (err) {
|
|
app.alertError(err);
|
|
});
|
|
},
|
|
});
|
|
return false;
|
|
});
|
|
|
|
$('[component="post/content"] img:not(.not-responsive)').addClass('img-responsive');
|
|
};
|
|
|
|
function handleContentEdit(displayClass, editableClass, inputSelector) {
|
|
$('.posts-list').on('click', displayClass, function () {
|
|
var el = $(this);
|
|
var inputEl = el.parent().find(editableClass);
|
|
if (inputEl.length) {
|
|
el.addClass('hidden');
|
|
inputEl.removeClass('hidden').find(inputSelector).focus();
|
|
}
|
|
});
|
|
|
|
$('.posts-list').on('blur', editableClass + ' ' + inputSelector, function () {
|
|
var textarea = $(this);
|
|
var preview = textarea.parent().parent().find(displayClass);
|
|
var id = textarea.parents('[data-id]').attr('data-id');
|
|
var titleEdit = displayClass === '.topic-title';
|
|
|
|
socket.emit('posts.editQueuedContent', {
|
|
id: id,
|
|
title: titleEdit ? textarea.val() : undefined,
|
|
content: titleEdit ? undefined : textarea.val(),
|
|
}, function (err, data) {
|
|
if (err) {
|
|
return app.alertError(err);
|
|
}
|
|
if (titleEdit) {
|
|
if (preview.find('.title-text').length) {
|
|
preview.find('.title-text').text(data.postData.title);
|
|
} else {
|
|
// for backwards compatibility, remove in 1.16.0
|
|
preview.html(data.postData.title);
|
|
}
|
|
} else {
|
|
preview.html(data.postData.content);
|
|
}
|
|
|
|
textarea.parent().addClass('hidden');
|
|
preview.removeClass('hidden');
|
|
});
|
|
});
|
|
}
|
|
|
|
return PostQueue;
|
|
});
|