From f8c22e3ece4a061df0904c35ad5ca1a5213dd05f Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Mon, 23 Jan 2023 12:06:04 +0100
Subject: [PATCH] quite clean

---
 .../stylesheets/admin/appstack/style.sass     |  8 +-
 app/assets/stylesheets/admin/pure/style.sass  |  7 +-
 .../admin/research/journals_controller.rb     |  1 +
 app/helpers/admin/application_helper.rb       |  4 +
 .../communication/extranets/_form.html.erb    | 73 ++++++--------
 .../communication/websites/_form.html.erb     | 49 ++++------
 .../education/programs/forms/_part.html.erb   | 35 +------
 .../admin/education/programs/show.html.erb    |  1 +
 .../admin/research/journals/_form.html.erb    | 10 +-
 .../research/journals/papers/_form.html.erb   | 70 ++++++--------
 .../journals/papers/kinds/_form.html.erb      | 37 +++----
 .../journals/papers/kinds/show.html.erb       |  7 +-
 .../research/journals/papers/show.html.erb    | 58 ++++-------
 .../admin/research/journals/show.html.erb     | 88 ++++++++---------
 .../research/journals/volumes/_form.html.erb  | 48 ++++------
 .../research/journals/volumes/index.html.erb  |  4 +-
 .../research/journals/volumes/show.html.erb   | 96 +++++++++----------
 .../research/laboratories/_form.html.erb      | 14 +--
 .../research/laboratories/axes/_form.html.erb | 11 +--
 .../research/laboratories/axes/_list.html.erb |  2 +-
 .../research/laboratories/axes/show.html.erb  | 21 ++--
 .../admin/research/laboratories/show.html.erb | 21 ++--
 .../admin/research/theses/_form.html.erb      | 30 +++---
 .../admin/research/theses/_list.html.erb      | 26 +++++
 .../admin/research/theses/index.html.erb      | 29 +-----
 app/views/admin/research/theses/show.html.erb | 24 +++++
 26 files changed, 339 insertions(+), 435 deletions(-)
 create mode 100644 app/views/admin/research/theses/_list.html.erb

diff --git a/app/assets/stylesheets/admin/appstack/style.sass b/app/assets/stylesheets/admin/appstack/style.sass
index 02c1b4b89..1dc6a9603 100644
--- a/app/assets/stylesheets/admin/appstack/style.sass
+++ b/app/assets/stylesheets/admin/appstack/style.sass
@@ -71,7 +71,8 @@ h1
     pointer-events: none
 .sidebar-link, a.sidebar-link
     color: rgba(255, 255, 255, 0.8)
-.sidebar-item.active .sidebar-link:hover, .sidebar-item.active > .sidebar-link
+.sidebar-item.active .sidebar-link:hover, 
+.sidebar-item.active > .sidebar-link
     color: white
 
 #topbar
@@ -109,4 +110,7 @@ h1
             margin-top: -5px
         &__title
             border-bottom: 1px solid rgba(0, 0, 0, 0.3)
