indentlabs/notebook

View on GitHub
app/views/content/cards/_content_relation_list.html.erb

Summary

Maintainability
Test Coverage
<%# Usage:
render partial: 'content/cards/content_relation_list', locals: { content_type: :character, relations: [[:best_friend, bob], ...]}
%>

<%
  singular_content_type = content_type.to_s.singularize
  content_type_class = content_class_from_name(singular_content_type.titleize)
%>
<div class="card hoverable">
  <div class="card-image waves-effect waves-block waves-light">
    <% images = ImageUpload.where(content_type: content_type_class.to_s, content_id: relations.map { |r| r[1].id }) %>
    <% if images.any? && rand(3) < 2 %>
      <%= image_tag images.sample.src(:large), class: 'activator', style: 'height: 265px' %>
    <% else %>
      <%= image_tag "card-headers/#{content_type.to_s.pluralize}.webp", class: 'activator', style: 'height: 265px' %>
    <% end %>
  </div>
  <div class="card-content">
    <span class="card-title activator">
      <% if defined? card_title %>
        <%
          formatted_card_title = card_title.dup
          if formatted_card_title.include? '<plural>'
            formatted_card_title.gsub!('<plural>', pluralize(relations.count, singular_content_type))
          end
          formatted_card_title[0] = formatted_card_title[0].upcase
        %>
        <%= formatted_card_title %>
      <% else %>
        <%= pluralize(relations.count, singular_content_type.to_s) %>
      <% end %>
      <i class="material-icons right">arrow_upward</i>
    </span>
    <p>
      <%= link_to "Create #{relations.empty? ? 'your first one!' : ['another ', singular_content_type].join}", new_polymorphic_path(singular_content_type) if current_user %>
    </p>
  </div>
  <div class="card-reveal">
    <span class="card-title">
      <% if relations.any? %>
        <i class="material-icons <%= content_type_class.text_color %>" style="position: relative; top: 3px">
          <%= content_type_class.icon %>
        </i>
      <% end %>
      <%= content_type.to_s.titleize %>
      <i class="material-icons right">close</i>
    </span>
    <% if relations.any? %>
      <table class="content-table bordered">
        <tr>
          <th>Relation</th>
          <th><%= singular_content_type.titleize %></th>
          <th></th>
        </tr>
        <% relations.each do |relation, content| %>
          <%
            relation.gsub!('<plural>', '')
            relation.strip!
            relation = relation.singularize
            relation[0] = relation[0].upcase
          %>

        <tr>
          <td><%= relation.to_s %></td>
          <td><%= link_to content.name, content %></td>
          <td>
            <div class="secondary-content">
              <%= link_to edit_polymorphic_path(content) do %>
                <i class="material-icons">edit</i>
              <% end %>
            </div>
          </td>
        </tr>
        <% end %>
      </table>
    <% elsif relations.empty? %>
      <div class="row">
        <div class="col s4">
          <h1><i class="material-icons <%= content_type_class.text_color %> text-lighten-2" style="font-size: 150%">
            <%= content_type_class.icon %>
          </i></h1>
        </div>
        <div class="col s8">
          <p>
            <%= t("content_descriptions.#{singular_content_type}") %>
          </p>
          <div class="center hide-on-small-only">
            <% button_text = relations.any? ? "Create another #{singular_content_type}" : "Create one" %>
            <%= link_to button_text, new_polymorphic_path(singular_content_type), class: "btn #{content_type_class.color}" if current_user %>
          </div>
        </div>
        <div class="center hide-on-med-and-up">
          <% button_text = relations.any? ? "Create another #{singular_content_type}" : "Create one" %>
          <%= link_to button_text, new_polymorphic_path(singular_content_type), class: "btn #{content_type_class.color}" if current_user %>
        </div>
      </div>
    <% end %>
    <br />

  </div>
</div>