From 7e7ceaec2ad6bda0a3f18b54a3cd18e486d86c5d Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Wed, 31 Dec 2025 18:27:58 +0100 Subject: [PATCH 01/15] wip --- .../admin/university/people_controller.rb | 7 ++++ app/controllers/concerns/admin/has_preview.rb | 3 ++ app/views/admin/layouts/preview.html.erb | 2 +- .../admin/university/people/preview.html.erb | 37 +++++++++++++++++++ .../admin/university/people/show.html.erb | 1 + config/routes/admin/university.rb | 1 + 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 app/views/admin/university/people/preview.html.erb diff --git a/app/controllers/admin/university/people_controller.rb b/app/controllers/admin/university/people_controller.rb index dce9bac1f..d26276866 100644 --- a/app/controllers/admin/university/people_controller.rb +++ b/app/controllers/admin/university/people_controller.rb @@ -40,9 +40,16 @@ def show .includes(:target) .ordered_by_date .page(params[:roles_page]) + @preview = true breadcrumb end + def preview + @website = @person.websites&.first || current_university.websites.first + @body_class = 'persons__page full-width' + render layout: 'admin/layouts/preview' + end + def new @categories = categories breadcrumb diff --git a/app/controllers/concerns/admin/has_preview.rb b/app/controllers/concerns/admin/has_preview.rb index c5df386d1..c1264fd1b 100644 --- a/app/controllers/concerns/admin/has_preview.rb +++ b/app/controllers/concerns/admin/has_preview.rb @@ -6,6 +6,9 @@ module Admin::HasPreview end def preview + @body_class = '' + @full_width = @l10n.about.try(:full_width) + @body_class += 'full-width' if @full_width render template: 'admin/application/preview/preview', layout: 'admin/layouts/preview' end diff --git a/app/views/admin/layouts/preview.html.erb b/app/views/admin/layouts/preview.html.erb index 723c35d0e..c94ba4eef 100644 --- a/app/views/admin/layouts/preview.html.erb +++ b/app/views/admin/layouts/preview.html.erb @@ -26,7 +26,7 @@ <%= javascript_include_tag 'leaflet' %> <% end %> - + <%= yield %> diff --git a/app/views/admin/university/people/preview.html.erb b/app/views/admin/university/people/preview.html.erb new file mode 100644 index 000000000..71b4a53ec --- /dev/null +++ b/app/views/admin/university/people/preview.html.erb @@ -0,0 +1,37 @@ +
+
+
+
+
+
+

<%= @l10n.to_s %>

+ <%= sanitize @l10n.summary %> +
+
+ +
+
+
+
+
+
+
+
+ <%= sanitize @l10n.biography %> +
+
+
+
+ <% # TODO %> +
+
+
+ <%= render 'admin/communication/contents/show', + about: @l10n, + strip_javascript: true %> +
+
+
+<%= render 'admin/application/preview/lightbox' %> \ No newline at end of file diff --git a/app/views/admin/university/people/show.html.erb b/app/views/admin/university/people/show.html.erb index 86c0b9e03..4b636703b 100644 --- a/app/views/admin/university/people/show.html.erb +++ b/app/views/admin/university/people/show.html.erb @@ -5,6 +5,7 @@ <%= destroy_link @person %> <%= static_link static_admin_university_person_path(@person) %> <% end %> + <%= preview_link %> <%= edit_link @person %> <% end %> diff --git a/config/routes/admin/university.rb b/config/routes/admin/university.rb index f86e00a8f..ad9eff767 100644 --- a/config/routes/admin/university.rb +++ b/config/routes/admin/university.rb @@ -27,6 +27,7 @@ end member do get :static + get :preview get 'administrator/static' => 'people/administrators#static', as: 'static_administrator' get 'author/static' => 'people/authors#static', as: 'static_author' get 'experiences' => 'people/experiences#edit' From 58215de7991569cf16e0b41be56a59aa7c1fdd6e Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Wed, 31 Dec 2025 18:47:40 +0100 Subject: [PATCH 02/15] wip contacts details --- .../admin/university/people/preview.html.erb | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/app/views/admin/university/people/preview.html.erb b/app/views/admin/university/people/preview.html.erb index 71b4a53ec..6c9ec171e 100644 --- a/app/views/admin/university/people/preview.html.erb +++ b/app/views/admin/university/people/preview.html.erb @@ -22,9 +22,64 @@ <%= sanitize @l10n.biography %> + + +
- <% # TODO %> +
    + <% + if @l10n.url.present? + detail = ContactDetails::Website.new(@l10n.url) + if detail.present? + %> +
  • + <%= t('contact_details.websites.website.label') %> + +
  • + <% + end + end + %> + <% if @person.email.present? %> + + <% end %> +
