Merge branch 'main' into be_stupid_about_spec_system_logout

This commit is contained in:
LeSim 2022-10-11 12:08:41 +02:00 committed by GitHub
commit 1c3990083b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
129 changed files with 730 additions and 1111 deletions

View file

@ -0,0 +1,28 @@
@import "placeholders";
turbo-events {
display: none;
}
.page-wrapper {
position: relative;
min-height: 100%;
}
// Mobile Safari doesn't bubble mouse events by default, unless:
//
// - the target element of the event is a link or a form field.
// - the target element, or any of its ancestors up to but not including the <body>, has an explicit event handler set for any of the mouse events. This event handler may be an empty function.
// - the target element, or any of its ancestors up to and including the document has a cursor: pointer CSS declarations.
//
// (See https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html)
//
// This is a problem for us, because we bind a lot of click events as
// `document.on('click', '.my-element', )` which requires proper bubbling.
.ios .page-wrapper {
cursor: pointer;
}
.container {
@extend %container;
}

View file

@ -1,3 +1,5 @@
@import "constants";
@mixin horizontal-padding($value) { @mixin horizontal-padding($value) {
padding-left: $value; padding-left: $value;
padding-right: $value; padding-right: $value;
@ -20,3 +22,4 @@
background-image: image-url($image-url); background-image: image-url($image-url);
} }
} }

View file

@ -1,4 +1,5 @@
@import "colors"; @import "colors";
@import "mixins";
@import "constants"; @import "constants";
%horizontal-list { %horizontal-list {
@ -25,3 +26,10 @@
outline: 3px solid $blue-france-500; outline: 3px solid $blue-france-500;
} }
} }
%container { // TODO: switch to new design with preview in two view not in two column https://github.com/betagouv/demarches-simplifiees.fr/issues/7882
@include horizontal-padding($default-padding);
max-width: $page-width + 2 * $default-padding;
margin-left: auto;
margin-right: auto;
}

View file

@ -1,12 +0,0 @@
@import "colors";
%new-type {
font-family: "Marianne", system-ui, -apple-system, sans-serif;
color: $black;
}
ol {
line-height: 28px;
list-style-type: decimal;
list-style-position: inside;
}

View file

@ -11,7 +11,7 @@
.admin-procedures-list-row.infos { .admin-procedures-list-row.infos {
align-items: flex-start; align-items: flex-start;
a { a:not(:hover) {
color: $blue-france-500; background-image: none; // remove DSFR underline
} }
} }

View file

@ -1,6 +1 @@
// = require ./reset
// = require ./custom_reset
// = require ./common
// = require ./utils
// = require ./fonts
// = require_tree . // = require_tree .

View file

@ -12,4 +12,8 @@ table.archive-table {
td { td {
padding: 3 * $default-spacer $default-spacer; padding: 3 * $default-spacer $default-spacer;
} }
a.button {
background-image: none; // remove DSFR underline
}
} }

View file

@ -11,6 +11,14 @@
.button { .button {
text-transform: lowercase; text-transform: lowercase;
background-image: none; // remove DSFR underline, TODO: switch to DSFR download links https://github.com/betagouv/demarches-simplifiees.fr/issues/7883
}
}
.attachment-link {
a:not(:hover) {
background-image: none; // remove DSFR underline
} }
} }

View file

@ -1,5 +1,4 @@
@import "colors"; @import "colors";
@import "common";
@import "constants"; @import "constants";
.give-avis { .give-avis {
@ -75,18 +74,6 @@
} }
.list-avis { .list-avis {
.count {
display: inline-block;
width: 20px;
height: 20px;
border-radius: 10px;
border: 1px solid $grey;
text-align: center;
font-size: 12px;
font-weight: normal;
margin-left: 8px;
}
.one-avis { .one-avis {
border-top: 1px solid $grey; border-top: 1px solid $grey;
padding: $default-padding 0; padding: $default-padding 0;
@ -128,12 +115,6 @@
} }
} }
.date,
.waiting {
font-size: 12px;
color: $dark-grey;
}
.date { .date {
float: right; float: right;
} }

View file

@ -1,6 +1,3 @@
@import "typography";
@import "colors";
.avis-sign-up { .avis-sign-up {
.left { .left {
p { p {

View file

@ -183,6 +183,11 @@
top: 5 * $default-spacer; top: 5 * $default-spacer;
cursor: default; cursor: default;
z-index: 10; z-index: 10;
list-style: none;
a {
background-image: none; // remove DSFR underline
}
&.left-aligned { &.left-aligned {
left: 0; left: 0;
@ -256,6 +261,7 @@
a { a {
color: $dark-grey; color: $dark-grey;
background-image: none; // remove DSFR underline
} }
// Make child links fill the whole clickable area // Make child links fill the whole clickable area
@ -311,6 +317,10 @@
[disabled] { [disabled] {
display: none; display: none;
} }
ul {
list-style: none;
}
} }
.link { .link {

View file

@ -2,7 +2,6 @@
@import "constants"; @import "constants";
.card-admin { .card-admin {
color: $black;
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
width: 236px; width: 236px;
@ -45,6 +44,10 @@
margin: auto auto 0 auto; margin: auto auto 0 auto;
} }
p {
margin-bottom: 0;
}
&:hover { &:hover {
color: $blue-france-500; color: $blue-france-500;

View file

@ -1,86 +0,0 @@
@import "colors";
@import "constants";
@import "mixins";
@import "placeholders";
@import "typography";
body,
input,
textarea,
select {
@extend %new-type;
font-size: 16px;
line-height: 1.42857143;
}
dt {
margin-bottom: 0.5em;
}
.page-wrapper {
position: relative;
min-height: 100%;
}
// Mobile Safari doesn't bubble mouse events by default, unless:
//
// - the target element of the event is a link or a form field.
// - the target element, or any of its ancestors up to but not including the <body>, has an explicit event handler set for any of the mouse events. This event handler may be an empty function.
// - the target element, or any of its ancestors up to and including the document has a cursor: pointer CSS declarations.
//
// (See https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html)
//
// This is a problem for us, because we bind a lot of click events as
// `document.on('click', '.my-element', )` which requires proper bubbling.
.ios .page-wrapper {
cursor: pointer;
}
h1 {
font-size: 36px;
font-weight: bold;
}
strong {
font-weight: bold;
}
a[target="_blank"]::after {
content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAQElEQVR42qXKwQkAIAxDUUdxtO6/RBQkQZvSi8I/pL4BoGw/XPkh4XigPmsUgh0626AjRsgxHTkUThsG2T/sIlzdTsp52kSS1wAAAABJRU5ErkJggg==);
margin: 0 3px 0 5px;
}
a {
color: $blue-france-500;
}
em {
font-style: italic;
}
strong {
font-weight: bold;
}
sup {
vertical-align: super;
font-size: 0.83em;
}
small {
font-size: small;
}
.container {
@include horizontal-padding($default-padding);
max-width: $page-width + 2 * $default-padding;
margin-left: auto;
margin-right: auto;
}
.small-container {
@include horizontal-padding($default-padding);
max-width: $small-page-width + 2 * $default-padding;
margin-left: auto;
margin-right: auto;
}

View file

@ -1,28 +0,0 @@
@import "colors";
@import "placeholders";
html,
body {
height: 100%;
background-color: $white;
}
html {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
a {
@extend %outline;
text-decoration: none;
}
turbo-events {
display: none;
}

View file

@ -1,5 +1,4 @@
@import "colors"; @import "colors";
@import "common";
@import "constants"; @import "constants";
#dossier-annotations-privees { #dossier-annotations-privees {

View file

@ -17,6 +17,10 @@
color: #000000; color: #000000;
} }
a {
background-image: none; // remove DSFR underline
}
.caret-icon { .caret-icon {
vertical-align: top; vertical-align: top;
margin-top: 9px; margin-top: 9px;
@ -81,6 +85,10 @@
.follow-col { .follow-col {
width: 200px; width: 200px;
.fr-btn {
margin-bottom: 0;
}
} }
} }

View file

@ -1,23 +1,13 @@
@import "colors"; @import "colors";
// Hacky override default text underline of DSFR because we don't want to underline links in our legacy UI. // override default transparent background on inputs & font-size to 16px by default
// We don't match links having a dsfr class (prefixed by fr-).
// However DSFR components may contain links without fr- class on them,
// so these links can be artificially matched by adding any fr-class on them, (like fr-underlined)
body [href]:not([class^="fr-"]) {
background-image: none;
}
// override default transparent background on inputs
input, input,
textarea, textarea,
select { select {
background: $white; background: $white;
font-size: 1em;
} }
#footer a {
color: #333333;
}
// with Marianne font, weight of font is less bolder, so bold it up // with Marianne font, weight of font is less bolder, so bold it up
.button.primary { .button.primary {
font-weight: bold; font-weight: bold;
@ -40,3 +30,9 @@ input[type="radio"] {
textarea { textarea {
cursor: auto; cursor: auto;
} }
fieldset {
border: none;
padding-left: 0;
padding-bottom: 0;
}

View file

@ -1,14 +0,0 @@
@font-face {
font-family: "Marianne";
src: asset-url("Marianne-Regular.woff2") format("woff2"),
asset-url("Marianne-Regular.woff") format("woff");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "Spectrale";
src: asset-url("Spectral-Regular.ttf") format("ttf");
font-weight: bold;
font-style: normal;
}

View file

@ -3,10 +3,6 @@
@import "mixins"; @import "mixins";
@import "placeholders"; @import "placeholders";
.landing {
background-color: #FFFFFF;
}
.landing-panel { .landing-panel {
@include vertical-padding(60px); @include vertical-padding(60px);
} }
@ -32,13 +28,11 @@ $landing-breakpoint: 1040px;
} }
.hero-tagline { .hero-tagline {
font-size: 40px;
margin-bottom: 0px; margin-bottom: 0px;
} }
.hero-tagline-em { .hero-tagline-em {
color: $blue-france-500; color: $blue-france-500;
font-size: 40px;
font-style: normal; font-style: normal;
font-weight: bold; font-weight: bold;
} }
@ -55,24 +49,10 @@ $landing-breakpoint: 1040px;
} }
} }
.landing-panel-title {
width: 100%;
font-size: 30px;
font-weight: normal;
text-align: center;
margin-bottom: 40px;
margin-top: 0;
color: $g700;
}
.features-panel { .features-panel {
background-color: $blue-france-500; background-color: $blue-france-500;
} }
.features-panel-title {
color: #FFFFFF;
}
.features { .features {
@extend %horizontal-list; @extend %horizontal-list;
width: 100%; width: 100%;
@ -186,15 +166,17 @@ $landing-breakpoint: 1040px;
} }
.number-value { .number-value {
color: $blue-france-500; color: var(--text-action-high-blue-france);
font-weight: bold; font-size: 2rem;
font-size: 36px; line-height: 2rem;
font-weight: 600;
} }
.number-label { .number-label {
font-weight: bold; font-weight: 600;
font-size: 20px; font-size: 1.25rem;
color: $g700; line-height: 1.5rem;
color: var(--text-label-grey);
} }
$users-breakpoint: 950px; $users-breakpoint: 950px;
@ -238,17 +220,6 @@ $users-breakpoint: 950px;
height: 180px; height: 180px;
} }
.cta-role-title {
font-size: 30px;
font-weight: bold;
margin-top: 13px;
}
.cta-role-explanation {
font-size: 30px;
margin-bottom: 10px;
}
.cta-panel { .cta-panel {
background-color: $blue-france-500; background-color: $blue-france-500;
color: #FFFFFF; color: #FFFFFF;
@ -258,8 +229,7 @@ $users-breakpoint: 950px;
} }
} }
.role-panel-wrapper, .role-panel-wrapper {
.cta-panel-wrapper {
width: 100%; width: 100%;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@ -315,24 +285,6 @@ $users-breakpoint: 950px;
} }
} }
.half .cta-panel-title,
.half .cta-panel-explanation {
text-align: center;
}
.role-panel-title {
font-size: 30px;
font-weight: bold;
line-height: 36px;
margin-bottom: 15px;
color: $g700;
}
.role-panel-explanation {
font-size: 24px;
margin-bottom: 10px;
}
.role-administrations-image { .role-administrations-image {
text-align: right; text-align: right;
@ -392,84 +344,3 @@ $cta-panel-button-border-size: 2px;
outline: 3px solid #FFFFFF; outline: 3px solid #FFFFFF;
} }
} }
.cta-panel-button-blue {
@include cta-panel-button;
border: $cta-panel-button-border-size solid $blue-france-700;
color: $blue-france-700;
&:hover {
color: #FFFFFF;
background-color: $blue-france-500;
text-decoration: none;
&:focus {
color: #FFFFFF;
}
}
&:focus {
color: $blue-france-500;
text-decoration: none;
}
}
@mixin role-button {
@include horizontal-padding(30px);
display: inline-block;
border-radius: 100px;
font-size: 20px;
text-align: center;
cursor: pointer;
margin-top: 20px;
line-height: 50px;
}
.role-panel-button-primary {
@include role-button;
background-color: $blue-france-700;
color: #FFFFFF;
&:hover {
color: #FFFFFF;
text-decoration: none;
background-color: $blue-france-500;
}
&:focus {
color: #FFFFFF;
text-decoration: none;
}
}
.role-panel-button-secondary {
@include role-button;
border: $cta-panel-button-border-size solid $blue-france-700;
line-height: 50px - 2 * $cta-panel-button-border-size;
color: $blue-france-700;
margin-left: 10px;
@media (max-width: $users-breakpoint) {
margin-left: 0px;
}
&:hover {
color: $blue-france-500;
border: $cta-panel-button-border-size solid $blue-france-500;
text-decoration: none;
}
&:focus {
color: $light-blue;
text-decoration: none;
}
}
.half {
width: 45%;
float: left;
}
.first-half {
margin-right: 10%;
}

