Merge branch 'master' into 102_activites_annexes

This commit is contained in:
2021-08-17 12:59:26 +02:00
143 changed files with 7439 additions and 2533 deletions

View File

@@ -32,9 +32,8 @@ use Chill\MainBundle\Doctrine\DQL\JsonAggregate;
use Chill\MainBundle\Doctrine\DQL\JsonbExistsInArray;
use Chill\MainBundle\Doctrine\DQL\Similarity;
use Chill\MainBundle\Doctrine\DQL\OverlapsI;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
use Chill\MainBundle\Doctrine\DQL\Replace;
use Chill\MainBundle\Doctrine\ORM\Hydration\FlatHierarchyEntityHydrator;
use Chill\MainBundle\Doctrine\Type\NativeDateIntervalType;
use Chill\MainBundle\Doctrine\Type\PointType;
use Symfony\Component\HttpFoundation\Request;
@@ -186,6 +185,9 @@ class ChillMainExtension extends Extension implements PrependExtensionInterface,
'OVERLAPSI' => OverlapsI::class,
],
],
'hydrators' => [
'chill_flat_hierarchy_list' => FlatHierarchyEntityHydrator::class,
],
],
],
);

View File

@@ -0,0 +1,47 @@
<?php
declare(strict_types=1);
namespace Chill\MainBundle\Doctrine\ORM\Hydration;
use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
use Generator;
final class FlatHierarchyEntityHydrator extends ObjectHydrator
{
public const LIST = 'chill_flat_hierarchy_list';
protected function hydrateAllData()
{
return array_values(iterator_to_array($this->flatListGenerator($this->buildChildrenHashmap(parent::hydrateAllData()))));
}
private function flatListGenerator(array $hashMap, ?object $parent = null): Generator
{
$parent = null === $parent ? null : spl_object_id($parent);
$hashMap += [$parent => []];
foreach ($hashMap[$parent] as $node) {
yield spl_object_id($node) => $node;
yield from $this->flatListGenerator($hashMap, $node);
}
}
private function buildChildrenHashmap(array $nodes): array
{
return array_reduce(
$nodes,
static function (array $collect, $node): array {
$parentId = (null === $parent = $node->getParent()) ?
null :
spl_object_id($parent);
$collect[$parentId][] = $node;
return $collect;
},
[]
);
}
}

View File

