diff --git a/app/assets/images/communication/blocks/templates/gallery.jpg b/app/assets/images/communication/blocks/templates/gallery.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35fc171d2ff8a59043b087fc82ba86de70de1110 Binary files /dev/null and b/app/assets/images/communication/blocks/templates/gallery.jpg differ diff --git a/app/controllers/admin/communication/blocks_controller.rb b/app/controllers/admin/communication/blocks_controller.rb index 3b6bd66e7fe16d3e0185d0010ec1e4c4308ff51f..0b3569d0dac4e90c3fded0f11d1be0c640ab9846 100644 --- a/app/controllers/admin/communication/blocks_controller.rb +++ b/app/controllers/admin/communication/blocks_controller.rb @@ -21,6 +21,7 @@ class Admin::Communication::BlocksController < Admin::Communication::Application def edit breadcrumb + add_breadcrumb t('edit') end def create @@ -37,6 +38,7 @@ class Admin::Communication::BlocksController < Admin::Communication::Application @block.about.save_and_sync redirect_to about_path, notice: t('admin.successfully_updated_html', model: @block.to_s) else + add_breadcrumb t('edit') render :edit, status: :unprocessable_entity end end @@ -63,11 +65,10 @@ class Admin::Communication::BlocksController < Admin::Communication::Application def breadcrumb short_breadcrumb add_breadcrumb @block.about, about_path - # Le block if @block.new_record? add_breadcrumb t('communication.block.choose_template') else - add_breadcrumb @block + add_breadcrumb @block, [:admin, @block] end end diff --git a/app/models/communication/block.rb b/app/models/communication/block.rb index d5f3de0e051fbd7f7c46e42512771f8ef65ee357..47222ead15c5e5e93062dc0e59b3cac939ad2e31 100644 --- a/app/models/communication/block.rb +++ b/app/models/communication/block.rb @@ -29,7 +29,8 @@ class Communication::Block < ApplicationRecord enum template: { organization_chart: 100, - partners: 200 + partners: 200, + gallery: 300 } def data=(value) diff --git a/app/models/communication/block/gallery.rb b/app/models/communication/block/gallery.rb new file mode 100644 index 0000000000000000000000000000000000000000..69cae74f7a0c71548889e4b64cedc1c11bd32ec0 --- /dev/null +++ b/app/models/communication/block/gallery.rb @@ -0,0 +1,13 @@ +class Communication::Block::Gallery < Communication::Block::Template + def git_dependencies + dependencies = [] + data['elements'].each do |image| + id = image.dig('file', 'id') + next if id.blank? + blob = university.active_storage_blobs.find id + next if blob.nil? + dependencies += [blob] + end + dependencies.uniq + end +end diff --git a/app/views/admin/communication/blocks/edit.html.erb b/app/views/admin/communication/blocks/edit.html.erb index 56e47eaa93da35e33bc23f0dae26a5449a899d86..1f8af34ec3850f7eaf8371308ffc213d49a15277 100644 --- a/app/views/admin/communication/blocks/edit.html.erb +++ b/app/views/admin/communication/blocks/edit.html.erb @@ -3,7 +3,7 @@ @block.data = {} if @block.data.nil? || @block.data.blank? @block.data['elements'] ||= [] %> -<div id="app"> +<div id="app" v-cloak> <%= simple_form_for [:admin, @block] do |f| %> <%= render "admin/communication/blocks/templates/#{@block.template}/edit", f: f %> <textarea name="communication_block[data]" rows="20" cols="200" class="d-none"> diff --git a/app/views/admin/communication/blocks/templates/gallery/_edit.html.erb b/app/views/admin/communication/blocks/templates/gallery/_edit.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..6f63b728ec45a9450b852b8768456f5f1f808e3e --- /dev/null +++ b/app/views/admin/communication/blocks/templates/gallery/_edit.html.erb @@ -0,0 +1,57 @@ + +<div class="mb-3"> + <label aria-label="Title" + for="title"> + Title + </label> + <input class="form-control form-control-lg" + type="text" + v-model="data.title" + placeholder="Type gallery title here" + id="title"> +</div> + +<a class="<%= button_classes('mb-4') %>" + v-on:click="data.elements.push({alt: '', file: {}})"> + Add image +</a> + +<draggable :list="data.elements" handle=".imageHandle" class="row"> + <div v-for="(image, imageIndex) in data.elements" class="col-xxl-2 col-xl-3 col-6"> + <div class="card"> + <div class="card-header border-bottom"> + <a class="btn ps-0 imageHandle"> + <i class="fa fa-bars handle"></i> + </a> + <div class="float-end"> + <a class="btn btn-sm btn-danger" + v-on:click="data.elements.splice(data.elements.indexOf(image), 1)"> + <i class="fas fa-times"></i> + </a> + </div> + </div> + <img :src="getImageUrl(image.file)" class="img-fluid d-block" v-if="image.file.id" /> + <div class="card-body"> + <label class="form-label" + :for="'image-file-' + imageIndex"> + Image + </label> + <input class="form-control mb-2" + type="file" + accept="image/*" + @change="onFileImageChange( $event, image, 'file' )" + :id="'image-file-' + imageIndex"> + <div class="mb-3"> + <label aria-label="Title" + :for="'image-alt-' + imageIndex"> + Alt + </label> + <input class="form-control form-control-lg" + type="text" + v-model="image.alt" + :id="'image-alt-' + imageIndex"> + </div> + </div> + </div> + </div> +</draggable> diff --git a/app/views/admin/communication/blocks/templates/gallery/_show.html.erb b/app/views/admin/communication/blocks/templates/gallery/_show.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..6043b61ce4e72859ee15e7157526e79981e099d5 --- /dev/null +++ b/app/views/admin/communication/blocks/templates/gallery/_show.html.erb @@ -0,0 +1,16 @@ +<h2><%= @block.data['title'] %></h2> +<div class="row"> +<% @block.data['elements'].each do |image| %> + <div class="col-xxl-2 col-xl-3 col-6"> + <article class="card"> + <% unless image.dig('file', 'id').blank? %> + <% blob = ActiveStorage::Blob.find(image.dig('file', 'id')) %> + <%= kamifusen_tag blob, width: 500, class: 'img-fluid mb-2' %> + <% end %> + <div class="card-body"> + <p class="mb-0"><%= image['alt'] %></p> + </div> + </article> + </div> +<% end %> +</div> diff --git a/app/views/admin/communication/blocks/templates/gallery/_static.html.erb b/app/views/admin/communication/blocks/templates/gallery/_static.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..d9b7f93e2ef7623deb6113f4660aafb50d6c1ea9 --- /dev/null +++ b/app/views/admin/communication/blocks/templates/gallery/_static.html.erb @@ -0,0 +1,20 @@ +<% if !block.data.nil? && !block.data.is_a?(String) && block.data.has_key?('elements') %> + title: > + <%= prepare_text_for_static block.data['title'] %> + images: +<% block.data['elements'].each do |image| + file_id = nil + if image.has_key?('file') + file = image['file'] + if file.is_a?(Hash) && file.has_key?('id') + file_id = file['id'] + end + end +%> + - alt: > + <%= prepare_text_for_static image['alt'] %> + <% if file_id %> + file: "<%= file_id %>" + <% end %> +<% end %> +<% end %> diff --git a/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb b/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb index 4829d02c51bf61ae2a95feec95cd37fc7e9b63ff..d9a5b0442b0ac546b2f7c8ca5cd8b0ea2c75ea4e 100644 --- a/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb +++ b/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb @@ -1,7 +1,7 @@ <% if !block.data.nil? && !block.data.is_a?(String) && block.data.has_key?('elements') %> <% block.data['elements'].each do |element| %> - title: > - <%= element['title'] %> + <%= prepare_text_for_static element['title'] %> persons: <% element['persons'].each do |person| @@ -9,7 +9,7 @@ element['persons'].each do |person| %> - slug: "<%= p.slug %>" role: > - <%= person['role'] %> + <%= prepare_text_for_static person['role'] %> <% end %> <% end %> <% end %> diff --git a/app/views/admin/communication/blocks/templates/partners/_show.html.erb b/app/views/admin/communication/blocks/templates/partners/_show.html.erb index 86a1cb21a5b221dbb3953748dbd6a6e85b915fe5..22a91333e3f70a264a33e2b9c43ce868d5b6130f 100644 --- a/app/views/admin/communication/blocks/templates/partners/_show.html.erb +++ b/app/views/admin/communication/blocks/templates/partners/_show.html.erb @@ -2,14 +2,13 @@ <h2><%= element['title'] %></h2> <div class="row"> <% element['partners'].each do |partner| %> - <div class="col-md-3"> + <div class="col-md-2"> <article class="card"> + <% unless partner.dig('logo', 'id').blank? %> + <% blob = ActiveStorage::Blob.find(partner.dig('logo', 'id')) %> + <%= kamifusen_tag blob, width: 300, class: 'img-fluid mb-2' %> + <% end %> <div class="card-body"> - <% unless partner.dig('logo', 'id').blank? %> - <% blob = ActiveStorage::Blob.find(partner.dig('logo', 'id')) %> - <%= kamifusen_tag blob, width: 300, class: 'img-fluid mb-2' %> - <% end %> - <h3 class="card-title h5"><%= partner['name'] %></h3> <p class="mb-0"><%= partner['url'] %></p> </div> diff --git a/app/views/admin/communication/blocks/templates/partners/_static.html.erb b/app/views/admin/communication/blocks/templates/partners/_static.html.erb index 2aa6816edc1e174a192864550c25889ffaff9842..fd0bf2c78cd1aaab93504ac5c4be06e0af9b6154 100644 --- a/app/views/admin/communication/blocks/templates/partners/_static.html.erb +++ b/app/views/admin/communication/blocks/templates/partners/_static.html.erb @@ -13,8 +13,10 @@ element['partners'].each do |partner| end end %> - - name: "<%= partner['name'] %>" - url: "<%= partner['url'] %>" + - name: > + <%= prepare_text_for_static partner['name'] %> + url: > + <%= prepare_text_for_static partner['url'] %> <% if logo_id %> logo: "<%= logo_id %>" <% end %> diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml index 92b18c1964b5918270673cc679288175bcf5eaf0..086ba6cf799056a11390ecafcacb48521e95bb27 100644 --- a/config/locales/communication/en.yml +++ b/config/locales/communication/en.yml @@ -178,6 +178,7 @@ en: communication: block: template: + gallery: Gallery organization_chart: Organization chart partners: Partners website: diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml index 397faa04acfc3bd5f9dee3493b10fa130580fcfb..e8671cbb3b8ab834656790f5a289c7ee83f44828 100644 --- a/config/locales/communication/fr.yml +++ b/config/locales/communication/fr.yml @@ -178,6 +178,7 @@ fr: communication: block: template: + gallery: Galerie organization_chart: Organigramme partners: Partenaires website: diff --git a/docs/communication/blocks.md b/docs/communication/blocks.md index 2ccecf8a71432ad654a536aa89e97dfeb9d72c42..d7251e6e01f7e53322b87b0e3a1e4b49178d2222 100644 --- a/docs/communication/blocks.md +++ b/docs/communication/blocks.md @@ -93,4 +93,5 @@ end 1. Déclarer le template dans l'enum du modèle block 2. Créer l'edit, le show et le static dans la vue du template 3. Créer la classe du template pour gérer les dépendances -4. Créer la vignette dans les images +4. Créer la vignette dans les images +5. Ecrire les locales fr et en