Files
NodeBB/public/src/client/post-queue.js
Barış Soner Uşaklı 47299ea587 Categories refactor (#9257)
* 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
2021-02-07 15:09:52 -05:00

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;
});