@@ -4,23 +4,153 @@
// Chill mixins
@import './scss/mixins';
// Chill buttons
@import './scss/buttons';
// Chill forms
@import './scss/forms';
// Chill record_actions
@import './scss/record_actions';
// Chill entity render box system
@import './scss/render_box';
// Chill flex responsive table/block presentation
@import './scss/flex_table';
/*
* Specific rules
* BASE LAYOUT POSITION
*/
.custom_field_no_data,
.chill-no-data-statement {
font-style: italic;
body {
display: flex;
flex-direction: column;
min-height: 100vh;
footer {
margin-top: auto;
}
}
header {
nav.navbar {
padding: 0;
a.navbar-brand img {
height: 50px;
margin: 8px 0;
}
div.navbar-collapse {
float: right;
}
ul.navbar-nav {
display: flex;
align-items: stretch;
li.nav-item {
display: flex;
&.btn {
padding-top: 0;
padding-bottom: 0;
}
& > a {
align-self: center;
}
form.form-inline {
align-self: center;
display: flex;
input.form-control {
align-self: center;
height: 32px;
}
}
}
}
div.dropdown-menu {
margin: 0;
padding: 0;
border-radius: 0;
a.dropdown-item {
width: 120%;
border: 0;
border-bottom: 1px solid $gray-200;
font-size: smaller;
i {
float: right; }
&:hover {
color: $gray-500 !important; }
}
}
// fullwidth menu when navbar is collapsed
@media (max-width: 767px) {
& {
position: relative;
}
button.navbar-toggler {
float: right;
}
div.navbar-collapse {
float: none;
position: absolute;
top: 4em;
left: 0;
right: 0;
z-index: 2;
padding: 1em;
border-top: 1px solid shade-color($primary, 25%);
ul.navbar-nav {
display: grid;
grid-template-areas:
"sear sear sear"
"sect user lang";
li.nav-item {
flex-direction: column;
border: 0;
a.nav-link {}
&.navigation-search {
grid-area: sear;
margin-bottom: 1em;
form {
width: 100%;
input.form-control {}
button.btn {}
}
}
&.nav-section { grid-area: sect; }
&.nav-user { grid-area: user; }
&.nav-language { grid-area: lang; }
}
li.dropdown {
&, & > * {
background-color: transparent !important;
}
a.dropdown-toggle {}
div.dropdown-menu {
display: block;
border: 0;
a.dropdown-item {
width: 100%;
border: 0;
border-top: 1px dotted $gray-200;
background-color: transparent !important;
}
}
}
}
}
}
}
}
// styles communs pour tous les bandeaux
div.banner {
a {
text-decoration: none;
&.phone,
&.email {
color: $white;
}
}
.id-number {
font-weight: lighter;
font-size: 50%;
@@ -28,17 +158,220 @@ div.banner {
&:before { content: '(n°'; }
&:after { content: ')'; }
}
a.phone,
a.email {
color: white;
}
ul.list-content {
//margin: 0 auto;
}
span.age {
margin-left: 0.5em;
&:before { content: '('; }
&:after { content: ')'; }
}
}
div.vertical-menu {
border-radius: 0;
margin-top: 0.5rem;
a.list-group-item {
background-color: $chill-yellow;
border: 0;
margin-bottom: 0.25rem;
&:hover {
background-color: tint-color($chill-yellow, 20%)
}
}
}
footer.footer {
background: $dark;
padding-top: 10px;
padding-bottom: 10px;
width: 100%;
p {
font-family: Open Sans;
font-weight: 300;
clear: both;
color: $white;
font-size: 0.9em;
line-height: 1.5em;
margin: auto;
max-width: 35em;
text-align: center;
a, a:hover {
text-decoration: underline;
}
}
}
/*
* SPECIFIC RULES
*/
/// titles
h1, h2,
.h1, .h2 {
font-weight: $headings-font-weight + 200;
}
/// typography
.open_sansbold {
font-weight: bold;
}
/// no borders on head table
table.table-bordered {
thead, thead * {
border: 0 !important;
text-align: center;
}
}
/// comments quotes
.chill-user-quote {
border-left: 10px solid $yellow;
margin: 1.5em 10px;
padding: 0.5em 15px;
background-color: $gray-200;
color: $gray-800;
font-size: 90%;
// test a bottom right decoration (to be confirmed)
&.test {
position: relative;
&:after {
content: '';
position: absolute;
width: 0px; height: 0px;
bottom: 0; right: 0;
background: $white;
border-top: 10px solid $gray-200;
border-left: 10px solid $gray-200;
border-right: 10px solid $white;
border-bottom: 10px solid $white;
}
}
// ckeditor citation
blockquote p {
font-style: italic;
padding-left: 2em;
quotes: "" "";
position: relative;
&:before {
content: open-quote;
font-size: 400%;
color: $gray-400;
position: absolute;
top: -25px;
left: 0;
}
}
}
/// display definition list
// with dt and dd on same line
dl.definition-inline {
dd {
display: inline;
margin: 0;
&:after{
display: block;
content: '';
}
}
dt{
display: inline-block;
min-width: 200px;
}
}
/// when there is no data
.custom_field_no_data,
.chill-no-data-statement {
font-style: italic;
}
//// still used ?
// move from chillmain.css, converted to sass
div#usefulbar {
background-color: $yellow;
z-index: 1000;
padding-right: 15px;
form {
margin: 0;
}
i.menu {
font-size: 2em;
}
ul {
display: flex;
justify-content: flex-end;
margin: 0;
padding-top: 5px;
padding-right: 10px;
}
li {
color: $white;
margin-left: 10px;
a {
color: $white;
text-shadow: 0px 0px 1px $gray-600;
}
i.icon-user-add {
&:before {
vertical-align: -5px;
}
}
&#search_element {
text-align: right;
div#search_form {
margin: 0;
padding: 0;
div, .field {
margin: 0;
}
button {
color: $white;
border: none;
bottom: -2px;
height: 35px;
}
}
}
}
}
div#flashMessages {
margin-top: 20px;
.flash-notice {
margin-top: 10px;
margin-bottom: 10px;
}
}
.personName {
font-variant: small-caps;
text-transform: capitalize;
}
// probably used in client chill.
// think to rename like above
input.belgian_national_number_inversed_date {
width: 7em;
margin-right: 1em;
}
input.belgian_national_number_daily_counter {
width: 4em;
margin-right: 1em;
}
input.belgian_national_number_control_digit {
width: 3em;
}
//
input.belgian_national_number {
&.inversed_date {}
&.daily_counter {}
&.control_digit {}
}

