From 879de35668adbb0d899e125b258e0c37f3efd566 Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Thu, 30 Jun 2022 17:32:26 +0200
Subject: [PATCH] working preview

---
 .../javascripts/admin/communication/init.js   |  1 +
 .../admin/communication/preview.js            | 17 ++++++++++
 app/assets/stylesheets/admin/preview.sass     | 22 ++++++++----
 app/helpers/admin/application_helper.rb       |  6 +++-
 app/views/admin/application/_preview.html.erb | 34 ++++++++++++++-----
 .../websites/pages/show.html.erb              |  7 ----
 config/locales/en.yml                         |  5 ++-
 config/locales/fr.yml                         |  5 ++-
 8 files changed, 73 insertions(+), 24 deletions(-)
 create mode 100644 app/assets/javascripts/admin/communication/preview.js

diff --git a/app/assets/javascripts/admin/communication/init.js b/app/assets/javascripts/admin/communication/init.js
index 19ec2dabb..ab94a3b30 100644
--- a/app/assets/javascripts/admin/communication/init.js
+++ b/app/assets/javascripts/admin/communication/init.js
@@ -1,4 +1,5 @@
 //= require_self
 //= require ./menu_items
+//= require ./preview
 
 window.osuny.communication = {};
diff --git a/app/assets/javascripts/admin/communication/preview.js b/app/assets/javascripts/admin/communication/preview.js
new file mode 100644
index 000000000..8ae8491eb
--- /dev/null
+++ b/app/assets/javascripts/admin/communication/preview.js
@@ -0,0 +1,17 @@
+$(function() {
+    $('.preview__button__mobile').on('click', function(){
+      $('.preview__button').removeClass('btn-primary').addClass('btn-light');
+      $('.preview__button__mobile').removeClass('btn-light').addClass('btn-primary');
+      $('#preview').removeClass('preview--desktop').removeClass('preview--tablet').addClass('preview--mobile');
+    });
+    $('.preview__button__tablet').on('click', function(){
+      $('.preview__button').removeClass('btn-primary').addClass('btn-light');
+      $('.preview__button__tablet').removeClass('btn-light').addClass('btn-primary');
+      $('#preview').removeClass('preview--mobile').removeClass('preview--desktop').addClass('preview--tablet');
+    });
+    $('.preview__button__desktop').on('click', function(){
+      $('.preview__button').removeClass('btn-primary').addClass('btn-light');
+      $('.preview__button__desktop').removeClass('btn-light').addClass('btn-primary');
+      $('#preview').removeClass('preview--mobile').removeClass('preview--tablet').addClass('preview--desktop');
+    });
+  });
\ No newline at end of file
diff --git a/app/assets/stylesheets/admin/preview.sass b/app/assets/stylesheets/admin/preview.sass
index 49596e586..7db0e22bd 100644
--- a/app/assets/stylesheets/admin/preview.sass
+++ b/app/assets/stylesheets/admin/preview.sass
@@ -1,7 +1,17 @@
 .preview
-    img
-        height: auto
-        max-width: 100%
-    iframe
-        height: 220px
-        max-width: 100%
+    .modal-body
+        background: black
+        text-align: center
+        overflow: hidden
+        iframe
+            height: 100%
+            transition: width 0.5s ease
+    &--mobile
+        iframe
+            width: 415px
+    &--tablet
+        iframe
+            width: 768px
+    &--desktop
+        iframe
+            width: 100%
diff --git a/app/helpers/admin/application_helper.rb b/app/helpers/admin/application_helper.rb
index 9d9510fe2..172a0b59c 100644
--- a/app/helpers/admin/application_helper.rb
+++ b/app/helpers/admin/application_helper.rb
@@ -38,7 +38,11 @@ module Admin::ApplicationHelper
   end
 
   def preview_link
