Compare commits

...

3 commits

Author SHA1 Message Date
4ac2aeaf5e Put all tiebreaker rounds in a single table
To align votes vertically across rounds
2026-01-20 22:24:58 -06:00
720dd8cd56 Prevent flickering 2026-01-20 21:56:19 -06:00
ea1cb054f2 Explain better which vote is removed 2026-01-20 21:43:11 -06:00
2 changed files with 58 additions and 29 deletions

View file

@ -18,12 +18,30 @@
}
.mj-cell-<%= v[:id] %> {
border-left-width: 2px;
border-right-width: 2px;
border-color: <%= v[:color] %>;
background-color: <%= v[:color] %> !important;
}
<% end %>
table:has(.mj-cell:hover) .mj-cell {
border-left-width: 2px;
border-right-width: 2px;
.tiebreak td {
padding-left: 0;
padding-right: 0;
}
tr:has(.mj-cell:hover) .mj-cell {
border-color: var(--bs-body-color);
}
tr:has(.mj-cell:hover) .mj-cell-majority {
background-color: white !important;
}
.tiebreak-top td {
border-bottom: 1px solid var(--bs-gray-400);
}
.tiebreak-round td {
padding-top: 15px;
}

View file

@ -85,54 +85,65 @@
<div class="col"><%= _("Votes for this candidate") %></div>
<div class="col text-end"><%= _("Votes for the winning candidate") %></div>
</div>
<table class="table table-borderless tiebreak">
<% n = 0 %>
<% previous = 0 %>
<% max = @results.first.mj.n * 2 + 1 %>
<% c.mj.break_tie(@results.first.mj).each do |a, b| %>
<hr>
<tr class="tiebreak-top">
<td colspan="<%= max %>"></td>
</tr>
<tr class="tiebreak-round">
<td colspan="<%= max %>">
<% if n == 0 %>
<div class="row">
<div class="col"><%= _("Without removing any vote.") %></div>
</div>
<%= _("Without removing any vote.") %>
<% end %>
<% if n == 1 %>
<div class="row">
<div class="col"><%= _("Removing 1 vote.") %></div>
</div>
<% value = settings.values.select { |e| e[:id] == previous }.first %>
<%= _("Removing a vote of value: ") %>
<span class="badge bg-<%= value[:id] %>"><%= _(value[:label]) %></span>
<% end %>
<% if n > 1 %>
<div class="row">
<div class="col"><%= _("Removing %{n} votes.") % { n: n } %></div>
</div>
<% value = settings.values.select { |e| e[:id] == previous }.first %>
<%= _("Removing another vote of value: ") %>
<span class="badge bg-<%= value[:id] %>"><%= _(value[:label]) %></span>
<% end %>
<table class="table table-borderless">
<% previous = a.mj %>
</td>
</tr>
<tr>
<% (1..a.n).each do |i| %>
<td class="p-0 text-center <% unless i == a.majority %>opacity-0<% end %>">↓</td>
<% end %>
<th></th>
<td colspan="<%= max - a.n - b.n %>"></td>
<% (1..b.n).each do |i| %>
<td class="p-0 text-center <% unless b.n - i + 1 == b.majority %>opacity-0<% end %>">↓</td>
<% end %>
</tr>
<tr>
<% i = 0 %>
<% settings.values.reverse.each do |v| %>
<% (1..a.count[v[:id]]).each do |r| %>
<td class="p-0 mj-cell mj-cell-<%= v[:id] %>">&nbsp;</td>
<% i = i + 1 %>
<td class="p-0 mj-cell mj-cell-<%= v[:id] %><% if i == a.majority and a.mj == b.mj %> mj-cell-majority<% end %>">&nbsp;</td>
<% end %>
<% end %>
<td class="p-0 text-center fw-bold">
<td class="p-0 text-center fw-bold" colspan="<%= max - a.n - b.n %>">
<% if a.mj < b.mj %><<% end %>
<% if a.mj > b.mj %>><% end %>
<% if a.mj == b.mj %>=<% end %>
</td>
<% i = 0 %>
<% settings.values.each do |v| %>
<% (1..b.count[v[:id]]).each do |r| %>
<td class="p-0 mj-cell mj-cell-<%= v[:id] %>">&nbsp;</td>
<% i = i + 1 %>
<td class="p-0 mj-cell mj-cell-<%= v[:id] %><% if b.n - i + 1 == b.majority and a.mj == b.mj %> mj-cell-majority<% end %>">&nbsp;</td>
<% end %>
<% end %>
</tr>
</table>
<% n = n + 1 %>
<% end %>
</table>
</div>
<% end %>
</div>