View File

@@ -1,25 +0,0 @@
div#usefulbar { background-color: #fbba3a; z-index: 1000; padding-right: 15px; }
div#usefulbar form { margin: 0; }
div#usefulbar i.menu { font-size: 2em; }
div#usefulbar ul { display: flex; justify-content: flex-end; margin: 0; padding-top: 5px; padding-right: 10px; }
div#usefulbar li { color: white; margin-left: 10px; }
div#usefulbar li a { color: white; text-shadow: 0px 0px 1px #555; }
div#usefulbar li i.icon-user-add:before { vertical-align: -5px; }
div#usefulbar li#search_element { text-align: right; }
div#usefulbar li#search_element div#search_form { margin: 0; padding: 0; }
div#usefulbar li#search_element div#search_form div { margin: 0; }
div#usefulbar li#search_element div#search_form .field { margin: 0; }
div#usefulbar li#search_element div#search_form button { color: white; border: none; bottom: -2px; height: 35px; }
div#flashMessages { margin-top: 20px; }
div#flashMessages .flash-notice { margin-top: 10px; margin-bottom: 10px; }
.personName { font-variant: small-caps; text-transform: capitalize; }
.personName { text-transform: capitalize; }
input.belgian_national_number_inversed_date { width: 7em; margin-right: 1em; }
input.belgian_national_number_daily_counter { width: 4em; margin-right: 1em; }
input.belgian_national_number_control_digit { width: 3em; }

View File