From 33234918abd783c28f324b514c2de70a6590a119 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Wed, 31 Dec 2025 18:48:59 +0100 Subject: [PATCH 03/15] todo --- app/views/admin/university/people/preview.html.erb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/admin/university/people/preview.html.erb b/app/views/admin/university/people/preview.html.erb index 6c9ec171e..a496d5e41 100644 --- a/app/views/admin/university/people/preview.html.erb +++ b/app/views/admin/university/people/preview.html.erb @@ -22,12 +22,12 @@ <%= sanitize @l10n.biography %>
- - From 7dfb12c0a85500e4c7e261876b63b7a63c5a0965 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 09:42:37 +0100 Subject: [PATCH 04/15] contact details --- .../admin/university/people/preview.html.erb | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/app/views/admin/university/people/preview.html.erb b/app/views/admin/university/people/preview.html.erb index a496d5e41..756bf4aeb 100644 --- a/app/views/admin/university/people/preview.html.erb +++ b/app/views/admin/university/people/preview.html.erb @@ -75,11 +75,63 @@ %> <% if @person.email.present? %> <% end %> - + <% + ContactDetails::SOCIAL_NETWORKS.each do |attribute| + should_show = is_information_public?(@person, attribute) + if should_show + data = ContactDetails.find_social(attribute, @person, @l10n) + next if data.blank? + kind = "ContactDetails::#{attribute.to_s.camelize}".constantize + detail = kind.new data + if detail.present? + %> +
  • + <%= attribute.to_s.titleize %> + <%= detail.label %> +
  • + <% + end + end + end + %> + <% + ContactDetails::PHONES.each do |attribute| + if @person.respond_to?(attribute) + should_show = is_information_public?(@person, attribute) + if should_show + data = @person.public_send(attribute) + detail = ContactDetails::Phone.new data + if detail.present? + %> +
  • + <%= University::Person.human_attribute_name(attribute) %> + <%= detail.label %> +
  • + <% + end + end + end + end + %> + <% + if @person.respond_to?(:address) + should_show = is_information_public?(@person, :address) + if should_show + label = t('contact_details.postal_address.address.label') + address_formatter = Osuny::AddressFormatter.new(about: @person, l10n: @l10n, language: @l10n.language) + %> +
  • + <%= label %> + <%= address_formatter.to_html.html_safe %> +
  • + <% + end + end + %> From 3e309187b3d7f61e5e0578c6ffd16d43dcb20d2c Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 10:42:10 +0100 Subject: [PATCH 05/15] better --- app/controllers/admin/university/people_controller.rb | 4 +--- app/controllers/concerns/admin/has_preview.rb | 11 +++++++---- app/models/communication/website/agenda/event.rb | 4 ++++ app/models/communication/website/agenda/exhibition.rb | 4 ++++ app/models/communication/website/jobboard/job.rb | 4 ++++ app/models/communication/website/page.rb | 4 ++++ .../website/page/administration_location.rb | 4 ++++ .../website/page/communication_agenda.rb | 4 ++++ .../website/page/communication_agenda_exhibition.rb | 4 ++++ .../website/page/communication_jobboard.rb | 4 ++++ .../website/page/communication_portfolio.rb | 4 ++++ .../communication/website/page/communication_post.rb | 4 ++++ .../communication/website/page/education_diploma.rb | 4 ++++ .../communication/website/page/education_program.rb | 4 ++++ .../communication/website/page/education_school.rb | 4 ++++ app/models/communication/website/page/home.rb | 4 ++++ app/models/communication/website/page/person.rb | 4 ++++ app/models/communication/website/portfolio/project.rb | 4 ++++ app/models/communication/website/post.rb | 4 ++++ app/models/university/person.rb | 4 ++++ 20 files changed, 80 insertions(+), 7 deletions(-) diff --git a/app/controllers/admin/university/people_controller.rb b/app/controllers/admin/university/people_controller.rb index d26276866..4b10551cb 100644 --- a/app/controllers/admin/university/people_controller.rb +++ b/app/controllers/admin/university/people_controller.rb @@ -4,6 +4,7 @@ class Admin::University::PeopleController < Admin::University::ApplicationContro through_association: :people, except: :restore + include Admin::HasPreview include Admin::HasStaticAction include Admin::Localizable @@ -40,16 +41,13 @@ def show .includes(:target) .ordered_by_date .page(params[:roles_page]) - @preview = true breadcrumb end - def preview @website = @person.websites&.first || current_university.websites.first @body_class = 'persons__page full-width' render layout: 'admin/layouts/preview' end - def new @categories = categories breadcrumb diff --git a/app/controllers/concerns/admin/has_preview.rb b/app/controllers/concerns/admin/has_preview.rb index c1264fd1b..1e622977f 100644 --- a/app/controllers/concerns/admin/has_preview.rb +++ b/app/controllers/concerns/admin/has_preview.rb @@ -3,20 +3,23 @@ module Admin::HasPreview included do before_action :set_preview, only: :show + before_action :prepare_preview, only: :preview end def preview - @body_class = '' - @full_width = @l10n.about.try(:full_width) - @body_class += 'full-width' if @full_width render template: 'admin/application/preview/preview', layout: 'admin/layouts/preview' end protected - + def set_preview @preview = true end + + def prepare_preview + @body_class = resource.hugo_body_class + @body_class += ' full-width' if resource.try(:full_width) + end end \ No newline at end of file diff --git a/app/models/communication/website/agenda/event.rb b/app/models/communication/website/agenda/event.rb index acc47560e..ce4869980 100644 --- a/app/models/communication/website/agenda/event.rb +++ b/app/models/communication/website/agenda/event.rb @@ -143,6 +143,10 @@ def sorting_time from_day.in_time_zone.to_time end + def hugo_body_class + 'events__page' + end + protected # Methods for Communication::Website::Agenda::Period::InPeriod diff --git a/app/models/communication/website/agenda/exhibition.rb b/app/models/communication/website/agenda/exhibition.rb index 6a1567c07..9eb69c170 100644 --- a/app/models/communication/website/agenda/exhibition.rb +++ b/app/models/communication/website/agenda/exhibition.rb @@ -108,6 +108,10 @@ def references menus end + def hugo_body_class + 'exhibitions__page' + end + protected def list_blocks_template_kind diff --git a/app/models/communication/website/jobboard/job.rb b/app/models/communication/website/jobboard/job.rb index a454fdc4b..6fb5b6ef3 100644 --- a/app/models/communication/website/jobboard/job.rb +++ b/app/models/communication/website/jobboard/job.rb @@ -79,4 +79,8 @@ def current? from_day <= Date.current && (to_day.nil? || Date.current <= to_day) end + def hugo_body_class + 'jobs__page' + end + end diff --git a/app/models/communication/website/page.rb b/app/models/communication/website/page.rb index 2bbcb54bf..ec18eb4ed 100644 --- a/app/models/communication/website/page.rb +++ b/app/models/communication/website/page.rb @@ -128,6 +128,10 @@ def self.direct_connection_permitted_about_class nil end + def hugo_body_class + 'pages__section' + end + protected def last_ordered_element diff --git a/app/models/communication/website/page/administration_location.rb b/app/models/communication/website/page/administration_location.rb index 61476157d..6a2af257f 100644 --- a/app/models/communication/website/page/administration_location.rb +++ b/app/models/communication/website/page/administration_location.rb @@ -29,4 +29,8 @@ def dependencies def git_path_relative 'locations/_index.html' end + + def hugo_body_class + 'locations__taxonomy' + end end diff --git a/app/models/communication/website/page/communication_agenda.rb b/app/models/communication/website/page/communication_agenda.rb index cf620635f..718d66a85 100644 --- a/app/models/communication/website/page/communication_agenda.rb +++ b/app/models/communication/website/page/communication_agenda.rb @@ -29,4 +29,8 @@ def git_path_relative def special_page_categories website.agenda_categories end + + def hugo_body_class + 'posts__section' + end end diff --git a/app/models/communication/website/page/communication_agenda_exhibition.rb b/app/models/communication/website/page/communication_agenda_exhibition.rb index ddd9cd92a..dab41628a 100644 --- a/app/models/communication/website/page/communication_agenda_exhibition.rb +++ b/app/models/communication/website/page/communication_agenda_exhibition.rb @@ -29,4 +29,8 @@ def git_path_relative def special_page_categories website.agenda_categories end + + def hugo_body_class + 'posts__section' + end end diff --git a/app/models/communication/website/page/communication_jobboard.rb b/app/models/communication/website/page/communication_jobboard.rb index 3d7249322..134e730a0 100644 --- a/app/models/communication/website/page/communication_jobboard.rb +++ b/app/models/communication/website/page/communication_jobboard.rb @@ -29,4 +29,8 @@ def git_path_relative def special_page_categories website.jobboard_categories end + + def hugo_body_class + 'posts__section' + end end diff --git a/app/models/communication/website/page/communication_portfolio.rb b/app/models/communication/website/page/communication_portfolio.rb index 2fea410f6..77beb0f22 100644 --- a/app/models/communication/website/page/communication_portfolio.rb +++ b/app/models/communication/website/page/communication_portfolio.rb @@ -29,4 +29,8 @@ def git_path_relative def special_page_categories website.portfolio_categories end + + def hugo_body_class + 'posts__section' + end end diff --git a/app/models/communication/website/page/communication_post.rb b/app/models/communication/website/page/communication_post.rb index 0d3153848..fd417d754 100644 --- a/app/models/communication/website/page/communication_post.rb +++ b/app/models/communication/website/page/communication_post.rb @@ -30,4 +30,8 @@ def git_path_relative def special_page_categories website.post_categories end + + def hugo_body_class + 'posts__section' + end end diff --git a/app/models/communication/website/page/education_diploma.rb b/app/models/communication/website/page/education_diploma.rb index 52c01e047..9ad0d5217 100644 --- a/app/models/communication/website/page/education_diploma.rb +++ b/app/models/communication/website/page/education_diploma.rb @@ -29,4 +29,8 @@ def dependencies def git_path_relative 'diplomas/_index.html' end + + def hugo_body_class + 'diplomas__taxonomy' + end end diff --git a/app/models/communication/website/page/education_program.rb b/app/models/communication/website/page/education_program.rb index 980c2db8e..5b726159a 100644 --- a/app/models/communication/website/page/education_program.rb +++ b/app/models/communication/website/page/education_program.rb @@ -33,4 +33,8 @@ def git_path_relative def special_page_categories university.education_program_categories end + + def hugo_body_class + 'programs__section' + end end diff --git a/app/models/communication/website/page/education_school.rb b/app/models/communication/website/page/education_school.rb index 11f9de40a..6fd27a30e 100644 --- a/app/models/communication/website/page/education_school.rb +++ b/app/models/communication/website/page/education_school.rb @@ -29,4 +29,8 @@ def dependencies def git_path_relative 'schools/_index.html' end + + def hugo_body_class + 'schools__section' + end end diff --git a/app/models/communication/website/page/home.rb b/app/models/communication/website/page/home.rb index f0a5e50dd..ac42035ca 100644 --- a/app/models/communication/website/page/home.rb +++ b/app/models/communication/website/page/home.rb @@ -15,4 +15,8 @@ def git_path_relative def default_parent nil end + + def hugo_body_class + 'page__home' + end end diff --git a/app/models/communication/website/page/person.rb b/app/models/communication/website/page/person.rb index fca16c9e0..d24df83f0 100644 --- a/app/models/communication/website/page/person.rb +++ b/app/models/communication/website/page/person.rb @@ -37,4 +37,8 @@ def git_path_relative def special_page_categories university.person_categories end + + def hugo_body_class + 'persons__section' + end end diff --git a/app/models/communication/website/portfolio/project.rb b/app/models/communication/website/portfolio/project.rb index 21056124e..299e6382a 100644 --- a/app/models/communication/website/portfolio/project.rb +++ b/app/models/communication/website/portfolio/project.rb @@ -91,6 +91,10 @@ def references menus end + def hugo_body_class + 'projects__page' + end + protected def list_blocks_template_kind diff --git a/app/models/communication/website/post.rb b/app/models/communication/website/post.rb index 8654f1958..c11f20e4f 100644 --- a/app/models/communication/website/post.rb +++ b/app/models/communication/website/post.rb @@ -109,6 +109,10 @@ def published_at_in(language) localization_for(language).try(:published_at) end + def hugo_body_class + 'posts__page' + end + protected def update_authors_status_if_necessary! diff --git a/app/models/university/person.rb b/app/models/university/person.rb index 21651a624..f688de57b 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -174,6 +174,10 @@ def full_street_address [address, "#{zipcode} #{city} #{country}".strip].join(', ') end + def hugo_body_class + 'persons__page' + end + def to_s_with_mail_in(language) best_localization_for(language).to_s_with_mail end From afdd444948bff3411fa41f7b3114f0a4aee320e8 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 10:45:19 +0100 Subject: [PATCH 06/15] fix --- .../website/page/communication_agenda_exhibition.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/communication/website/page/communication_agenda_exhibition.rb b/app/models/communication/website/page/communication_agenda_exhibition.rb index dab41628a..494faadc5 100644 --- a/app/models/communication/website/page/communication_agenda_exhibition.rb +++ b/app/models/communication/website/page/communication_agenda_exhibition.rb @@ -31,6 +31,6 @@ def special_page_categories end def hugo_body_class - 'posts__section' + 'exhibitions__section' end end From 76ffd8d5ecd92db230bebdcec79bc665bb01b495 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 10:46:09 +0100 Subject: [PATCH 07/15] fix --- app/models/communication/website/page/communication_agenda.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/communication/website/page/communication_agenda.rb b/app/models/communication/website/page/communication_agenda.rb index 718d66a85..2fa391da6 100644 --- a/app/models/communication/website/page/communication_agenda.rb +++ b/app/models/communication/website/page/communication_agenda.rb @@ -31,6 +31,6 @@ def special_page_categories end def hugo_body_class - 'posts__section' + 'events__section' end end From ce6aae96b21bd74f8f6bd2357338363f2f8a2cbe Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 10:47:20 +0100 Subject: [PATCH 08/15] fix --- app/models/communication/website/page/communication_jobboard.rb | 2 +- .../communication/website/page/communication_portfolio.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/communication/website/page/communication_jobboard.rb b/app/models/communication/website/page/communication_jobboard.rb index 134e730a0..097bd4d81 100644 --- a/app/models/communication/website/page/communication_jobboard.rb +++ b/app/models/communication/website/page/communication_jobboard.rb @@ -31,6 +31,6 @@ def special_page_categories end def hugo_body_class - 'posts__section' + 'jobs__section' end end diff --git a/app/models/communication/website/page/communication_portfolio.rb b/app/models/communication/website/page/communication_portfolio.rb index 77beb0f22..6cc117ac4 100644 --- a/app/models/communication/website/page/communication_portfolio.rb +++ b/app/models/communication/website/page/communication_portfolio.rb @@ -31,6 +31,6 @@ def special_page_categories end def hugo_body_class - 'posts__section' + 'projects__section' end end From b5042bcbe143604569803dc01e03be0bfe8ee276 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 10:57:54 +0100 Subject: [PATCH 09/15] programs --- app/controllers/admin/education/programs_controller.rb | 1 + app/models/education/program.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app/controllers/admin/education/programs_controller.rb b/app/controllers/admin/education/programs_controller.rb index c06dd64c2..4c197225c 100644 --- a/app/controllers/admin/education/programs_controller.rb +++ b/app/controllers/admin/education/programs_controller.rb @@ -3,6 +3,7 @@ class Admin::Education::ProgramsController < Admin::Education::Programs::Applica before_action :load_teacher_people, only: [:new, :edit, :create, :update] + include Admin::HasPreview include Admin::HasStaticAction include Admin::Localizable diff --git a/app/models/education/program.rb b/app/models/education/program.rb index f5942fbf0..0a59f8e43 100644 --- a/app/models/education/program.rb +++ b/app/models/education/program.rb @@ -144,6 +144,10 @@ def programs Education::Program.where(id: id) end + def hugo_body_class + 'programs__section' + end + protected def check_accessibility From 1692e8d149e6cd365c3e36c117d9b618c86fe54a Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 11:08:46 +0100 Subject: [PATCH 10/15] orgs --- .../university/organizations_controller.rb | 7 ++++++ .../admin/university/people_controller.rb | 2 ++ app/models/university/organization.rb | 4 ++++ .../university/organizations/preview.html.erb | 22 +++++++++++++++++++ .../university/organizations/show.html.erb | 1 + config/routes/admin/university.rb | 1 + 6 files changed, 37 insertions(+) create mode 100644 app/views/admin/university/organizations/preview.html.erb diff --git a/app/controllers/admin/university/organizations_controller.rb b/app/controllers/admin/university/organizations_controller.rb index d8bbbb48c..bdf1062ec 100644 --- a/app/controllers/admin/university/organizations_controller.rb +++ b/app/controllers/admin/university/organizations_controller.rb @@ -4,6 +4,7 @@ class Admin::University::OrganizationsController < Admin::University::Applicatio through_association: :organizations, except: :restore + include Admin::HasPreview include Admin::HasStaticAction include Admin::Localizable @@ -36,6 +37,12 @@ def show breadcrumb end + def preview + @website = @organization.websites&.first || current_university.websites.first + @body_class = 'organizations__page full-width' + render layout: 'admin/layouts/preview' + end + def new @categories = categories breadcrumb diff --git a/app/controllers/admin/university/people_controller.rb b/app/controllers/admin/university/people_controller.rb index 4b10551cb..207993d84 100644 --- a/app/controllers/admin/university/people_controller.rb +++ b/app/controllers/admin/university/people_controller.rb @@ -43,11 +43,13 @@ def show .page(params[:roles_page]) breadcrumb end + def preview @website = @person.websites&.first || current_university.websites.first @body_class = 'persons__page full-width' render layout: 'admin/layouts/preview' end + def new @categories = categories breadcrumb diff --git a/app/models/university/organization.rb b/app/models/university/organization.rb index d466068a8..333b6371b 100644 --- a/app/models/university/organization.rb +++ b/app/models/university/organization.rb @@ -99,6 +99,10 @@ def references mentions_by_blocks end + def hugo_body_class + 'organizations__page' + end + protected def blocks_mentioning_self diff --git a/app/views/admin/university/organizations/preview.html.erb b/app/views/admin/university/organizations/preview.html.erb new file mode 100644 index 000000000..198c4fee0 --- /dev/null +++ b/app/views/admin/university/organizations/preview.html.erb @@ -0,0 +1,22 @@ +
    +
    +
    +
    +
    +
    +

    <%= @l10n.to_s %>

    + <%= sanitize @l10n.summary %> +
    +
    +
    +
    +
    +
    +
    + <%= render 'admin/communication/contents/show', + about: @l10n, + strip_javascript: true %> +
    +
    +
    +<%= render 'admin/application/preview/lightbox' %> \ No newline at end of file diff --git a/app/views/admin/university/organizations/show.html.erb b/app/views/admin/university/organizations/show.html.erb index a2d61bb8d..f27213f0f 100644 --- a/app/views/admin/university/organizations/show.html.erb +++ b/app/views/admin/university/organizations/show.html.erb @@ -4,6 +4,7 @@ <%= button_advanced do %> <%= destroy_link @organization %> <% end %> + <%= preview_link %> <%= edit_link @organization %> <% end %> diff --git a/config/routes/admin/university.rb b/config/routes/admin/university.rb index ad9eff767..5510e689b 100644 --- a/config/routes/admin/university.rb +++ b/config/routes/admin/university.rb @@ -51,6 +51,7 @@ end member do get :static + get :preview post :restore end end From f90ace32cc0b586445b0feb446aa70ddd4458b76 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 12:19:45 +0100 Subject: [PATCH 11/15] preview --- .../admin/education/programs_controller.rb | 5 + .../admin/education/programs/preview.html.erb | 398 +++++++++++------- 2 files changed, 258 insertions(+), 145 deletions(-) diff --git a/app/controllers/admin/education/programs_controller.rb b/app/controllers/admin/education/programs_controller.rb index 4c197225c..7d848e1bd 100644 --- a/app/controllers/admin/education/programs_controller.rb +++ b/app/controllers/admin/education/programs_controller.rb @@ -91,6 +91,11 @@ def restore protected + def prepare_preview + super + @body_class += ' offcanvas-toc' + end + def load_part part_from_params = params.dig('education_program', 'part') @part = part_from_params if ['admission', 'certification', 'pedagogy', 'presentation', 'results'].include?(part_from_params) diff --git a/app/views/admin/education/programs/preview.html.erb b/app/views/admin/education/programs/preview.html.erb index a921f0732..9ed2934ef 100644 --- a/app/views/admin/education/programs/preview.html.erb +++ b/app/views/admin/education/programs/preview.html.erb @@ -1,161 +1,269 @@ -<% -@title = @l10n.name -@image = @l10n.best_featured_image -%> -
    -
    - <%= sanitize @l10n.presentation %> -
    -
    -
    -
    -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('presentation') %>

    -
    -
    -
    - <%= sanitize @l10n.objectives %> -
    -
    -

    Informations administratives

    -
    - - - - <% if @program.diploma %> - - - - - <% end %> - - - - - - - - - - - - - -
    Informations administratives
    Crédits ECTS<%= @program.diploma.ects %>
    <%= Education::Program::Localization.human_attribute_name('initial') %><%= t @program.initial %>
    <%= Education::Program::Localization.human_attribute_name('continuing') %><%= t @program.continuing %>
    <%= Education::Program::Localization.human_attribute_name('apprenticeship') %><%= t @program.apprenticeship %>
    -
    +
    +
    +
    +
    +
    +
    +

    <%= @l10n.name %>

    + <%= sanitize @l10n.summary %> +
    +
    -
    -
    - -
    - <%= render 'admin/communication/contents/show', about: @l10n, strip_javascript: true %> -
    - -
    -
    -
    -
    -

    Pédagogie

    +
    +
    +
    + <% if @program.diploma %> +
    <%= Education::Program.human_attribute_name(:diploma) %>
    +
    <%= @program.diploma.to_s_in(current_language) %>
    +
    <%= Education::Diploma.human_attribute_name(:level) %>
    +
    <%= @program.diploma.level_i18n %>
    + <% end %> + <% if @l10n.duration %> +
    <%= Education::Program::Localization.human_attribute_name(:duration) %>
    +
    <%= @l10n.duration %>
    + <% end %> + <% if @program.locations.any? %> +
    <%= Education::Program.human_attribute_name('locations') %>
    +
    + <% @program.locations.ordered(current_language).each do |location| %> + <%= location.to_s_in(current_language) %> + <% end %> +
    + <% end %> +
    -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('content') %>

    - <%= sanitize @l10n.content %> -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('pedagogy') %>

    - <%= sanitize @l10n.pedagogy %> -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('evaluation') %>

    - <%= sanitize @l10n.evaluation %> -
    -
    -

    Enseignants·es

    -
    - - - - <% @program.university_person_involvements.each do |involvement| %> - <% involvement_l10n = involvement.best_localization_for(@l10n.language) %> + + +
    +
    +
    +
    +
    +

    Présentation

    +
    + <% if @l10n.featured_image.attached? %> + + <% end %> + <% if @l10n.presentation %> +
    +

    <%= Education::Program::Localization.human_attribute_name(:presentation) %>

    + <%= sanitize @l10n.presentation %> +
    + <% end %> + <% if @l10n.best_objectives %> +
    +

    <%= Education::Program::Localization.human_attribute_name(:objectives) %>

    + <%= sanitize @l10n.best_objectives %> +
    + <% end %> +
    + <% if @l10n.blocks.published.any? %> +
    + <%= render 'admin/communication/contents/show', about: @l10n, strip_javascript: true %> +
    + <% end %> +
    +
    +

    Informations administratives

    +
    Enseignants·es
    + + + <% if @program.diploma %> + + + + + <% end %> - - + + - <% end %> - -
    Informations administratives
    <%= Education::Diploma.human_attribute_name('ects') %><%= @program.diploma.ects %>
    <%= involvement.to_s_in(@l10n.language) %><%= involvement_l10n.description %><%= Education::Program.human_attribute_name('initial') %><%= t @program.initial %>
    + + <%= Education::Program.human_attribute_name('continuing') %> + <%= t @program.continuing %> + + + <%= Education::Program.human_attribute_name('apprenticeship') %> + <%= t @program.apprenticeship %> + + + <%= Education::Program.human_attribute_name('capacity') %> + <%= @program.capacity %> + + + +
    - - - + -
    -
    -
    -
    -

    Après la formation

    +
    +
    +
    +

    Pédagogie

    +
    + <% if @l10n.best_content %> +
    +

    <%= Education::Program::Localization.human_attribute_name('content') %>

    + <%= sanitize @l10n.best_content %> +
    + <% end %> + <% if @l10n.best_pedagogy %> +
    +

    <%= Education::Program::Localization.human_attribute_name('pedagogy') %>

    + <%= sanitize @l10n.best_pedagogy %> +
    + <% end %> + <% if @l10n.best_evaluation %> +
    +

    <%= Education::Program::Localization.human_attribute_name('evaluation') %>

    + <%= sanitize @l10n.best_evaluation %> +
    + <% end %> + <% if @program.university_person_involvements.any? %> +
    +

    Enseignants·es

    +
      + <% @program.university_person_involvements.each do |involvement| %> + <% involvement_l10n = involvement.best_localization_for(@l10n.language) %> +
    • + <%= involvement.to_s_in(@l10n.language) %> +

      <%= involvement_l10n.description %>

      +
    • + <% end %> +
    +
    + <% end %> +
    +
    -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('opportunities') %>

    - <%= sanitize @l10n.opportunities %> -

    <%= Education::Program::Localization.human_attribute_name('results') %>

    - <%= sanitize @l10n.results %> -
    -
    -
    +
    -
    -
    -
    -
    -

    Admission

    -
    -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('prerequisites') %>

    - <%= sanitize @l10n.prerequisites %> -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('pricing') %>

    - <%= sanitize @l10n.pricing %> -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('registration') %>

    - <%= sanitize @l10n.registration %> -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('accessibility') %>

    - <%= sanitize @l10n.accessibility %> -
    -
    -

    <%= Education::Program::Localization.human_attribute_name('other') %>

    - <%= sanitize @l10n.other %> -
    -
    -

    Rôles

    - <% @program.university_roles.each do |role| %> - <% role_l10n = role.best_localization_for(@l10n.language) %> -

    - <%= role_l10n.description %>
    - <% role.people.each do |person| %> - <%= person.to_s_in(@l10n.language) %>
    - <%= person.email %>
    - <% end %> -

    - <% end %> +
    +
    +
    +

    Après la formation

    +
    + <% if @l10n.best_opportunities %> +
    +

    <%= Education::Program::Localization.human_attribute_name('opportunities') %>

    + <%= sanitize @l10n.best_opportunities %> +
    + <% end %> + <% if @l10n.best_results %> +
    +

    <%= Education::Program::Localization.human_attribute_name('results') %>

    + <%= sanitize @l10n.best_results %> +
    + <% end %> +
    -
    -

    <%= Education::Program::Localization.human_attribute_name('contacts') %>

    - <%= sanitize @l10n.contacts %> +
    +
    + +
    +
    +
    +

    Admission

    +
    + <% if @l10n.best_prerequisites %> +
    +

    <%= Education::Program::Localization.human_attribute_name('prerequisites') %>

    + <%= sanitize @l10n.best_prerequisites %> +
    + <% end %> + <% if @l10n.best_pricing %> +
    +

    <%= Education::Program::Localization.human_attribute_name('pricing') %>

    + <%= sanitize @l10n.best_pricing %> +
    + <% end %> + <% if @l10n.pricing_initial %> +
    +

    <%= Education::Program::Localization.human_attribute_name('pricing_initial') %>

    + <%= sanitize @l10n.pricing_initial %> +
    + <% end %> + <% if @l10n.pricing_continuing %> +
    +

    <%= Education::Program::Localization.human_attribute_name('pricing_continuing') %>

    + <%= sanitize @l10n.pricing_continuing %> +
    + <% end %> + <% if @l10n.pricing_apprenticeship %> +
    +

    <%= Education::Program::Localization.human_attribute_name('pricing_apprenticeship') %>

    + <%= sanitize @l10n.pricing_apprenticeship %> +
    + <% end %> + <% if @l10n.best_registration %> +
    +

    <%= Education::Program::Localization.human_attribute_name('registration') %>

    + <%= sanitize @l10n.best_registration %> +
    + <% end %> + <% if @l10n.best_accessibility %> +
    +

    <%= Education::Program::Localization.human_attribute_name('accessibility') %>

    + <%= sanitize @l10n.best_accessibility %> +
    + <% end %> + <% if @l10n.best_other %> +
    +

    <%= Education::Program::Localization.human_attribute_name('other') %>

    + <%= sanitize @l10n.best_other %> +
    + <% end %> + <% if @program.university_roles.any? %> +
    +

    Rôles

    + <% @program.university_roles.each do |role| %> + <% role_l10n = role.best_localization_for(@l10n.language) %> +

    + <%= role_l10n.description %>
    + <% role.people.each do |person| %> + <%= person.to_s_in(@l10n.language) %>
    + <%= person.email %>
    + <% end %> +

    + <% end %> +
    + <% end %> +
    +

    <%= Education::Program::Localization.human_attribute_name('contacts') %>

    + <%= sanitize @l10n.contacts %> +
    +
    -
    +
    + + <% if @program.qualiopi_certified %> +
    +
    +
    +

    Certification

    +
    +
    + Qualiopi, processus certifié, République Française + <%= sanitize @l10n.qualiopi_text %> +
    +
    +
    +
    +
    + <% end %> - + \ No newline at end of file From ffbbdf4f2599d17d773af047020719d48303a2b5 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 12:22:30 +0100 Subject: [PATCH 12/15] fix --- app/controllers/admin/education/programs_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/education/programs_controller.rb b/app/controllers/admin/education/programs_controller.rb index 7d848e1bd..746e152f3 100644 --- a/app/controllers/admin/education/programs_controller.rb +++ b/app/controllers/admin/education/programs_controller.rb @@ -37,7 +37,7 @@ def show end def preview - @website = @program.websites&.first + @website = @person.websites&.first || current_university.websites.first render layout: 'admin/layouts/preview' end From e2e5bcc2e7f10520a14abb3d1c5178e7bec287c0 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 12:25:28 +0100 Subject: [PATCH 13/15] simpler --- app/controllers/admin/education/programs_controller.rb | 1 - app/controllers/admin/university/organizations_controller.rb | 1 - app/controllers/admin/university/people_controller.rb | 1 - app/controllers/concerns/admin/has_preview.rb | 1 + 4 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/controllers/admin/education/programs_controller.rb b/app/controllers/admin/education/programs_controller.rb index 746e152f3..0308e4687 100644 --- a/app/controllers/admin/education/programs_controller.rb +++ b/app/controllers/admin/education/programs_controller.rb @@ -37,7 +37,6 @@ def show end def preview - @website = @person.websites&.first || current_university.websites.first render layout: 'admin/layouts/preview' end diff --git a/app/controllers/admin/university/organizations_controller.rb b/app/controllers/admin/university/organizations_controller.rb index bdf1062ec..49cb6ef74 100644 --- a/app/controllers/admin/university/organizations_controller.rb +++ b/app/controllers/admin/university/organizations_controller.rb @@ -38,7 +38,6 @@ def show end def preview - @website = @organization.websites&.first || current_university.websites.first @body_class = 'organizations__page full-width' render layout: 'admin/layouts/preview' end diff --git a/app/controllers/admin/university/people_controller.rb b/app/controllers/admin/university/people_controller.rb index 207993d84..82d8748a1 100644 --- a/app/controllers/admin/university/people_controller.rb +++ b/app/controllers/admin/university/people_controller.rb @@ -45,7 +45,6 @@ def show end def preview - @website = @person.websites&.first || current_university.websites.first @body_class = 'persons__page full-width' render layout: 'admin/layouts/preview' end diff --git a/app/controllers/concerns/admin/has_preview.rb b/app/controllers/concerns/admin/has_preview.rb index 1e622977f..9a885f3d3 100644 --- a/app/controllers/concerns/admin/has_preview.rb +++ b/app/controllers/concerns/admin/has_preview.rb @@ -18,6 +18,7 @@ def set_preview end def prepare_preview + @website ||= resource.websites&.first || current_university.websites.first @body_class = resource.hugo_body_class @body_class += ' full-width' if resource.try(:full_width) end From c9976c26b15ee1ba7f994ce3b52980d444e313ee Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 12:28:10 +0100 Subject: [PATCH 14/15] coherence --- .../admin/university/organizations_controller.rb | 6 +++++- app/controllers/admin/university/people_controller.rb | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/university/organizations_controller.rb b/app/controllers/admin/university/organizations_controller.rb index 49cb6ef74..a471c8773 100644 --- a/app/controllers/admin/university/organizations_controller.rb +++ b/app/controllers/admin/university/organizations_controller.rb @@ -38,7 +38,6 @@ def show end def preview - @body_class = 'organizations__page full-width' render layout: 'admin/layouts/preview' end @@ -93,6 +92,11 @@ def restore protected + def prepare_preview + super + @body_class += ' full-width' + end + def breadcrumb super add_breadcrumb University::Organization.model_name.human(count: 2), diff --git a/app/controllers/admin/university/people_controller.rb b/app/controllers/admin/university/people_controller.rb index 82d8748a1..a03c5fb6a 100644 --- a/app/controllers/admin/university/people_controller.rb +++ b/app/controllers/admin/university/people_controller.rb @@ -45,7 +45,6 @@ def show end def preview - @body_class = 'persons__page full-width' render layout: 'admin/layouts/preview' end @@ -101,6 +100,11 @@ def restore protected + def prepare_preview + super + @body_class += ' full-width' + end + def breadcrumb super add_breadcrumb University::Person.model_name.human(count: 2), From 76a5a555a25e6ff6a6e08e231aca81d9321f152b Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Fri, 2 Jan 2026 16:05:25 +0100 Subject: [PATCH 15/15] event --- .../websites/agenda/events_controller.rb | 4 + .../preview/_featured_image.html.erb | 15 ++ .../admin/application/preview/_hero.html.erb | 9 +- .../application/preview/preview.html.erb | 4 +- .../websites/agenda/events/preview.html.erb | 242 ++++++++++++++++++ .../admin/education/programs/preview.html.erb | 13 +- 6 files changed, 266 insertions(+), 21 deletions(-) create mode 100644 app/views/admin/application/preview/_featured_image.html.erb create mode 100644 app/views/admin/communication/websites/agenda/events/preview.html.erb diff --git a/app/controllers/admin/communication/websites/agenda/events_controller.rb b/app/controllers/admin/communication/websites/agenda/events_controller.rb index 17ad3b8d5..67097b1b1 100644 --- a/app/controllers/admin/communication/websites/agenda/events_controller.rb +++ b/app/controllers/admin/communication/websites/agenda/events_controller.rb @@ -30,6 +30,10 @@ def show breadcrumb end + def preview + render layout: 'admin/layouts/preview' + end + def new @event.parent = @website.events.find(params[:parent_id]) if params.has_key?(:parent_id) @categories = categories diff --git a/app/views/admin/application/preview/_featured_image.html.erb b/app/views/admin/application/preview/_featured_image.html.erb new file mode 100644 index 000000000..64288f964 --- /dev/null +++ b/app/views/admin/application/preview/_featured_image.html.erb @@ -0,0 +1,15 @@ +<% +if l10n.featured_image.present? && l10n.featured_image.attached? + format = ActiveStorage::Utils.format(l10n.featured_image) +%> + +<% end %> \ No newline at end of file diff --git a/app/views/admin/application/preview/_hero.html.erb b/app/views/admin/application/preview/_hero.html.erb index 23f3fecc9..519e0f990 100644 --- a/app/views/admin/application/preview/_hero.html.erb +++ b/app/views/admin/application/preview/_hero.html.erb @@ -2,11 +2,10 @@ @title = @l10n.title @subtitle = @l10n.try(:subtitle) @summary = @l10n.summary -@image = @l10n.featured_image hero_classes = "hero" -if @image.present? && @image.attached? - format = ActiveStorage::Utils.format(@image) +if @l10n.featured_image.present? && @l10n.featured_image.attached? + format = ActiveStorage::Utils.format(@l10n.featured_image) hero_classes += " hero--with-image hero--image-#{format}" if format.present? end %> @@ -30,9 +29,7 @@ end

    <%= @title %>

    <% end %> -
    - <%= kamifusen_tag @image if @image.present? && @image.attached? %> -
    + <%= render 'admin/application/preview/featured_image', l10n: @l10n %> diff --git a/app/views/admin/application/preview/preview.html.erb b/app/views/admin/application/preview/preview.html.erb index 882ec3804..2c1ca96e6 100644 --- a/app/views/admin/application/preview/preview.html.erb +++ b/app/views/admin/application/preview/preview.html.erb @@ -2,9 +2,7 @@ <%= render 'admin/application/preview/hero' %>
    - <%= render 'admin/communication/contents/show', - about: @l10n, - strip_javascript: true %> + <%= render 'admin/communication/contents/show', about: @l10n, strip_javascript: true %>
    diff --git a/app/views/admin/communication/websites/agenda/events/preview.html.erb b/app/views/admin/communication/websites/agenda/events/preview.html.erb new file mode 100644 index 000000000..f82b4988b --- /dev/null +++ b/app/views/admin/communication/websites/agenda/events/preview.html.erb @@ -0,0 +1,242 @@ +<% +hero_classes = "hero" +if @l10n.featured_image.present? && @l10n.featured_image.attached? + format = ActiveStorage::Utils.format(@l10n.featured_image) + hero_classes += " hero--with-image hero--image-#{format}" if format.present? +end +%> +
    +
    +
    +
    +
    + <% if @l10n.subtitle.present? %> + class="has-lead"<% end %>> +

    + <%= @l10n.title %> + <% if @l10n.subtitle.present? %> + <%= @l10n.subtitle %> + <% end %> +

    + + <% else %> +

    <%= @l10n.title %>

    + <% end %> + <% if @event.categories.any? %> + + <% end %> +
    + <%= render 'admin/application/preview/featured_image', l10n: @l10n %> +
    +
    +
    +
    +
    + <% if @l10n.text.present? || @l10n.notes.present? %> +
    +

    Informations pratiques

    +
    + <%= sanitize @l10n.text %> +
    + <%= sanitize @l10n.notes %> +
    +
    + <% if @l10n.header_cta %> + + <%= @l10n.header_cta_label %> + + <% end %> +
    + <% end %> +
    +

    Dates

    +
    + + <%= date_range_i18n @event.from_day, + @event.to_day, + format: :long, + layout: :one_line, + locale: @l10n.language.iso_code %> + + + <% if @event.kind_recurring? %> + Événement régulier + <% end %> + <% unless @event.archive? %> + + <% end %> +
    + <% if @event.time_slots.any? %> +
      + <% + @event.time_slots.ordered.each do |time_slot| + time_slot_l10n = time_slot.localization_for(@l10n.language) + %> +
    • + <%= l time_slot_l10n.from_day, format: :long %> +

      + + <% if time_slot_l10n.to_hour %> + + <% end %> +

      + <% if time_slot_l10n.place %> + <%= time_slot_l10n.place %> + <% end %> +
    • + <% end %> +
    + <% end%> +
    +
    +
    + + <% if @l10n.summary.present? %> +
    +
    +
    +
    + <%= sanitize @l10n.summary %> +
    +
    +
    +
    + <% end %> +
    + <%= render 'admin/communication/contents/show', about: @l10n, strip_javascript: true %> +
    +
    + <% if @event.kind_parent? %> +
    +
    +
      + <% + @event.days.ordered.each do |day| + events = day.events.ordered + next if events.none? + %> +
    • +

      + <%= l day.date, format: :long %> +

      +
        + <% + events.each do |event| + event_l10n = event.localization_for(@l10n.language) + %> +
      1. +
        +
        + <% if event_l10n.subtitle.present? %> +
        +

        + +

        +

        <%= event_l10n.subtitle %>

        +
        + <% else %> +

        + +

        + <% end %> + <% + if event.time_slots.one? + time_slot = event.time_slots.first + time_slot_l10n = time_slot.localization_for(@l10n.language) + %> +

        + + + <% if time_slot_l10n.to_hour %> + + <% end %> + +

        + <% end %> + <% if event_l10n.summary.present? %> +
        + <%= sanitize event_l10n.summary %> +
        + <% end %> + <% if event.categories.any? %> + + <% end %> +
        +
        + <%= kamifusen_tag event_l10n.featured_image, width: 1280 %> +
        +
        +
      2. + <% end %> +
      +
    • + <% end %> +
    +
    +
    + <% end %> + <% + if @event.kind_child? + parent = @event.parent + parent_l10n = parent.localization_for(@l10n.language) + %> +
    +

    Cet événement fait partie de

    +
    +
    +
    +

    <%= parent_l10n.title %>

    +

    <%= parent_l10n.subtitle %>

    +
    +
    <%= sanitize parent_l10n.summary %>
    + +
    + <% if parent_l10n.featured_image.attached? %> +
    + <%= kamifusen_tag parent_l10n.featured_image %> +
    + <% end %> +
    +
    + <% end %> +
    +
    +<%= render 'admin/application/preview/lightbox' %> \ No newline at end of file diff --git a/app/views/admin/education/programs/preview.html.erb b/app/views/admin/education/programs/preview.html.erb index 9ed2934ef..c49f242a0 100644 --- a/app/views/admin/education/programs/preview.html.erb +++ b/app/views/admin/education/programs/preview.html.erb @@ -43,18 +43,7 @@

    Présentation

    - <% if @l10n.featured_image.attached? %> - - <% end %> + <%= render 'admin/application/preview/featured_image', l10n: @l10n %> <% if @l10n.presentation %>

    <%= Education::Program::Localization.human_attribute_name(:presentation) %>