fix: allow non-mods to crosspost, move crosspost button out of topic tools, in-modal state updates

This commit is contained in:
Julian Lam
2025-12-29 13:00:09 -05:00
parent 38fd179848
commit 6daaad810f
3 changed files with 33 additions and 8 deletions

View File

@@ -36,7 +36,6 @@ define('forum/topic/crosspost', [
dropdownEl.addClass('dropup');
categoryFilter.init($('[component="category/dropdown"]'), {
privilege: 'moderate',
onHidden: onCategoriesSelected,
hideAll: true,
hideUncategorized: true,
@@ -51,7 +50,6 @@ define('forum/topic/crosspost', [
function onCategoriesSelected(data) {
({ selectedCids } = data);
console.log('changed? ', data.changed);
if (data.changed) {
modal.find('#crosspost_thread_commit').prop('disabled', false);
}
@@ -107,12 +105,42 @@ define('forum/topic/crosspost', [
Promise.all(queries).then(async () => {
const statsEl = components.get('topic/stats');
updateSpinner('progress');
const { crossposts } = await api.get(`/topics/${data.tid}/crossposts`);
ajaxify.data.crossposts = crossposts;
const html = await app.parseAndTranslate('partials/topic/stats', ajaxify.data);
statsEl.html(html);
closeCrosspostModal();
}).catch(alerts.error);
updateSpinner('success');
}).catch((e) => {
updateSpinner('error');
alerts.error(e);
});
}
const spinnerClasses = new Map(Object.entries({
'initial': ['d-none'],
'progress': ['fa-spinner', 'text-secondary', 'fa-spin'],
'error': ['fa-times', 'text-error'],
'success': ['fa-check', 'text-success'],
}));
function updateSpinner(state) {
if (modal) {
const spinnerEl = document.getElementById('crosspost_topic_spinner');
const remove = [
...spinnerClasses.get('initial'),
...spinnerClasses.get('progress'),
...spinnerClasses.get('error'),
...spinnerClasses.get('success'),
];
spinnerEl.classList.remove(...remove);
spinnerEl.classList.add(...spinnerClasses.get(state));
if (state !== 'initial') {
setTimeout(() => {
updateSpinner('initial');
}, 2500);
}
}
}
function closeCrosspostModal() {

View File

@@ -9,6 +9,7 @@
<!-- IMPORT partials/category/filter-dropdown-right.tpl -->
</div>
<div class="card-footer text-end">
<i class="fa me-2" id="crosspost_topic_spinner"></i>
<button type="button" class="btn btn-sm btn-outline-secondary" id="crosspost_topic_cancel">[[global:buttons.close]]</button>
<button type="button" class="btn btn-sm btn-primary" id="crosspost_thread_commit" disabled>[[topic:confirm-crosspost]]</button>
</div>

View File

@@ -21,10 +21,6 @@
</li>
{{{ end }}}
<li>
<a component="topic/crosspost" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem"><i class="fa fa-fw fa-clone text-secondary"></i> [[topic:thread-tools.crosspost]]</a>
</li>
<li>
<a component="topic/merge" href="#" class="dropdown-item rounded-1 d-flex align-items-center gap-2" role="menuitem"><i class="fa fa-fw fa-code-fork text-secondary"></i> [[topic:thread-tools.merge]]</a>
</li>