field_entree_liee is multi-value, but the single #tags entity_autocomplete rendered it as one comma-separated text box -- functionally correct but easy to mistake for "only one entrée can be linked". Rebuilt as one autocomplete field per link plus an "Ajouter une référence" button (the classic Drupal multi-value pattern, matching the Répartition paragraphs widget already used elsewhere in this form). Clearing a field's text drops that link on save, rather than a "remove" button -- a remove button would need to shift every later delta, which fights Drupal's own value-restoration-on-AJAX-rebuild (verified live: that restoration only works cleanly for pure appends at a stable delta, which is all addItem() does). Verified end-to-end via raw AJAX POSTs against a real 3-entrée versement: initial load pre-fills 3 separate fields, "Ajouter" appends a 4th empty one without disturbing the first 3, and submitting with one field cleared and a new one filled saves exactly the expected set.
112 lines
3.5 KiB
CSS
112 lines
3.5 KiB
CSS
/* Grand livre / Dashboard switcher, top-right of both pages. Only present
|
|
on those two custom routes, but attached here rather than duplicated
|
|
between home.css and dashboard.css -- and defined with its own explicit
|
|
colors rather than relying on either page's #figli-*-app-scoped custom
|
|
properties, since this <nav> sits outside both of those elements. */
|
|
.figli-page-nav {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 0.4rem;
|
|
padding: 0.5rem 0.25rem 0;
|
|
}
|
|
.figli-page-nav a {
|
|
padding: 0.3rem 0.8rem;
|
|
border-radius: 6px;
|
|
font-size: 0.82rem;
|
|
font-weight: 600;
|
|
text-decoration: none;
|
|
color: #6b7280;
|
|
border: 1px solid transparent;
|
|
}
|
|
.figli-page-nav a:hover {
|
|
border-color: #dcdee2;
|
|
}
|
|
.figli-page-nav a.is-active {
|
|
background: #eef1f6;
|
|
color: #1a1a1a;
|
|
}
|
|
html.gin--dark-mode .figli-page-nav a {
|
|
color: #a1a5ab;
|
|
}
|
|
html.gin--dark-mode .figli-page-nav a:hover {
|
|
border-color: #3d3e42;
|
|
}
|
|
html.gin--dark-mode .figli-page-nav a.is-active {
|
|
background: #2c2d30;
|
|
color: #e8e9ea;
|
|
}
|
|
|
|
/* "Lier à une entrée client" modal (LinkEntreeForm): one autocomplete
|
|
field per linked entrée instead of a single comma-separated field --
|
|
tighten the default spacing between them a little. */
|
|
#figli-entree-liee-items .form-item {
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
/* Drupal status messages: fixed top-right, out of document flow, so they
|
|
never shift the page layout the way the default in-flow placement does
|
|
-- and shrunk to a fraction of Gin's default size, which is sized for a
|
|
single full-width flash banner on an admin form, not a toast for
|
|
frequent background feedback here. Targets both the real region
|
|
([data-drupal-messages], present once a message is queued on a normal
|
|
page load) and the JS-only fallback container
|
|
([data-drupal-messages-fallback], used when Drupal.Message.add() -- our
|
|
own MessageCommand-driven AJAX messages included -- has no region to
|
|
attach to). Auto-dismiss timing for non-error messages is handled in
|
|
admin-chrome.js. */
|
|
[data-drupal-messages],
|
|
[data-drupal-messages-fallback] {
|
|
position: fixed !important;
|
|
top: 0.75rem;
|
|
right: 0.75rem;
|
|
left: auto !important;
|
|
width: auto;
|
|
max-width: 22rem;
|
|
z-index: 1000;
|
|
}
|
|
[data-drupal-messages] .messages-list__wrapper,
|
|
[data-drupal-messages] .messages__wrapper,
|
|
[data-drupal-messages-fallback] .messages-list__wrapper,
|
|
[data-drupal-messages-fallback] .messages__wrapper {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.4rem;
|
|
}
|
|
[data-drupal-messages] .messages,
|
|
[data-drupal-messages-fallback] .messages {
|
|
padding: 0.5rem 0.6rem;
|
|
font-size: 0.78rem;
|
|
line-height: 1.3;
|
|
border-radius: 6px;
|
|
}
|
|
[data-drupal-messages] .messages__header,
|
|
[data-drupal-messages-fallback] .messages__header {
|
|
margin-block-end: 0.15rem;
|
|
margin-inline-end: 1.1em;
|
|
}
|
|
[data-drupal-messages] .messages__header::before,
|
|
[data-drupal-messages-fallback] .messages__header::before {
|
|
width: 1rem !important;
|
|
height: 1rem !important;
|
|
}
|
|
[data-drupal-messages] .messages__title,
|
|
[data-drupal-messages-fallback] .messages__title {
|
|
font-size: 0.78rem;
|
|
}
|
|
[data-drupal-messages] .messages__title,
|
|
[data-drupal-messages] .messages__content,
|
|
[data-drupal-messages-fallback] .messages__title,
|
|
[data-drupal-messages-fallback] .messages__content {
|
|
margin-inline-start: 1.4rem;
|
|
}
|
|
[data-drupal-messages] .button--dismiss,
|
|
[data-drupal-messages-fallback] .button--dismiss {
|
|
height: 20px !important;
|
|
width: 20px !important;
|
|
margin: 0.3rem !important;
|
|
}
|
|
[data-drupal-messages] .button--dismiss .icon-close,
|
|
[data-drupal-messages-fallback] .button--dismiss .icon-close {
|
|
mask-size: 11px 11px !important;
|
|
}
|