@@ -14,12 +14,12 @@ global.select2 = select2;
require('select2/dist/css/select2.css');
require('select2-bootstrap-theme/dist/select2-bootstrap.css');
/*
* Load Chill themes assets
*/
require('./chillmain.scss');
require('./css/chillmain.css');
import { chill } from './js/chill.js';
global.chill = chill;
@@ -34,6 +34,7 @@ require('./img/favicon.ico');
require('./img/logo-chill-sans-slogan_white.png');
require('./img/logo-chill-outil-accompagnement_white.png');
/*
* Load local libs
* Some libs are only used in a few pages, they are loaded on a case by case basis
@@ -45,7 +46,6 @@ require('../lib/breadcrumb/index.js');
require('../lib/download-report/index.js');
require('../lib/select_interactive_loading/index.js');
require('../lib/export-list/index.js');
require('../lib/entity/index.js');
//require('../lib/show_hide/index.js');
//require('../lib/tabs/index.js');

View File

@@ -62,10 +62,10 @@ $chill-theme-buttons: (
&.btn-view::before,
&.btn-save::before,
&.btn-duplicate::before,
&.btn-not-duplicate::before,
&.btn-submit::before,
&.btn-reset::before,
&.btn-action::before,
// &.btn-not-duplicate::before,
// &.btn-submit::before,
// &.btn-reset::before,
// &.btn-action::before,
&.btn-delete::before,
&.btn-remove::before,
&.btn-cancel::before {
@@ -101,3 +101,13 @@ $chill-theme-buttons: (
color: $light;
}
}
/// allow to hide icon (herited from scratch)
.btn {
&.change-icon {
&::before {
content: '';
margin-right: 0;
}
}
}

View File

@@ -1,59 +1,80 @@
/*
* FLEX RESPONSIVE TABLE/BLOCK PRESENTATION
*/
div.flex-bloc,
div.flex-table {
display: flex;
align-items: stretch;
align-content: stretch;
box-sizing: border-box;
margin: 1.5em 0;
div.item-bloc {
display: flex;
@include border-collapse;
padding: 1em;
div.item-row {
display: flex;
div.item-col:last-child {
display: flex;
}
}
}
h2, h3, h4, dl, p {
margin: 0;
}
h2, h3, h4 {
color: var(--bs-chill-blue);
color: $blue;
}
div.item-bloc {
@include border-collapse;
ul.record_actions {
margin: 0;
li {
margin-right: 5px;
}
}
}
/*
* Bloc appearance
*/
div.flex-bloc {
box-sizing: border-box;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: stretch;
align-content: stretch;
div.item-bloc {
flex-grow: 0; flex-shrink: 1; flex-basis: auto;
margin: 0;
padding: 1em;
display: flex;
flex-direction: column;
margin: 0;
div.item-row {
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
display: flex;
flex-direction: column;
div.item-col {
&.separator {
margin-top: 0.5em;
border-top: 1px dotted $gray-900;
padding-top: 0.5em;
}
&:first-child {
flex-grow: 0; flex-shrink: 0; flex-basis: auto;
padding-bottom: 0.5em;
border-bottom: 1px dotted #0000004f;
margin-bottom: 0.5em;
}
&:last-child {
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
display: flex;
.list-content { // ul, dl, or div
}
ul.record_actions {
margin: 0;
align-self: flex-end;
flex-grow: 1; flex-shrink: 0; flex-basis: auto;
margin: 0;
li {
margin-right: 5px;
}
@@ -67,51 +88,47 @@ div.flex-bloc {
/*
* Table appearance
*/
div.flex-table {
display: flex;
flex-direction: column;
align-items: stretch;
align-content: stretch;
div.item-bloc {
display: flex;
flex-direction: column;
padding: 1em;
&:nth-child(even) {
background-color: $gray-200;
.chill-user-quote {
background-color: shade-color($gray-200, 5%)
}
}
div.item-row {
display: flex;
flex-direction: row;
&:not(:first-child) {
&.separator {
margin-top: 0.5em;
border-top: 1px dotted #0000004f;
border-top: 1px dotted $gray-900;
padding-top: 0.5em;
flex-direction: column;
//flex-direction: column;
}
div.item-col {
&:first-child {
flex-grow: 0; flex-shrink: 0; flex-basis: 33%;
flex-grow: 0; flex-shrink: 0; flex-basis: auto;
}
&:last-child {
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
display: flex;
justify-content: flex-end;
.list-content { // ul, dl, or div
}
ul.record_actions {
margin: 0;
align-self: flex-start;
flex-grow: 1; flex-shrink: 0; flex-basis: auto;
li {
margin-right: 5px;
}
align-self: flex-start;
}
}
}
@media only screen and (max-width: 900px) {
flex-direction: column;
div.item-col {
@@ -122,9 +139,6 @@ div.flex-table {
}
}
}
// neutralize
div.chill_address div.chill_address_address p { text-indent: 0; }
}
}
}

View File

@@ -0,0 +1,44 @@
/// forms
form {
/* avoid useless html in first level of the custom fields row loop in forms
* (better should to improve the loop)
*/
& > div.container-fluid {
& > div.row > .parent {
padding: 0;
& div.cf-fields span.cf-title {
margin: 1em -15px 0;
width: calc(100% + 30px);
@include title_in_form;
}
}
}
fieldset {
margin-top: 1em;
& > legend {
@include title_in_form;
}
}
// customfields titles in form
span.cf-title {
@include title_in_form;
}
label {
display: inline;
&.required:after {
content: " *";
color: $red;
}
}
}
.col-form-label {
padding-top: .5em;
padding-bottom: .5em;
font-weight: 700;
margin-bottom: .375em;
}

View File

@@ -1,4 +1,18 @@
//
// Titles in forms
//
@mixin title_in_form {
font-size: 1.438em;
font-weight: 700;
width: 100%;
border-bottom: 3px solid $gray-200;
margin-bottom: 1em;
display: block;
}
// We use box-shadow instead of border
// to avoid to manage border double-width
// Then we can simulate border-collapse: collapse (table)

View File

@@ -1,13 +1,22 @@
ul.record_actions,
ul.record_actions_column {
ul.record_actions {
display: flex;
flex-direction: row;
flex-wrap: wrap-reverse;
justify-content: flex-end;
padding: 0.5em 0;
&.record_actions--left {
&.column {
flex-direction: column;
}
&.left {
justify-content: flex-start;
}
padding: 0.5em 0;
flex-wrap: wrap-reverse;
&.sticky-form-buttons {
padding-left: 1em;
padding-right: 1em;
}
li {
display: inline-block;
@@ -18,37 +27,33 @@ ul.record_actions_column {
&:last-child {
margin-right: 0;
}
}
li.cancel {
order: 1;
margin-right: auto;
&.cancel {
order: 1;
margin-right: auto;
}
}
}
ul.record_actions {
flex-direction: row;
}
ul.record_actions_column {
flex-direction: column;
}
ul.record_actions.sticky-form-buttons {
padding-left: 1em;
padding-right: 1em;
.sticky-form-buttons {
margin-top: 4em;
background-color: $beige;
position: sticky;
bottom: 0.3em;
text-align: center;
display: flex;
padding: 0.8em 1.6em;
border-radius: 0;
}
/// EXCEPTIONS
// inside table exceptions
table {
td ul.record_actions,
ul.record_actions_small {
li {
margin-right: 0.2em;
}
}
ul.record_actions {
margin: 0;
padding: 0.5em;

View File

@@ -13,12 +13,18 @@ section.chill-entity {
}
// specific rules
// all render box doesn't use a section tag !
.chill-entity {
// used for: entity-person, entity-thirdparty
&.entity-person,
&.entity-thirdparty {
span.entity-raw {
& > span:not(:first-child):before {
content: " ";
}
}
div.entity-label {
div.denomination {
&.h3 {
@@ -92,4 +98,19 @@ section.chill-entity {
&.address-until {}
}
}
// used for comment-embeddable
&.entity-comment-embeddable {
width: 100%;
div.metadata {
font-size: smaller;
color: $gray-600;
span.user, span.date {
text-decoration: underline dotted;
&:hover {
color: $gray-700;
}
}
}
}
}

View File

@@ -1,6 +0,0 @@
.chill-entity__comment-embeddable {
.chill-entity__comment-embeddable__metadata {
font-size: smaller;
color: var(--chill-light-gray);
}
}

View File

@@ -1,2 +0,0 @@
// css classes to render entities
require('./comment_embeddable.scss');

View File

@@ -1,284 +1,6 @@
/*
* These custom styles will override bootstrap enabled stylesheets
* in mod_bootstrap entrypoint
*/
/// chill buttons
@import 'custom/_buttons';
// chill record_actions
@import 'custom/_record_actions';
/// titles
h1, h2, .h1, .h2 {
font-weight: $headings-font-weight + 200;
}
/// typography
.open_sansbold {
font-weight: bold;
}
/// forms
@mixin title_in_form {
font-size: 1.438em;
font-weight: 700;
width: 100%;
border-bottom: 3px solid $gray-200;
margin-bottom: 1em;
display: block;
}
.col-form-label {
padding-top: .5em;
padding-bottom: .5em;
font-weight: 700;
margin-bottom: .375em;
}
form {
/* avoid useless html in first level of the custom fields row loop in forms
* (better should to improve the loop)
*/
& > div.container-fluid {
& > div.row > .parent {
padding: 0;
& div.cf-fields span.cf-title {
margin: 1em -15px 0;
width: calc(100% + 30px);
@include title_in_form;
}
}
}
fieldset {
margin-top: 1em;
& > legend {
@include title_in_form;
}
}
label {
display: inline;
&.required:after {
content: " *";
color: $red;
}
}
}
/// table
table.table-bordered {
thead, thead * {
border: 0 !important;
text-align: center;
}
}
/// chill elements of design
.sticky-form-buttons {
margin-top: 4em;
background-color: $beige;
position: sticky;
bottom: 0.3em;
text-align: center;
display: flex;
padding: 0.8em 1.6em;
border-radius: 0;
}
.chill-user-quote {
border-left: 10px solid $yellow;
margin: 1.5em 10px;
padding: 0.5em 15px;
quotes: "\201C" "\201D" "\2018" "\2019";
background-color: $gray-200;
blockquote {
border-left: 0.4em solid $gray-400;
padding-left: 0.9em;
margin-left: 0.9em;
font-style: italic;
}
}
div.chill_address {
div.chill_address_address {
margin: 0.7em 0;
font-size: 98%;
font-variant: small-caps;
p {
display: inline-block;
margin: 0 0 0 1.5em;
text-indent: -1.5em;
}
}
}
/// base layout positions
body {
display: flex;
flex-direction: column;
min-height: 100vh;
footer {
margin-top: auto;
}
}
header {
nav.navbar {
padding: 0;
a.navbar-brand img {
height: 50px;
margin: 8px 0;
}
div.navbar-collapse {
float: right;
}
ul.navbar-nav {
display: flex;
align-items: stretch;
li.nav-item {
display: flex;
&.btn {
padding-top: 0;
padding-bottom: 0;
}
& > a {
align-self: center;
}
form.form-inline {
align-self: center;
display: flex;
input.form-control {
align-self: center;
height: 32px;
}
}
}
}
div.dropdown-menu {
margin: 0;
padding: 0;
border-radius: 0;
a.dropdown-item {
width: 120%;
border: 0;
border-bottom: 1px solid $gray-200;
font-size: smaller;
i {
float: right; }
&:hover {
color: $gray-500 !important; }
}
}
// fullwidth menu when navbar is collapsed
@media (max-width: 767px) {
& {
position: relative;
}
button.navbar-toggler {
float: right;
}
div.navbar-collapse {
float: none;
position: absolute;
top: 4em;
left: 0;
right: 0;
z-index: 2;
padding: 1em;
border-top: 1px solid shade-color($primary, 25%);
ul.navbar-nav {
display: grid;
grid-template-areas:
"sear sear sear"
"sect user lang";
li.nav-item {
flex-direction: column;
border: 0;
a.nav-link {}
&.navigation-search {
grid-area: sear;
margin-bottom: 1em;
form {
width: 100%;
input.form-control {}
button.btn {}
}
}
&.nav-section { grid-area: sect; }
&.nav-user { grid-area: user; }
&.nav-language { grid-area: lang; }
}
li.dropdown {
&, & > * {
background-color: transparent !important;
}
a.dropdown-toggle {}
div.dropdown-menu {
display: block;
border: 0;
a.dropdown-item {
width: 100%;
border: 0;
border-top: 1px dotted $gray-200;
background-color: transparent !important;
}
}
}
}
}
}
}
}
div.banner {
div.header-name,
div.header-details {
div.row > div:first-child {
@media (min-width: 576px) {
//margin-left: 1.5em;
}
}
}
a {
text-decoration: none;
}
}
div.vertical-menu {
border-radius: 0;
margin-top: 0.5rem;
a.list-group-item {
background-color: $chill-yellow;
border: 0;
margin-bottom: 0.25rem;
&:hover {
background-color: tint-color($chill-yellow, 20%)
}
}
}
footer.footer {
background: $dark;
padding-top: 10px;
padding-bottom: 10px;
width: 100%;
p {
font-family: Open Sans;
font-weight: 300;
clear: both;
color: $white;
font-size: 0.9em;
line-height: 1.5em;
margin: auto;
max-width: 35em;
text-align: center;
a, a:hover {
text-decoration: underline;
}
}
}

View File

@@ -14,7 +14,7 @@ $gray-400: #ced4da !default;
$gray-500: #b2b2b2 !default;
$gray-600: #6c757d !default;
$gray-700: #495057 !default;
$gray-800: #333333 !default;
$gray-800: #2c2d2f !default;
$gray-900: #212529 !default;
$black: #111 !default;
// scss-docs-end gray-color-variables
@@ -160,7 +160,7 @@ $chill-pink: $pink;
$chill-gray: $gray-600;
$chill-dark-gray: $gray-800;
$chill-light-gray: $gray-200;
$chill-llight-gray: $gray-100;
$chill-llight-gray: $gray-100;
// scss-docs-end theme-color-variables
// scss-docs-start theme-colors-map
@@ -176,7 +176,7 @@ $theme-colors: (
) !default;
// scss-docs-end theme-colors-map
$chill-colors: (
$chill-colors: (
"chill-blue": $chill-blue,
"chill-green": $chill-green,
"chill-green-dark": $chill-green-dark,
@@ -382,7 +382,7 @@ $border-color: $gray-300 !default;
// scss-docs-end border-variables
// scss-docs-start border-radius-variables
$border-radius: .25rem !default; // <==
$border-radius: .25rem !default; // <==
$border-radius-sm: .2rem !default;
$border-radius-lg: .3rem !default;
$border-radius-pill: 50rem !default;

View File

@@ -1,36 +1,45 @@
{{ opening_box|raw }}
<div class="">
<div class="comment-embeddable_comment">
{%- if options['limit_lines'] is not null -%}
{% set content = comment.comment|split('\n')|slice(0, options['limit_lines'])|join('\n') %}
{%- else -%}
{% set content = comment.comment %}
{%- endif -%}
{#
Template to render a comment
<blockquote class="chill-user-quote">
OPTIONS
* disable_markdown bool
* limit_lines integer|null
* metadata bool
#}
{{ opening_box|raw }}
{%- if options['limit_lines'] is not null -%}
{% set content = comment.comment|split('\n')|slice(0, options['limit_lines'])|join('\n') %}
{%- else -%}
{% set content = comment.comment %}
{%- endif -%}
<blockquote class="chill-user-quote">
{% if options['disable_markdown'] %}
{{ content|nl2br }}
{% else %}
{{ content|chill_markdown_to_html }}
{% endif %}
</blockquote>
</div>
</div>
{% if options['metadata'] %}
<div class="chill-entity__comment-embeddable__metadata">
{% if user is not empty %}
<span class="chill-entity__comment-embeddable__user">
{{ 'Last updated by'| trans }} {{ user|chill_entity_render_box(options['user']) }}
</span>';
{% endif %}
{% if comment.date is not empty %}
<span class="chill-entity__comment-embeddable__date">
{% if user is empty %}{{ 'Last updated on'|trans ~ ' ' }}{% else %}{{ 'on'|trans ~ ' ' }}{% endif %}
{{ comment.date|format_datetime("medium", "short") }}
</span>
{% endif %}
</div>
{% endif %}
{{ closing_box|raw }}
{% if options['metadata'] %}
<div class="metadata">
{% if user is not empty %}
{{ 'Last updated by'| trans }}
<span class="user">
{{ user|chill_entity_render_box(options['user']) }}
</span>
{% endif %}
{% if comment.date is not empty %}
{% if user is empty %}
{{ 'Last updated on'|trans ~ ' ' }}
{% else %}
{{ 'on'|trans ~ ' ' }}
{% endif %}
<span class="date">
{{ comment.date|format_datetime("medium", "short") }}
</span>
{% endif %}
</div>
{% endif %}
</blockquote>
{{ closing_box|raw }}

View File

@@ -53,23 +53,30 @@
{% block sublayout_content %}
<div class="row justify-content-center my-5">
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 mb-5 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{# Flash messages ! #}
{% if app.session.flashbag.keys()|length > 0 %}
<div class="col-8 mb-5 flash_message">
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 mb-5 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 mb-5 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
</div>
{% endif %}
{% block content %}
<div class="col-8 main_search">

View File

@@ -27,23 +27,30 @@
<div class="row">
<div class="col-md-9 my-5">
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 mb-5 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{# Flash messages ! #}
{% if app.session.flashbag.keys()|length > 0 %}
<div class="row justify-content-center mb-5">
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 mb-5 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 mb-5 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
</div>
{% endif %}
{% block layout_wvm_content %}<!-- content of the layoutWithVerticalMenu is empty -->
{% endblock %}