mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 06:29:30 +08:00
FIX: select posts
This commit is contained in:
parent
ab80240900
commit
ff227eabe6
|
@ -1,9 +1,10 @@
|
|||
import Presence from 'discourse/mixins/presence';
|
||||
import SelectedPostsCount from 'discourse/mixins/selected-posts-count';
|
||||
import ModalFunctionality from 'discourse/mixins/modal-functionality';
|
||||
import ObjectController from 'discourse/controllers/object';
|
||||
|
||||
// Modal related to changing the ownership of posts
|
||||
export default ObjectController.extend(Presence, Discourse.SelectedPostsCount, ModalFunctionality, {
|
||||
export default ObjectController.extend(Presence, SelectedPostsCount, ModalFunctionality, {
|
||||
needs: ['topic'],
|
||||
|
||||
topicController: Em.computed.alias('controllers.topic'),
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import Presence from 'discourse/mixins/presence';
|
||||
import SelectedPostsCount from 'discourse/mixins/selected-posts-count';
|
||||
import ModalFunctionality from 'discourse/mixins/modal-functionality';
|
||||
import ObjectController from 'discourse/controllers/object';
|
||||
|
||||
// Modal related to merging of topics
|
||||
export default ObjectController.extend(Discourse.SelectedPostsCount, ModalFunctionality, Presence, {
|
||||
export default ObjectController.extend(SelectedPostsCount, ModalFunctionality, Presence, {
|
||||
needs: ['topic'],
|
||||
|
||||
topicController: Em.computed.alias('controllers.topic'),
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import Presence from 'discourse/mixins/presence';
|
||||
import SelectedPostsCount from 'discourse/mixins/selected-posts-count';
|
||||
import ModalFunctionality from 'discourse/mixins/modal-functionality';
|
||||
import ObjectController from 'discourse/controllers/object';
|
||||
|
||||
// Modal related to auto closing of topics
|
||||
export default ObjectController.extend(Discourse.SelectedPostsCount, ModalFunctionality, Presence, {
|
||||
export default ObjectController.extend(SelectedPostsCount, ModalFunctionality, Presence, {
|
||||
needs: ['topic'],
|
||||
|
||||
topicController: Em.computed.alias('controllers.topic'),
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import ObjectController from 'discourse/controllers/object';
|
||||
import BufferedContent from 'discourse/mixins/buffered-content';
|
||||
import SelectedPostsCount from 'discourse/mixins/selected-posts-count';
|
||||
import { spinnerHTML } from 'discourse/helpers/loading-spinner';
|
||||
import Topic from 'discourse/models/topic';
|
||||
|
||||
export default ObjectController.extend(Discourse.SelectedPostsCount, BufferedContent, {
|
||||
export default ObjectController.extend(SelectedPostsCount, BufferedContent, {
|
||||
multiSelect: false,
|
||||
needs: ['header', 'modal', 'composer', 'quote-button', 'search', 'topic-progress', 'application'],
|
||||
allPostsSelected: false,
|
||||
|
@ -646,11 +647,8 @@ export default ObjectController.extend(Discourse.SelectedPostsCount, BufferedCon
|
|||
return false;
|
||||
} else {
|
||||
selectedPosts.addObject(post);
|
||||
|
||||
// If the user manually selects all posts, all posts are selected
|
||||
if (selectedPosts.length === this.get('posts_count')) {
|
||||
this.set('allPostsSelected', true);
|
||||
}
|
||||
this.set('allPostsSelected', selectedPosts.length === this.get('model.posts_count'));
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
/**
|
||||
This mixin allows a modal to list a selected posts count nicely.
|
||||
|
||||
@class Discourse.SelectedPostsCount
|
||||
@extends Ember.Mixin
|
||||
@namespace Discourse
|
||||
@module Discourse
|
||||
**/
|
||||
Discourse.SelectedPostsCount = Em.Mixin.create({
|
||||
export default Em.Mixin.create({
|
||||
|
||||
selectedPostsCount: function() {
|
||||
if (this.get('allPostsSelected')) return this.get('posts_count') || this.get('topic.posts_count');
|
||||
if (this.get('allPostsSelected')) {
|
||||
return this.get('model.posts_count') || this.get('topic.posts_count') || this.get('posts_count');
|
||||
}
|
||||
|
||||
var sum = this.get('selectedPosts.length') || 0;
|
||||
if (this.get('selectedReplies')) {
|
||||
|
@ -21,25 +15,18 @@ Discourse.SelectedPostsCount = Em.Mixin.create({
|
|||
return sum;
|
||||
}.property('selectedPosts.length', 'allPostsSelected', 'selectedReplies.length'),
|
||||
|
||||
/**
|
||||
The username that owns every selected post, or undefined if no selection or if
|
||||
ownership is mixed.
|
||||
|
||||
@returns {String|undefined} username that owns all selected posts
|
||||
**/
|
||||
// The username that owns every selected post, or undefined if no selection or if ownership is mixed.
|
||||
selectedPostsUsername: function() {
|
||||
// Don't proceed if replies are selected or usernames are mixed
|
||||
// Changing ownership in those cases normally doesn't make sense
|
||||
if (this.get('selectedReplies') && this.get('selectedReplies').length > 0) return;
|
||||
if (this.get('selectedPosts').length <= 0) return;
|
||||
if (this.get('selectedReplies') && this.get('selectedReplies').length > 0) { return; }
|
||||
if (this.get('selectedPosts').length <= 0) { return; }
|
||||
|
||||
var selectedPosts = this.get('selectedPosts'),
|
||||
username = selectedPosts[0].username;
|
||||
const selectedPosts = this.get('selectedPosts'),
|
||||
username = selectedPosts[0].username;
|
||||
|
||||
if (selectedPosts.every(function(post) { return post.username === username; })) {
|
||||
return username;
|
||||
}
|
||||
}.property('selectedPosts.length', 'selectedReplies.length')
|
||||
});
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<p>{{count-i18n key=topic.multi_select.description count=selectedPostsCount}}</p>
|
||||
<p>{{count-i18n key="topic.multi_select.description" count=selectedPostsCount}}</p>
|
||||
|
||||
{{#if canSelectAll}}
|
||||
<p><a href {{action "selectAll"}}>{{i18n 'topic.multi_select.select_all'}}</a></p>
|
||||
|
@ -9,17 +9,19 @@
|
|||
{{/if}}
|
||||
|
||||
{{#if canDeleteSelected}}
|
||||
<button class='btn' {{action "deleteSelected"}}><i class='fa fa-trash-o'></i> {{i18n 'topic.multi_select.delete'}}</button>
|
||||
{{d-button action="deleteSelected" icon="trash-o" label="topic.multi_select.delete"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if canSplitTopic}}
|
||||
<button class='btn' {{action "splitTopic"}}><i class='fa fa-sign-out'></i> {{i18n 'topic.split_topic.action'}}</button>
|
||||
{{d-button action="splitTopic" icon="sign-out" label="topic.split_topic.action"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if canMergeTopic}}
|
||||
<button class='btn' {{action "mergeTopic"}}><i class='fa fa-sign-out'></i> {{i18n 'topic.merge_topic.action'}}</button>
|
||||
{{d-button action="mergeTopic" icon="sign-out" label="topic.merge_topic.action"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if canChangeOwner}}
|
||||
<button class='btn' {{action "changeOwner"}}><i class='fa fa-user'></i> {{i18n 'topic.change_owner.action'}}</button>
|
||||
{{d-button action="changeOwner" icon="user" label="topic.change_owner.action"}}
|
||||
{{/if}}
|
||||
|
||||
<p class='cancel'><a href {{action "toggleMultiSelect"}}>{{i18n 'topic.multi_select.cancel'}}</a></p>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
export default Discourse.View.extend({
|
||||
elementId: 'selected-posts',
|
||||
topic: Ember.computed.alias('controller.model'),
|
||||
classNameBindings: ['customVisibility'],
|
||||
templateName: "selected-posts",
|
||||
|
||||
customVisibility: function() {
|
||||
if (!this.get('controller.multiSelect')) return 'hidden';
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import SelectedPostsCount from 'discourse/mixins/selected-posts-count';
|
||||
import ModalBodyView from "discourse/views/modal-body";
|
||||
|
||||
export default ModalBodyView.extend(Discourse.SelectedPostsCount, {
|
||||
export default ModalBodyView.extend(SelectedPostsCount, {
|
||||
templateName: 'modal/split_topic',
|
||||
title: I18n.t('topic.split_topic.title')
|
||||
});
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
module("Discourse.SelectedPostsCount");
|
||||
module("SelectedPostsCount");
|
||||
|
||||
import SelectedPostsCount from 'discourse/mixins/selected-posts-count';
|
||||
import Topic from 'discourse/models/topic';
|
||||
|
||||
var buildTestObj = function(params) {
|
||||
return Ember.Object.createWithMixins(Discourse.SelectedPostsCount, params || {});
|
||||
return Ember.Object.createWithMixins(SelectedPostsCount, params || {});
|
||||
};
|
||||
|
||||
test("without selectedPosts", function () {
|
||||
|
|
Loading…
Reference in New Issue
Block a user