All flags should end up in one of the three dispositions - Agree - Disagree - Defer In the administration area, the *active* flags section displays 4 buttons - Agree (hide post + send PM) - Disagree - Defer - Delete Clicking "Delete" will open a modal that offer to - Delete Post & Defer Flags - Delete Post & Agree with Flags - Delete Spammer (if available) When the flag has a list associated, the list will now display 1 response and 1 reply and a "show more..." link if there are more in the conversation. Replying to the conversation will NOT give a disposition. Moderators must click the buttons that does that. If someone clicks one buttons, this will add a default moderator message from that moderator saying what happened. The *old* flags section now displays the proper dispositions and is super duper fast (no more N+9999 queries). FIX: the old list includes deleted topics FIX: the lists now properly display the topic states (deleted, closed, archived, hidden, PM) FIX: flagging a topic that you've already flagged the first post
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
/**
|
|
This view is for rendering an icon representing the status of a topic
|
|
|
|
@class TopicStatusComponent
|
|
@extends Ember.Component
|
|
@namespace Discourse
|
|
@module Discourse
|
|
**/
|
|
export default Ember.Component.extend({
|
|
classNames: ['topic-statuses'],
|
|
|
|
hasDisplayableStatus: Em.computed.or('topic.archived','topic.closed', 'topic.pinned', 'topic.unpinned', 'topic.invisible', 'topic.archetypeObject.notDefault'),
|
|
shouldRerender: Discourse.View.renderIfChanged('topic.archived','topic.closed', 'topic.pinned', 'topic.visible', 'topic.unpinned'),
|
|
|
|
didInsertElement: function(){
|
|
var self = this;
|
|
|
|
this.$('a').click(function(){
|
|
var topic = self.get('topic');
|
|
|
|
// only pin unpin for now
|
|
if (topic.get('pinned')) {
|
|
topic.clearPin();
|
|
} else {
|
|
topic.rePin();
|
|
}
|
|
|
|
return false;
|
|
});
|
|
},
|
|
|
|
render: function(buffer) {
|
|
if (!this.get('hasDisplayableStatus')) { return; }
|
|
|
|
var self = this,
|
|
renderIconIf = function(conditionProp, name, key, actionable) {
|
|
if (!self.get(conditionProp)) { return; }
|
|
var title = I18n.t("topic_statuses." + key + ".help");
|
|
|
|
var startTag = actionable ? "a href='#'" : "span";
|
|
var endTag = actionable ? "a" : "span";
|
|
|
|
buffer.push("<" + startTag +
|
|
" title='" + title +"' class='topic-status'><i class='fa fa-" + name + "'></i></" + endTag + ">");
|
|
};
|
|
|
|
// Allow a plugin to add a custom icon to a topic
|
|
this.trigger('addCustomIcon', buffer);
|
|
|
|
var togglePin = function () {};
|
|
|
|
renderIconIf('topic.closed', 'lock', 'locked');
|
|
renderIconIf('topic.archived', 'lock', 'archived');
|
|
renderIconIf('topic.pinned', 'thumb-tack', 'pinned', togglePin);
|
|
renderIconIf('topic.unpinned', 'thumb-tack unpinned', 'unpinned', togglePin);
|
|
renderIconIf('topic.invisible', 'eye-slash', 'invisible');
|
|
}
|
|
});
|