pupilfirst/pupilfirst

View on GitHub
app/views/courses/leaderboard.html.erb

Summary

Maintainability
Test Coverage
<% presenter = Courses::LeaderboardPresenter.new(self, @course, @on) %>
<% content_for(:head) do %>
  <title>Leaderboard | <%= presenter.school_name %></title>
<% end %>
<% content_for(:inner_wrapper) do %>
  <div class="bg-gray-50 pt-11 pb-8 -mt-7">
    <div class="max-w-3xl mx-auto">
      <div class="text-center mx-3">
        <p class="inline-block bg-primary-100 text-primary-900 border border-primary-500 text-xs mx-auto text-center px-4 py-2 rounded-lg">
          <%= t(".note_html") %>
        </p>
      </div>
      <div class="w-full md:px-4 text-center mt-4">
        <div class="leaderboard__header-container">
          <div class="w-5/6 lg:w-2/3 mx-auto">
            <div>
              <% if presenter.students.any? %>
                <div class="flex justify-center">
                  <% if presenter.toppers.count > 3 %>
                    <% presenter.toppers[0..1].each do |student| %>
                      <%= render 'topper_avatar', student: student %>
                    <% end %>
                  <% else %>
                    <% presenter.toppers.each do |student| %>
                      <%= render 'topper_avatar', student: student %>
                    <% end %>
                  <% end %>
                  <% if presenter.toppers.count > 3 %>
                    <div class="leaderboard__winner-avatar flex items-center justify-center font-bold bg-gray-300">
                      +<%= presenter.toppers.count - 2 %>
                    </div>
                  <% end %>
                </div>
                <h4 class="leaderboard__winner-title pb-3 mt-3 font-normal leading-snug text-primary-900"><%= presenter.heading %></h4>
                <div class="leaderboard__students-count-container bg-gray-50 flex mx-auto overflow-hidden border rounded-lg justify-center">
                  <div class="w-1/2 px-2 pt-2 pb-1" data-t='active students count'>
                    <p class="text-xs"><%= t(".active_students") %></p>
                    <span class="text-xl font-semibold"><%= presenter.students.count %></span>
                  </div>
                  <div class="w-1/2 px-2 pt-2 pb-1" data-t='inactive students count'>
                    <p class="text-xs"><%= t(".inactive_students") %></p>
                    <span class="text-xl font-semibold"><%= presenter.inactive_students_count %></span>
                  </div>
                </div>
              <% end %>
              <div class="flex items-center justify-center max-w-xs mx-auto h-10 mb-3 mt-5">
                <% if presenter.previous_page? %>
                  <a class="text-primary bg-white hover:bg-primary-100 hover:text-primary-600 hover:border-primary-300 hover:shadow-md focus:bg-primary-600 focus:text-white focus:shadow-inner px-4 py-2 h-full flex items-center justify-center border border-gray-300 rounded-lg" href="<%= presenter.previous_page_link %>">
                    <i class="fas fa-angle-left text-lg"></i>
                  </a>
                <% end %>
                <span class="bg-white px-6 py-2 text-sm flex items-center shrink-0 h-full mx-1 md:mx-2 font-semibold border border-gray-300 rounded-lg">
                  <%= presenter.start_date %> - <%= presenter.end_date %>
                </span>
                <% if presenter.next_page? %>
                  <a class="text-primary bg-white hover:bg-primary-100 hover:text-primary-600 hover:border-primary-300 hover:shadow-md focus:bg-primary-600 focus:text-white focus:shadow-inner px-4 py-2 h-full flex items-center justify-center border border-gray-300 rounded-lg" href="<%= presenter.next_page_link %>">
                    <i class="fas fa-angle-right text-lg"></i>
                  </a>
                <% end %>
              </div>
            </div>
          </div>
        </div>
      </div>
      <% if presenter.students.empty? %>
        <div class="leaderboard__inactive-startup-message text-center bg-white border shadow rounded-lg px-3 md:px-5 mx-3 py-8 my-4">
          <h4 class="font-semibold">
            <%= t(".no_entries") %>
          </h4>
        </div>
      <% else %>
        <div class="leaderboard__table-container w-full bg-white border-t border-b md:border border-gray-300 scrolling-touch shadow-lg overflow-x-auto lg:overflow-hidden lg:rounded-lg">
          <table class="w-full mb-2 border-collapse relative">
            <thead class="bg-gray-50">
              <tr>
                <th class="py-3 px-3 bg-grey-100 font-bold uppercase text-sm border-b"><%= t(".rank") %></th>
                <th class="py-3 px-3 bg-grey-100 font-bold uppercase text-sm border-b"><%= t(".change") %></th>
                <th class="py-3 px-3 bg-grey-100 font-bold uppercase text-sm border-b "><%= t(".student") %></th>
                <th class="py-3 px-3 bg-grey-100 font-bold uppercase text-sm border-b"><%= t(".score") %></th>
              </tr>
            </thead>
            <tbody>
              <% presenter.students.each do |student| %>
                <tr class="<%= student.current_student? ? 'leaderboard__current-student-row shadow-lg' : 'leaderboard__student-row' %>">
                  <td class="py-3 px-3 border-b font-bold text-center">
                    <span><%= student.rank %></span>
                  </td>
                  <td class="py-3 px-3 border-b font-semibold text-sm text-center">
                    <% if student.delta.blank? %>
                      <span class="leaderboard__rank-change-new"><%= t(".new_new") %></span>
                    <% else %>
                      <span class="leaderboard__rank-change-icon inline-block me-1">
                        <%= presenter.rank_change_icon(student.delta) %>
                      </span>
                    <% end %>
                    <span class="leaderboard__rank-delta font-semibold"><%= presenter.format_delta(student.delta) %></span>
                  </td>
                  <td class="py-3 px-3 border-b  text-sm">
                    <span class="font-semibold inline-block leading-tight"><%= student.name %></span>
                    <span class="leaderboard__student-affiliation block text-xs text-gray-600 leading-tight"> <%= student.user.affiliation %></span>
                  </td>
                  <td class="py-3 px-3 border-b text-center font-semibold text-sm"><%= student.score %></td>
                </tr>
              <% end %>
            </tbody>
          </table>
        </div>
      <% end %>
    </div>
  </div>
<% end %>