Files
NodeBB/public/src/client/topic/threadTools.js

154 lines
4.6 KiB
JavaScript
Raw Normal View History

'use strict';
/* globals define, app, ajaxify, socket, bootbox */
define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move', 'components', 'translator'], function(fork, move, components, translator) {
var ThreadTools = {};
ThreadTools.init = function(tid) {
2015-03-17 15:48:08 -04:00
components.get('topic/delete').on('click', function() {
2015-04-02 22:06:18 -04:00
topicCommand('delete', tid);
return false;
});
components.get('topic/restore').on('click', function() {
topicCommand('restore', tid);
return false;
});
2015-03-17 15:48:08 -04:00
components.get('topic/purge').on('click', function() {
topicCommand('purge', tid);
return false;
});
2015-03-17 15:48:08 -04:00
components.get('topic/lock').on('click', function() {
2015-07-06 14:33:43 -04:00
socket.emit('topics.lock', {tids: [tid], cid: ajaxify.data.cid});
2015-04-02 22:06:18 -04:00
return false;
});
components.get('topic/unlock').on('click', function() {
2015-07-06 14:33:43 -04:00
socket.emit('topics.unlock', {tids: [tid], cid: ajaxify.data.cid});
return false;
});
2015-03-17 15:48:08 -04:00
components.get('topic/pin').on('click', function() {
2015-07-06 14:33:43 -04:00
socket.emit('topics.pin', {tids: [tid], cid: ajaxify.data.cid});
2015-04-02 22:06:18 -04:00
return false;
});
components.get('topic/unpin').on('click', function() {
2015-07-06 14:33:43 -04:00
socket.emit('topics.unpin', {tids: [tid], cid: ajaxify.data.cid});
return false;
});
2015-03-17 15:48:08 -04:00
components.get('topic/mark-unread-for-all').on('click', function() {
var btn = $(this);
socket.emit('topics.markAsUnreadForAll', [tid], function(err) {
2015-04-02 22:06:18 -04:00
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('[[topic:markAsUnreadForAll.success]]');
btn.parents('.thread-tools.open').find('.dropdown-toggle').trigger('click');
});
return false;
});
2015-03-17 15:48:08 -04:00
components.get('topic/move').on('click', function(e) {
2015-07-06 14:33:43 -04:00
move.init([tid], ajaxify.data.cid);
return false;
});
fork.init();
2015-04-02 22:06:18 -04:00
components.get('topic').on('click', '[component="topic/follow"], [component="topic/unfollow"]', follow);
2015-03-23 14:42:17 -04:00
components.get('topic/follow').off('click').on('click', follow);
2015-04-02 22:06:18 -04:00
components.get('topic/unfollow').off('click').on('click', follow);
2015-03-23 14:42:17 -04:00
function follow() {
2015-01-30 12:28:29 -05:00
socket.emit('topics.toggleFollow', tid, function(err, state) {
2015-04-02 22:06:18 -04:00
if (err) {
return app.alert({
type: 'danger',
alert_id: 'topic_follow',
title: '[[global:please_log_in]]',
message: '[[topic:login_to_subscribe]]',
timeout: 5000
});
}
setFollowState(state);
app.alert({
alert_id: 'follow_thread',
message: state ? '[[topic:following_topic.message]]' : '[[topic:not_following_topic.message]]',
type: 'success',
timeout: 5000
});
});
return false;
2015-03-23 14:42:17 -04:00
}
};
function topicCommand(command, tid) {
translator.translate('[[topic:thread_tools.' + command + '_confirm]]', function(msg) {
bootbox.confirm(msg, function(confirm) {
if (confirm) {
2015-07-06 14:33:43 -04:00
socket.emit('topics.' + command, {tids: [tid], cid: ajaxify.data.cid});
}
});
});
}
ThreadTools.setLockedState = function(data) {
var threadEl = components.get('topic');
2015-04-02 22:06:18 -04:00
if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) {
return;
}
2015-04-02 22:06:18 -04:00
var isLocked = data.isLocked && !app.user.isAdmin;
2015-04-02 22:06:18 -04:00
components.get('topic/lock').toggleClass('hidden', data.isLocked);
components.get('topic/unlock').toggleClass('hidden', !data.isLocked);
components.get('topic/reply').toggleClass('hidden', isLocked);
components.get('topic/reply/locked').toggleClass('hidden', !isLocked);
2015-04-02 22:06:18 -04:00
threadEl.find('[component="post/reply"], [component="post/quote"], [component="post/edit"], [component="post/delete"]').toggleClass('hidden', isLocked);
$('[component="post/header"] i.fa-lock').toggleClass('hidden', !data.isLocked);
};
ThreadTools.setDeleteState = function(data) {
var threadEl = components.get('topic');
if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) {
return;
}
2015-04-02 22:06:18 -04:00
components.get('topic/delete').toggleClass('hidden', data.isDelete);
components.get('topic/restore').toggleClass('hidden', !data.isDelete);
components.get('topic/purge').toggleClass('hidden', !data.isDelete);
components.get('topic/deleted/message').toggleClass('hidden', !data.isDelete);
threadEl.toggleClass('deleted', data.isDelete);
};
ThreadTools.setPinnedState = function(data) {
var threadEl = components.get('topic');
2015-04-02 22:06:18 -04:00
if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) {
return;
}
2015-04-02 22:06:18 -04:00
components.get('topic/pin').toggleClass('hidden', data.isPinned);
components.get('topic/unpin').toggleClass('hidden', !data.isPinned);
$('[component="post/header"] i.fa-thumb-tack').toggleClass('hidden', !data.isPinned);
};
function setFollowState(state) {
2015-04-02 22:06:18 -04:00
components.get('topic/follow').toggleClass('hidden', state);
components.get('topic/unfollow').toggleClass('hidden', !state);
}
return ThreadTools;
});