indentlabs/notebook

View on GitHub
app/views/prompts/_smart_sidebar.html.erb

Summary

Maintainability
Test Coverage
<%#
  This sidebar partial uses instantiated ContentPage models instead of the persisted content models (Character, Location, etc)

  TODO: merge this with documents/components/smart_sidebar
%>

<%# todo extract "sidebar" and call it with @content, then also do the same in documents/components/smart_sidebar %>
<%
  raw_model = content.page_type.constantize.find_by(id: content.id, user: current_user)
  serialized_entity = ContentSerializer.new(raw_model)
%>

<ul id="quick-reference-<%= content.page_type %>-<%= content.id %>" class="sidenav quick-reference-sidenav">
  <li>
    <div class="user-view">
      <div class="background">
        <%= image_tag "card-headers/#{content.page_type.downcase.pluralize}.webp", width: '100%' %>
      </div>
      <a href="#name">
        <h1 class="white-text name bordered-text">
          <i class="material-icons <%= content.text_color %> left">
            <%= content.icon %>
          </i>
          <%= content.name %>
        </h1>
      </a>
      <a href="#email">
        <span class="white-text description bordered-text">
          <%= truncate content.description %>
        </span>
      </a>
    </div>
  </li>

  <li><a href="#" class="subheader">Quick-reference</a></li>

  <% serialized_entity.data[:categories].each do |serialized_category| %>
    <% next if serialized_category[:label].downcase == 'gallery' %>
    <% next if serialized_category[:label].downcase == 'contributors' %>
    <li class="no-padding">
      <ul class="collapsible collapsible-accordion">
        <li class="bold waves-effect">
          <a class="collapsible-header" tabindex="0">
            <i class="material-icons left"><%= serialized_category[:icon] %></i>
            <%= serialized_category[:label] %>
            <i class="material-icons chevron">chevron_right</i>
          </a>
          <div class="collapsible-body reference-fields-container">
            <ul class="reference-fields-list selectable">
              <% any_filled_in_fields = false %>
              <% serialized_category[:fields].each do |serialized_field| %>
                <% next unless serialized_field[:value].present? %>
                <% any_filled_in_fields = true %>
                <li>
                  <a href="#" class="subheader"><%= serialized_field[:label] %></a>
                </li>

                <% if serialized_field[:type] == "text_area" %>
                  <li><%= serialized_field[:value] %></li>
                <% elsif serialized_field[:type] == "link" %>
                  <%=
                    #TODO: We should swap all the other field displays here with the new partials also
                    render partial: "content/display/attribute_value/link", 
                      locals: { value: serialized_field[:value], content: content }
                  %>
                <% elsif serialized_field[:type] == "name" %>
                  <li><%= serialized_field[:value] %></li>

                <% elsif serialized_field[:type] == "universe" %>
                  <% if serialized_entity.universe.present? %>
                    <li>
                      <%= link_to serialized_entity.universe do %>
                        <i class="material-icons <%= Universe.text_color %> left"><%= Universe.icon %></i>
                        <%= serialized_entity.universe.name %>
                      <% end %>
                    </li>
                  <% end %>
                <% end %>
              <% end %>

              <% if !any_filled_in_fields %>
                <li>Nothing has been answered in this category... yet!</li>
              <% end %>
            </ul>
          </div>
        </li>
      </ul>
    </li>
  <% end %>

  <li class="divider"></li>
  <li><a href="#" class="subheader">Actions</a></li>

  <li>
    <%= link_to content.view_path, class: "blue-text", target: '_new' do %>
      <i class="material-icons left <%= content.text_color %>"><%= content.icon %></i>
      <i class="material-icons right grey-text">exit_to_app</i>
      View <%= content.name %>
    <% end %>
  </li>
  <li>
    <%= link_to content.edit_path, class: "green-text" do %>
      <i class="material-icons left <%= content.text_color %>"><%= content.icon %></i>
      <i class="material-icons right grey-text">exit_to_app</i>
      Edit <%= content.name %>
    <% end %>
  </li>
</ul>