-            padding-bottom: 6px
\ No newline at end of file
+            padding-bottom: 6px
+
+.pure__separation
+    display: none
\ No newline at end of file
diff --git a/app/assets/stylesheets/admin/pure/style.sass b/app/assets/stylesheets/admin/pure/style.sass
index d4b5b7dce..d2caf6a7e 100644
--- a/app/assets/stylesheets/admin/pure/style.sass
+++ b/app/assets/stylesheets/admin/pure/style.sass
@@ -11,6 +11,9 @@
         > *
             padding-left: calc(.5 * #{$spacing1})
             padding-right: calc(.5 * #{$spacing1})
+    &__separation
+        border-width: 10px
+        margin-bottom: $spacing3
 
 .navbar
     position: absolute
@@ -112,7 +115,9 @@ a
     &.kind--selected
         background: $color-accent
         border-color: $color-accent
-        color: $color-background
+        &, p
+            color: $color-background
+        
 
 .list-group-item.active
     color: $color-accent
diff --git a/app/controllers/admin/research/journals_controller.rb b/app/controllers/admin/research/journals_controller.rb
index 1dd99dea3..048aaaef7 100644
--- a/app/controllers/admin/research/journals_controller.rb
+++ b/app/controllers/admin/research/journals_controller.rb
@@ -14,6 +14,7 @@ class Admin::Research::JournalsController < Admin::Research::ApplicationControll
   def show
     @papers = @journal.papers.ordered.limit(10)
     @kinds = @journal.kinds.ordered
+    @volumes = @journal.volumes.ordered
     breadcrumb
   end
 
diff --git a/app/helpers/admin/application_helper.rb b/app/helpers/admin/application_helper.rb
index 821138ac9..a35df6e65 100644
--- a/app/helpers/admin/application_helper.rb
+++ b/app/helpers/admin/application_helper.rb
@@ -45,6 +45,10 @@ module Admin::ApplicationHelper
                   aria-controls=\"preview\">#{ t 'preview.button'}</button>"
   end
 
+  def static_link(path)
+    raw "<a href=\"#{path}\" class=\"btn btn-light btn-xs\">#{t 'static' }</a>"
+  end
+
   def osuny_panel(title = nil, subtitle: nil, action: nil, &block)
     render  layout: "admin/layouts/themes/#{current_admin_theme}/panel",
             locals: { 
diff --git a/app/views/admin/communication/extranets/_form.html.erb b/app/views/admin/communication/extranets/_form.html.erb
index 8f2cbab3c..27532500a 100644
--- a/app/views/admin/communication/extranets/_form.html.erb
+++ b/app/views/admin/communication/extranets/_form.html.erb
@@ -3,54 +3,39 @@
   <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
 
   <div class="row">
-    <div class="col-md-6">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('metadata') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :name %>
-          <%= f.input :host %>
-          <%= render 'admin/communication/abouts', f: f, i18n_key: 'activerecord.attributes.communication/extranet.about_' %>
-          <%= f.input :registration_contact %>
-        </div>
-      </div>
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('look_feel') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :logo,
-                      as: :single_deletable_file,
-                      input_html: { accept: '.jpg,.jpeg,.png,.svg' },
-                      preview: 200,
-                      direct_upload: true %>
-          <%= f.input :favicon,
-                      as: :single_deletable_file,
-                      input_html: { accept: '.png' },
-                      preview: 100,
-                      direct_upload: true %>
-          <%= f.input :color, as: :color %>
-        </div>
-      </div>
+    <div class="col-xl-6">
+      <%= osuny_panel t('metadata') do %>
+        <%= f.input :name %>
+        <%= f.input :host %>
+        <%= render 'admin/communication/abouts', f: f, i18n_key: 'activerecord.attributes.communication/extranet.about_' %>
+        <%= f.input :registration_contact %>
+      <% end %>
+      <%= osuny_panel t('look_feel') do %>
+        <%= f.input :logo,
+                    as: :single_deletable_file,
+                    input_html: { accept: '.jpg,.jpeg,.png,.svg' },
+                    preview: 200,
+                    direct_upload: true %>
+        <%= f.input :favicon,
+                    as: :single_deletable_file,
+                    input_html: { accept: '.png' },
+                    preview: 100,
+                    direct_upload: true %>
+        <%= f.input :color, as: :color %>
+      <% end %>
     </div>
-    <div class="col-md-6">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('legal') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :terms, as: :summernote %>
-          <%= f.input :privacy_policy, as: :summernote %>
-          <%= f.input :cookies_policy, as: :summernote %>
-        </div>
-      </div>
+    <div class="col-xl-6">
+      <%= osuny_panel t('legal') do %>
+        <%= f.input :terms, as: :summernote %>
+        <%= f.input :privacy_policy, as: :summernote %>
+        <%= f.input :cookies_policy, as: :summernote %>
+      <% end %>
     </div>
   </div>
 
-  <h3 class="mt-5"><%= t('university.sso') %></h3>
+  <h2 class="category"><%= t('university.sso') %></h2>
   <div class="row">
-    <div class="col-md-6">
+    <div class="col-xl-6">
       <%= f.input :has_sso %>
       <div class="sso-inputs">
         <%= f.input :sso_target_url, required: true %>
@@ -59,7 +44,7 @@
         <%= f.input :sso_button_label %>
       </div>
     </div>
-    <div class="col-md-6 sso-inputs">
+    <div class="col-xl-6 sso-inputs">
       <h4 class="mb-4"><%= University.human_attribute_name('sso_mapping') %></h4>
       <%= f.error_notification message: f.object.errors[:sso_mapping].to_sentence if f.object.errors[:sso_mapping].present? %>
       <%= render 'server/universities/sso_mapping', object: extranet %>
diff --git a/app/views/admin/communication/websites/_form.html.erb b/app/views/admin/communication/websites/_form.html.erb
index 9530351b1..df4f1c709 100644
--- a/app/views/admin/communication/websites/_form.html.erb
+++ b/app/views/admin/communication/websites/_form.html.erb
@@ -3,49 +3,34 @@
   <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
 
   <div class="row">
-    <div class="col-md-4">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('metadata') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :name %>
-          <%= f.input :url %>
-          <%= render 'admin/communication/abouts', f: f, i18n_key: 'activerecord.attributes.communication/website.about_' %>
-          <%= f.association :languages, as: :check_boxes, required: true, wrapper_html: { class: "js-languages" } %>
-          <%= f.association :default_language, include_blank: t('simple_form.include_blanks.defaults.language'), input_html: { class: "js-default-language" } %>
-          <%= f.input :in_production %>
-        </div>
-      </div>
+    <div class="col-xl-4">
+      <%= osuny_panel t('metadata') do %>
+        <%= f.input :name %>
+        <%= f.input :url %>
+        <%= render 'admin/communication/abouts', f: f, i18n_key: 'activerecord.attributes.communication/website.about_' %>
+        <%= f.association :languages, as: :check_boxes, required: true, wrapper_html: { class: "js-languages" } %>
+        <%= f.association :default_language, include_blank: t('simple_form.include_blanks.defaults.language'), input_html: { class: "js-default-language" } %>
+        <%= f.input :in_production %>
+      <% end %>
     </div>
-    <div class="col-md-8">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('communication.website.git') %></h5>
-        </div>
-        <div class="card-body">
+    <div class="col-xl-8">
+      <%= osuny_panel t('communication.website.git') do %>
           <div class="row">
-            <div class="col-md-6">
+            <div class="col-xl-6">
               <%= f.input :git_provider, include_blank: false %>
               <%= f.input :git_endpoint %>
             </div>
-            <div class="col-md-6">
+            <div class="col-xl-6">
               <%= f.input :access_token %>
               <%= f.input :repository %>
               <%= f.input :git_branch %>
             </div>
           </div>
-        </div>
-      </div>
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('communication.website.analytics') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :plausible_url %>
-      </div>
+      <% end %>
+      <%= osuny_panel t('communication.website.analytics') do %>
+        <%= f.input :plausible_url %>
+      <% end %>
     </div>
-
   </div>
   <% content_for :action_bar_right do %>
     <%= submit f %>
diff --git a/app/views/admin/education/programs/forms/_part.html.erb b/app/views/admin/education/programs/forms/_part.html.erb
index 2141dac01..41f2999ca 100644
--- a/app/views/admin/education/programs/forms/_part.html.erb
+++ b/app/views/admin/education/programs/forms/_part.html.erb
@@ -1,30 +1,5 @@
-<%
-collapsed ||= false
-id = "part-#{part}"
-%>
-<div class="card">
-  <div class="card-header">
-    <!--
-    <div class="card-actions float-end">
-      <button class="accordion-button bg-transparent <%= 'collapsed' if collapsed %>"
-              type="button"
-              data-bs-toggle="collapse"
-              data-bs-target="#<%= id %>"
-              aria-expanded="<%= !collapsed %>"
-              aria-controls="part-<%= part %>">
-        <i class="fa-solid fa-square-caret-down"></i>
-      </button>
-    </div>
-    -->
-    <h5 class="card-title mb-1">
-      <%= t("education.program.parts.#{part}.label") %>
-    </h5>
-    <p class="mb-0"><%= t("education.program.parts.#{part}.hint") %></p>
-  </div>
-  <div class="card-body">
-  <!-- 
-  <div class="card-body collapse <%= 'show' unless collapsed %>" id="<%= id %>">
-  -->
-    <%= yield %>
-  </div>
-</div>
+<%= osuny_panel t("education.program.parts.#{part}.label"),
+                subtitle: t("education.program.parts.#{part}.hint") do %>
+  <%= yield %>
+<% end %>
+<hr class="pure__separation">
diff --git a/app/views/admin/education/programs/show.html.erb b/app/views/admin/education/programs/show.html.erb
index 22a263d57..32ce1a79e 100644
--- a/app/views/admin/education/programs/show.html.erb
+++ b/app/views/admin/education/programs/show.html.erb
@@ -73,6 +73,7 @@
       </div>
     <% end %>
     <%= render 'admin/communication/blocks/list', about: @program %>
+    <hr class="pure__separation">
     <%= render 'admin/education/programs/forms/part', part: :pedagogy, collapsed: true do %>
       <div class="row">
         <div class="col-xxl-6">
diff --git a/app/views/admin/research/journals/_form.html.erb b/app/views/admin/research/journals/_form.html.erb
index 1d9fbaa4a..d1acbd128 100644
--- a/app/views/admin/research/journals/_form.html.erb
+++ b/app/views/admin/research/journals/_form.html.erb
@@ -4,13 +4,9 @@
 
   <div class="row">
     <div class="col-md-6">
-      <div class="card flex-fill w-100">
-        <div class="card-body">
-          <%= f.input :title %>
-          <%= render 'admin/application/summary/form', f: f, about: journal %>
-          <%= f.input :issn %>
-        </div>
-      </div>
+      <%= f.input :title %>
+      <%= render 'admin/application/summary/form', f: f, about: journal %>
+      <%= f.input :issn %>
     </div>
     <div class="col-md-6">
       <%= render 'admin/application/meta_description/form', f: f, about: journal %>
diff --git a/app/views/admin/research/journals/papers/_form.html.erb b/app/views/admin/research/journals/papers/_form.html.erb
index d476a7110..295be4dfd 100644
--- a/app/views/admin/research/journals/papers/_form.html.erb
+++ b/app/views/admin/research/journals/papers/_form.html.erb
@@ -4,48 +4,38 @@
 
   <div class="row">
     <div class="col-md-8">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('content') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :title, as: :text, input_html: { rows: 3 } %>
-          <%= render 'admin/application/summary/form', f: f, about: paper %>
-          <%= f.input :abstract, as: :text, input_html: { rows: 8 } %>
-          <%= f.input :pdf %>
-          <%= f.input :text, 
-                      as: :summernote,
-                      input_html: {
-                        data: { 'summernote-config' => 'mini' }
-                      } %>
-          <%= f.input :references, 
-                      as: :summernote,
-                      input_html: {
-                        data: { 'summernote-config' => 'mini' }
-                      } %>
-        </div>
-      </div>
+      <%= osuny_panel t('content') do %>
+        <%= f.input :title, as: :text, input_html: { rows: 3 } %>
+        <%= render 'admin/application/summary/form', f: f, about: paper %>
+        <%= f.input :abstract, as: :text, input_html: { rows: 8 } %>
+        <%= f.input :pdf %>
+        <%= f.input :text, 
+                    as: :summernote,
+                    input_html: {
+                      data: { 'summernote-config' => 'mini' }
+                    } %>
+        <%= f.input :references, 
+                    as: :summernote,
+                    input_html: {
+                      data: { 'summernote-config' => 'mini' }
+                    } %>
+      <% end %>
     </div>
     <div class="col-md-4">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('metadata') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :slug,
-                      as: :string,
-                      input_html: paper.persisted? ? {} : {
-                        class: 'js-slug-input',
-                        data: { source: '#research_journal_paper_title' }
-                      } %>
-          <%= f.association :volume, collection: @journal.volumes, label: Research::Journal::Volume.model_name.human %>
-          <%= f.input :published %>
-          <%= f.input :published_at, html5: true %>
-          <%= f.input :keywords, as: :text, input_html: { rows: 2 } %>
-          <%= f.association :people, collection: current_university.people.researchers.ordered, as: :check_boxes %>
-          <%= f.association :kind, collection: @journal.kinds.ordered if @journal.kinds.any? %>
-        </div>
-      </div>
+      <%= osuny_panel t('metadata') do %>
+        <%= f.input :slug,
+                    as: :string,
+                    input_html: paper.persisted? ? {} : {
+                      class: 'js-slug-input',
+                      data: { source: '#research_journal_paper_title' }
+                    } %>
+        <%= f.association :volume, collection: @journal.volumes, label: Research::Journal::Volume.model_name.human %>
+        <%= f.input :published %>
+        <%= f.input :published_at, html5: true %>
+        <%= f.input :keywords, as: :text, input_html: { rows: 2 } %>
+        <%= f.association :people, collection: current_university.people.researchers.ordered, as: :check_boxes %>
+        <%= f.association :kind, collection: @journal.kinds.ordered if @journal.kinds.any? %>
+      <% end %>
       <%= render 'admin/application/meta_description/form', f: f, about: paper %>
     </div>
   </div>
diff --git a/app/views/admin/research/journals/papers/kinds/_form.html.erb b/app/views/admin/research/journals/papers/kinds/_form.html.erb
index 853d1f38a..27b52e6d0 100644
--- a/app/views/admin/research/journals/papers/kinds/_form.html.erb
+++ b/app/views/admin/research/journals/papers/kinds/_form.html.erb
@@ -5,31 +5,22 @@ url = kind.new_record?  ? admin_research_journal_kinds_path
 <%= simple_form_for kind, url: url do |f| %>
   <%= f.error_notification %>
   <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
+
   <div class="row">
-    <div class="col-md-8">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('content') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :title %>
-        </div>
-      </div>
+    <div class="col-xl-8">
+      <%= osuny_panel t('content') do %>
+        <%= f.input :title %>
+      <% end %>
     </div>
-    <div class="col-md-4">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('metadata') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :slug,
-                      as: :string,
-                      input_html: kind.persisted? ? {} : {
-                        class: 'js-slug-input',
-                        data: { source: '#research_journal_paper_kind_title' }
-                      } %>
-        </div>
-      </div>
+    <div class="col-xl-4">
+      <%= osuny_panel t('metadata') do %>
+        <%= f.input :slug,
+                    as: :string,
+                    input_html: kind.persisted? ? {} : {
+                      class: 'js-slug-input',
+                      data: { source: '#research_journal_paper_kind_title' }
+                    } %>
+      <% end %>
     </div>
   </div>
   <% content_for :action_bar_right do %>
diff --git a/app/views/admin/research/journals/papers/kinds/show.html.erb b/app/views/admin/research/journals/papers/kinds/show.html.erb
index b4f8798a4..d3ba42358 100644
--- a/app/views/admin/research/journals/papers/kinds/show.html.erb
+++ b/app/views/admin/research/journals/papers/kinds/show.html.erb
@@ -3,13 +3,12 @@
 <%= render 'admin/research/journals/papers/list', papers: @papers %>
 
 <% content_for :action_bar_left do %>
-  <%= link_to t('destroy'), 
+  <%= link_to t('delete'), 
               admin_research_journal_kind_path(@kind),
               data: { confirm: t('please_confirm') },
               class: button_classes_danger %>
-  <%= link_to t('static'),
-              static_admin_research_journal_kind_path(@kind),
-              class: button_classes('btn-light') if current_user.server_admin? %>
+
+  <%= static_link static_admin_research_journal_kind_path(@kind) %>
 <% end %>
 
 <% content_for :action_bar_right do %>
diff --git a/app/views/admin/research/journals/papers/show.html.erb b/app/views/admin/research/journals/papers/show.html.erb
index a4ab2037d..c6c9c5bee 100644
--- a/app/views/admin/research/journals/papers/show.html.erb
+++ b/app/views/admin/research/journals/papers/show.html.erb
@@ -2,69 +2,51 @@
 
 <div class="row">
   <div class="col-md-8">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h2 class="card-title mb-0 h5"><%= t('content') %></h2>
-      </div>
-      <div class="card-body">
-        <h3 class="h5"><%= Research::Journal::Paper.human_attribute_name('abstract') %></h3>
-        <p><%= @paper.abstract %></p>
-        <% if @paper.pdf.attached? %>
-          <h3 class="h5 mt-4"><%= Research::Journal::Paper.human_attribute_name('pdf') %></h3>
-          <%= link_to @paper.pdf.filename, url_for(@paper.pdf) %>
-        <% end %>
-        <h3 class="h5 mt-4"><%= Research::Journal::Paper.human_attribute_name('text') %></h3>
-        <p><%= @paper.text %></p>
-        <h3 class="h5 mt-4"><%= Research::Journal::Paper.human_attribute_name('references') %></h3>
-        <p><%= @paper.references %></p>
-      </div>
-    </div>
+    <%= osuny_panel t('content') do %>
+      <%= osuny_label Research::Journal::Paper.human_attribute_name('abstract') %>
+      <p><%= @paper.abstract %></p>
+      <% if @paper.pdf.attached? %>
+        <%= osuny_label Research::Journal::Paper.human_attribute_name('pdf') %>
+        <%= link_to @paper.pdf.filename, url_for(@paper.pdf) %>
+      <% end %>
+      <%= osuny_label Research::Journal::Paper.human_attribute_name('text') %>
+      <p><%= @paper.text %></p>
+      <%= osuny_label Research::Journal::Paper.human_attribute_name('references') %>
+      <p><%= @paper.references %></p>
+    <% end %>
     <%= render 'admin/application/summary/show', about: @paper %>
   </div>
   <div class="col-md-4">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h2 class="card-title mb-0 h5"><%= t('metadata') %></h2>
-      </div>
-      <div class="card-body">
+    <%= osuny_panel t('metadata') do %>
         <% if @paper.volume %>
-          <h3 class="h5"><%= Research::Journal::Paper.human_attribute_name('volume') %></h3>
+          <%= osuny_label Research::Journal::Paper.human_attribute_name('volume') %>
           <p><%= link_to  @paper.volume,
                           [:admin, @paper.volume],
                           class: "#{'draft' unless @paper.volume.published?}" %></p>
         <% end %>
-        <h3 class="h5"><%= Research::Journal::Paper.human_attribute_name('published') %></h3>
+        <%= osuny_label Research::Journal::Paper.human_attribute_name('published') %>
         <p><%= t @paper.published %></p>
         <% if @paper.published? && @paper.published_at.present? %>
-          <h3 class="h5">
-            <%= Research::Journal::Paper.human_attribute_name('published_at') %>
-          </h3>
+          <%= osuny_label Research::Journal::Paper.human_attribute_name('published_at') %>
           <p><%= l @paper.published_at.to_time, format: :date_with_explicit_month %></p>
         <% end %>
         <% unless @paper.keywords.blank? %>
-          <h3 class="h5">
-            <%= Research::Journal::Paper.human_attribute_name('keywords') %>
-          </h3>
+          <%= osuny_label Research::Journal::Paper.human_attribute_name('keywords') %>
           <p><%= @paper.keywords %></p>
         <% end %>
         <% if @paper.kind %>
-          <h3 class="h5">
-            <%= Research::Journal::Paper.human_attribute_name('kind') %>
-          </h3>
+          <%= osuny_label Research::Journal::Paper.human_attribute_name('kind') %>
           <p><%= link_to @paper.kind, admin_research_journal_kind_path(@paper.kind) %></p>
         <% end %>
         <% if @paper.people.any? %>
-          <h3 class="h5">
-            <%= Research::Journal::Paper.human_attribute_name('people') %>
-          </h3>
+          <%= osuny_label Research::Journal::Paper.human_attribute_name('people') %>
           <ul class="list-unstyled mb-0">
             <% @paper.people.each do |person| %>
               <li><%= link_to person, admin_research_researcher_path(person) %></li>
             <% end %>
           </ul>
         <% end %>
-      </div>
-    </div>
+    <% end %>
     <%= render 'admin/application/meta_description/show', about: @paper %>
   </div>
 </div>
diff --git a/app/views/admin/research/journals/show.html.erb b/app/views/admin/research/journals/show.html.erb
index d3a88ddf1..2d80a449b 100644
--- a/app/views/admin/research/journals/show.html.erb
+++ b/app/views/admin/research/journals/show.html.erb
@@ -20,60 +20,54 @@
   </div>
 </div>
 
-<div class="float-end">
-  <%= link_to t('create'),
-              new_admin_research_journal_volume_path(journal_id: @journal),
-              class: button_classes %>
-</div>
-<h2 class="h4">
-  <%= link_to Research::Journal::Volume.model_name.human(count: 2),
-              admin_research_journal_volumes_path(journal_id: @journal) %>
-</h2>
-<div class="row">
-  <% @journal.volumes.ordered.limit(4).each do |volume| %>
-    <div class="col-md-3 mt-4 p-0">
-      <div class="card">
-        <%= kamifusen_tag volume.featured_image, width: 600, class: 'img-fluid' if volume.featured_image.attached? %>
-        <div class="card-body">
-          <%= link_to volume,
-                      admin_research_journal_volume_path(journal_id: @journal, id: volume),
-                      class: "stretched-link #{'draft' unless volume.published?}" %>
+<%
+action = link_to    t('create'),
+                    new_admin_research_journal_volume_path(journal_id: @journal),
+                    class: button_classes
+subtitle = link_to  t('communication.website.see_all', number: @volumes.count),
+                    admin_research_journal_volumes_path(journal_id: @journal)
+%>
+<%= osuny_panel Research::Journal::Volume.model_name.human(count: 2), subtitle: subtitle, action: action do %>
+  <div class="row">
+    <% @volumes.limit(4).each do |volume| %>
+      <div class="col-md-6 col-xl-3">
+        <div class="card">
+          <%= kamifusen_tag volume.featured_image, width: 600, class: 'img-fluid' if volume.featured_image.attached? %>
+          <div class="card-body">
+            <%= link_to volume,
+                        admin_research_journal_volume_path(journal_id: @journal, id: volume),
+                        class: "stretched-link #{'draft' unless volume.published?}" %>
+          </div>
         </div>
       </div>
-    </div>
-  <% end %>
-</div>
+    <% end %>
+  </div>
+<% end %>
 
 <div class="row">
-  <div class="col-md-8">
-    <div class="card mt-5">
-      <div class="card-header">
-        <div class="float-end">
-          <%= link_to t('create'),
-                      new_admin_research_journal_paper_path(journal_id: @journal),
-                      class: button_classes %>
-        </div>
-        <h2 class="card-title">
-          <%= link_to Research::Journal::Paper.model_name.human(count: 2),
-                      admin_research_journal_papers_path(journal_id: @journal) %></h2>
-      </div>
+  <div class="col-xl-8">
+    <%
+    action = link_to    t('create'),
+                        new_admin_research_journal_paper_path(journal_id: @journal),
+                        class: button_classes
+    subtitle = link_to  t('communication.website.see_all', number: @papers.count),
+                        admin_research_journal_papers_path(journal_id: @journal)
+    %>
+    <%= osuny_panel Research::Journal::Paper.model_name.human(count: 2), subtitle: subtitle, action: action do %>
       <%= render 'admin/research/journals/papers/list', papers: @papers %>
-    </div>
+    <% end %>
   </div>
-  <div class="col-md-4">
-    <div class="card mt-5">
-      <div class="card-header">
-        <div class="float-end">
-          <%= link_to t('create'),
-                      new_admin_research_journal_kind_path(journal_id: @journal),
-                      class: button_classes %>
-        </div>
-        <h2 class="card-title">
-          <%= link_to Research::Journal::Paper::Kind.model_name.human(count: 2),
-                      admin_research_journal_kind_path(journal_id: @journal) %></h2>
-      </div>
+  <div class="col-xl-4">
+    <%
+    action = link_to    t('create'),
+                        new_admin_research_journal_kind_path(journal_id: @journal),
+                        class: button_classes
+    subtitle = link_to  t('communication.website.see_all', number: @kinds.count),
+                        admin_research_journal_kinds_path(journal_id: @journal)
+    %>
+    <%= osuny_panel Research::Journal::Paper::Kind.model_name.human(count: 2), subtitle: subtitle, action: action do %>
       <%= render 'admin/research/journals/papers/kinds/list', kinds: @kinds %>
-    </div>
+    <% end %>
   </div>
 </div>
 
diff --git a/app/views/admin/research/journals/volumes/_form.html.erb b/app/views/admin/research/journals/volumes/_form.html.erb
index 7d39bfe89..70c08a827 100644
--- a/app/views/admin/research/journals/volumes/_form.html.erb
+++ b/app/views/admin/research/journals/volumes/_form.html.erb
@@ -3,37 +3,27 @@
   <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
 
   <div class="row">
-    <div class="col-md-8">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('content') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :title %>
-          <%= render 'admin/application/summary/form', f: f, about: volume %>
-          <%= f.input :text, as: :summernote %>
-        </div>
-      </div>
+    <div class="col-xl-8">
+      <%= osuny_panel t('content') do %>
+        <%= f.input :title %>
+        <%= render 'admin/application/summary/form', f: f, about: volume %>
+        <%= f.input :text, as: :summernote %>
+      <% end %>
       <%= render 'admin/application/meta_description/form', f: f, about: volume %>
     </div>
-    <div class="col-md-4">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('metadata') %></h5>
-        </div>
-        <div class="card-body">
-          <%= f.input :slug,
-                      as: :string,
-                      input_html: volume.persisted? ? {} : {
-                        class: 'js-slug-input',
-                        data: { source: '#research_journal_volume_title' }
-                      } %>
-          <%= f.input :number %>
-          <%= f.input :published %>
-          <%= f.input :published_at, html5: true %>
-          <%= f.input :keywords %>
-        </div>
-      </div>
+    <div class="col-xl-4">
+      <%= osuny_panel t('metadata') do %>
+        <%= f.input :slug,
+                    as: :string,
+                    input_html: volume.persisted? ? {} : {
+                      class: 'js-slug-input',
+                      data: { source: '#research_journal_volume_title' }
+                    } %>
+        <%= f.input :number %>
+        <%= f.input :published %>
+        <%= f.input :published_at, html5: true %>
+        <%= f.input :keywords %>
+      <% end %>
       <%= render 'admin/application/featured_image/edit', about: volume, f: f %>
     </div>
   </div>
diff --git a/app/views/admin/research/journals/volumes/index.html.erb b/app/views/admin/research/journals/volumes/index.html.erb
index 95d7f70af..a484af04c 100644
--- a/app/views/admin/research/journals/volumes/index.html.erb
+++ b/app/views/admin/research/journals/volumes/index.html.erb
@@ -4,7 +4,8 @@
   <table class="<%= table_classes %>">
     <thead>
       <tr>
-        <th><%= Research::Journal::Volume.model_name.human %></th>
+        <th><%= Research::Journal::Volume.human_attribute_name('title') %></th>
+        <th><%= Research::Journal::Volume.human_attribute_name('number') %></th>
         <th><%= Research::Journal::Volume.human_attribute_name('featured_image') %></th>
         <th><%= Research::Journal::Volume.human_attribute_name('published_at') %></th>
         <th></th>
@@ -18,6 +19,7 @@
                         admin_research_journal_volume_path(journal_id: @journal, id: volume),
                         class: "#{'draft' unless volume.published?}" %>
           </td>
+          <td><%= volume.number %></td>
           <td><%= image_tag volume.featured_image.variant(resize: 'x200'),
                             height: 100 if volume.featured_image.attached? %></td>
           <td><%= l(volume.published_at.to_time, format: :date_with_explicit_month) if volume.published_at.present? %></td>
diff --git a/app/views/admin/research/journals/volumes/show.html.erb b/app/views/admin/research/journals/volumes/show.html.erb
index 1872da74c..b5c16a3d8 100644
--- a/app/views/admin/research/journals/volumes/show.html.erb
+++ b/app/views/admin/research/journals/volumes/show.html.erb
@@ -4,62 +4,58 @@
   <div class="col-md-9">
     <%= render 'admin/application/summary/show', about: @volume %>
     <% if @papers.any? %>
-      <h3 class="h5 mt-5"><%= Research::Journal::Paper.model_name.human(count: 2) %></h3>
-      <div class="table-responsive">
-        <table class="<%= table_classes %>">
-          <thead>
-            <tr>
-              <% if can? :reorder, Research::Journal::Paper %>
-                <th width="20" class="ps-0">&nbsp;</th>
-              <% end %>
-              <th class="ps-0"><%= Research::Journal::Paper.human_attribute_name('title') %></th>
-              <th><%= Research::Journal::Paper.human_attribute_name('published_at') %></th>
-              <th></th>
-            </tr>
-          </thead>
-          <tbody data-sortable data-sort-url="<%= reorder_admin_research_journal_papers_path(journal_id: @journal.id) %>">
-            <% @papers.each do |paper| %>
-              <tr data-id="<%= paper.id %>">
+      <%= osuny_panel Research::Journal::Paper.model_name.human(count: 2) do %>
+        <div class="table-responsive">
+          <table class="<%= table_classes %>">
+            <thead>
+              <tr>
                 <% if can? :reorder, Research::Journal::Paper %>
-                  <td><i class="fa fa-bars handle"></i></td>
+                  <th width="20" class="ps-0">&nbsp;</th>
                 <% end %>
-                <td>
-                  <%= link_to paper,
-                              admin_research_journal_paper_path(journal_id: paper.journal, id: paper),
-                              class: "#{'draft' unless paper.published?}" %>
-                </td>
-                <td><%= l(paper.published_at.to_time, format: :date_with_explicit_month) if paper.published_at.present? %></td>
-                <td class="text-end">
-                  <div class="btn-group" role="group">
-                    <%= link_to t('edit'),
-                                edit_admin_research_journal_paper_path(journal_id: paper.journal, id: paper),
-                                class: button_classes %>
-                    <%= link_to t('delete'),
-                                admin_research_journal_paper_path(journal_id: paper.journal, id: paper),
-                                method: :delete,
-                                data: { confirm: t('please_confirm') },
-                                class: button_classes_danger %>
-                  </div>
-                </td>
+                <th class="ps-0"><%= Research::Journal::Paper.human_attribute_name('title') %></th>
+                <th><%= Research::Journal::Paper.human_attribute_name('published_at') %></th>
+                <th></th>
               </tr>
-            <% end %>
-          </tbody>
-        </table>
-      </div>
+            </thead>
+            <tbody data-sortable data-sort-url="<%= reorder_admin_research_journal_papers_path(journal_id: @journal.id) %>">
+              <% @papers.each do |paper| %>
+                <tr data-id="<%= paper.id %>">
+                  <% if can? :reorder, Research::Journal::Paper %>
+                    <td><i class="fa fa-bars handle"></i></td>
+                  <% end %>
+                  <td>
+                    <%= link_to paper,
+                                admin_research_journal_paper_path(journal_id: paper.journal, id: paper),
+                                class: "#{'draft' unless paper.published?}" %>
+                  </td>
+                  <td><%= l(paper.published_at.to_time, format: :date_with_explicit_month) if paper.published_at.present? %></td>
+                  <td class="text-end">
+                    <div class="btn-group" role="group">
+                      <%= link_to t('edit'),
+                                  edit_admin_research_journal_paper_path(journal_id: paper.journal, id: paper),
+                                  class: button_classes %>
+                      <%= link_to t('delete'),
+                                  admin_research_journal_paper_path(journal_id: paper.journal, id: paper),
+                                  method: :delete,
+                                  data: { confirm: t('please_confirm') },
+                                  class: button_classes_danger %>
+                    </div>
+                  </td>
+                </tr>
+              <% end %>
+            </tbody>
+          </table>
+        </div>
+      <% end %>
     <% end %>
   </div>
   <div class="col-md-3">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h2 class="card-title mb-0 h5"><%= t('metadata') %></h2>
-      </div>
-      <div class="card-body">
-        <h3 class="h5"><%= Research::Journal::Volume.human_attribute_name('number') %></h3>
-        <p><%= @volume.number %></p>
-        <h3 class="h5"><%= Research::Journal::Volume.human_attribute_name('published_at') %></h3>
-        <p><%= l @volume.published_at.to_time, format: :date_with_explicit_month if @volume.published_at %></p>
-      </div>
-    </div>
+    <%= osuny_panel t('metadata') do %>
+      <%= osuny_label Research::Journal::Volume.human_attribute_name('number') %>
+      <p><%= @volume.number %></p>
+      <%= osuny_label Research::Journal::Volume.human_attribute_name('published_at') %>
+      <p><%= l @volume.published_at.to_time, format: :date_with_explicit_month if @volume.published_at %></p>
+    <% end %>
     <%= render 'admin/application/featured_image/show', about: @volume %>
     <%= render 'admin/application/meta_description/show', about: @volume %>
   </div>
diff --git a/app/views/admin/research/laboratories/_form.html.erb b/app/views/admin/research/laboratories/_form.html.erb
index c1b127b75..8270d310c 100644
--- a/app/views/admin/research/laboratories/_form.html.erb
+++ b/app/views/admin/research/laboratories/_form.html.erb
@@ -4,15 +4,11 @@
 
   <div class="row">
     <div class="col-md-6">
-      <div class="card flex-fill w-100">
-        <div class="card-body">
-          <%= f.input :name %>
-          <%= f.input :address %>
-          <%= f.input :zipcode %>
-          <%= f.input :city %>
-          <%= f.input :country, input_html: { class: 'form-select' } %>
-        </div>
-      </div>
+      <%= f.input :name %>
+      <%= f.input :address %>
+      <%= f.input :zipcode %>
+      <%= f.input :city %>
+      <%= f.input :country, input_html: { class: 'form-select' } %>
     </div>
   </div>
   <% content_for :action_bar_right do %>
diff --git a/app/views/admin/research/laboratories/axes/_form.html.erb b/app/views/admin/research/laboratories/axes/_form.html.erb
index c4d484522..66c1f0851 100644
--- a/app/views/admin/research/laboratories/axes/_form.html.erb
+++ b/app/views/admin/research/laboratories/axes/_form.html.erb
@@ -4,12 +4,8 @@
 
   <div class="row">
     <div class="col-md-8">
-      <div class="card flex-fill w-100">
-        <div class="card-header">
-          <h5 class="card-title mb-0"><%= t('content') %></h5>
-        </div>
-        <div class="card-body">
-          <div class="row">
+      <%= osuny_panel t('content') do %>
+          <div class="row pure__row--small">
             <div class="col-lg-8 col-xxl-9">
               <%= f.input :name %>
             </div>
@@ -18,8 +14,7 @@
             </div>
           </div>
           <%= f.input :text, as: :summernote %>
-        </div>
-      </div>
+      <% end %>
     </div>
     <div class="col-md-4">
       <%= render 'admin/application/meta_description/form', f: f, about: axis %>
diff --git a/app/views/admin/research/laboratories/axes/_list.html.erb b/app/views/admin/research/laboratories/axes/_list.html.erb
index 551a5fba4..62dec1931 100644
--- a/app/views/admin/research/laboratories/axes/_list.html.erb
+++ b/app/views/admin/research/laboratories/axes/_list.html.erb
@@ -5,7 +5,7 @@
         <% if can? :reorder, Research::Laboratory::Axis %>
           <th width="20" class="ps-0">&nbsp;</th>
         <% end %>
-        <th><%= Research::Laboratory::Axis.model_name.human %></th>
+        <th><%= Research::Laboratory::Axis.human_attribute_name('name') %></th>
         <th><%= Research::Laboratory::Axis.human_attribute_name('short_name') %></th>
         <th></th>
       </tr>
diff --git a/app/views/admin/research/laboratories/axes/show.html.erb b/app/views/admin/research/laboratories/axes/show.html.erb
index a937db7ca..e0691afb6 100644
--- a/app/views/admin/research/laboratories/axes/show.html.erb
+++ b/app/views/admin/research/laboratories/axes/show.html.erb
@@ -2,19 +2,14 @@
 
 <div class="row">
   <div class="col-md-8">
-    <div class="card flex-fill w-100">
-      <div class="card-header">
-        <h2 class="card-title mb-0 h5"><%= t('content') %></h2>
-      </div>
-      <div class="card-body">
-        <% unless @axis.short_name.empty? %>
-        <h3 class="h5"><%= Research::Laboratory::Axis.human_attribute_name('short_name') %></h3>
-        <%= @axis.short_name %>
-        <% end %>
-        <h3 class="h5 mt-4"><%= Research::Laboratory::Axis.human_attribute_name('text') %></h3>
-        <%= @axis.text %>
-      </div>
-    </div>
+    <%= osuny_panel t('content') do %>
+      <% unless @axis.short_name.empty? %>
+        <%= osuny_label Research::Laboratory::Axis.human_attribute_name('short_name') %>
+        <p><%= @axis.short_name %></p>
+      <% end %>
+      <%= osuny_label Research::Laboratory::Axis.human_attribute_name('text') %>
+      <%= sanitize @axis.text.to_s %>
+    <% end %>
   </div>
   <div class="col-md-4">
     <%= render 'admin/application/meta_description/show', about: @axis %>
diff --git a/app/views/admin/research/laboratories/show.html.erb b/app/views/admin/research/laboratories/show.html.erb
index e9f522a01..388c3b317 100644
--- a/app/views/admin/research/laboratories/show.html.erb
+++ b/app/views/admin/research/laboratories/show.html.erb
@@ -1,18 +1,15 @@
 <% content_for :title, @laboratory %>
 
-<div class="card mt-5">
-  <div class="card-header">
-    <div class="float-end">
-      <%= link_to t('create'),
-                  new_admin_research_laboratory_axis_path(laboratory_id: @laboratory),
-                  class: button_classes %>
-    </div>
-    <h2 class="card-title">
-      <%= link_to Research::Laboratory::Axis.model_name.human(count: 2),
-                  admin_research_laboratory_axes_path(laboratory_id: @laboratory) %></h2>
-  </div>
+<%
+action = link_to    t('create'),
+                    new_admin_research_laboratory_axis_path(laboratory_id: @laboratory),
+                    class: button_classes
+subtitle = link_to  t('communication.website.see_all', number: @axes.count),
+                    admin_research_laboratory_axes_path(laboratory_id: @laboratory)
+%>
+<%= osuny_panel Research::Laboratory::Axis.model_name.human(count: 2), action: action, subtitle: subtitle do %>
   <%= render 'admin/research/laboratories/axes/list', axes: @axes %>
-</div>
+<% end %>
 
 <% content_for :action_bar_left do %>
   <%= destroy_link @laboratory %>
diff --git a/app/views/admin/research/theses/_form.html.erb b/app/views/admin/research/theses/_form.html.erb
index 977be86af..87696eaf0 100644
--- a/app/views/admin/research/theses/_form.html.erb
+++ b/app/views/admin/research/theses/_form.html.erb
@@ -3,22 +3,20 @@
   <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
 
   <div class="row">
-    <div class="col-md-6">
-      <div class="card flex-fill w-100">
-        <div class="card-body">
-          <%= f.input :title %>
-          <%= f.input :abstract %>
-          <%= f.input :started_at, html5: true %>
-          <%= f.input :completed %>
-          <%= f.input :completed_at, html5: true %>
-          <%= f.association :laboratory,
-                            collection: current_university.research_laboratories.ordered %>
-          <%= f.association :author,
-                            collection: current_university.people.researchers.ordered %>
-          <%= f.association :director,
-                            collection: current_university.people.researchers.ordered %>
-        </div>
-      </div>
+    <div class="col-xl-6">
+      <%= f.input :title %>
+      <%= f.input :abstract, input_html: { rows: 10 } %>
+    </div>
+    <div class="col-xl-6">
+      <%= f.input :started_at, html5: true %>
+      <%= f.input :completed %>
+      <%= f.input :completed_at, html5: true %>
+      <%= f.association :laboratory,
+                        collection: current_university.research_laboratories.ordered %>
+      <%= f.association :author,
+                        collection: current_university.people.researchers.ordered %>
+      <%= f.association :director,
+                        collection: current_university.people.researchers.ordered %>
     </div>
   </div>
   <% content_for :action_bar_right do %>
diff --git a/app/views/admin/research/theses/_list.html.erb b/app/views/admin/research/theses/_list.html.erb
new file mode 100644
index 000000000..a5c1e1205
--- /dev/null
+++ b/app/views/admin/research/theses/_list.html.erb
@@ -0,0 +1,26 @@
+<div class="table-responsive">
+  <table class="<%= table_classes %>">
+    <thead>
+      <tr>
+        <th><%= Research::Thesis.human_attribute_name('title') %></th>
+        <th><%= Research::Thesis.human_attribute_name('laboratory') %></th>
+        <th></th>
+      </tr>
+    </thead>
+    <tbody>
+      <% @theses.each do |thesis| %>
+        <tr>
+          <td><%= link_to thesis, [:admin, thesis] %></td>
+          <td><%= link_to thesis.laboratory, [:admin, thesis.laboratory] %></td>
+          <td class="text-end">
+            <div class="btn-group" role="group">
+              <%= edit_link thesis %>
+              <%= destroy_link thesis %>
+            </div>
+          </td>
+        </tr>
+      <% end %>
+    </tbody>
+  </table>
+</div>
+<%= paginate @theses, theme: 'bootstrap-5' %>
\ No newline at end of file
diff --git a/app/views/admin/research/theses/index.html.erb b/app/views/admin/research/theses/index.html.erb
index 916c3fc1c..4e5897a22 100644
--- a/app/views/admin/research/theses/index.html.erb
+++ b/app/views/admin/research/theses/index.html.erb
@@ -1,34 +1,7 @@
 <% content_for :title, Research::Thesis.model_name.human(count: 2) %>
 
 <%= render 'filters', current_path: admin_research_theses_path, filters: @filters if @filters.any?  %>
-
-<div class="table-responsive">
-  <table class="<%= table_classes %>">
-    <thead>
-      <tr>
-        <th><%= Research::Thesis.human_attribute_name('title') %></th>
-        <th></th>
-      </tr>
-    </thead>
-
-    <tbody>
-      <% @theses.each do |thesis| %>
-        <tr>
-          <td><%= link_to thesis, [:admin, thesis] %></td>
-          <td class="text-end">
-            <div class="btn-group" role="group">
-              <%= edit_link thesis %>
-              <%= destroy_link thesis %>
-            </div>
-          </td>
-        </tr>
-      <% end %>
-    </tbody>
-  </table>
-</div>
-
-<%= paginate @theses, theme: 'bootstrap-5' %>
-
+<%= render 'admin/research/theses/list', theses: @theses %>
 
 <% content_for :action_bar_right do %>
   <%= create_link Research::Thesis %>
diff --git a/app/views/admin/research/theses/show.html.erb b/app/views/admin/research/theses/show.html.erb
index 53a07b0ea..9ed9ecded 100644
--- a/app/views/admin/research/theses/show.html.erb
+++ b/app/views/admin/research/theses/show.html.erb
@@ -1,5 +1,29 @@
 <% content_for :title, @thesis %>
 
+<div class="row">
+  <div class="col-xl-6">
+    <%= simple_format @thesis.abstract %>
+  </div>
+  <div class="col-xl-6">
+    <% if @thesis.started_at %>
+      <%= osuny_label Research::Thesis.human_attribute_name('started_at') %>
+      <p><%= l @thesis.started_at %></p>
+    <% end %>
+    <%= osuny_label Research::Thesis.human_attribute_name('completed') %>
+    <p><%= t @thesis.completed %></p>
+    <% if @thesis.completed_at %>
+      <%= osuny_label Research::Thesis.human_attribute_name('completed_at') %>
+      <p><%= l @thesis.completed_at %></p>
+    <% end %>
+    <%= osuny_label Research::Thesis.human_attribute_name('author') %>
+    <p><%= link_to @thesis.author, [:admin, @thesis.author] %></p>
+    <%= osuny_label Research::Thesis.human_attribute_name('laboratory') %>
+    <p><%= link_to @thesis.laboratory, [:admin, @thesis.laboratory] %></p>
+    <%= osuny_label Research::Thesis.human_attribute_name('director') %>
+    <p><%= link_to @thesis.director, [:admin, @thesis.director] %></p>
+  </div>
+</div>
+
 <% content_for :action_bar_left do %>
   <%= destroy_link @thesis %>
 <% end %>
-- 
GitLab