mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-20 14:43:49 +00:00
Merge branch 'master' into 102_activites_annexes
This commit is contained in:
@@ -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,
|
||||
],
|
||||
],
|
||||
],
|
||||
);
|
||||
|
@@ -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;
|
||||
},
|
||||
[]
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@@ -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 {}
|
||||
}
|
||||
|
@@ -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; }
|
@@ -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');
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -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; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
@@ -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)
|
||||
|
@@ -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;
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +0,0 @@
|
||||
.chill-entity__comment-embeddable {
|
||||
.chill-entity__comment-embeddable__metadata {
|
||||
font-size: smaller;
|
||||
color: var(--chill-light-gray);
|
||||
}
|
||||
}
|
@@ -1,2 +0,0 @@
|
||||
// css classes to render entities
|
||||
require('./comment_embeddable.scss');
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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 }}
|
||||
|
@@ -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">
|
||||
|
@@ -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 %}
|
||||
|
Reference in New Issue
Block a user