feat: allow multiple topic selects in topic-list

chore: up persona
isekai-main
Barış Soner Uşaklı 2 years ago
parent 569944f1d9
commit 645ebec8fa

@ -100,7 +100,7 @@
"nodebb-plugin-ntfy": "1.0.15", "nodebb-plugin-ntfy": "1.0.15",
"nodebb-plugin-spam-be-gone": "2.0.6", "nodebb-plugin-spam-be-gone": "2.0.6",
"nodebb-rewards-essentials": "0.2.3", "nodebb-rewards-essentials": "0.2.3",
"nodebb-theme-harmony": "1.0.0-beta.97", "nodebb-theme-harmony": "1.0.0-beta.98",
"nodebb-theme-lavender": "7.0.9", "nodebb-theme-lavender": "7.0.9",
"nodebb-theme-peace": "2.0.19", "nodebb-theme-peace": "2.0.19",
"nodebb-theme-persona": "13.0.55", "nodebb-theme-persona": "13.0.55",

@ -3,7 +3,7 @@
define('topicSelect', ['components'], function (components) { define('topicSelect', ['components'], function (components) {
const TopicSelect = {}; const TopicSelect = {};
let lastSelected; let lastSelectedTopic;
let topicsContainer; let topicsContainer;
@ -15,23 +15,24 @@ define('topicSelect', ['components'], function (components) {
topicsContainer.on('click', '[component="topic/select"]', function (ev) { topicsContainer.on('click', '[component="topic/select"]', function (ev) {
const select = $(this); const select = $(this);
const topicEl = select.parents('[component="category/topic"]');
if (ev.shiftKey) { if (ev.shiftKey) {
selectRange($(this).parents('[component="category/topic"]').attr('data-tid')); selectRange(topicEl.attr('data-tid'));
lastSelected = select; lastSelectedTopic = topicEl;
return false; return false;
} }
const isSelected = select.parents('[data-tid]').hasClass('selected'); const isSelected = topicEl.hasClass('selected');
toggleSelect(select, !isSelected); toggleSelected(topicEl, !isSelected);
lastSelected = select; lastSelectedTopic = topicEl;
if (typeof onSelect === 'function') { if (typeof onSelect === 'function') {
onSelect(); onSelect();
} }
}); });
}; };
function toggleSelect(select, isSelected) { function toggleSelected(topicEl, isSelected) {
const select = topicEl.find('[component="topic/select"]');
select.toggleClass('fa-check-square-o', isSelected); select.toggleClass('fa-check-square-o', isSelected);
select.toggleClass('fa-square-o', !isSelected); select.toggleClass('fa-square-o', !isSelected);
select.parents('[component="category/topic"]').toggleClass('selected', isSelected); select.parents('[component="category/topic"]').toggleClass('selected', isSelected);
@ -66,14 +67,14 @@ define('topicSelect', ['components'], function (components) {
}; };
function selectRange(clickedTid) { function selectRange(clickedTid) {
if (!lastSelected) { if (!lastSelectedTopic) {
lastSelected = $('[component="category/topic"]').first().find('[component="topic/select"]'); lastSelectedTopic = $('[component="category/topic"]').first();
} }
const isClickedSelected = components.get('category/topic', 'tid', clickedTid).hasClass('selected'); const isClickedSelected = components.get('category/topic', 'tid', clickedTid).hasClass('selected');
const clickedIndex = getIndex(clickedTid); const clickedIndex = getIndex(clickedTid);
const lastIndex = getIndex(lastSelected.parents('[component="category/topic"]').attr('data-tid')); const lastIndex = getIndex(lastSelectedTopic.attr('data-tid'));
selectIndexRange(clickedIndex, lastIndex, !isClickedSelected); selectIndexRange(clickedIndex, lastIndex, !isClickedSelected);
} }
@ -86,7 +87,7 @@ define('topicSelect', ['components'], function (components) {
for (let i = start; i <= end; i += 1) { for (let i = start; i <= end; i += 1) {
const topic = $('[component="category/topic"]').eq(i); const topic = $('[component="category/topic"]').eq(i);
toggleSelect(topic.find('[component="topic/select"]'), isSelected); toggleSelected(topic, isSelected);
} }
} }

Loading…
Cancel
Save