-    raw "<button class=\"btn btn-primary\" type=\"button\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#preview\" aria-controls=\"preview\">#{ t 'preview.button'}</button>"
+    raw "<button  class=\"btn btn-primary\"
+                  type=\"button\"
+                  data-bs-toggle=\"modal\"
+                  data-bs-target=\"#preview\"
+                  aria-controls=\"preview\">#{ t 'preview.button'}</button>"
   end
 
   def button_classes(additional = '', **options)
diff --git a/app/views/admin/application/_preview.html.erb b/app/views/admin/application/_preview.html.erb
index 922eb15bf..2df997249 100644
--- a/app/views/admin/application/_preview.html.erb
+++ b/app/views/admin/application/_preview.html.erb
@@ -1,9 +1,27 @@
-<div class="offcanvas offcanvas-start preview" tabindex="-1" id="preview" aria-labelledby="offcanvasRightLabel" aria-modal="true" role="dialog">
-  <div class="offcanvas-header border-bottom">
-    <h5 id="offcanvasRightLabel" class="pt-2"><%= t 'preview.title' %></h5>
-    <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+<div id="preview" class="preview modal fade preview--mobile">
+  <div class="modal-dialog modal-fullscreen">
+    <div class="modal-content">
+      <div class="modal-header">
+        <h5 class="modal-title h4"><%= t 'preview.title' %></h5>
+        <div class="btn-group m-auto" role="group" aria-label="Basic example">
+          <button type="button" class="btn btn-primary preview__button preview__button__mobile">
+            <i class="fas fa-mobile"></i>
+            <%= t 'preview.mobile' %>
+          </button>
+          <button type="button" class="btn btn-light preview__button preview__button__tablet">
+            <i class="fas fa-tablet"></i>
+            <%= t 'preview.tablet' %>
+          </button>
+          <button type="button" class="btn btn-light preview__button preview__button__desktop">
+            <i class="fas fa-desktop"></i>
+            <%= t 'preview.desktop' %>
+          </button>
+        </div>
+        <button type="button" class="btn-close ms-0" data-bs-dismiss="modal" aria-label="Close"></button>
+      </div>
+      <div class="modal-body p-2">
+        <iframe src="<%= request.path %>/preview" loading="lazy"></iframe>
+      </div>
+    </div>
   </div>
-  <div class="offcanvas-body">
-    <%= yield :preview %>
-  </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/views/admin/communication/websites/pages/show.html.erb b/app/views/admin/communication/websites/pages/show.html.erb
index fb7289a8a..8033ce53a 100644
--- a/app/views/admin/communication/websites/pages/show.html.erb
+++ b/app/views/admin/communication/websites/pages/show.html.erb
@@ -107,13 +107,6 @@
   </div>
 <% end %>
 
-<% content_for :preview do %>
-  <%= @page.text.to_s %>
-  <% @page.blocks.ordered.each do |block| %>
-    <%= render 'admin/communication/blocks/preview', block: block %>
-  <% end %>
-<% end %>
-
 <% content_for :action_bar_left do %>
   <%= destroy_link @page if @page.is_regular_page? %>
   <%= link_to t('static'),
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 0f1eab65c..2c57fa25b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -226,7 +226,10 @@ en:
   please_confirm_with_children: "WARNING: deleting this element will also remove every child. Are you sure?"
   preview:
     button: Preview
-    title: Mobile preview
+    title: Preview
+    mobile: Mobile
+    tablet: Tablet
+    desktop: Desktop
   privacy_policy: Privacy policy
   privacy_policy_url: https://osuny.org/politique-de-confidentialite
   quit: Quit
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 7c42c1d15..2482496e1 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -229,7 +229,10 @@ fr:
   please_confirm_with_children: "ATTENTION : effacer cet élément supprimera aussi tous ses enfants. Est-ce que vous confirmez ?"
   preview:
     button: Prévisualiser
-    title: Prévisualisation mobile
+    title: Prévisualisation
+    mobile: Mobile
+    tablet: Tablette
+    desktop: Ordinateur de bureau
   privacy_policy: Politique de confidentialité
   privacy_policy_url: https://osuny.org/politique-de-confidentialite
   quit: Quitter
-- 
GitLab