diff --git a/app/assets/images/communication/blocks/templates/pages/cards.png b/app/assets/images/communication/blocks/templates/pages/cards.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9736d2345e6cef341922794bc84c1cfde498ba Binary files /dev/null and b/app/assets/images/communication/blocks/templates/pages/cards.png differ diff --git a/app/assets/images/communication/blocks/templates/pages/grid.png b/app/assets/images/communication/blocks/templates/pages/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9bf9b8c6267b543e165f16c7f27dadac5af22e Binary files /dev/null and b/app/assets/images/communication/blocks/templates/pages/grid.png differ diff --git a/app/models/communication/block/template/page.rb b/app/models/communication/block/template/page.rb index 41b048fdb26117ddb85ffd3bbcf43b3509d5d797..108f5501e371b751cbff5ffafb113c6ab8c79278 100644 --- a/app/models/communication/block/template/page.rb +++ b/app/models/communication/block/template/page.rb @@ -16,6 +16,10 @@ class Communication::Block::Template::Page < Communication::Block::Template @main_page ||= page(data['page_id']) end + def layout + data['layout'] || 'grid' + end + def show_main_description data['show_main_description'] || false end diff --git a/app/views/admin/communication/blocks/templates/pages/_edit.html.erb b/app/views/admin/communication/blocks/templates/pages/_edit.html.erb index 2e9fe6ef48799468c63c32716f109e4308167c70..e2f85adca54dffe2177666508c8e0fda049196ad 100644 --- a/app/views/admin/communication/blocks/templates/pages/_edit.html.erb +++ b/app/views/admin/communication/blocks/templates/pages/_edit.html.erb @@ -2,28 +2,83 @@ <div class="row mb-4"> <div class="col-md-6"> - <h2 class="h3">Type de liste</h2> - <div class="form-check form-check-inline mb-3"> - <input class="form-check-input" - type="radio" - name="kind" - v-model="data.kind" - value="children" - id="kind-children"> - <label class="form-check-label" for="kind-children"> - La page principale et ses enfants - </label> + <div class="mb-4"> + <h2 class="h3">Type de liste</h2> + <div class="form-check form-check-inline mb-3"> + <input class="form-check-input" + type="radio" + name="kind" + v-model="data.kind" + value="children" + id="kind-children"> + <label class="form-check-label" for="kind-children"> + La page principale et ses enfants + </label> + </div> + <div class="form-check form-check-inline"> + <input class="form-check-input" + type="radio" + name="kind" + v-model="data.kind" + value="selection" + id="kind-selection"> + <label class="form-check-label" for="kind-selection"> + Une sélection spécifique de pages + </label> + </div> </div> - <div class="form-check form-check-inline"> - <input class="form-check-input" - type="radio" - name="kind" - v-model="data.kind" - value="selection" - id="kind-selection"> - <label class="form-check-label" for="kind-selection"> - Une sélection spécifique de pages - </label> + + <div class="mb-4"> + <h2 class="h3">Page principale</h2> + <label class="form-label" + for="page_id">Sélectionnez une page principale</label> + <select id="page_id" + class="form-select select" + v-model="data.page_id"> + <option value="">Aucune page sélectionnée</option> + <% pages.each_with_index do |page, index| %> + <option value="<%= page[:id] %>"><%= page[:label].html_safe %></option> + <% end %> + </select> + <div class="form-text">Cette page principale définira le titre et le lien du bloc. Si vous choisissez une page sans remplir le titre ci-dessus, le titre de la page sera utilisé. Si le titre est rempli, il remplacera le titre de la page sélectionnée, en utilisant le lien de la page.</div> + </div> + + <div class="mb-4" v-if="data.kind == 'selection'"> + <h2 class="h3">Pages sélectionnées</h2> + <a class="<%= button_classes('mb-3') %>" + v-on:click="data.elements.push({id: ''})"> + <%= t '.add_page' %> + </a> + <draggable :list="data.elements" handle=".dragHandle" class="list-group"> + <div v-for="(page, index) in data.elements" class="list-group-item"> + <div class="d-flex"> + <div> + <a class="btn ps-0 pt-0 dragHandle" title="Drag and drop"> + <i class="fa fa-bars handle"></i> + </a> + </div> + <div class="flex-fill"> + <label class="form-label d-none" + :for="'page-' + index + '-name'">Page</label> + <select :id="'page-' + index + '-name'" + class="form-select select" + v-model="page.id"> + <option value="" disabled>Aucune page</option> + <% pages.each_with_index do |page, index| %> + <option value="<%= page[:id] %>"><%= page[:label].html_safe %></option> + <% end %> + </select> + </div> + <div> + <a class="btn btn-sm btn-danger ms-3" + v-on:click="data.elements.splice(data.elements.indexOf(page), 1)" + title="Supprimer"> + <i class="fas fa-times"></i> + </a> + </div> + </div> + </div> + </draggable> </div> </div> <div class="col-md-6"> @@ -58,59 +113,41 @@ Afficher les images des pages </label> </div> - </div> -</div> + <hr> -<div class="row"> - <div class="col-md-6"> - <h2 class="h3">Page principale</h2> - <label class="form-label" - for="page_id">Sélectionnez une page principale</label> - <select id="page_id" - class="form-select select" - v-model="data.page_id"> - <option value="">Aucune page sélectionnée</option> - <% pages.each_with_index do |page, index| %> - <option value="<%= page[:id] %>"><%= page[:label].html_safe %></option> - <% end %> - </select> - <div class="form-text">Cette page principale définira le titre et le lien du bloc. Si vous choisissez une page sans remplir le titre ci-dessus, le titre de la page sera utilisé. Si le titre est rempli, il remplacera le titre de la page sélectionnée, en utilisant le lien de la page.</div> - </div> - <div class="col-md-6" v-if="data.kind == 'selection'"> - <h2 class="h3">Pages sélectionnées</h2> - <a class="<%= button_classes('mb-3') %>" - v-on:click="data.elements.push({id: ''})"> - <%= t '.add_page' %> - </a> - <draggable :list="data.elements" handle=".dragHandle" class="list-group"> - <div v-for="(page, index) in data.elements" class="list-group-item"> - <div class="d-flex"> - <div> - <a class="btn ps-0 pt-0 dragHandle" title="Drag and drop"> - <i class="fa fa-bars handle"></i> - </a> - </div> - <div class="flex-fill"> - <label class="form-label d-none" - :for="'page-' + index + '-name'">Page</label> - <select :id="'page-' + index + '-name'" - class="form-select select" - v-model="page.id"> - <option value="" disabled>Aucune page</option> - <% pages.each_with_index do |page, index| %> - <option value="<%= page[:id] %>"><%= page[:label].html_safe %></option> - <% end %> - </select> - </div> - <div> - <a class="btn btn-sm btn-danger ms-3" - v-on:click="data.elements.splice(data.elements.indexOf(page), 1)" - title="Supprimer"> - <i class="fas fa-times"></i> - </a> - </div> + <div class="row"> + <div class="col-md-6"> + <div class="form-check form-check-inline mb-3"> + <input class="form-check-input" + type="radio" + name="layout" + v-model="data.layout" + value="grid" + id="layout-grid"> + <label class="form-check-label" for="layout-grid"> + Grille + <%= image_tag 'communication/blocks/templates/pages/grid.png', + alt: 'Grille', + class: 'img-fluid' %> + </label> + </div> + </div> + <div class="col-md-6"> + <div class="form-check form-check-inline"> + <input class="form-check-input" + type="radio" + name="layout" + v-model="data.layout" + value="cards" + id="layout-cards"> + <label class="form-check-label" for="layout-cards"> + Cartes + <%= image_tag 'communication/blocks/templates/pages/cards.png', + alt: 'Grille', + class: 'img-fluid' %> + </label> </div> </div> - </draggable> + </div> </div> </div> diff --git a/app/views/admin/communication/blocks/templates/pages/_static.html.erb b/app/views/admin/communication/blocks/templates/pages/_static.html.erb index d6fe87c3325603d33639cdea8da7341917770bf1..a56323f243b547239cd14a2caf03810da76320fc 100644 --- a/app/views/admin/communication/blocks/templates/pages/_static.html.erb +++ b/app/views/admin/communication/blocks/templates/pages/_static.html.erb @@ -4,6 +4,7 @@ show_main_description: <%= block.template.show_main_description %> show_descriptions: <%= block.template.show_description %> show_images: <%= block.template.show_image %> + layout: <%= block.template.layout %> pages: <% block.template.selected_pages.each do |element| %> - page: <%= element.generated_path %>