From 310a22b1f609ab906d11046fabdeacd93319cdac Mon Sep 17 00:00:00 2001
From: Arnaud Levy <arnaud.levy@noesya.coop>
Date: Wed, 12 Feb 2025 07:15:35 +0100
Subject: [PATCH] =?UTF-8?q?G=C3=A9n=C3=A9ralisation=20des=20bodyclasses=20?=
 =?UTF-8?q?(#2715)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/models/communication/website/page.rb            |  1 -
 app/models/concerns/bodyclassed.rb                  |  5 +++--
 app/models/concerns/categorizable.rb                |  3 ++-
 app/views/admin/application/static/_core.html.erb   | 13 +++++++++++++
 .../communication/websites/pages/static.html.erb    |  2 --
 5 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/app/models/communication/website/page.rb b/app/models/communication/website/page.rb
index 16784a407..449e31205 100644
--- a/app/models/communication/website/page.rb
+++ b/app/models/communication/website/page.rb
@@ -34,7 +34,6 @@ class Communication::Website::Page < ApplicationRecord
   self.ignored_columns = %w(path kind)
 
   include AsDirectObject
-  include Bodyclassed
   include Duplicable
   include Filterable
   include Categorizable # Must be loaded after Filterable to be filtered by categories
diff --git a/app/models/concerns/bodyclassed.rb b/app/models/concerns/bodyclassed.rb
index 60e700e0c..4a84e8f61 100644
--- a/app/models/concerns/bodyclassed.rb
+++ b/app/models/concerns/bodyclassed.rb
@@ -7,8 +7,8 @@ module Bodyclassed
   # -> "page-classe1 page-classe2 ancestor-home ancestor-bodyclass ancestor-secondclass"
   def best_bodyclass
     classes = []
-    classes += add_prefix_to_classes(bodyclass.split(' '), 'page') unless bodyclass.blank?
-    classes += add_prefix_to_classes(ancestor_classes, 'ancestor') unless ancestor_classes.blank?
+    classes += add_prefix_to_classes(bodyclass.split(' '), 'page') if try(:bodyclass).present?
+    classes += add_prefix_to_classes(ancestor_classes, 'ancestor') if ancestor_classes.present?
     classes.join(' ')
   end
 
@@ -24,6 +24,7 @@ module Bodyclassed
 
   # ["class1", "class2", "class3 class4"] -> ["class1", "class2", "class3", "class4"]
   def ancestor_classes
+    return unless respond_to?(:ancestors)
     @ancestor_classes ||= ancestors.pluck(:bodyclass)
                                    .compact_blank
                                    .join(' ')
diff --git a/app/models/concerns/categorizable.rb b/app/models/concerns/categorizable.rb
index 0e50872f6..624fdbff5 100644
--- a/app/models/concerns/categorizable.rb
+++ b/app/models/concerns/categorizable.rb
@@ -1,7 +1,8 @@
-# Attention, doit être chargé après Bodyclassed pour pouvoir s'appuyer sur best_bodyclass
 module Categorizable
   extend ActiveSupport::Concern
 
+  include Bodyclassed
+
   included do
     attr_accessor :categories_were_changed
 
diff --git a/app/views/admin/application/static/_core.html.erb b/app/views/admin/application/static/_core.html.erb
index 3ac9dfe07..d5d26dea4 100644
--- a/app/views/admin/application/static/_core.html.erb
+++ b/app/views/admin/application/static/_core.html.erb
@@ -25,6 +25,19 @@ subtitle: >-
 <% end %>
 <%
 #############
+# Body classes
+#############
+if about.respond_to?(:about)
+  object = about.about
+  if object.respond_to?(:best_bodyclass) %>
+bodyclass: >-
+  <%= object.best_bodyclass %>
+<% 
+  end
+end
+%>
+<%
+#############
 # Permalinks
 #############
 %>
diff --git a/app/views/admin/communication/websites/pages/static.html.erb b/app/views/admin/communication/websites/pages/static.html.erb
index 3f6ca797f..8a9742938 100644
--- a/app/views/admin/communication/websites/pages/static.html.erb
+++ b/app/views/admin/communication/websites/pages/static.html.erb
@@ -27,8 +27,6 @@ weight: <%= page.position %>
             categories: @website.page_categories,
             key: :pages_categories %>
 <%= render 'admin/application/l10n/static', about: @l10n %>
-bodyclass: >-
-  <%= page.best_bodyclass %>
 <%= render 'admin/application/images/featured/static', about: @l10n %>
 <%= render 'admin/application/images/shared/static', about: @l10n %>
 <% if @l10n.children.published.any? %>
-- 
GitLab