View file

@ -1,6 +1,6 @@
@import "colors"; @import "colors";
@import "common";
@import "constants"; @import "constants";
@import "placeholders";
.two-columns { .two-columns {
background-color: $white; background-color: $white;
@ -9,8 +9,8 @@
background: linear-gradient(to right, #FFFFFF 0%, #FFFFFF 50%, $light-grey 50%, $light-grey 100%); background: linear-gradient(to right, #FFFFFF 0%, #FFFFFF 50%, $light-grey 50%, $light-grey 100%);
} }
.columns-container { .columns-container { // TODO: https://github.com/betagouv/demarches-simplifiees.fr/issues/7882, once implemented, we won't need container anymore
@extend .container; @extend %container;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;

View file

@ -1,5 +1,3 @@
@import "colors";
@import "common";
@import "constants"; @import "constants";
.merci .monavis { .merci .monavis {

View file

@ -25,12 +25,6 @@
font-weight: bold; font-weight: bold;
} }
.guest,
.date {
font-size: 12px;
color: $dark-grey;
}
.date { .date {
float: right; float: right;
} }

View file

@ -1,7 +1,4 @@
@import "colors";
@import "constants";
@import "mixins"; @import "mixins";
@import "placeholders";
.landing-footer { .landing-footer {
@include vertical-padding(72px); @include vertical-padding(72px);
@ -12,50 +9,6 @@
line-height: 24px; line-height: 24px;
} }
.footer-columns {
@extend %horizontal-list;
justify-content: flex-start;
margin: 0 -15px;
}
.footer-column {
@extend %horizontal-list-item;
font-size: 14px;
vertical-align: top;
flex: 0 0 33.333333%;
min-width: 280px;
margin-bottom: 30px;
@media (max-width: 550px) {
width: 100%;
}
}
.footer-logos,
.footer-links {
list-style-type: none;
padding: 0;
margin: 0;
}
.footer-header {
font-size: 14px;
font-weight: bold;
margin-bottom: 10px;
}
.footer-link {
margin-bottom: 14px;
&:last-of-type {
margin-bottom: 0;
}
}
.footer-text {
margin-bottom: 14px;
}
.footer-logo:hover { .footer-logo:hover {
opacity: 0.8; opacity: 0.8;
} }
@ -67,56 +20,3 @@
height: 25px; height: 25px;
margin-top: 14px; margin-top: 14px;
} }
.footer-logo-france {
@include ie-compatible-background-image("republique-francaise-logo.svg");
width: 105px;
height: 90px;
}
.footer-link a,
.footer-text a {
color: $black;
text-decoration: none;
&:hover,
&:focus {
color: $blue-france-700;
text-decoration: none;
}
}
.footer-bottom-line {
text-align: center;
font-size: small;
@media (max-width: 550px) {
text-align: left;
}
}
.footer-row {
margin-bottom: 30px;
// In this case, the bottom margin is defined directly on each individual column
&.footer-columns {
margin-bottom: 0;
}
}
.footer-site-links {
li {
display: inline;
&::before {
content: "-";
margin: $default-spacer;
}
&:first-child::before {
content: none;
}
}
}

View file

@ -1,17 +1,3 @@
@import "colors";
@import "common";
@import "constants";
@import "mixins";
@import "utils";
$header-landing-breakpoint: 1040px;
$header-mobile-breakpoint: 550px;
// FIXME: Rename when the header is generalized
.new-header {
background-color: #FFFFFF;
}
// No drop shadow when a notice is shown. // No drop shadow when a notice is shown.
.fr-header.fr-header__with-notice-info { .fr-header.fr-header__with-notice-info {
&, &,
@ -19,233 +5,3 @@ $header-mobile-breakpoint: 550px;
filter: none; filter: none;
} }
} }
.header-inner-content {
@extend .container;
display: flex;
justify-content: space-between;
min-height: 72px;
}
.header-logo {
display: flex;
flex-wrap: wrap;
align-items: center;
color: $blue-france-500;
img {
margin-right: 10px;
}
.site-title {
font-size: 24px;
font-weight: bold;
&.small {
@media (min-width: $header-mobile-breakpoint) {
display: none;
}
}
&.big {
@media (max-width: $header-mobile-breakpoint) {
display: none;
}
}
}
}
.header-tabs {
li {
@include horizontal-padding($default-padding);
display: inline-block;
}
.tab-link {
display: inline-block;
height: 72px;
line-height: 72px;
font-size: 18px;
color: $black;
&.active,
&:hover {
color: $blue-france-500;
border-bottom: 2px solid $blue-france-500;
&.contact-link {
position: relative;
border-bottom: none;
.contact-details {
display: block;
}
}
}
}
}
.contact-details {
display: none;
position: absolute;
left: -165px;
background: #FFFFFF;
border: 2px solid $blue-france-500;
border-radius: 5px;
padding: 15px;
width: 400px;
color: $black;
z-index: 100;
font-size: initial;
line-height: 1.6;
&::after,
&::before {
bottom: 100%;
left: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
&::after {
border-color: rgba(255, 255, 255, 0);
border-bottom-color: #FFFFFF;
border-width: 15px;
margin-left: -15px;
}
&::before {
border-color: rgba(255, 255, 255, 0);
border-bottom-color: $blue-france-500;
border-width: 18px;
margin-left: -18px;
}
ul {
list-style-type: disc;
}
}
.header-right-content {
display: flex;
align-items: center;
> li {
@include horizontal-padding(8px);
&:last-child {
padding-right: 0;
}
}
}
.header-search {
position: relative;
.form input[type=text] {
padding: 9px;
padding-right: 42px;
float: right;
max-width: 300px;
min-width: 90px;
margin: 0;
}
label.hidden {
@extend .hidden;
}
button {
@extend %outline;
padding: 9px;
border: none;
background: none;
cursor: pointer;
position: absolute;
right: 0;
&:hover {
opacity: 0.8;
}
}
}
.header-menu-opener {
position: relative;
img {
cursor: pointer;
&:hover {
opacity: 0.8;
}
}
}
.header-menu-button {
border: none;
padding: 0;
line-height: 14px;
vertical-align: middle;
&:hover {
background: none;
}
}
.header-menu {
display: none;
position: absolute;
right: 0;
top: 34px;
font-size: 14px;
background: #FFFFFF;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
border: 1px solid $border-grey;
min-width: 270px;
max-width: 340px;
z-index: 20;
&.open {
display: block;
}
li {
border-bottom: 1px solid $border-grey;
&:last-child {
border-bottom: none;
}
.menu-item {
align-items: center;
padding: 14px;
color: $dark-grey;
overflow: hidden;
text-overflow: ellipsis;
img {
margin-right: 14px;
}
}
.menu-link {
display: flex;
color: $black;
&.active {
font-weight: bold;
}
&:hover {
background: $light-grey;
}
}
}
}

View file

@ -1,5 +1,4 @@
@import "colors"; @import "colors";
@import "fonts";
@media print { @media print {
.new-header, .new-header,

View file

@ -1,7 +1,10 @@
.procedure-grid { .procedure-grid {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
> a { // TODO, re-use DSFR https://github.com/betagouv/demarches-simplifiees.fr/issues/7884
background-image: none; // remove DSFR underline
}
} }
.procedure-admin-container { .procedure-admin-container {
@ -12,6 +15,10 @@
.button { .button {
margin-right: 10px; margin-right: 10px;
} }
a {
background-image: none; // remove DSFR underline
}
} }
.procedure-admin-listing-container { .procedure-admin-listing-container {

View file

@ -158,9 +158,6 @@
font-size: 14px; font-size: 14px;
a { a {
text-decoration: underline;
text-decoration-style: dotted;
// Remove the icon indicating an external link (for less visual noise) // Remove the icon indicating an external link (for less visual noise)
&[target="_blank"]::after { &[target="_blank"]::after {
display: none; display: none;

View file

@ -4,25 +4,11 @@
.procedure-list { .procedure-list {
.procedure-item { .procedure-item {
border-bottom: 1px solid $border-grey; background-color: rgba(0, 0, 0, 0.02);
}
&:last-child { .procedure-logo-link {
border-bottom: none; background-image: none;
}
a {
@include vertical-padding(24px);
color: $black;
width: 100%;
&:hover {
background-color: $light-grey;
.procedure-title {
text-decoration: underline;
}
}
}
} }
.procedure-logo { .procedure-logo {
@ -34,30 +20,29 @@
background-position: 95% 50%; background-position: 95% 50%;
} }
.procedure-title {
min-height: 40px;
font-size: 20px;
margin-bottom: 16px;
}
.procedure-status { .procedure-status {
margin-left: auto; margin-left: auto;
} }
.procedure-stats { .procedure-stats {
list-style-type: none;
padding-inline-start: 0;
li { li {
min-height: 36px; min-height: 36px;
border-left: 1px solid $border-grey;
width: 90px; width: 90px;
position: relative; position: relative;
border-left: 1px solid $border-grey;
&:first-child {
border-left: none;
}
&:hover { &:hover {
background-color: rgba(0, 0, 0, 0.05); background-color: rgba(0, 0, 0, 0.05);
} }
&:last-child {
border-right: 1px solid $border-grey;
}
.stats-number, .stats-number,
.stats-legend { .stats-legend {

View file

@ -1,5 +1,4 @@
@import "colors"; @import "colors";
@import "common";
@import "constants"; @import "constants";
.procedure-header { .procedure-header {

View file

@ -1,48 +0,0 @@
/*
http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-spacing: 0;
}

View file

@ -10,4 +10,13 @@
.container { .container {
margin-bottom: -1px; margin-bottom: -1px;
} }
.breadcrumbs {
list-style: none;
padding-inline-start: 0;
a:not(:hover) {
background-image: none; // remove DSFR underline
}
}
} }

View file

@ -2,6 +2,10 @@
@import "mixins"; @import "mixins";
.tabs { .tabs {
ul {
margin-bottom: 0;
}
li { li {
display: inline-block; display: inline-block;
line-height: 36px; line-height: 36px;
@ -16,6 +20,7 @@
padding-left: 20px; padding-left: 20px;
padding-right: 20px; padding-right: 20px;
color: $black; color: $black;
background-image: none;
} }
&.active { &.active {

View file

@ -2,10 +2,12 @@
- if template&.attached? - if template&.attached?
%p.mb-1 %p.mb-1
Veuillez télécharger, remplir et joindre Veuillez télécharger, remplir et joindre
= link_to('le modèle suivant', url_for(template), target: '_blank', rel: 'noopener') = link_to(url_for(template), download: "", class: "fr-link fr-link--icon-right fr-icon-download-line") do
le modèle suivant
- if helpers.administrateur_signed_in? - if helpers.administrateur_signed_in?
%em.fr-text-mention--grey.fr-text--xs.visible-on-previous-hover %span.ml-2.fr-text--xs.fr-text-mention--grey.visible-on-previous-hover
%span.fr-text-action-high--blue-france.fr-icon-questionnaire-line{ "aria-hidden": "true" }
= t('shared.ephemeral_link') = t('shared.ephemeral_link')
- if persisted? - if persisted?

View file

@ -1,12 +1,12 @@
= image_tag(icon_path, class: 'person-icon', alt: '') = image_tag(icon_path, class: 'person-icon', alt: '')
.width-100 .width-100
%h2 %h2.fr-h6
%span.mail %span.mail
= commentaire_issuer = commentaire_issuer
- if commentaire_from_guest? - if commentaire_from_guest?
%span.guest= t('.guest') %span.fr-text--xs.fr-text-mention--grey.font-weight-normal= t('.guest')
%span.date{ class: highlight_if_unseen_class, data: scroll_to_target } %span.date{ class: ["fr-text--xs", "fr-text-mention--grey", "font-weight-normal", highlight_if_unseen_class], data: scroll_to_target }
= commentaire_date = commentaire_date
.rich-text= commentaire_body .rich-text= commentaire_body

View file

@ -7,6 +7,6 @@
= text_field_tag :query, params[:query], required: true, placeholder: 'politique de la ville', minlength: "3" = text_field_tag :query, params[:query], required: true, placeholder: 'politique de la ville', minlength: "3"
= submit_tag 'Rechercher', class: 'button primary' = submit_tag 'Rechercher', class: 'fr-btn'
= render Procedure::ResultsComponent.new(grouped_procedures: @grouped_procedures) = render Procedure::ResultsComponent.new(grouped_procedures: @grouped_procedures)

View file

@ -191,10 +191,12 @@ module Administrateurs
end end
def update_routing_criteria_name def update_routing_criteria_name
procedure.update!(routing_criteria_name: routing_criteria_name) if procedure.update(routing_criteria_name: routing_criteria_name)
flash[:notice] = "Le libellé est maintenant « #{procedure.routing_criteria_name} »."
redirect_to admin_procedure_groupe_instructeurs_path(procedure), else
notice: "Le libellé est maintenant « #{procedure.routing_criteria_name} »." flash[:alert] = "Le libellé du routage doit être rempli."
end
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
end end
def update_routing_enabled def update_routing_enabled

View file

@ -181,7 +181,14 @@ module Users
respond_to do |format| respond_to do |format|
format.html { render :brouillon } format.html { render :brouillon }
format.turbo_stream { render layout: false } format.turbo_stream do
@to_shows, @to_hides = @dossier.champs
.filter(&:conditional?)
.partition(&:visible?)
.map { |champs| champs_to_one_selector(champs) }
render(:update, layout: false)
end
end end
end end
@ -205,7 +212,14 @@ module Users
respond_to do |format| respond_to do |format|
format.html { render :modifier } format.html { render :modifier }
format.turbo_stream { render layout: false } format.turbo_stream do
@to_shows, @to_hides = @dossier.champs
.filter(&:conditional?)
.partition(&:visible?)
.map { |champs| champs_to_one_selector(champs) }
render layout: false
end
end end
end end
@ -392,7 +406,7 @@ module Users
end end
def dossier_with_champs def dossier_with_champs
dossier_scope.with_champs.find(params[:id]) DossierPreloader.load_one(dossier)
end end
def should_change_groupe_instructeur? def should_change_groupe_instructeur?
@ -521,5 +535,12 @@ module Users
# rubocop:enable Lint/BooleanSymbol # rubocop:enable Lint/BooleanSymbol
end end
end end
def champs_to_one_selector(champs)
champs
.map(&:input_group_id)
.map { |id| "##{id}" }
.join(',')
end
end end
end end

View file

@ -19,7 +19,6 @@ class ProcedureDashboard < Administrate::BaseDashboard
zone: Field::BelongsTo, zone: Field::BelongsTo,
lien_site_web: Field::String, # TODO: use Field::Url when administrate-v0.12 will be released lien_site_web: Field::String, # TODO: use Field::Url when administrate-v0.12 will be released
organisation: Field::String, organisation: Field::String,
direction: Field::String,
created_at: Field::DateTime, created_at: Field::DateTime,
updated_at: Field::DateTime, updated_at: Field::DateTime,
for_individual: Field::Boolean, for_individual: Field::Boolean,
@ -67,7 +66,6 @@ class ProcedureDashboard < Administrate::BaseDashboard
:description, :description,
:lien_site_web, :lien_site_web,
:organisation, :organisation,
:direction,
:zone, :zone,
:service, :service,
:created_at, :created_at,

View file

@ -128,4 +128,8 @@ module ApplicationHelper
def external_link_attributes def external_link_attributes
{ target: "_blank", rel: "noopener noreferrer" } { target: "_blank", rel: "noopener noreferrer" }
end end
def download_details(attachment)
"#{attachment.filename.extension.upcase} #{number_to_human_size(attachment.byte_size)}"
end
end end

View file

@ -8,11 +8,17 @@ module ProcedureHelper
end end
def procedure_libelle(procedure) def procedure_libelle(procedure)
parts = procedure.brouillon? ? [tag.span(t('helpers.procedure.testing_procedure'), class: 'badge')] : [] parts = procedure.brouillon? ? [procedure_badge(procedure)] : []
parts << procedure.libelle parts << procedure.libelle
safe_join(parts, ' ') safe_join(parts, ' ')
end end
def procedure_badge(procedure)
return nil unless procedure.brouillon?
tag.span(t('helpers.procedure.testing_procedure'), class: 'fr-badge')
end
def procedure_publish_label(procedure, key) def procedure_publish_label(procedure, key)
# i18n-tasks-use t('modal.publish.body.publish') # i18n-tasks-use t('modal.publish.body.publish')
# i18n-tasks-use t('modal.publish.body.reopen') # i18n-tasks-use t('modal.publish.body.reopen')

View file

@ -25,6 +25,7 @@ export default function ComboAdresseSearch({
minimumInputLength={2} minimumInputLength={2}
transformResult={({ properties: { label } }) => [label, label, label]} transformResult={({ properties: { label } }) => [label, label, label]}
transformResults={(_, result) => (result as RawResult).features} transformResults={(_, result) => (result as RawResult).features}
debounceDelay={300}
/> />
</QueryClientProvider> </QueryClientProvider>
); );

View file

@ -1,9 +1,5 @@
import React, { import React, { useState, useRef, ChangeEventHandler } from 'react';
useState, import { useDebounce } from 'use-debounce';
useRef,
useDeferredValue,
ChangeEventHandler
} from 'react';
import { useQuery } from 'react-query'; import { useQuery } from 'react-query';
import { import {
Combobox, Combobox,
@ -35,6 +31,7 @@ export type ComboSearchProps<Result> = {
describedby?: string; describedby?: string;
className?: string; className?: string;
placeholder?: string; placeholder?: string;
debounceDelay?: number;
}; };
type QueryKey = readonly [ type QueryKey = readonly [
@ -54,6 +51,7 @@ function ComboSearch<Result>({
transformResults = (_, results) => results as Result[], transformResults = (_, results) => results as Result[],
id, id,
describedby, describedby,
debounceDelay = 0,
...props ...props
}: ComboSearchProps<Result>) { }: ComboSearchProps<Result>) {
invariant(id || onChange, 'ComboSearch: `id` or `onChange` are required'); invariant(id || onChange, 'ComboSearch: `id` or `onChange` are required');
@ -63,7 +61,7 @@ function ComboSearch<Result>({
const [, setExternalId] = useHiddenField(group, 'external_id'); const [, setExternalId] = useHiddenField(group, 'external_id');
const initialValue = externalValue ? externalValue : controlledValue; const initialValue = externalValue ? externalValue : controlledValue;
const [searchTerm, setSearchTerm] = useState(''); const [searchTerm, setSearchTerm] = useState('');
const debouncedSearchTerm = useDeferredValue(searchTerm); const [debouncedSearchTerm] = useDebounce(searchTerm, debounceDelay);
const [value, setValue] = useState(initialValue); const [value, setValue] = useState(initialValue);
const resultsMap = useRef< const resultsMap = useRef<
Record<string, { key: string; value: string; result: Result }> Record<string, { key: string; value: string; result: Result }>

View file

@ -12,6 +12,7 @@
@import '@gouvfr/dsfr/dist/component/breadcrumb/breadcrumb.css'; @import '@gouvfr/dsfr/dist/component/breadcrumb/breadcrumb.css';
@import '@gouvfr/dsfr/dist/component/callout/callout.css'; @import '@gouvfr/dsfr/dist/component/callout/callout.css';
@import '@gouvfr/dsfr/dist/component/connect/connect.css'; @import '@gouvfr/dsfr/dist/component/connect/connect.css';
@import '@gouvfr/dsfr/dist/component/download/download.css';
@import '@gouvfr/dsfr/dist/component/highlight/highlight.css'; @import '@gouvfr/dsfr/dist/component/highlight/highlight.css';
@import '@gouvfr/dsfr/dist/component/input/input.css'; @import '@gouvfr/dsfr/dist/component/input/input.css';
@import '@gouvfr/dsfr/dist/component/checkbox/checkbox.css'; @import '@gouvfr/dsfr/dist/component/checkbox/checkbox.css';

View file

@ -20,5 +20,20 @@
# type_de_champ_id :integer # type_de_champ_id :integer
# #
class Champs::IbanChamp < Champ class Champs::IbanChamp < Champ
validates_with IbanValidator validates_with IbanValidator, if: -> { validation_context != :brouillon }
after_validation :format_iban
def for_api
to_s.gsub(/\s+/, '')
end
def for_api_v2
for_api
end
private
def format_iban
self.value = value&.gsub(/\s+/, '')&.gsub(/(.{4})/, '\0 ')
end
end end

View file

@ -241,19 +241,8 @@ class Dossier < ApplicationRecord
.joins(:traitements) .joins(:traitements)
.where(traitements: { processed_at: date.beginning_of_month..date.end_of_month }) .where(traitements: { processed_at: date.beginning_of_month..date.end_of_month })
end end
scope :downloadable_sorted, -> { scope :ordered_for_export, -> {
state_not_brouillon order(depose_at: 'asc')
.visible_by_administration
.includes(
:user,
:individual,
:followers_instructeurs,
:traitement,
:groupe_instructeur,
:etablissement,
procedure: [:groupe_instructeurs],
avis: [:claimant, :expert]
).order(depose_at: 'asc')
} }
scope :en_cours, -> { not_archived.state_en_construction_ou_instruction } scope :en_cours, -> { not_archived.state_en_construction_ou_instruction }
scope :without_followers, -> { left_outer_joins(:follows).where(follows: { id: nil }) } scope :without_followers, -> { left_outer_joins(:follows).where(follows: { id: nil }) }
@ -434,7 +423,16 @@ class Dossier < ApplicationRecord
end end
def self.downloadable_sorted_batch def self.downloadable_sorted_batch
DossierPreloader.new(downloadable_sorted).in_batches DossierPreloader.new(includes(
:user,
:individual,
:followers_instructeurs,
:traitement,
:groupe_instructeur,
:etablissement,
procedure: [:groupe_instructeurs],
avis: [:claimant, :expert]
).ordered_for_export).in_batches
end end
def user_deleted? def user_deleted?

View file

@ -11,12 +11,16 @@ class DossierPreloader
dossiers dossiers
end end
def all def all(pj_template: false)
dossiers = @dossiers.to_a dossiers = @dossiers.to_a
load_dossiers(dossiers) load_dossiers(dossiers, pj_template:)
dossiers dossiers
end end
def self.load_one(dossier)
DossierPreloader.new([dossier]).all(pj_template: true).first
end
private private
# returns: { revision_id : { type_de_champ_id : position } } # returns: { revision_id : { type_de_champ_id : position } }
@ -30,9 +34,17 @@ class DossierPreloader
end end
end end
def load_dossiers(dossiers) def load_dossiers(dossiers, pj_template: false)
to_include = [piece_justificative_file_attachment: :blob]
if pj_template
to_include << { type_de_champ: { piece_justificative_template_attachment: :blob } }
else
to_include << :type_de_champ
end
all_champs = Champ all_champs = Champ
.includes(:type_de_champ, piece_justificative_file_attachment: :blob) .includes(to_include)
.where(dossier_id: dossiers) .where(dossier_id: dossiers)
.to_a .to_a
@ -80,6 +92,10 @@ class DossierPreloader
def load_champs(parent, name, champs, dossier, children_by_parent) def load_champs(parent, name, champs, dossier, children_by_parent)
champs.each do |champ| champs.each do |champ|
champ.association(:dossier).target = dossier champ.association(:dossier).target = dossier
if parent.is_a?(Champ)
champ.association(:parent).target = parent
end
end end
parent.association(name).target = champs.sort_by do |champ| parent.association(name).target = champs.sort_by do |champ|
@ -92,7 +108,6 @@ class DossierPreloader
parent_champ.association(:dossier).target = dossier parent_champ.association(:dossier).target = dossier
load_champs(parent_champ, :champs, champs, dossier, children_by_parent) load_champs(parent_champ, :champs, champs, dossier, children_by_parent)
parent_champ.association(:champs).set_inverse_instance(parent_champ)
end end
end end
end end

View file

@ -62,7 +62,7 @@ class Procedure < ApplicationRecord
include Discard::Model include Discard::Model
self.discard_column = :hidden_at self.discard_column = :hidden_at
self.ignored_columns = [:durees_conservation_required, :cerfa_flag, :test_started_at] self.ignored_columns = [:direction, :durees_conservation_required, :cerfa_flag, :test_started_at]
default_scope -> { kept } default_scope -> { kept }
@ -323,6 +323,7 @@ class Procedure < ApplicationRecord
validates :api_entreprise_token, jwt_token: true, allow_blank: true validates :api_entreprise_token, jwt_token: true, allow_blank: true
validates :api_particulier_token, format: { with: /\A[A-Za-z0-9\-_=.]{15,}\z/ }, allow_blank: true validates :api_particulier_token, format: { with: /\A[A-Za-z0-9\-_=.]{15,}\z/ }, allow_blank: true
validates :routing_criteria_name, presence: true, allow_blank: false
before_save :update_juridique_required before_save :update_juridique_required
after_initialize :ensure_path_exists after_initialize :ensure_path_exists
@ -803,6 +804,7 @@ class Procedure < ApplicationRecord
if published_revision.present? && draft_changed? if published_revision.present? && draft_changed?
transaction do transaction do
reset! reset!
draft_revision.types_de_champ.filter(&:only_present_on_draft?).each(&:destroy)
draft_revision.update(attestation_template: nil, dossier_submitted_message: nil) draft_revision.update(attestation_template: nil, dossier_submitted_message: nil)
draft_revision.destroy draft_revision.destroy
update!(draft_revision: create_new_revision(published_revision)) update!(draft_revision: create_new_revision(published_revision))

View file

@ -6,12 +6,12 @@ class ProcedureSerializer < ActiveModel::Serializer
attributes :id, attributes :id,
:description, :description,
:organisation, :organisation,
:direction,
:archived_at, :archived_at,
:geographic_information, :geographic_information,
:total_dossier, :total_dossier,
:link, :link,
:state :state,
:direction
has_one :geographic_information, serializer: ModuleAPICartoSerializer has_one :geographic_information, serializer: ModuleAPICartoSerializer
has_many :types_de_champ, serializer: TypeDeChampSerializer has_many :types_de_champ, serializer: TypeDeChampSerializer
@ -19,6 +19,10 @@ class ProcedureSerializer < ActiveModel::Serializer
has_many :types_de_piece_justificative has_many :types_de_piece_justificative
belongs_to :service, serializer: ServiceSerializer belongs_to :service, serializer: ServiceSerializer
def direction
""
end
def archived_at def archived_at
object.closed_at&.in_time_zone('UTC') object.closed_at&.in_time_zone('UTC')
end end

View file

@ -17,8 +17,8 @@
- if defined?(preview) && preview - if defined?(preview) && preview
.mb-2 .mb-2
= link_to t('preview', scope: [:layouts, :breadcrumb]), apercu_admin_procedure_path(@procedure), target: "_blank", rel: "noopener", class: 'button' = link_to t('preview', scope: [:layouts, :breadcrumb]), apercu_admin_procedure_path(@procedure), target: "_blank", rel: "noopener", class: 'fr-btn fr-btn--secondary'
= link_to t('continue', scope: [:layouts, :breadcrumb]), admin_procedure_path(@procedure), title: t('continue_title', scope: [:layouts, :breadcrumb]), class: 'button accepted' = link_to t('continue', scope: [:layouts, :breadcrumb]), admin_procedure_path(@procedure), title: t('continue_title', scope: [:layouts, :breadcrumb]), class: 'fr-btn fr-ml-2w fr-btn--icon-right fr-icon-arrow-right-fill'
- if defined?(metadatas) - if defined?(metadatas)
.metadatas.pb-3 .metadatas.pb-3

View file

@ -36,8 +36,8 @@
%span.toggle-switch-label.off Attestation désactivée %span.toggle-switch-label.off Attestation désactivée
.actions-right .actions-right
= link_to 'Annuler', edit_admin_procedure_attestation_template_path(id: @procedure), class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'} = link_to 'Annuler', edit_admin_procedure_attestation_template_path(id: @procedure), class: 'fr-btn fr-btn--secondary fr-mr-2w', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'}
= f.button 'Enregistrer', class: 'button primary send' = f.button 'Enregistrer', class: 'fr-btn'
.procedure-form__column--preview .procedure-form__column--preview
.procedure-form__preview.sticky--top .procedure-form__preview.sticky--top

View file

@ -18,7 +18,7 @@
label: 'Emails', label: 'Emails',
acceptNewValues: true) acceptNewValues: true)
= f.submit 'Affecter', class: 'button primary send', disabled: disabled_as_super_admin = f.submit 'Affecter', class: 'fr-btn', disabled: disabled_as_super_admin
%table.table.mt-2 %table.table.mt-2
%thead %thead
@ -32,11 +32,11 @@
#{instructeur.email} #{instructeur.email}
- confirmation_message = procedure.routee? ? "Êtes-vous sûr de vouloir retirer linstructeur « #{instructeur.email} » du groupe « #{groupe_instructeur.label} » ?" : "Êtes-vous sûr de vouloir retirer linstructeur « #{instructeur.email} » de la démarche ?" - confirmation_message = procedure.routee? ? "Êtes-vous sûr de vouloir retirer linstructeur « #{instructeur.email} » du groupe « #{groupe_instructeur.label} » ?" : "Êtes-vous sûr de vouloir retirer linstructeur « #{instructeur.email} » de la démarche ?"
%td.actions= button_to 'retirer', %td.actions= button_to 'Retirer',
{ action: :remove_instructeur, id: groupe_instructeur.id }, { action: :remove_instructeur, id: groupe_instructeur.id },
{ method: :delete, { method: :delete,
data: { confirm: confirmation_message }, data: { confirm: confirmation_message },
params: { instructeur: { id: instructeur.id }}, params: { instructeur: { id: instructeur.id }},
class: 'button' } class: 'fr-btn fr-btn--secondary' }
= paginate instructeurs = paginate instructeurs

View file

@ -6,9 +6,9 @@
- if procedure.routee? - if procedure.routee?
- if procedure.routing_enabled? && procedure.groupe_instructeurs.size == 1 - if procedure.routing_enabled? && procedure.groupe_instructeurs.size == 1
= link_to t('.button.routing_disable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :disable), class: 'button primary mt-1', method: 'patch' = link_to t('.button.routing_disable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :disable), class: 'fr-btn', method: 'patch'
- else - else
= link_to t('.button.routing_enable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :enable), class: 'button primary mt-1', method: 'patch' = link_to t('.button.routing_enable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :enable), class: 'fr-btn', method: 'patch'
.card .card
%h2.card-title Lautogestion des instructeurs %h2.card-title Lautogestion des instructeurs
%p.notice= t('.self_managment_notice_html') %p.notice= t('.self_managment_notice_html')

View file

@ -15,4 +15,4 @@
%span.badge.baseline modifié le #{mail_template.updated_at.strftime('%d-%m-%Y')} %span.badge.baseline modifié le #{mail_template.updated_at.strftime('%d-%m-%Y')}
%div %div
= link_to 'Modifier', edit_admin_procedure_mail_template_path(@procedure, mail_template.class.const_get(:SLUG)), class: 'button' = link_to 'Modifier', edit_admin_procedure_mail_template_path(@procedure, mail_template.class.const_get(:SLUG)), class: 'fr-btn'

View file

@ -6,7 +6,7 @@
.flex.column.ml-1 .flex.column.ml-1
.card-title .card-title
= link_to procedure.libelle, admin_procedure_path(procedure), style: 'color: black;' = link_to procedure.libelle, admin_procedure_path(procedure), style: 'color: black;'
= link_to(procedure_lien(procedure), procedure_lien(procedure), class: 'mb-1') = link_to(procedure_lien(procedure), procedure_lien(procedure), class: 'fr-link fr-mb-1w')
.admin-procedures-list-timestamps .admin-procedures-list-timestamps
%p.notice N° #{procedure.id} %p.notice N° #{procedure.id}
@ -36,13 +36,13 @@
%span.icon.folder %span.icon.folder
%span.badge.baseline= procedure.dossiers.state_not_brouillon.visible_by_administration.count %span.badge.baseline= procedure.dossiers.state_not_brouillon.visible_by_administration.count
%div %ul.fr-btns-group.fr-btns-group--sm.fr-btns-group--inline.fr-btns-group--icon-right
- unless procedure.discarded? - unless procedure.discarded?
= link_to admin_procedure_path(procedure), class: 'button mr-1 edit-procedure' do %li
%span.icon.edit = link_to admin_procedure_path(procedure), class: 'fr-btn fr-icon-draft-line fr-btn--tertiary' do
Modifier Modifier
.dropdown{ data: { controller: 'menu-button' } } %li.dropdown{ data: { controller: 'menu-button' } }
%button.button.dropdown-button.procedures-actions-btn{ data: { menu_button_target: 'button' } } %button.fr-btn.fr-btn--tertiary.dropdown-button.procedures-actions-btn{ data: { menu_button_target: 'button' } }
Actions Actions
.dropdown-content.fade-in-down{ data: { menu_button_target: 'menu' }, id: dom_id(procedure, :actions_menu) } .dropdown-content.fade-in-down{ data: { menu_button_target: 'menu' }, id: dom_id(procedure, :actions_menu) }
%ul.dropdown-items.pl-0 %ul.dropdown-items.pl-0

View file

@ -17,8 +17,8 @@
.procedure-form__actions.sticky--bottom .procedure-form__actions.sticky--bottom
.actions-right .actions-right
= link_to 'Annuler', admin_procedure_path(id: @procedure), class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'} = link_to 'Annuler', admin_procedure_path(id: @procedure), class: 'fr-btn fr-btn--secondary fr-mr-2w', data: { confirm: 'Êtes-vous sûr de vouloir annuler les modifications effectuées ?'}
= f.button 'Enregistrer', class: 'button primary send' = f.button 'Enregistrer', class: 'fr-btn'
.procedure-form__column--preview .procedure-form__column--preview
.procedure-form__preview.sticky--top .procedure-form__preview.sticky--top

View file

@ -1,6 +1,6 @@
.sub-header .sub-header
.procedure-admin-listing-container .procedure-admin-listing-container
= link_to "Nouvelle Démarche", new_from_existing_admin_procedures_path, id: 'new-procedure', class: 'button primary' = link_to "Nouvelle Démarche", new_from_existing_admin_procedures_path, id: 'new-procedure', class: 'fr-btn'
.container .container
%nav.tabs %nav.tabs

View file

@ -17,8 +17,8 @@
.procedure-form__actions.sticky--bottom .procedure-form__actions.sticky--bottom
.actions-right .actions-right
= link_to 'Annuler', admin_procedures_path, class: 'button', data: { confirm: 'Êtes-vous sûr de vouloir annuler la création de cette démarche ?'} = link_to 'Annuler', admin_procedures_path, class: 'fr-btn fr-btn--secondary fr-mr-2w', data: { confirm: 'Êtes-vous sûr de vouloir annuler la création de cette démarche ?'}
= f.button 'Créer la démarche', class: 'button primary send' = f.button 'Créer la démarche', class: 'fr-btn'
.procedure-form__column--preview .procedure-form__column--preview
.procedure-form__preview.sticky--top .procedure-form__preview.sticky--top

View file

@ -34,11 +34,11 @@
.form .form
.send-wrapper .send-wrapper
%a#from-scratch.button.primary{ href: new_admin_procedure_path } %a#from-scratch.fr-btn.fr-btn--lg{ href: new_admin_procedure_path }
Créer une nouvelle démarche de zéro Créer une nouvelle démarche de zéro
.card .card
%h2.header-section %h2.fr-h4.header-section
Créer une nouvelle démarche à partir dune démarche existante Créer une nouvelle démarche à partir dune démarche existante
= render Procedure::SearchComponent.new(grouped_procedures: @grouped_procedures) = render Procedure::SearchComponent.new(grouped_procedures: @grouped_procedures)

View file

@ -49,8 +49,8 @@
= t(:has_changes, scope: [:administrateurs, :revision_changes]) = t(:has_changes, scope: [:administrateurs, :revision_changes])
= render partial: 'revision_changes', locals: { changes: @procedure.revision_changes } = render partial: 'revision_changes', locals: { changes: @procedure.revision_changes }
.flex.mt-2.justify-end .flex.mt-2.justify-end
= button_to "Réinitialiser les modifications", admin_procedure_reset_draft_path(@procedure), class: 'button mr-1', method: :put = button_to "Réinitialiser les modifications", admin_procedure_reset_draft_path(@procedure), class: 'fr-btn fr-btn--secondary fr-mr-2w', method: :put
= link_to 'Publier les modifications', admin_procedure_publication_path(@procedure), class: 'button primary', id: 'publish-procedure-link', data: { disable_with: "Publication..." } = link_to 'Publier les modifications', admin_procedure_publication_path(@procedure), class: 'fr-btn', id: 'publish-procedure-link', data: { disable_with: "Publication..." }
- if !@procedure.procedure_expires_when_termine_enabled? - if !@procedure.procedure_expires_when_termine_enabled?
= render partial: 'administrateurs/procedures/suggest_expires_when_termine', locals: { procedure: @procedure } = render partial: 'administrateurs/procedures/suggest_expires_when_termine', locals: { procedure: @procedure }

View file

@ -11,7 +11,7 @@
%span.citizen= t('.you_are_a_citizen') %span.citizen= t('.you_are_a_citizen')
%br %br
%br %br
= link_to t('.citizen_page'), new_user_session_path, class: "button expend secondary" = link_to t('.citizen_page'), new_user_session_path, class: "fr-btn fr-btn--secondary"
.column .column
%h1.fr-my-2 %h1.fr-my-2
@ -23,7 +23,7 @@
= t('.signin_with') = t('.signin_with')
%span.fr-connect__brand AgentConnect %span.fr-connect__brand AgentConnect
%p %p
= link_to t('.whats_agentconnect'), 'https://agentconnect.gouv.fr/', target: '_blank', rel: "noopener", class: "fr-underlined" = link_to t('.whats_agentconnect'), 'https://agentconnect.gouv.fr/', target: '_blank', rel: "noopener"
.france-connect-login-separator .france-connect-login-separator
@ -45,7 +45,7 @@
.text-right .text-right
= link_to t('views.users.sessions.new.reset_password'), new_user_password_path, class: "link" = link_to t('views.users.sessions.new.reset_password'), new_user_password_path, class: "link"
= f.submit t('views.users.sessions.new.connection'), class: "button large primary expand" = f.submit t('views.users.sessions.new.connection'), class: "fr-btn fr-btn--lg"
- content_for :footer do - content_for :footer do
= render partial: 'users/dossiers/index_footer' = render partial: 'users/dossiers/index_footer'

View file

@ -4,11 +4,11 @@
- if !user_signed_in? - if !user_signed_in?
%h2.huge-title= t('views.commencer.show.start_procedure') %h2.huge-title= t('views.commencer.show.start_procedure')
= render partial: 'shared/france_connect_login', locals: { url: commencer_france_connect_path(path: @procedure.path) } = render partial: 'shared/france_connect_login', locals: { url: commencer_france_connect_path(path: @procedure.path) }
= link_to commencer_sign_up_path(path: @procedure.path), class: ['button large expand primary'] do = link_to commencer_sign_up_path(path: @procedure.path), class: 'fr-btn fr-btn--lg fr-my-2w' do
= t('views.shared.account.create') = t('views.shared.account.create')
%span.optional-on-small-screens %span.optional-on-small-screens.fr-ml-1v
#{APPLICATION_NAME} #{APPLICATION_NAME}
= link_to t('views.shared.account.already_user'), commencer_sign_in_path(path: @procedure.path), class: ['button large expand'] = link_to t('views.shared.account.already_user'), commencer_sign_in_path(path: @procedure.path), class: 'fr-btn fr-btn--secondary fr-btn--lg fr-my-2w'
- else - else
- revision = @revision.draft? ? @revision : @procedure.revisions.where.not(id: @procedure.draft_revision_id) - revision = @revision.draft? ? @revision : @procedure.revisions.where.not(id: @procedure.draft_revision_id)
@ -17,28 +17,28 @@
- not_drafts = dossiers.merge(Dossier.state_not_brouillon) - not_drafts = dossiers.merge(Dossier.state_not_brouillon)
- if dossiers.empty? - if dossiers.empty?
= link_to t('views.commencer.show.start_procedure'), url_for_new_dossier(@revision), class: ['button large expand primary'] = link_to t('views.commencer.show.start_procedure'), url_for_new_dossier(@revision), class: 'fr-btn fr-btn--lg fr-my-2w'
- elsif drafts.size == 1 && not_drafts.empty? - elsif drafts.size == 1 && not_drafts.empty?
- dossier = drafts.first - dossier = drafts.first
%h2.huge-title= t('views.commencer.show.already_draft') %h2.huge-title= t('views.commencer.show.already_draft')
%p %p
= t('views.commencer.show.already_draft_detail_html', time_ago: time_ago_in_words(dossier.created_at), procedure: dossier.procedure.libelle) = t('views.commencer.show.already_draft_detail_html', time_ago: time_ago_in_words(dossier.created_at), procedure: dossier.procedure.libelle)
= link_to t('views.commencer.show.continue_file'), brouillon_dossier_path(dossier), class: ['button large expand primary'] = link_to t('views.commencer.show.continue_file'), brouillon_dossier_path(dossier), class: 'fr-btn fr-btn--lg fr-my-2w'
= link_to t('views.commencer.show.start_new_file'), url_for_new_dossier(@revision), class: ['button large expand'] = link_to t('views.commencer.show.start_new_file'), url_for_new_dossier(@revision), class: 'fr-btn fr-btn--lg fr-btn--secondary fr-my-2w'
- elsif not_drafts.size == 1 - elsif not_drafts.size == 1
- dossier = not_drafts.first - dossier = not_drafts.first
%h2.huge-title= t('views.commencer.show.already_not_draft') %h2.huge-title= t('views.commencer.show.already_not_draft')
%p %p
= t('views.commencer.show.already_not_draft_detail_html', time_ago: time_ago_in_words(dossier.depose_at), procedure: dossier.procedure.libelle) = t('views.commencer.show.already_not_draft_detail_html', time_ago: time_ago_in_words(dossier.depose_at), procedure: dossier.procedure.libelle)
= link_to t('views.commencer.show.show_my_submitted_file'), dossier_path(dossier), class: ['button large expand primary'] = link_to t('views.commencer.show.show_my_submitted_file'), dossier_path(dossier), class: 'fr-btn fr-btn--lg fr-my-2w'
= link_to t('views.commencer.show.start_new_file'), url_for_new_dossier(@revision), class: ['button large expand'] = link_to t('views.commencer.show.start_new_file'), url_for_new_dossier(@revision), class: 'fr-btn fr-btn--lg fr-btn--secondary fr-my-2w'
- else - else
%h2.huge-title= t('views.commencer.show.existing_dossiers') %h2.huge-title= t('views.commencer.show.existing_dossiers')
= link_to t('views.commencer.show.show_dossiers'), dossiers_path, class: ['button large expand primary'] = link_to t('views.commencer.show.show_dossiers'), dossiers_path, class: "fr-btn fr-btn--lg fr-my-2w"
= link_to t('views.commencer.show.start_new_file'), url_for_new_dossier(@revision), class: ['button large expand'] = link_to t('views.commencer.show.start_new_file'), url_for_new_dossier(@revision), class: "fr-btn fr-btn--lg fr-btn--secondary fr-my-2w"
- if @procedure.feature_enabled?(:dossier_pdf_vide) - if @procedure.feature_enabled?(:dossier_pdf_vide)
- pdf_link = @revision.draft? ? commencer_dossier_vide_test_path(path: @procedure.path) : commencer_dossier_vide_path(path: @procedure.path) - pdf_link = @revision.draft? ? commencer_dossier_vide_test_path(path: @procedure.path) : commencer_dossier_vide_path(path: @procedure.path)
@ -46,4 +46,4 @@
%p= t('views.commencer.show.want_empty_pdf', service: @procedure&.service&.nom, adresse: @procedure&.service&.adresse) %p= t('views.commencer.show.want_empty_pdf', service: @procedure&.service&.nom, adresse: @procedure&.service&.adresse)
%br %br
= link_to t('views.commencer.show.download_empty_pdf'), pdf_link, class: ['button large expand'] = link_to t('views.commencer.show.download_empty_pdf'), pdf_link, class: "fr-btn fr-btn--lg fr-btn--secondary fr-my-2w"

View file

@ -16,4 +16,4 @@
= f.label :email, 'Email' = f.label :email, 'Email'
= f.email_field :email, autofocus: true = f.email_field :email, autofocus: true
= f.submit t('devise.passwords.new.request_new_password'), class: 'button expand primary' = f.submit t('devise.passwords.new.request_new_password'), class: 'fr-btn fr-btn--lg'

View file

@ -3,7 +3,9 @@
.flex.justify-between .flex.justify-between
%ul.breadcrumbs %ul.breadcrumbs
%li= link_to('Avis', expert_all_avis_path) %li= link_to('Avis', expert_all_avis_path)
%li= link_to(dossier.procedure.libelle.truncate_words(10), procedure_expert_avis_index_path(avis.procedure)) %li
= link_to(dossier.procedure.libelle.truncate_words(10), procedure_expert_avis_index_path(avis.procedure), class: "fr-link")
= procedure_badge(dossier.procedure)
%li= link_to("Dossier nº #{dossier.id}", expert_avis_path(avis.procedure, avis)) %li= link_to("Dossier nº #{dossier.id}", expert_avis_path(avis.procedure, avis))
.header-actions .header-actions

View file

@ -5,39 +5,40 @@
%ul.procedure-list %ul.procedure-list
- @avis_by_procedure.each do |p, procedure_avis| - @avis_by_procedure.each do |p, procedure_avis|
%li.procedure-item.flex.align-start %li.procedure-item.flex.align-start.fr-my-3w.fr-p-2w
= link_to(procedure_instructeur_avis_index_path(p)) do .flex
.flex = link_to instructeur_procedure_path(p), class: 'procedure-logo-link' do
.procedure-logo{ style: "background-image: url(#{p.logo_url})" } .procedure-logo{ style: "background-image: url(#{p.logo_url})" }
.procedure-details .procedure-details
%p.procedure-title %p.fr-mb-2w
= procedure_libelle p = procedure_badge(p)
%ul.procedure-stats.flex = link_to(p.libelle, procedure_instructeur_avis_index_path(p), class: "fr-link fr-ml-1w")
%li
%object
= link_to(procedure_instructeur_avis_index_path(p, statut: Instructeurs::AvisController::A_DONNER_STATUS)) do
- without_answer_count = procedure_avis.select { |a| a.answer.nil? }.size
- if without_answer_count > 0
%span.notifications{ 'aria-label': "notifications" }
.stats-number
= without_answer_count
.stats-legend
avis à donner
%li
%object
= link_to(procedure_instructeur_avis_index_path(p, statut: Instructeurs::AvisController::DONNES_STATUS)) do
- with_answer_count = procedure_avis.select { |a| a.answer.present? }.size
.stats-number= with_answer_count
.stats-legend
= pluralize(with_answer_count, "avis donné")
- if p.close? %ul.procedure-stats.flex
.procedure-status %li
%span.label %object
= t('helpers.procedure.close') = link_to(procedure_instructeur_avis_index_path(p, statut: Instructeurs::AvisController::A_DONNER_STATUS)) do
- elsif p.depubliee? - without_answer_count = procedure_avis.select { |a| a.answer.nil? }.size
.procedure-status - if without_answer_count > 0
%span.label %span.notifications{ 'aria-label': "notifications" }
= t('helpers.procedure.unpublished') .stats-number
= without_answer_count
.stats-legend
avis à donner
%li
%object
= link_to(procedure_instructeur_avis_index_path(p, statut: Instructeurs::AvisController::DONNES_STATUS)) do
- with_answer_count = procedure_avis.select { |a| a.answer.present? }.size
.stats-number= with_answer_count
.stats-legend
= pluralize(with_answer_count, "avis donné")
- if p.close?
.procedure-status
%span.label
= t('helpers.procedure.close')
- elsif p.depubliee?
.procedure-status
%span.label
= t('helpers.procedure.unpublished')

View file

@ -7,8 +7,8 @@
%h1.tab-title Donner votre avis %h1.tab-title Donner votre avis
%h2.claimant %h2.claimant
Demandeur : Demandeur :
%span.email= safe_claimant_email(@avis.claimant) %span.email.font-weight-normal= safe_claimant_email(@avis.claimant)
%span.date Demande davis envoyée le #{l(@avis.created_at, format: '%d/%m/%y')} %span.date.font-weight-normal Demande davis envoyée le #{l(@avis.created_at, format: '%d/%m/%y')}
%p.introduction= @avis.introduction %p.introduction= @avis.introduction
- if @avis.introduction_file.attached? - if @avis.introduction_file.attached?
@ -29,7 +29,7 @@
%span %span
Cet avis est partagé avec les autres experts Cet avis est partagé avec les autres experts
.send-wrapper .send-wrapper
= f.submit 'Envoyer votre avis', class: 'button send' = f.submit 'Envoyer votre avis', class: 'fr-btn'
- if !@dossier.termine? && !@avis.procedure.feature_enabled?(:expert_not_allowed_to_invite) - if !@dossier.termine? && !@avis.procedure.feature_enabled?(:expert_not_allowed_to_invite)
= render partial: "experts/shared/avis/form", locals: { url: avis_expert_avis_path(@avis.procedure, @avis), linked_dossiers: @dossier.linked_dossiers_for(current_expert), must_be_confidentiel: @avis.confidentiel?, avis: @new_avis } = render partial: "experts/shared/avis/form", locals: { url: avis_expert_avis_path(@avis.procedure, @avis), linked_dossiers: @dossier.linked_dossiers_for(current_expert), must_be_confidentiel: @avis.confidentiel?, avis: @new_avis }

View file

@ -1,36 +1,36 @@
%section.list-avis %section.list-avis
%h1.tab-title %h1.tab-title
Avis des invités Avis des invités
%span.count= avis.count %span.fr-badge= avis.count
%ul %ul
- avis.each do |avis| - avis.each do |avis|
%li.one-avis.flex.align-start %li.one-avis.flex.align-start
.width-100 .width-100
%h2.claimant %h2.claimant.fr-h6
= "#{t('claimant', scope: 'activerecord.attributes.avis')} :" = "#{t('claimant', scope: 'activerecord.attributes.avis')} :"
%span.email= (safe_claimant_email(avis.claimant) == current_expert.email) ? 'Vous' : safe_claimant_email(avis.claimant) %span.fr-text--xs.fr-text-mention--grey.font-weight-normal= (safe_claimant_email(avis.claimant) == current_expert.email) ? 'Vous' : safe_claimant_email(avis.claimant)
- if avis.confidentiel? - if avis.confidentiel?
%span.confidentiel %span.confidentiel.font-weight-normal
= t('confidentiel', scope: 'activerecord.attributes.avis') = t('confidentiel', scope: 'activerecord.attributes.avis')
%span.icon.lock{ title: t('confidentiel', scope: 'helpers.hint') } %span.icon.lock{ title: t('confidentiel', scope: 'helpers.hint') }
%span.date{ class: highlight_if_unseen_class(avis_seen_at, avis.created_at) } %span.date.fr-text--xs.fr-text-mention--grey.font-weight-normal{ class: highlight_if_unseen_class(avis_seen_at, avis.created_at) }
= t('demande_envoyee_le', scope: 'views.shared.avis', date: l(avis.created_at, format: '%d/%m/%y à %H:%M')) = t('demande_envoyee_le', scope: 'views.shared.avis', date: l(avis.created_at, format: '%d/%m/%y à %H:%M'))
%p= avis.introduction %p= avis.introduction
.answer.flex.align-start .answer.flex.align-start
%span.icon.bubble.avis-icon %span.icon.bubble.avis-icon
.width-100 .width-100
%h2.instructeur %h2.instructeur.fr-h6
= (avis.expert.email == current_expert.email) ? 'Vous' : avis.expert.email = (avis.expert.email == current_expert.email) ? 'Vous' : avis.expert.email
- if avis.answer.present? - if avis.answer.present?
- if avis.revoked? - if avis.revoked?
%span.waiting{ class: highlight_if_unseen_class(avis_seen_at, avis.revoked_at) } %span.waiting.font-weight-normal{ class: highlight_if_unseen_class(avis_seen_at, avis.revoked_at) }
= t('demande_revoquee_le', scope: 'views.shared.avis', date: l(avis.revoked_at, format: '%d/%m/%y à %H:%M')) = t('demande_revoquee_le', scope: 'views.shared.avis', date: l(avis.revoked_at, format: '%d/%m/%y à %H:%M'))
%span.date{ class: highlight_if_unseen_class(avis_seen_at, avis.updated_at) } %span.date.fr-text--xs.fr-text-mention--grey.font-weight-normal{ class: highlight_if_unseen_class(avis_seen_at, avis.updated_at) }
= t('reponse_donnee_le', scope: 'views.shared.avis', date: l(avis.updated_at, format: '%d/%m/%y à %H:%M')) = t('reponse_donnee_le', scope: 'views.shared.avis', date: l(avis.updated_at, format: '%d/%m/%y à %H:%M'))
- else - else
%span.waiting %span.waiting.font-weight-normal
= t('en_attente', scope: 'views.shared.avis') = t('en_attente', scope: 'views.shared.avis')
- if avis.piece_justificative_file.attached? - if avis.piece_justificative_file.attached?
= render Attachment::ShowComponent.new(attachment: avis.piece_justificative_file.attachment) = render Attachment::ShowComponent.new(attachment: avis.piece_justificative_file.attachment)

View file

@ -2,7 +2,9 @@
.container .container
%ul.breadcrumbs %ul.breadcrumbs
%li= link_to('Avis', instructeur_all_avis_path) %li= link_to('Avis', instructeur_all_avis_path)
%li= link_to(dossier.procedure.libelle, procedure_instructeur_avis_index_path(avis.procedure)) %li
= link_to(procedure.libelle, procedure_instructeur_avis_index_path(avis.procedure), class: "fr-link")
= procedure_badge(dossier.procedure)
%li= link_to("Dossier nº #{dossier.id}", instructeur_avis_path(avis.procedure, avis)) %li= link_to("Dossier nº #{dossier.id}", instructeur_avis_path(avis.procedure, avis))
%nav.tabs %nav.tabs

View file

@ -3,10 +3,8 @@
.flex.justify-between .flex.justify-between
%ul.breadcrumbs %ul.breadcrumbs
%li %li
= link_to instructeur_procedure_path(dossier.procedure), title: dossier.procedure.libelle do = link_to dossier.procedure.libelle.truncate_words(10), instructeur_procedure_path(dossier.procedure), title: dossier.procedure.libelle, class: "fr-link"
- if dossier.procedure.brouillon? = procedure_badge(dossier.procedure)
%span.badge démarche en test
= dossier.procedure.libelle.truncate_words(10)
%li %li
= "Dossier nº #{dossier.id}" = "Dossier nº #{dossier.id}"

View file

@ -1,32 +1,31 @@
%span.dropdown.print-menu-opener{ data: { controller: 'menu-button' } } %ul.fr-btns-group.fr-btns-group--sm.fr-btns-group--inline-md.fr-btns-group--icon-right
%button.button.dropdown-button.icon-only{ title: 'imprimer', 'aria-label': 'imprimer', data: { menu_button_target: 'button' } } %li.dropdown.print-menu-opener{ data: { controller: 'menu-button' } }
%span.icon.printer %button.fr-btn.fr-btn--tertiary.fr-icon-printer-line.dropdown-button{ title: 'imprimer', 'aria-label': 'Imprimer', data: { menu_button_target: 'button' } } Imprimer
%ul#print-menu.print-menu.dropdown-content{ data: { menu_button_target: 'menu' } } %ul#print-menu.print-menu.dropdown-content{ data: { menu_button_target: 'menu' } }
%li
= link_to "Tout le dossier", print_instructeur_dossier_path(dossier.procedure, dossier), target: "_blank", rel: "noopener", class: "menu-item menu-link"
%li
= link_to "Uniquement cet onglet", "#", onclick: "window.print()", class: "menu-item menu-link"
%li
= link_to "Export PDF", instructeur_dossier_path(dossier.procedure, dossier, format: :pdf), target: "_blank", rel: "noopener", class: "menu-item menu-link"
- if dossier.geo_data?
%li %li
= link_to "Export GeoJSON", geo_data_instructeur_dossier_path(dossier.procedure, dossier), target: "_blank", rel: "noopener", class: "menu-item menu-link" = link_to "Tout le dossier", print_instructeur_dossier_path(dossier.procedure, dossier), target: "_blank", rel: "noopener", class: "menu-item menu-link"
%li
= link_to "Uniquement cet onglet", "#", onclick: "window.print()", class: "menu-item menu-link"
%li
= link_to "Export PDF", instructeur_dossier_path(dossier.procedure, dossier, format: :pdf), target: "_blank", rel: "noopener", class: "menu-item menu-link"
- if dossier.geo_data?
%li
= link_to "Export GeoJSON", geo_data_instructeur_dossier_path(dossier.procedure, dossier), target: "_blank", rel: "noopener", class: "menu-item menu-link"
%span.dropdown.print-menu-opener{ data: { controller: 'menu-button' } } %li.dropdown.print-menu-opener{ data: { controller: 'menu-button' } }
%button.button.dropdown-button.icon-only{ data: { menu_button_target: 'button' } } %button.fr-btn.fr-btn--tertiary.fr-icon-download-line.dropdown-button{ data: { menu_button_target: 'button', 'aria-label': 'Télécharger' } } Télécharger
%span.icon.attached %ul#print-pj-menu.print-menu.dropdown-content{ data: { menu_button_target: 'menu' } }
%ul#print-pj-menu.print-menu.dropdown-content{ data: { menu_button_target: 'menu' } } %li= link_to "Télécharger le dossier et toutes ses pièces jointes", telecharger_pjs_instructeur_dossier_path(dossier.procedure, dossier), target: "_blank", rel: "noopener", class: "menu-item menu-link"
%li= link_to "Télécharger le dossier et toutes ses pièces jointes", telecharger_pjs_instructeur_dossier_path(dossier.procedure, dossier), target: "_blank", rel: "noopener", class: "menu-item menu-link"
= render partial: "instructeurs/procedures/dossier_actions", %li
locals: { procedure_id: dossier.procedure.id, = render partial: "instructeurs/procedures/dossier_actions",
dossier_id: dossier.id, locals: { procedure_id: dossier.procedure.id,
state: dossier.state, dossier_id: dossier.id,
archived: dossier.archived, state: dossier.state,
dossier_is_followed: current_instructeur&.follow?(dossier), archived: dossier.archived,
close_to_expiration: dossier.close_to_expiration?, dossier_is_followed: current_instructeur&.follow?(dossier),
hidden_by_administration: dossier.hidden_by_administration? } close_to_expiration: dossier.close_to_expiration?,
hidden_by_administration: dossier.hidden_by_administration? }
%li.state-button
.state-button = render partial: "state_button", locals: { dossier: dossier }
= render partial: "state_button", locals: { dossier: dossier }

View file

@ -1,6 +1,6 @@
.dropdown{ data: { controller: 'menu-button', popover: 'true' } } .dropdown{ data: { controller: 'menu-button', popover: 'true' } }
-# Dropdown button title -# Dropdown button title
%button.button.primary.dropdown-button{ class: button_or_label_class(dossier), data: { menu_button_target: 'button' } } %button.fr-btn.dropdown-button{ class: button_or_label_class(dossier), data: { menu_button_target: 'button' } }
= dossier_display_state dossier = dossier_display_state dossier
-# Dropdown content -# Dropdown content

View file

@ -1,5 +1,5 @@
.motivation.hidden{ class: popup_class } .motivation.hidden{ class: popup_class }
%h3 %h3.fr-h5
%span.icon{ class: popup_class } %span.icon{ class: popup_class }
#{popup_title} #{popup_title}

View file

@ -1,9 +1,9 @@
- if hidden_by_administration - if hidden_by_administration
= link_to restore_instructeur_dossier_path(procedure_id, dossier_id), method: :patch, class: "button" do = link_to restore_instructeur_dossier_path(procedure_id, dossier_id), method: :patch, class: "fr-btn fr-btn--secondary" do
= t('views.instructeurs.dossiers.restore') = t('views.instructeurs.dossiers.restore')
- elsif close_to_expiration || Dossier::TERMINE.include?(state) - elsif close_to_expiration || Dossier::TERMINE.include?(state)
.dropdown.user-dossier-actions{ data: { controller: 'menu-button' } } .dropdown.user-dossier-actions{ data: { controller: 'menu-button' } }
%button.button.dropdown-button{ data: { menu_button_target: 'button' } } %button.fr-btn.dropdown-button{ data: { menu_button_target: 'button' } }
Actions Actions
.dropdown-content.fade-in-down{ data: { menu_button_target: 'menu' }, id: "dossier_#{dossier_id}_actions_menu" } .dropdown-content.fade-in-down{ data: { menu_button_target: 'menu' }, id: "dossier_#{dossier_id}_actions_menu" }
%ul.dropdown-items %ul.dropdown-items
@ -33,10 +33,8 @@
- elsif Dossier::EN_CONSTRUCTION_OU_INSTRUCTION.include?(state) - elsif Dossier::EN_CONSTRUCTION_OU_INSTRUCTION.include?(state)
- if dossier_is_followed - if dossier_is_followed
= link_to unfollow_instructeur_dossier_path(procedure_id, dossier_id), method: :patch, class: 'button' do = link_to unfollow_instructeur_dossier_path(procedure_id, dossier_id), method: :patch, class: 'fr-btn fr-btn--secondary fr-icon-star-fill' do
%span.icon.unfollow>
= t('views.instructeurs.dossiers.stop_follow') = t('views.instructeurs.dossiers.stop_follow')
- else - else
= link_to follow_instructeur_dossier_path(procedure_id, dossier_id), method: :patch, class: 'button' do = link_to follow_instructeur_dossier_path(procedure_id, dossier_id), method: :patch, class: 'fr-btn fr-btn--secondary fr-icon-star-line' do
%span.icon.follow>
= t('views.instructeurs.dossiers.follow_file') = t('views.instructeurs.dossiers.follow_file')

View file

@ -1,81 +1,81 @@
%li.procedure-item.flex.align-start %li.procedure-item.flex.align-start.fr-my-3w.fr-p-2w
= link_to(instructeur_procedure_path(p)) do .flex
.flex = link_to instructeur_procedure_path(p), class: 'procedure-logo-link' do
.procedure-logo{ style: "background-image: url(#{p.logo_url})" } .procedure-logo{ style: "background-image: url(#{p.logo_url})" }
.procedure-details .procedure-details
%p.procedure-title %p.fr-mb-2w
= procedure_libelle p = procedure_badge(p)
%ul.procedure-stats.flex = link_to(p.libelle, instructeur_procedure_path(p), class: "fr-link fr-ml-1w")
%li %ul.procedure-stats.flex
%object %li
= link_to(instructeur_procedure_path(p, statut: 'a-suivre')) do %object
- a_suivre_count = dossiers_a_suivre_count_per_procedure[p.id] || 0 = link_to(instructeur_procedure_path(p, statut: 'a-suivre')) do
.stats-number - a_suivre_count = dossiers_a_suivre_count_per_procedure[p.id] || 0
= number_with_html_delimiter(a_suivre_count) .stats-number
.stats-legend = number_with_html_delimiter(a_suivre_count)
= t('instructeurs.dossiers.labels.to_follow') .stats-legend
%li = t('instructeurs.dossiers.labels.to_follow')
%object %li
= link_to(instructeur_procedure_path(p, statut: 'suivis')) do %object
- if procedure_ids_en_cours_with_notifications.include?(p.id) = link_to(instructeur_procedure_path(p, statut: 'suivis')) do
%span.notifications{ 'aria-label': "notifications" } - if procedure_ids_en_cours_with_notifications.include?(p.id)
- followed_count = followed_dossiers_count_per_procedure[p.id] || 0 %span.notifications{ 'aria-label': "notifications" }
.stats-number - followed_count = followed_dossiers_count_per_procedure[p.id] || 0
= number_with_html_delimiter(followed_count) .stats-number
.stats-legend = number_with_html_delimiter(followed_count)
= t('pluralize.followed', count: followed_count) .stats-legend
%li = t('pluralize.followed', count: followed_count)
%object %li
= link_to(instructeur_procedure_path(p, statut: 'traites')) do %object
- if procedure_ids_termines_with_notifications.include?(p.id) = link_to(instructeur_procedure_path(p, statut: 'traites')) do
%span.notifications{ 'aria-label': "notifications" } - if procedure_ids_termines_with_notifications.include?(p.id)
- termines_count = dossiers_termines_count_per_procedure[p.id] || 0 %span.notifications{ 'aria-label': "notifications" }
.stats-number - termines_count = dossiers_termines_count_per_procedure[p.id] || 0
= number_with_html_delimiter(termines_count) .stats-number
.stats-legend = number_with_html_delimiter(termines_count)
= t('pluralize.processed', count: termines_count) .stats-legend
%li = t('pluralize.processed', count: termines_count)
%object %li
= link_to(instructeur_procedure_path(p, statut: 'tous')) do %object
- dossier_count = dossiers_count_per_procedure[p.id] || 0 = link_to(instructeur_procedure_path(p, statut: 'tous')) do
.stats-number - dossier_count = dossiers_count_per_procedure[p.id] || 0
= number_with_html_delimiter(dossier_count) .stats-number
.stats-legend = number_with_html_delimiter(dossier_count)
= t('pluralize.case', count: dossier_count) .stats-legend
= t('pluralize.case', count: dossier_count)
%li
%object
= link_to(instructeur_procedure_path(p, statut: 'supprimes_recemment')) do
- dossier_count = dossiers_supprimes_recemment_count_per_procedure[p.id] || 0
.stats-number
= number_with_html_delimiter(dossier_count)
.stats-legend
= t('pluralize.dossiers_supprimes_recemment', count: dossier_count)
- if p.procedure_expires_when_termine_enabled
%li %li
%object %object
= link_to(instructeur_procedure_path(p, statut: 'supprimes_recemment')) do = link_to(instructeur_procedure_path(p, statut: 'expirant')) do
- dossier_count = dossiers_supprimes_recemment_count_per_procedure[p.id] || 0 - expirant_count = dossiers_expirant_count_per_procedure[p.id] || 0
.stats-number .stats-number
= number_with_html_delimiter(dossier_count) = number_with_html_delimiter(expirant_count)
.stats-legend .stats-legend
= t('pluralize.dossiers_supprimes_recemment', count: dossier_count) = t('pluralize.dossiers_close_to_expiration', count: expirant_count)
- if p.procedure_expires_when_termine_enabled %li
%li %object
%object = link_to(instructeur_procedure_path(p, statut: 'archives')) do
= link_to(instructeur_procedure_path(p, statut: 'expirant')) do - archived_count = dossiers_archived_count_per_procedure[p.id] || 0
- expirant_count = dossiers_expirant_count_per_procedure[p.id] || 0 .stats-number
.stats-number = number_with_html_delimiter(archived_count)
= number_with_html_delimiter(expirant_count) .stats-legend
.stats-legend = t('pluralize.archived', count: archived_count)
= t('pluralize.dossiers_close_to_expiration', count: expirant_count)
%li - if p.close?
%object .procedure-status
= link_to(instructeur_procedure_path(p, statut: 'archives')) do %span.label Close
- archived_count = dossiers_archived_count_per_procedure[p.id] || 0 - elsif p.depubliee?
.stats-number .procedure-status
= number_with_html_delimiter(archived_count) %span.label Dépubliée
.stats-legend
= t('pluralize.archived', count: archived_count)
- if p.close?
.procedure-status
%span.label Close
- elsif p.depubliee?
.procedure-status
%span.label Dépubliée

View file

@ -89,5 +89,5 @@
= t('.utils.negative') = t('.utils.negative')
.send-wrapper .send-wrapper
= link_to t('.buttons.back_to_procedure'), instructeur_procedure_path(@procedure), class: 'button mr-1' = link_to t('.buttons.back_to_procedure'), instructeur_procedure_path(@procedure), class: 'fr-btn fr-btn--secondary fr-mr-2w'
= form.submit t('.buttons.save'), class: "button primary" = form.submit t('.buttons.save'), class: "fr-btn"

View file

@ -14,7 +14,7 @@
%section.list-avis.mt-8 %section.list-avis.mt-8
%h1.tab-title %h1.tab-title
Messages envoyés précedemment Messages envoyés précedemment
%span.count= @bulk_messages.count %span.fr-badge= @bulk_messages.count
%ul %ul
- @bulk_messages.each do |message| - @bulk_messages.each do |message|

View file

@ -134,14 +134,15 @@
- else - else
%a.cell-link{ href: path }= status_badge(p.state) %a.cell-link{ href: path }= status_badge(p.state)
%td.action-col.follow-col= render partial: 'dossier_actions', %td.action-col.follow-col
locals: { procedure_id: @procedure.id, %ul.inline.fr-btns-group.fr-btns-group--sm.fr-btns-group--inline.fr-btns-group--icon-right
dossier_id: p.dossier_id, = render partial: 'dossier_actions', locals: { procedure_id: @procedure.id,
state: p.state, dossier_id: p.dossier_id,
archived: p.archived, state: p.state,
dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), archived: p.archived,
close_to_expiration: @statut == 'expirant', dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id),
hidden_by_administration: @statut == 'supprimes_recemment' } close_to_expiration: @statut == 'expirant',
hidden_by_administration: @statut == 'supprimes_recemment' }
= pagination = pagination
- else - else

View file

@ -1,7 +1,7 @@
%section.list-avis %section.list-avis
%h1.tab-title %h1.tab-title
Avis des invités Avis des invités
%span.count= avis.count %span.fr-badge= avis.count
%ul %ul
- avis.each do |avis| - avis.each do |avis|

View file

@ -26,4 +26,4 @@
= label_tag :invite_message, t('views.invites.form.invite_message') = label_tag :invite_message, t('views.invites.form.invite_message')
= text_area_tag :invite_message, '', class: 'small', placeholder: t('views.invites.form.invite_message') = text_area_tag :invite_message, '', class: 'small', placeholder: t('views.invites.form.invite_message')
.col .col
= submit_tag t('views.invites.form.send_invitation'), class: 'button accepted' = submit_tag t('views.invites.form.send_invitation'), class: 'fr-btn fr-btn--secondary'

View file

@ -38,7 +38,7 @@
- if request.path == new_user_registration_path - if request.path == new_user_registration_path
%li %li
.fr-hidden-sm.fr-unhidden-lg.fr-link--sm= t('views.shared.account.already_user_question') .fr-hidden-sm.fr-unhidden-lg.fr-link--sm= t('views.shared.account.already_user_question')
%li= link_to t('views.shared.account.signin'), new_user_session_path, class: "fr-btn" %li= link_to t('views.shared.account.signin'), new_user_session_path, class: "fr-btn fr-btn--tertiary fr-icon-account-circle-fill fr-btn--icon-left"
%li %li
- if dossier.present? && nav_bar_profile == :user - if dossier.present? && nav_bar_profile == :user

View file

@ -12,4 +12,4 @@
%span.small-simple= t('.are_you_new', app_name: APPLICATION_NAME.gsub("-","&#8209;")).html_safe %span.small-simple= t('.are_you_new', app_name: APPLICATION_NAME.gsub("-","&#8209;")).html_safe
%br %br
%br %br
= link_to t('views.users.sessions.new.find_procedure'), COMMENT_TROUVER_MA_DEMARCHE_URL, target: "_blank", class: "button expend secondary" = link_to t('views.users.sessions.new.find_procedure'), COMMENT_TROUVER_MA_DEMARCHE_URL, target: "_blank", class: "fr-btn fr-btn--secondary"

View file

@ -50,9 +50,9 @@
.fr-footer__content .fr-footer__content
%p.fr-footer__content-desc %p.fr-footer__content-desc
= t('links.footer.description_1') = t('links.footer.description_1')
= link_to t('links.footer.link_1_label'), t('links.footer.link_1_url'), target: '_blank', class: "fr-underlined" = link_to t('links.footer.link_1_label'), t('links.footer.link_1_url'), target: '_blank'
%p.fr-footer__content-desc %p.fr-footer__content-desc
= link_to t('links.footer.link_2_label'), t("links.footer.code.url"), target: '_blank', class: "fr-underlined" = link_to t('links.footer.link_2_label'), t("links.footer.code.url"), target: '_blank'
= t('links.footer.description_2') = t('links.footer.description_2')
%ul.fr-footer__content-list %ul.fr-footer__content-list
%li.fr-footer__content-item %li.fr-footer__content-item
@ -66,8 +66,4 @@
.fr-footer__bottom .fr-footer__bottom
= render partial: 'users/general_footer_row' = render partial: 'users/general_footer_row'
.fr-footer__bottom-copy = render partial: 'shared/footer_copy'
%p
Sauf mention contraire, tous les contenus de ce site sont sous
%a{ href: "https://github.com/etalab/licence-ouverte/blob/master/LO.md", target:"_blank" } licence etalab-2.0
%br

View file

@ -1,6 +1,6 @@
.landing-panel .landing-panel
.container .container
%h2.landing-panel-title Ce que les utilisateurs pensent du service %h2.center.fr-mb-4w Ce que les utilisateurs pensent du service
%ul.quotes %ul.quotes
%li.quote %li.quote

View file

@ -1,6 +1,6 @@
.landing-panel.users-panel .landing-panel.users-panel
.container .container
%h2.landing-panel-title Ils utilisent déjà #{APPLICATION_NAME} %h2.center.fr-mb-4w Ils utilisent déjà #{APPLICATION_NAME}
%ul.users %ul.users
%li.user %li.user

View file

@ -6,7 +6,7 @@
.container .container
.hero-wrapper .hero-wrapper
.hero-text .hero-text
%p.hero-tagline %h1.hero-tagline
%em.hero-tagline-em Dématérialisez et simplifiez %em.hero-tagline-em Dématérialisez et simplifiez
vos démarches administratives vos démarches administratives
@ -17,8 +17,8 @@
.container .container
.role-panel-wrapper.role-administrations-panel .role-panel-wrapper.role-administrations-panel
.role-panel-70 .role-panel-70
%h1.role-panel-title Est-ce fait pour mon administration ? %h2 Est-ce fait pour mon administration ?
%p.role-panel-explanation Découvrez notre outil et posez nous vos questions lors de notre démonstration en ligne ou lisez notre documentation %p.fr-h5 Découvrez notre outil et posez nous vos questions lors de notre démonstration en ligne ou lisez notre documentation
= link_to "Participer à notre démonstration en ligne", INSCRIPTION_WEBINAIRE_URL, class: "fr-btn fr-btn--lg fr-mr-1w fr-mb-2w", **external_link_attributes = link_to "Participer à notre démonstration en ligne", INSCRIPTION_WEBINAIRE_URL, class: "fr-btn fr-btn--lg fr-mr-1w fr-mb-2w", **external_link_attributes
= link_to "Documentation", DOC_URL, class: "fr-btn fr-btn--secondary fr-btn--lg", **external_link_attributes = link_to "Documentation", DOC_URL, class: "fr-btn fr-btn--secondary fr-btn--lg", **external_link_attributes
@ -33,8 +33,8 @@
%img.role-image{ :src => image_url("landing/roles/administrations.svg"), alt: "" } %img.role-image{ :src => image_url("landing/roles/administrations.svg"), alt: "" }
.role-panel-70 .role-panel-70
%h1.role-panel-title Votre administration est prête pour dématérialiser %h2 Votre administration est prête pour dématérialiser
%p.role-panel-explanation Créez un premier formulaire de test en quelques minutes %p.fr-h5 Créez un premier formulaire de test en quelques minutes
= link_to "Créer votre compte administrateur", DEMANDE_INSCRIPTION_ADMIN_PAGE_URL, class: "fr-btn fr-btn--lg" = link_to "Créer votre compte administrateur", DEMANDE_INSCRIPTION_ADMIN_PAGE_URL, class: "fr-btn fr-btn--lg"
@ -75,7 +75,7 @@
- cache "numbers-panel", :expires_in => 3.hours do - cache "numbers-panel", :expires_in => 3.hours do
.landing-panel.numbers-panel .landing-panel.numbers-panel
.container .container
%h2.landing-panel-title #{APPLICATION_NAME} en chiffres %h2.center.fr-mb-4w #{APPLICATION_NAME} en chiffres
%ul.numbers %ul.numbers
%li.number %li.number
.number-value .number-value

View file

@ -23,8 +23,8 @@
%img.role-image{ :src => image_url("landing/roles/usagers.svg"), alt: '', width: 176, height: 180, loading: 'lazy' } %img.role-image{ :src => image_url("landing/roles/usagers.svg"), alt: '', width: 176, height: 180, loading: 'lazy' }
.role-panel-70 .role-panel-70
%h2.role-panel-title Vous souhaitez effectuer une demande auprès dune administration ? %h2 Vous souhaitez effectuer une demande auprès dune administration ?
%p.role-panel-explanation Réalisez vos demandes en toute simplicité et retrouvez vos dossiers en ligne %p.fr-h5 Réalisez vos demandes en toute simplicité et retrouvez vos dossiers en ligne
= link_to "Comment trouver ma démarche ?", COMMENT_TROUVER_MA_DEMARCHE_URL, class: "fr-btn fr-btn--lg fr-mr-1w fr-mb-2w", **external_link_attributes = link_to "Comment trouver ma démarche ?", COMMENT_TROUVER_MA_DEMARCHE_URL, class: "fr-btn fr-btn--lg fr-mr-1w fr-mb-2w", **external_link_attributes
= link_to "Se connecter", new_user_session_path, class: "fr-btn fr-btn--secondary fr-btn--lg" = link_to "Se connecter", new_user_session_path, class: "fr-btn fr-btn--secondary fr-btn--lg"
@ -32,7 +32,7 @@
- cache "numbers-panel", :expires_in => 3.hours do - cache "numbers-panel", :expires_in => 3.hours do
.landing-panel .landing-panel
.container .container
%h2.landing-panel-title #{APPLICATION_NAME} en chiffres %h2.center.fr-mb-4w #{APPLICATION_NAME} en chiffres
%ul.numbers %ul.numbers
%li.number %li.number
.number-value .number-value
@ -77,7 +77,7 @@
.container .container
.cta-panel-wrapper .cta-panel-wrapper
%div %div
%h2.cta-panel-title.grey Administration : vous voulez dématerialiser ? %h2.fr-h4 Administration : vous voulez dématerialiser ?
%p.cta-panel-explanation.grey Proposez à vos usagers de remplir leurs dossiers en ligne %p.cta-panel-explanation.grey Proposez à vos usagers de remplir leurs dossiers en ligne
%div %div
= link_to "Découvrez notre outil", administration_path, class: "fr-btn fr-btn--lg" = link_to "Découvrez notre outil", administration_path, class: "fr-btn fr-btn--lg"

View file

@ -282,7 +282,7 @@
%section.list-avis %section.list-avis
%h1.title %h1.title
Avis des invités Avis des invités
%span.count 1 %span.fr-badge 1
%ul %ul
%li.one-avis %li.one-avis

View file

@ -0,0 +1,4 @@
.fr-footer__bottom-copy
%p
Sauf mention contraire, tous les contenus de ce site sont sous
%a{ href: "https://github.com/etalab/licence-ouverte/blob/master/LO.md", target:"_blank", rel: "noopener", title: "licence etalab-2.0 - nouvelle fenêtre" } licence etalab-2.0

View file

@ -11,7 +11,7 @@
= t('views.shared.france_connect_login.login_button') = t('views.shared.france_connect_login.login_button')
%span.fr-connect__brand FranceConnect %span.fr-connect__brand FranceConnect
%p %p
= link_to t('views.shared.france_connect_login.help_link'), "https://franceconnect.gouv.fr/", target: "_blank", rel: "noopener", class: "fr-underlined" = link_to t('views.shared.france_connect_login.help_link'), "https://franceconnect.gouv.fr/", target: "_blank", rel: "noopener"
.france-connect-login-separator .france-connect-login-separator
= t('views.shared.france_connect_login.separator') = t('views.shared.france_connect_login.separator')

View file

@ -1,11 +1,11 @@
.autosave.autosave-state-idle{ data: { controller: 'autosave-status' } } .autosave.autosave-state-idle{ data: { controller: 'autosave-status' } }
%p.autosave-explanation %p.autosave-explanation.fr-text--sm
%span.autosave-explanation-text %span.autosave-explanation-text
- if dossier.brouillon? - if dossier.brouillon?
= t('views.users.dossiers.autosave.draft_explanation') = t('views.users.dossiers.autosave.draft_explanation')
- else - else
= t('views.users.dossiers.autosave.explanation') = t('views.users.dossiers.autosave.explanation')
= link_to t('views.users.dossiers.autosave.more_information'), FAQ_AUTOSAVE_URL, target: '_blank', rel: 'noopener', class: 'autosave-more-infos' = link_to t('views.users.dossiers.autosave.more_information'), FAQ_AUTOSAVE_URL, target: '_blank', rel: 'noopener', class: 'autosave-more-infos fr-link fr-link--sm'
%p.autosave-status.succeeded %p.autosave-status.succeeded
%span.autosave-icon.icon.accept %span.autosave-icon.icon.accept
@ -14,7 +14,7 @@
= t('views.users.dossiers.autosave.draft_confirmation') = t('views.users.dossiers.autosave.draft_confirmation')
- else - else
= t('views.users.dossiers.autosave.confirmation') = t('views.users.dossiers.autosave.confirmation')
= link_to t('views.users.dossiers.autosave.more_information'), FAQ_AUTOSAVE_URL, target: '_blank', rel: 'noopener', class: 'autosave-more-infos' = link_to t('views.users.dossiers.autosave.more_information'), FAQ_AUTOSAVE_URL, target: '_blank', rel: 'noopener', class: 'autosave-more-infos fr-link fr-link--sm'
%p.autosave-status.failed %p.autosave-status.failed
%span.autosave-icon ⚠️ %span.autosave-icon ⚠️

View file

@ -21,15 +21,18 @@
= t('views.shared.dossiers.edit.autosave') = t('views.shared.dossiers.edit.autosave')
- if notice_url(dossier.procedure).present? - if notice_url(dossier.procedure).present?
%br .fr-download
= link_to t("views.shared.dossiers.edit.notice"), notice_url(dossier.procedure), %p
class: "fr-btn fr-btn--secondary mt-2", = link_to notice_url(dossier.procedure), download: "", class: "fr-download__link mr-2", title: t("views.shared.dossiers.edit.notice_title") do
title: t("views.shared.dossiers.edit.notice_title"), **external_link_attributes = t("views.shared.dossiers.edit.notice")
- if dossier.procedure.notice.attached?
%span.fr-download__detail
= download_details(dossier.procedure.notice)
- if administrateur_signed_in? - if administrateur_signed_in?
%em.ml-1.fr-text-mention--grey.visible-on-previous-hover %span.fr-text--xs.fr-text-mention--grey.visible-on-previous-hover
%span.fr-icon-feedback-line{ "aria-hidden": "true" } %span.fr-text-action-high--blue-france.fr-icon-questionnaire-line{ "aria-hidden": "true" }
= t('shared.ephemeral_link') = t('shared.ephemeral_link')
- if dossier.show_groupe_instructeur_selector? - if dossier.show_groupe_instructeur_selector?
%span{ data: { controller: 'autosave' } } %span{ data: { controller: 'autosave' } }
@ -53,7 +56,7 @@
= f.button t('views.shared.dossiers.edit.submit_dossier'), = f.button t('views.shared.dossiers.edit.submit_dossier'),
name: :submit_draft, name: :submit_draft,
value: true, value: true,
class: 'button send primary', class: 'fr-btn fr-btn--sm',
disabled: !current_user.owns?(dossier), disabled: !current_user.owns?(dossier),
data: { 'disable-with': "Envoi en cours…" } data: { 'disable-with': "Envoi en cours…" }

View file

@ -65,4 +65,4 @@
- if super_admin_signed_in? - if super_admin_signed_in?
%h2.new-h2 Téléchargement %h2.new-h2 Téléchargement
= link_to "Télécharger les statistiques (CSV)", stats_download_path(format: :csv), class: 'button secondary' = link_to "Télécharger les statistiques (CSV)", stats_download_path(format: :csv), class: 'fr-btn fr-btn-primary mb-4'

View file

@ -81,8 +81,4 @@
.fr-footer__bottom .fr-footer__bottom
= render partial: 'users/general_footer_row', locals: { dossier: dossier } = render partial: 'users/general_footer_row', locals: { dossier: dossier }
.fr-footer__bottom-copy = render partial: 'shared/footer_copy'
%p
Sauf mention contraire, tous les contenus de ce site sont sous
%a.fr-underlined{ href: "https://github.com/etalab/licence-ouverte/blob/master/LO.md", target:"_blank" } licence etalab-2.0
%br

View file

@ -7,7 +7,7 @@
= render partial: "shared/dossiers/identite_individual", locals: { individual: dossier.individual } = render partial: "shared/dossiers/identite_individual", locals: { individual: dossier.individual }
.center .center
= link_to t('views.shared.dossiers.demande.edit_identity'), identite_dossier_path(dossier), class: 'button' = link_to t('views.shared.dossiers.demande.edit_identity'), identite_dossier_path(dossier), class: 'fr-btn fr-btn--secondary'
- elsif dossier.etablissement - elsif dossier.etablissement
= render partial: "shared/dossiers/identite_entreprise", locals: { etablissement: dossier.etablissement, short_identity: true, profile: "usager" } = render partial: "shared/dossiers/identite_entreprise", locals: { etablissement: dossier.etablissement, short_identity: true, profile: "usager" }

View file

@ -19,8 +19,8 @@
%p.m-2= procedure.active_dossier_submitted_message.message_on_submit_by_usager %p.m-2= procedure.active_dossier_submitted_message.message_on_submit_by_usager
.flex.column.align-center .flex.column.align-center
= link_to t('views.users.dossiers.merci.acces_dossier'), dossier ? dossier_path(dossier) : "#dossier" , class: 'button large primary mt-4' = link_to t('views.users.dossiers.merci.acces_dossier'), dossier ? dossier_path(dossier) : "#dossier" , class: 'fr-btn fr-btn--xl fr-mt-5w'
= link_to t('views.users.dossiers.merci.submit_dossier'), procedure_lien(procedure), class: 'mt-4' = link_to t('views.users.dossiers.merci.submit_dossier'), procedure_lien(procedure), class: 'fr-btn fr-btn--secondary fr-mt-3w'
.monavis .monavis
!= procedure.monavis_embed != procedure.monavis_embed

View file

@ -41,5 +41,5 @@
= render partial: 'users/dossiers/etablissement/infos_entreprise', locals: { etablissement: etablissement } = render partial: 'users/dossiers/etablissement/infos_entreprise', locals: { etablissement: etablissement }
.actions .actions
= link_to 'Utiliser un autre numéro SIRET', siret_dossier_path(@dossier), class: 'button' = link_to 'Utiliser un autre numéro SIRET', siret_dossier_path(@dossier), class: 'fr-btn fr-btn--secondary'
= link_to 'Continuer avec ces informations', brouillon_dossier_path(@dossier), class: 'button primary' = link_to 'Continuer avec ces informations', brouillon_dossier_path(@dossier), class: 'fr-btn'

View file

@ -32,4 +32,4 @@
= f.label :birthdate = f.label :birthdate
= f.date_field :birthdate, value: @dossier.individual.birthdate, placeholder: 'format : AAAA-MM-JJ', required: true, class: "small" = f.date_field :birthdate, value: @dossier.individual.birthdate, placeholder: 'format : AAAA-MM-JJ', required: true, class: "small"
= f.submit t('views.users.dossiers.identite.continue'), class: "button large primary expand" = f.submit t('views.users.dossiers.identite.continue'), class: "fr-btn fr-btn--lg"

View file

@ -6,6 +6,5 @@
.message.inverted-background .message.inverted-background
= render Dossiers::MessageComponent.new(commentaire: latest_message, connected_user: current_user) = render Dossiers::MessageComponent.new(commentaire: latest_message, connected_user: current_user)
= link_to messagerie_dossier_url(dossier, anchor: 'new_commentaire'), class: 'button send' do = link_to messagerie_dossier_url(dossier, anchor: 'new_commentaire'), class: 'fr-btn fr-btn--icon-left fr-icon-discuss-line' do
%span.icon.reply
= commentaire_answer_action(latest_message, current_user) = commentaire_answer_action(latest_message, current_user)

View file

@ -1,4 +1,3 @@
.papertrail.mb-2 .papertrail.center.fr-my-5w
= link_to papertrail_dossier_url(dossier, format: :pdf), class: "button", download: t('.filename'), target: "_blank" do = link_to papertrail_dossier_url(dossier, format: :pdf), class: "fr-link", download: t('.filename'), target: "_blank" do
%span.icon.justificatif
= t('.get_papertrail') = t('.get_papertrail')

View file

@ -1,5 +1,4 @@
- @dossier.champs.filter(&:conditional?).each do |champ| - if @to_shows.present?
- if champ.visible? = turbo_stream.show_all(@to_shows)
= turbo_stream.show champ.input_group_id - if @to_hides.present?
- else = turbo_stream.hide_all(@to_hides)
= turbo_stream.hide champ.input_group_id

Some files were not shown because too many files have changed in this diff Show more