mirror of
https://github.com/discourse/discourse.git
synced 2025-02-06 23:28:29 +08:00
FIX: Sort needs to be stable.
This commit is contained in:
parent
e3301cd0c8
commit
288e5faf6b
|
@ -81,6 +81,7 @@ createWidget('discourse-poll-voters', {
|
||||||
if (state.loaded === 'loading') { return; }
|
if (state.loaded === 'loading') { return; }
|
||||||
|
|
||||||
const { voterIds } = attrs;
|
const { voterIds } = attrs;
|
||||||
|
|
||||||
if (!voterIds.length) { return; }
|
if (!voterIds.length) { return; }
|
||||||
|
|
||||||
const windowSize = Math.round(($('.poll-container:eq(0)').width() / 25) * 2);
|
const windowSize = Math.round(($('.poll-container:eq(0)').width() / 25) * 2);
|
||||||
|
@ -137,7 +138,19 @@ createWidget('discourse-poll-standard-results', {
|
||||||
if (options) {
|
if (options) {
|
||||||
|
|
||||||
const voters = poll.get('voters');
|
const voters = poll.get('voters');
|
||||||
const ordered = options.sort((a, b) => b.votes - a.votes);
|
const ordered = options.sort((a, b) => {
|
||||||
|
if (a.votes < b.votes) {
|
||||||
|
return 1;
|
||||||
|
} else if (a.votes == b.votes) {
|
||||||
|
if (a.html < b.html) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const percentages = voters === 0 ?
|
const percentages = voters === 0 ?
|
||||||
Array(ordered.length).fill(0) :
|
Array(ordered.length).fill(0) :
|
||||||
|
|
|
@ -45,10 +45,11 @@ widgetTest('multiple options in descending order', {
|
||||||
this.set('poll', Ember.Object.create({
|
this.set('poll', Ember.Object.create({
|
||||||
type: 'multiple',
|
type: 'multiple',
|
||||||
options: [
|
options: [
|
||||||
{ votes: 5 },
|
{ votes: 5, html: 'a' },
|
||||||
{ votes: 2 },
|
{ votes: 2, html: 'b' },
|
||||||
{ votes: 4 },
|
{ votes: 4, html: 'c' },
|
||||||
{ votes: 1 }
|
{ votes: 1, html: 'b' },
|
||||||
|
{ votes: 1, html: 'a' }
|
||||||
],
|
],
|
||||||
voters: 12
|
voters: 12
|
||||||
}));
|
}));
|
||||||
|
@ -59,5 +60,8 @@ widgetTest('multiple options in descending order', {
|
||||||
assert.equal(this.$('.option .percentage:eq(1)').text(), '33%');
|
assert.equal(this.$('.option .percentage:eq(1)').text(), '33%');
|
||||||
assert.equal(this.$('.option .percentage:eq(2)').text(), '16%');
|
assert.equal(this.$('.option .percentage:eq(2)').text(), '16%');
|
||||||
assert.equal(this.$('.option .percentage:eq(3)').text(), '8%');
|
assert.equal(this.$('.option .percentage:eq(3)').text(), '8%');
|
||||||
|
assert.equal(this.$('.option span:nth-child(2):eq(3)').text(), 'a');
|
||||||
|
assert.equal(this.$('.option .percentage:eq(4)').text(), '8%');
|
||||||
|
assert.equal(this.$('.option span:nth-child(2):eq(4)').text(), 'b');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user