procedure_context: display the procedure description on small screens

Fix #3658
This commit is contained in:
Pierre de La Morinerie 2019-04-01 15:04:11 +02:00
parent 5d54b134b7
commit e896310e34
6 changed files with 64 additions and 8 deletions

View file

@ -1,8 +1,10 @@
@import "constants"; @import "constants";
.commencer { .commencer {
.button:first-of-type { @media (min-width: $two-columns-breakpoint) {
margin-top: 4 * $default-spacer; .button:first-of-type {
margin-top: 4 * $default-spacer;
}
} }
.button { .button {

View file

@ -7,7 +7,7 @@
margin-bottom: 20px; margin-bottom: 20px;
@media (max-width: $two-columns-breakpoint) { @media (max-width: $two-columns-breakpoint) {
font-size: 28px; font-size: 26px;
} }
} }

View file

@ -2,6 +2,7 @@
@import "constants"; @import "constants";
$procedure-context-breakpoint: $two-columns-breakpoint; $procedure-context-breakpoint: $two-columns-breakpoint;
$procedure-description-line-height: 22px;
.procedure-preview { .procedure-preview {
font-size: 24px; font-size: 24px;
@ -25,12 +26,13 @@ $procedure-context-breakpoint: $two-columns-breakpoint;
} }
.procedure-title { .procedure-title {
font-size: 30px; font-size: 26px;
margin: 0 0 20px 0; margin: 0 0 20px 0;
text-align: center; text-align: center;
@media (min-width: $procedure-context-breakpoint) { @media (min-width: $procedure-context-breakpoint) {
margin: 50px 0 32px; margin: 50px 0 32px;
font-size: 30px;
text-align: left; text-align: left;
} }
} }
@ -39,11 +41,40 @@ $procedure-context-breakpoint: $two-columns-breakpoint;
font-size: 16px; font-size: 16px;
p:not(:last-of-type) { p:not(:last-of-type) {
margin-bottom: 2 * $default-spacer; // Space the paragraphs by exactly one line height,
// so that the text always is truncated in the middle of a line,
// regarless of the number of paragraphs.
margin-bottom: 3 * $default-spacer;
} }
}
@media (max-width: $procedure-context-breakpoint) { .read-more-button {
display: none; // TO FIX : make this description available for small devices display: none;
}
@media (max-width: $procedure-context-breakpoint) {
// Truncate description and display the "Read more" UI if the text is too long
.procedure-description-body.read-more-collapsed {
// Setting the description at 25% of the viewport height:
// - displays more text on screens having more vertical space (like small tablets);
// - is enough for the action buttons to be visible on the bottom (even on mobiles).
max-height: 25vh;
// If the text exceeds the max-height,
// truncate it and displays the "Read more" button.
&.read-more-enabled {
overflow: hidden;
border-bottom: 1px solid $border-grey;
+ .read-more-button {
display: block;
position: relative;
margin-left: auto;
margin-right: auto;
top: -19px;
margin-bottom: -19px;
}
}
} }
} }

View file

@ -0,0 +1,20 @@
import { delegate } from '@utils';
function updateReadMoreVisibility() {
const descBody = document.querySelector('.procedure-description-body');
if (descBody) {
// If the description text overflows, display a "Read more" button.
const isOverflowing = descBody.scrollHeight > descBody.clientHeight;
descBody.classList.toggle('read-more-enabled', isOverflowing);
}
}
function expandProcedureDescription() {
const descBody = document.querySelector('.procedure-description-body');
descBody.classList.remove('read-more-collapsed');
}
addEventListener('turbolinks:load', updateReadMoreVisibility);
addEventListener('resize', updateReadMoreVisibility);
delegate('click', '.read-more-button', expandProcedureDescription);

View file

@ -18,6 +18,7 @@ import '../shared/toggle-target';
import '../new_design/dropdown'; import '../new_design/dropdown';
import '../new_design/form-validation'; import '../new_design/form-validation';
import '../new_design/procedure-context';
import '../new_design/select2'; import '../new_design/select2';
import '../new_design/spinner'; import '../new_design/spinner';
import '../new_design/support'; import '../new_design/support';

View file

@ -5,4 +5,6 @@
%h2.procedure-title %h2.procedure-title
= procedure.libelle = procedure.libelle
.procedure-description .procedure-description
= h string_to_html(procedure.description) .procedure-description-body.read-more-enabled.read-more-collapsed
= h string_to_html(procedure.description)
= button_tag "Afficher la description complète", class: 'button read-more-button'