mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 20:16:04 +01:00
closes #2309
This commit is contained in:
@@ -18,5 +18,6 @@
|
|||||||
|
|
||||||
"composer.user_said_in": "%1 said in %2:",
|
"composer.user_said_in": "%1 said in %2:",
|
||||||
"composer.user_said": "%1 said:",
|
"composer.user_said": "%1 said:",
|
||||||
"composer.discard": "Are you sure you wish to discard this post?"
|
"composer.discard": "Are you sure you wish to discard this post?",
|
||||||
|
"composer.submit_and_lock": "Submit and Lock"
|
||||||
}
|
}
|
||||||
@@ -20,12 +20,6 @@ define('forum/category', [
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$(window).on('action:composer.topics.post', function(ev, data) {
|
|
||||||
localStorage.removeItem('category:' + data.data.cid + ':bookmark');
|
|
||||||
localStorage.removeItem('category:' + data.data.cid + ':bookmark:clicked');
|
|
||||||
ajaxify.go('topic/' + data.data.slug);
|
|
||||||
});
|
|
||||||
|
|
||||||
function removeListeners() {
|
function removeListeners() {
|
||||||
socket.removeListener('event:new_topic', Category.onNewTopic);
|
socket.removeListener('event:new_topic', Category.onNewTopic);
|
||||||
categoryTools.removeListeners();
|
categoryTools.removeListeners();
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ define('composer', [
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(window).on('action:composer.topics.post', function(ev, data) {
|
||||||
|
localStorage.removeItem('category:' + data.data.cid + ':bookmark');
|
||||||
|
localStorage.removeItem('category:' + data.data.cid + ':bookmark:clicked');
|
||||||
|
ajaxify.go('topic/' + data.data.slug);
|
||||||
|
});
|
||||||
|
|
||||||
// Query server for formatting options
|
// Query server for formatting options
|
||||||
socket.emit('modules.composer.getFormattingOptions', function(err, options) {
|
socket.emit('modules.composer.getFormattingOptions', function(err, options) {
|
||||||
composer.formatting = options;
|
composer.formatting = options;
|
||||||
@@ -131,12 +137,18 @@ define('composer', [
|
|||||||
};
|
};
|
||||||
|
|
||||||
composer.newTopic = function(cid) {
|
composer.newTopic = function(cid) {
|
||||||
|
socket.emit('categories.isModerator', cid, function(err, isMod) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
push({
|
push({
|
||||||
cid: cid,
|
cid: cid,
|
||||||
title: '',
|
title: '',
|
||||||
body: '',
|
body: '',
|
||||||
modified: false,
|
modified: false,
|
||||||
isMain: true
|
isMain: true,
|
||||||
|
isMod: isMod
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -166,6 +178,10 @@ define('composer', [
|
|||||||
};
|
};
|
||||||
|
|
||||||
composer.newReply = function(tid, pid, title, text) {
|
composer.newReply = function(tid, pid, title, text) {
|
||||||
|
socket.emit('topics.isModerator', tid, function(err, isMod) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
translator.translate(text, config.defaultLang, function(translated) {
|
translator.translate(text, config.defaultLang, function(translated) {
|
||||||
push({
|
push({
|
||||||
tid: tid,
|
tid: tid,
|
||||||
@@ -173,7 +189,9 @@ define('composer', [
|
|||||||
title: title,
|
title: title,
|
||||||
body: translated,
|
body: translated,
|
||||||
modified: false,
|
modified: false,
|
||||||
isMain: false
|
isMain: false,
|
||||||
|
isMod: isMod
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -247,11 +265,13 @@ define('composer', [
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createNewComposer(post_uuid) {
|
function createNewComposer(post_uuid) {
|
||||||
var allowTopicsThumbnail = config.allowTopicsThumbnail && composer.posts[post_uuid].isMain && (config.hasImageUploadPlugin || config.allowFileUploads),
|
var postData = composer.posts[post_uuid];
|
||||||
isTopic = composer.posts[post_uuid] ? !!composer.posts[post_uuid].cid : false,
|
|
||||||
isMain = composer.posts[post_uuid] ? !!composer.posts[post_uuid].isMain : false,
|
var allowTopicsThumbnail = config.allowTopicsThumbnail && postData.isMain && (config.hasImageUploadPlugin || config.allowFileUploads),
|
||||||
isEditing = composer.posts[post_uuid] ? !!composer.posts[post_uuid].pid : false,
|
isTopic = postData ? !!postData.cid : false,
|
||||||
isGuestPost = composer.posts[post_uuid] ? parseInt(composer.posts[post_uuid].uid, 10) === 0 : null;
|
isMain = postData ? !!postData.isMain : false,
|
||||||
|
isEditing = postData ? !!postData.pid : false,
|
||||||
|
isGuestPost = postData ? parseInt(postData.uid, 10) === 0 : false;
|
||||||
|
|
||||||
composer.bsEnvironment = utils.findBootstrapEnvironment();
|
composer.bsEnvironment = utils.findBootstrapEnvironment();
|
||||||
|
|
||||||
@@ -262,9 +282,11 @@ define('composer', [
|
|||||||
minimumTagLength: config.minimumTagLength,
|
minimumTagLength: config.minimumTagLength,
|
||||||
maximumTagLength: config.maximumTagLength,
|
maximumTagLength: config.maximumTagLength,
|
||||||
isTopic: isTopic,
|
isTopic: isTopic,
|
||||||
showHandleInput: (app.user.uid === 0 || (isEditing && isGuestPost && app.user.isAdmin)) && config.allowGuestHandles,
|
isEditing: isEditing,
|
||||||
handle: composer.posts[post_uuid] ? composer.posts[post_uuid].handle || '' : undefined,
|
showHandleInput: config.allowGuestHandles && (app.user.uid === 0 || (isEditing && isGuestPost && app.user.isAdmin)),
|
||||||
formatting: composer.formatting
|
handle: postData ? postData.handle || '' : undefined,
|
||||||
|
formatting: composer.formatting,
|
||||||
|
isAdminOrMod: app.user.isAdmin || postData.isMod
|
||||||
};
|
};
|
||||||
|
|
||||||
parseAndTranslate('composer', data, function(composerTemplate) {
|
parseAndTranslate('composer', data, function(composerTemplate) {
|
||||||
@@ -278,7 +300,6 @@ define('composer', [
|
|||||||
$(document.body).append(composerTemplate);
|
$(document.body).append(composerTemplate);
|
||||||
|
|
||||||
var postContainer = $(composerTemplate[0]),
|
var postContainer = $(composerTemplate[0]),
|
||||||
postData = composer.posts[post_uuid],
|
|
||||||
bodyEl = postContainer.find('textarea'),
|
bodyEl = postContainer.find('textarea'),
|
||||||
draft = drafts.getDraft(postData.save_id);
|
draft = drafts.getDraft(postData.save_id);
|
||||||
|
|
||||||
@@ -309,6 +330,11 @@ define('composer', [
|
|||||||
post(post_uuid);
|
post(post_uuid);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
postContainer.on('click', '[data-action="post-lock"]', function() {
|
||||||
|
$(this).attr('disabled', true);
|
||||||
|
post(post_uuid, {lock: true});
|
||||||
|
});
|
||||||
|
|
||||||
postContainer.on('click', '[data-action="discard"]', function() {
|
postContainer.on('click', '[data-action="discard"]', function() {
|
||||||
if (!composer.posts[post_uuid].modified) {
|
if (!composer.posts[post_uuid].modified) {
|
||||||
discard(post_uuid);
|
discard(post_uuid);
|
||||||
@@ -438,7 +464,7 @@ define('composer', [
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function post(post_uuid) {
|
function post(post_uuid, options) {
|
||||||
var postData = composer.posts[post_uuid],
|
var postData = composer.posts[post_uuid],
|
||||||
postContainer = $('#cmp-uuid-' + post_uuid),
|
postContainer = $('#cmp-uuid-' + post_uuid),
|
||||||
handleEl = postContainer.find('.handle'),
|
handleEl = postContainer.find('.handle'),
|
||||||
@@ -446,6 +472,8 @@ define('composer', [
|
|||||||
bodyEl = postContainer.find('textarea'),
|
bodyEl = postContainer.find('textarea'),
|
||||||
thumbEl = postContainer.find('input#topic-thumb-url');
|
thumbEl = postContainer.find('input#topic-thumb-url');
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
titleEl.val(titleEl.val().trim());
|
titleEl.val(titleEl.val().trim());
|
||||||
bodyEl.val(bodyEl.val().trim());
|
bodyEl.val(bodyEl.val().trim());
|
||||||
if (thumbEl.length) {
|
if (thumbEl.length) {
|
||||||
@@ -471,28 +499,27 @@ define('composer', [
|
|||||||
var composerData = {}, action;
|
var composerData = {}, action;
|
||||||
|
|
||||||
if (parseInt(postData.cid, 10) > 0) {
|
if (parseInt(postData.cid, 10) > 0) {
|
||||||
|
action = 'topics.post';
|
||||||
composerData = {
|
composerData = {
|
||||||
handle: handleEl ? handleEl.val() : undefined,
|
handle: handleEl ? handleEl.val() : undefined,
|
||||||
title: titleEl.val(),
|
title: titleEl.val(),
|
||||||
content: bodyEl.val(),
|
content: bodyEl.val(),
|
||||||
topic_thumb: thumbEl.val() || '',
|
topic_thumb: thumbEl.val() || '',
|
||||||
category_id: postData.cid,
|
category_id: postData.cid,
|
||||||
tags: tags.getTags(post_uuid)
|
tags: tags.getTags(post_uuid),
|
||||||
|
lock: options.lock || false
|
||||||
};
|
};
|
||||||
|
|
||||||
action = 'topics.post';
|
|
||||||
socket.emit(action, composerData, done);
|
|
||||||
} else if (parseInt(postData.tid, 10) > 0) {
|
} else if (parseInt(postData.tid, 10) > 0) {
|
||||||
|
action = 'posts.reply';
|
||||||
composerData = {
|
composerData = {
|
||||||
tid: postData.tid,
|
tid: postData.tid,
|
||||||
handle: handleEl ? handleEl.val() : undefined,
|
handle: handleEl ? handleEl.val() : undefined,
|
||||||
content: bodyEl.val(),
|
content: bodyEl.val(),
|
||||||
toPid: postData.toPid
|
toPid: postData.toPid,
|
||||||
|
lock: options.lock || false
|
||||||
};
|
};
|
||||||
|
|
||||||
action = 'posts.reply';
|
|
||||||
socket.emit(action, composerData, done);
|
|
||||||
} else if (parseInt(postData.pid, 10) > 0) {
|
} else if (parseInt(postData.pid, 10) > 0) {
|
||||||
|
action = 'posts.edit';
|
||||||
composerData = {
|
composerData = {
|
||||||
pid: postData.pid,
|
pid: postData.pid,
|
||||||
handle: handleEl ? handleEl.val() : undefined,
|
handle: handleEl ? handleEl.val() : undefined,
|
||||||
@@ -501,12 +528,9 @@ define('composer', [
|
|||||||
topic_thumb: thumbEl.val() || '',
|
topic_thumb: thumbEl.val() || '',
|
||||||
tags: tags.getTags(post_uuid)
|
tags: tags.getTags(post_uuid)
|
||||||
};
|
};
|
||||||
|
|
||||||
action = 'posts.edit';
|
|
||||||
socket.emit(action, composerData, done);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function done(err, data) {
|
socket.emit(action, composerData, function (err, data) {
|
||||||
$('[data-action="post"]').removeAttr('disabled');
|
$('[data-action="post"]').removeAttr('disabled');
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err.message === '[[error:email-not-confirmed]]') {
|
if (err.message === '[[error:email-not-confirmed]]') {
|
||||||
@@ -520,7 +544,7 @@ define('composer', [
|
|||||||
drafts.removeDraft(postData.save_id);
|
drafts.removeDraft(postData.save_id);
|
||||||
|
|
||||||
$(window).trigger('action:composer.' + action, {composerData: composerData, data: data});
|
$(window).trigger('action:composer.' + action, {composerData: composerData, data: data});
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function discard(post_uuid) {
|
function discard(post_uuid) {
|
||||||
|
|||||||
@@ -118,4 +118,8 @@ SocketCategories.ignore = function(socket, cid, callback) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SocketCategories.isModerator = function(socket, cid, callback) {
|
||||||
|
user.isModerator(socket.uid, cid, callback);
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = SocketCategories;
|
module.exports = SocketCategories;
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ SocketPosts.reply = function(socket, data, callback) {
|
|||||||
socket.emit('event:new_post', result);
|
socket.emit('event:new_post', result);
|
||||||
|
|
||||||
SocketPosts.notifyOnlineUsers(socket.uid, result);
|
SocketPosts.notifyOnlineUsers(socket.uid, result);
|
||||||
|
|
||||||
|
if (data.lock) {
|
||||||
|
socketTopics.doTopicAction('lock', 'event:topic_locked', socket, {tids: [postData.topic.tid], cid: postData.topic.cid});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ SocketTopics.post = function(socket, data, callback) {
|
|||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.lock) {
|
||||||
|
SocketTopics.doTopicAction('lock', 'event:topic_locked', socket, {tids: [result.topicData.tid], cid: result.topicData.cid});
|
||||||
|
}
|
||||||
|
|
||||||
callback(null, result.topicData);
|
callback(null, result.topicData);
|
||||||
socket.emit('event:new_post', {posts: [result.postData]});
|
socket.emit('event:new_post', {posts: [result.postData]});
|
||||||
socket.emit('event:new_topic', result.topicData);
|
socket.emit('event:new_topic', result.topicData);
|
||||||
@@ -233,6 +237,7 @@ SocketTopics.unpin = function(socket, data, callback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
SocketTopics.doTopicAction = function(action, event, socket, data, callback) {
|
SocketTopics.doTopicAction = function(action, event, socket, data, callback) {
|
||||||
|
callback = callback || function() {};
|
||||||
if (!socket.uid) {
|
if (!socket.uid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -550,4 +555,13 @@ SocketTopics.loadMoreTags = function(socket, data, callback) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SocketTopics.isModerator = function(socket, tid, callback) {
|
||||||
|
topics.getTopicField(tid, 'cid', function(err, cid) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
user.isModerator(socket.uid, cid, callback);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = SocketTopics;
|
module.exports = SocketTopics;
|
||||||
|
|||||||
Reference in New Issue
Block a user