From 8a003a9731eb4dcd78a17447af40a1e1d094cdca Mon Sep 17 00:00:00 2001 From: sto Date: Fri, 31 Jul 2026 13:02:24 +0200 Subject: [PATCH] Implement shared scoreboard UI --- app/controllers/concerns/contestants_concern.rb | 2 +- app/views/application/_event_nav.html.slim | 7 +++++++ app/views/contests/_scoreboard_desktop_single.html.slim | 4 ++-- app/views/layouts/authenticated.html.slim | 8 ++++++-- 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 app/views/application/_event_nav.html.slim diff --git a/app/controllers/concerns/contestants_concern.rb b/app/controllers/concerns/contestants_concern.rb index e8d3f8b..727d5c8 100644 --- a/app/controllers/concerns/contestants_concern.rb +++ b/app/controllers/concerns/contestants_concern.rb @@ -3,7 +3,7 @@ module ContestantsConcern def ranked_contestants(contest) if contest.ranking_mode == "actual" - contest.contestants.sort_by { |contestant| [ + contest.contestants.includes([ :completions, :offline ]).sort_by { |contestant| [ -contestant.completions.where(remaining_pieces: nil).size, (contestant.completions.where(remaining_pieces: nil).size == @contest.puzzles.length ? 1 : 0) * contestant.time_seconds, contestant.completions.size > 0 && contestant.completions[-1].remaining_pieces ? contestant.completions[-1].remaining_pieces : 1000000, diff --git a/app/views/application/_event_nav.html.slim b/app/views/application/_event_nav.html.slim new file mode 100644 index 0000000..c49ad8e --- /dev/null +++ b/app/views/application/_event_nav.html.slim @@ -0,0 +1,7 @@ +.mt-2.row style="font-size: 16px;" + .col + ul.nav.nav-tabs.mb-4 + - @contest.event.contests.where(public: true).each do |contest| + li.nav-item + a.nav-link class="#{contest == @contest ? "active" : ""}" href="/public/event/#{@contest.event.slug}?contest_id=#{contest.id}" + = contest.name \ No newline at end of file diff --git a/app/views/contests/_scoreboard_desktop_single.html.slim b/app/views/contests/_scoreboard_desktop_single.html.slim index 31addcb..26eceb2 100644 --- a/app/views/contests/_scoreboard_desktop_single.html.slim +++ b/app/views/contests/_scoreboard_desktop_single.html.slim @@ -1,5 +1,5 @@ -.row - .mt-3.col-6.d-flex.flex-column style="height: calc(100vh - 310px)" +.row style="width: 100%;" + .mt-3.col-6.d-flex.flex-column style="height: calc(100vh - 260px)" .d-flex.flex-column style="overflow-y: auto" table.table.table-striped.table-hover thead diff --git a/app/views/layouts/authenticated.html.slim b/app/views/layouts/authenticated.html.slim index c6b515b..4becc64 100644 --- a/app/views/layouts/authenticated.html.slim +++ b/app/views/layouts/authenticated.html.slim @@ -46,8 +46,12 @@ html h1.mb-4 - if @contest && @contest.id.present? - if active_page("/public") == "active" && @action_path - = @contest.name - .float-end style="margin-top: -5px;" id="scoreboard-switches" + - if active_page("/public/event/") == "active" + = @contest.event.name + = render "event_nav" + - else + = @contest.name + .float-end style="margin-top: #{active_page("/public/event/") == "active" ? "-18px" : "-5px"};" id="scoreboard-switches" .d-inline-flex.align-items-center .ms-4.form-check.form-switch style="font-size: 16px; font-weight: 300;" input.form-check-input type="checkbox" id="refresh-checkbox"