FEATURE: Add public type to polls.
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import computed from 'ember-addons/ember-computed-decorators';
|
||||
import User from 'discourse/models/user';
|
||||
import PollVoters from 'discourse/plugins/poll/components/poll-voters';
|
||||
|
||||
export default PollVoters.extend({
|
||||
@computed("pollsVoters", "poll.options", "showMore", "isExpanded", "numOfVotersToShow")
|
||||
users(pollsVoters, options, showMore, isExpanded, numOfVotersToShow) {
|
||||
var users = [];
|
||||
var voterIds = [];
|
||||
const shouldLimit = showMore && !isExpanded;
|
||||
|
||||
options.forEach(option => {
|
||||
option.voter_ids.forEach(voterId => {
|
||||
if (shouldLimit) {
|
||||
if (!(users.length > numOfVotersToShow - 1)) {
|
||||
users.push(pollsVoters[voterId]);
|
||||
}
|
||||
} else {
|
||||
users.push(pollsVoters[voterId]);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
return users;
|
||||
},
|
||||
|
||||
@computed("pollsVoters", "numOfVotersToShow")
|
||||
showMore(pollsVoters, numOfVotersToShow) {
|
||||
return !(Object.keys(pollsVoters).length < numOfVotersToShow);
|
||||
}
|
||||
});
|
||||
@@ -1,23 +1,27 @@
|
||||
import round from "discourse/lib/round";
|
||||
import computed from 'ember-addons/ember-computed-decorators';
|
||||
|
||||
export default Em.Component.extend({
|
||||
tagName: "span",
|
||||
|
||||
totalScore: function() {
|
||||
@computed("poll.options.@each.{html,votes}")
|
||||
totalScore() {
|
||||
return _.reduce(this.get("poll.options"), function(total, o) {
|
||||
const value = parseInt(o.get("html"), 10),
|
||||
votes = parseInt(o.get("votes"), 10);
|
||||
return total + value * votes;
|
||||
}, 0);
|
||||
}.property("poll.options.@each.{html,votes}"),
|
||||
},
|
||||
|
||||
average: function() {
|
||||
@computed("totalScore", "poll.voters")
|
||||
average() {
|
||||
const voters = this.get("poll.voters");
|
||||
return voters === 0 ? 0 : round(this.get("totalScore") / voters, -2);
|
||||
}.property("totalScore", "poll.voters"),
|
||||
},
|
||||
|
||||
averageRating: function() {
|
||||
@computed("average")
|
||||
averageRating() {
|
||||
return I18n.t("poll.average_rating", { average: this.get("average") });
|
||||
}.property("average"),
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import computed from 'ember-addons/ember-computed-decorators';
|
||||
import User from 'discourse/models/user';
|
||||
import PollVoters from 'discourse/plugins/poll/components/poll-voters';
|
||||
|
||||
export default PollVoters.extend({
|
||||
@computed("pollsVoters", "option.voter_ids", "showMore", "isExpanded", "numOfVotersToShow")
|
||||
users(pollsVoters, voterIds, showMore, isExpanded, numOfVotersToShow) {
|
||||
var users = [];
|
||||
|
||||
if (showMore && !isExpanded) {
|
||||
voterIds = voterIds.slice(0, numOfVotersToShow);
|
||||
}
|
||||
|
||||
voterIds.forEach(voterId => {
|
||||
users.push(pollsVoters[voterId]);
|
||||
});
|
||||
|
||||
return users;
|
||||
},
|
||||
|
||||
@computed("option.votes", "numOfVotersToShow")
|
||||
showMore(numOfVotes, numOfVotersToShow) {
|
||||
return !(numOfVotes < numOfVotersToShow);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
export default Ember.Component.extend({
|
||||
layoutName: "components/poll-voters",
|
||||
tagName: 'ul',
|
||||
classNames: ["poll-voters-list"],
|
||||
isExpanded: false,
|
||||
numOfVotersToShow: 20,
|
||||
|
||||
actions: {
|
||||
toggleExpand() {
|
||||
this.toggleProperty("isExpanded");
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user