- if @badges.size > 0 && false .row.mb-4 .col .badges style="margin-top: -18px; position: absolute" - @badges.each do |badge| span.badge.text-bg-info.me-2 = badge javascript: async function copyExtensionUrlToClipboard() { await navigator.clipboard.writeText("#{message_url}?token=#{@contest.generate_token_for(:token)}"); alert("#{t("contests.show.url_copied")}"); } .row.mb-5 .col - if @contest.public a.btn.btn-success href="/public/#{@contest.slug}" = t("contests.show.open_public_scoreboard") - else a.btn.btn-success.disabled = t("contests.show.public_scoreboard_disabled") button.btn.btn-success.ms-3 onclick="copyExtensionUrlToClipboard()" css: button > svg { margin-right: 2px; margin-top: -3px; } =< t("contests.show.copy_extension_url") .row.mb-4 style="height: calc(100vh - 280px)" .col-6.d-flex.flex-column style="height: 100%" .row .col h4 = t("contestants.plural").capitalize a.ms-3.btn.btn-sm.btn-primary href=new_contest_contestant_path(@contest) style="margin-top: -3px" | + #{t("helpers.buttons.add")} a.ms-2.btn-sm.btn.btn-primary href=contest_import_path(@contest) style="margin-top: -3px" | #{t("helpers.buttons.import")} .d-flex.flex-column style="overflow-y: auto" table.table.table-striped.table-hover thead tr th scope="col" = t("helpers.rank") th scope="col" = t("activerecord.attributes.contestant.name") th scope="col" = t("activerecord.attributes.contestant.completions") th scope="col" = t("activerecord.attributes.contestant.display_time") tbody - @contestants.each_with_index do |contestant, index| tr scope="row" td = index + 1 td = contestant.name td = contestant.completions.length td = contestant.display_time td a.btn.btn-sm.btn-secondary href=edit_contest_contestant_path(@contest, contestant) = t("helpers.buttons.open") .col-6.d-flex.flex-column style="height: 100%" .row .col h4 = t("puzzles.plural").capitalize a.ms-3.btn.btn-sm.btn-primary href=new_contest_puzzle_path(@contest) style="margin-top: -3px" | + #{t("helpers.buttons.add")} table.table.table-striped.table-hover thead tr th = t("activerecord.attributes.puzzle.image") th = t("activerecord.attributes.puzzle.name") th = t("activerecord.attributes.puzzle.brand") th = t("activerecord.attributes.puzzle.pieces") tbody - @puzzles.each do |puzzle| tr.align-middle scope="row" td = image_tag(puzzle.image, class: "img-fluid", style: "max-height: 48px;") if puzzle.image.attached? td = puzzle.name td = puzzle.brand td = puzzle.pieces td a.btn.btn-sm.btn-secondary href=edit_contest_puzzle_path(@contest, puzzle) = t("helpers.buttons.edit") - if @messages .row.mt-5 .col h4 = t("messages.plural").capitalize - if @puzzles.size == 0 .row .col.alert.alert-danger = t("messages.warning") .d-flex.flex-column style="overflow-y: auto" table.table.table-striped.table-hover thead tr th scope="col" style="white-space: nowrap" = t("activerecord.attributes.message.processed") th scope="col" = t("activerecord.attributes.message.time") th scope="col" = t("activerecord.attributes.message.author") th.w-25 scope="col" = t("activerecord.attributes.message.text") th.w-25 scope="col" tbody - @messages.each do |message| tr.align-middle scope="row" td style="text-align: center" - if message.completions.size > 0 td = message.display_time td = message.author td = message.text td .d-inline-flex - if @puzzles.size > 0 a.btn.btn-sm.btn-secondary href=contest_message_convert_path(@contest, message) style="white-space: nowrap;" = t("helpers.buttons.add_completion") - else a.btn.btn-sm.btn-secondary.disabled href=contest_message_convert_path(@contest, message) style="white-space: nowrap;" = t("helpers.buttons.add_completion") = link_to t("helpers.buttons.delete"), contest_message_path(@contest, message), data: { turbo_method: :delete }, class: "btn btn-sm btn-danger ms-2"