Styles table recap

This commit is contained in:
Emmanuel Viennet 2023-02-04 14:22:24 +01:00
parent 55d7270be7
commit 3c777278f9
5 changed files with 668 additions and 383 deletions

View File

@ -37,7 +37,11 @@ from app.tables.recap import RowRecap, TableRecap
class TableJury(TableRecap): class TableJury(TableRecap):
pass """Cette table recap reprend les colonnes du tableau recap, sauf les évaluations,
et ajoute:
- les RCUEs
- le lien de saisie ou modif de la décision de jury
"""
class RowJury(RowRecap): class RowJury(RowRecap):

View File

@ -17,196 +17,349 @@ table.dataTable {
*/ */
/* /*
* Body styles * Body styles
*/ } */
table.dataTable thead th, }
table.dataTable tfoot th {
font-weight: bold; } table.dataTable thead th,
table.dataTable thead th, table.dataTable tfoot th {
table.dataTable thead td { font-weight: bold;
padding: 10px 18px; }
border-bottom: 1px solid #111111; }
table.dataTable thead th:active, table.dataTable thead th,
table.dataTable thead td:active { table.dataTable thead td {
outline: none; } padding: 10px 18px;
table.dataTable tfoot th, border-bottom: 1px solid #111111;
table.dataTable tfoot td { }
padding: 10px 18px 6px 18px;
border-top: 1px solid #111111; } table.dataTable thead th:active,
table.dataTable thead .sorting, table.dataTable thead td:active {
table.dataTable thead .sorting_asc, outline: none;
table.dataTable thead .sorting_desc, }
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled { table.dataTable tfoot th,
cursor: pointer; table.dataTable tfoot td {
*cursor: hand; padding: 10px 18px 6px 18px;
background-repeat: no-repeat; border-top: 1px solid #111111;
background-position: center right; } }
table.dataTable thead .sorting {
background-image: url("../images/sort_both.png"); } table.dataTable thead .sorting,
table.dataTable thead .sorting_asc { table.dataTable thead .sorting_asc,
background-image: url("../images/sort_asc.png"); } table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_desc { table.dataTable thead .sorting_asc_disabled,
background-image: url("../images/sort_desc.png"); } table.dataTable thead .sorting_desc_disabled {
table.dataTable thead .sorting_asc_disabled { cursor: pointer;
background-image: url("../images/sort_asc_disabled.png"); } *cursor: hand;
table.dataTable thead .sorting_desc_disabled { background-repeat: no-repeat;
background-image: url("../images/sort_desc_disabled.png"); } background-position: center right;
table.dataTable tbody tr { }
background-color: white; }
table.dataTable tbody tr.selected { table.dataTable thead .sorting {
background-color: #b0bed9; } background-image: url("../images/sort_both.png");
table.dataTable tbody th, }
table.dataTable tbody td {
padding: 8px 10px; } table.dataTable thead .sorting_asc {
table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { background-image: url("../images/sort_asc.png");
border-top: 1px solid #dddddd; } }
table.dataTable.row-border tbody tr:first-child th,
table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, table.dataTable thead .sorting_desc {
table.dataTable.display tbody tr:first-child td { background-image: url("../images/sort_desc.png");
border-top: none; } }
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
border-top: 1px solid #dddddd; table.dataTable thead .sorting_asc_disabled {
border-right: 1px solid #dddddd; } background-image: url("../images/sort_asc_disabled.png");
table.dataTable.cell-border tbody tr th:first-child, }
table.dataTable.cell-border tbody tr td:first-child {
border-left: 1px solid #dddddd; } table.dataTable thead .sorting_desc_disabled {
table.dataTable.cell-border tbody tr:first-child th, background-image: url("../images/sort_desc_disabled.png");
table.dataTable.cell-border tbody tr:first-child td { }
border-top: none; }
table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { table.dataTable tbody tr {
background-color: #f9f9f9; background-color: white;
} }
table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
background-color: #abb9d3; } table.dataTable tbody tr.selected {
table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { background-color: #b0bed9;
background-color: whitesmoke; } }
table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
background-color: #a9b7d1; } table.dataTable tbody th,
table.dataTable.order-column tbody tr > .sorting_1, table.dataTable tbody td {
table.dataTable.order-column tbody tr > .sorting_2, padding: 8px 10px;
table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, }
table.dataTable.display tbody tr > .sorting_2,
table.dataTable.display tbody tr > .sorting_3 { table.dataTable.row-border tbody th,
background-color: #f9f9f9; table.dataTable.row-border tbody td,
} table.dataTable.display tbody th,
table.dataTable.order-column tbody tr.selected > .sorting_1, table.dataTable.display tbody td {
table.dataTable.order-column tbody tr.selected > .sorting_2, border-top: 1px solid #dddddd;
table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, }
table.dataTable.display tbody tr.selected > .sorting_2,
table.dataTable.display tbody tr.selected > .sorting_3 { table.dataTable.row-border tbody tr:first-child th,
background-color: #acbad4; } table.dataTable.row-border tbody tr:first-child td,
table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { table.dataTable.display tbody tr:first-child th,
background-color: #f1f1f1; } table.dataTable.display tbody tr:first-child td {
table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { border-top: none;
background-color: #f3f3f3; } }
table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
background-color: whitesmoke; } table.dataTable.cell-border tbody th,
table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { table.dataTable.cell-border tbody td {
background-color: #a6b3cd; } border-top: 1px solid #dddddd;
table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { border-right: 1px solid #dddddd;
background-color: #a7b5ce; } }
table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
background-color: #a9b6d0; } table.dataTable.cell-border tbody tr th:first-child,
table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { table.dataTable.cell-border tbody tr td:first-child {
background-color: #f9f9f9; border-left: 1px solid #dddddd;
} }
table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
background-color: #fbfbfb; } table.dataTable.cell-border tbody tr:first-child th,
table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { table.dataTable.cell-border tbody tr:first-child td {
background-color: #fdfdfd; } border-top: none;
table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { }
background-color: #acbad4; }
table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { table.dataTable.stripe tbody tr.odd,
background-color: #adbbd6; } table.dataTable.display tbody tr.odd {
table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { background-color: #f9f9f9;
background-color: #afbdd8; } }
table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
background-color: #eaeaea; } table.dataTable.stripe tbody tr.odd.selected,
table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { table.dataTable.display tbody tr.odd.selected {
background-color: #ebebeb; } background-color: #abb9d3;
table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { }
background-color: #eeeeee; }
table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { table.dataTable.hover tbody tr:hover,
background-color: #a1aec7; } table.dataTable.display tbody tr:hover {
table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { background-color: whitesmoke;
background-color: #a2afc8; } }
table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
background-color: #a4b2cb; } table.dataTable.hover tbody tr:hover.selected,
table.dataTable.no-footer { table.dataTable.display tbody tr:hover.selected {
border-bottom: 1px solid #111111; } background-color: #a9b7d1;
table.dataTable.nowrap th, table.dataTable.nowrap td { }
white-space: nowrap; }
table.dataTable.compact thead th, table.dataTable.order-column tbody tr>.sorting_1,
table.dataTable.compact thead td { table.dataTable.order-column tbody tr>.sorting_2,
padding: 4px 17px 4px 4px; } table.dataTable.order-column tbody tr>.sorting_3,
table.dataTable.compact tfoot th, table.dataTable.display tbody tr>.sorting_1,
table.dataTable.compact tfoot td { table.dataTable.display tbody tr>.sorting_2,
padding: 4px; } table.dataTable.display tbody tr>.sorting_3 {
table.dataTable.compact tbody th, background-color: #f9f9f9;
table.dataTable.compact tbody td { }
padding: 4px; }
table.dataTable th.dt-left, table.dataTable.order-column tbody tr.selected>.sorting_1,
table.dataTable td.dt-left { table.dataTable.order-column tbody tr.selected>.sorting_2,
text-align: left; } table.dataTable.order-column tbody tr.selected>.sorting_3,
table.dataTable th.dt-center, table.dataTable.display tbody tr.selected>.sorting_1,
table.dataTable td.dt-center, table.dataTable.display tbody tr.selected>.sorting_2,
table.dataTable td.dataTables_empty { table.dataTable.display tbody tr.selected>.sorting_3 {
text-align: center; } background-color: #acbad4;
table.dataTable th.dt-right, }
table.dataTable td.dt-right {
text-align: right; } table.dataTable.display tbody tr.odd>.sorting_1,
table.dataTable th.dt-justify, table.dataTable.order-column.stripe tbody tr.odd>.sorting_1 {
table.dataTable td.dt-justify { background-color: #f1f1f1;
text-align: justify; } }
table.dataTable th.dt-nowrap,
table.dataTable td.dt-nowrap { table.dataTable.display tbody tr.odd>.sorting_2,
white-space: nowrap; } table.dataTable.order-column.stripe tbody tr.odd>.sorting_2 {
table.dataTable thead th.dt-head-left, background-color: #f3f3f3;
table.dataTable thead td.dt-head-left, }
table.dataTable tfoot th.dt-head-left,
table.dataTable tfoot td.dt-head-left { table.dataTable.display tbody tr.odd>.sorting_3,
text-align: left; } table.dataTable.order-column.stripe tbody tr.odd>.sorting_3 {
table.dataTable thead th.dt-head-center, background-color: whitesmoke;
table.dataTable thead td.dt-head-center, }
table.dataTable tfoot th.dt-head-center,
table.dataTable tfoot td.dt-head-center { table.dataTable.display tbody tr.odd.selected>.sorting_1,
text-align: center; } table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1 {
table.dataTable thead th.dt-head-right, background-color: #a6b3cd;
table.dataTable thead td.dt-head-right, }
table.dataTable tfoot th.dt-head-right,
table.dataTable tfoot td.dt-head-right { table.dataTable.display tbody tr.odd.selected>.sorting_2,
text-align: right; } table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2 {
table.dataTable thead th.dt-head-justify, background-color: #a7b5ce;
table.dataTable thead td.dt-head-justify, }
table.dataTable tfoot th.dt-head-justify,
table.dataTable tfoot td.dt-head-justify { table.dataTable.display tbody tr.odd.selected>.sorting_3,
text-align: justify; } table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3 {
table.dataTable thead th.dt-head-nowrap, background-color: #a9b6d0;
table.dataTable thead td.dt-head-nowrap, }
table.dataTable tfoot th.dt-head-nowrap,
table.dataTable tfoot td.dt-head-nowrap { table.dataTable.display tbody tr.even>.sorting_1,
white-space: nowrap; } table.dataTable.order-column.stripe tbody tr.even>.sorting_1 {
table.dataTable tbody th.dt-body-left, background-color: #f9f9f9;
table.dataTable tbody td.dt-body-left { }
text-align: left; }
table.dataTable tbody th.dt-body-center, table.dataTable.display tbody tr.even>.sorting_2,
table.dataTable tbody td.dt-body-center { table.dataTable.order-column.stripe tbody tr.even>.sorting_2 {
text-align: center; } background-color: #fbfbfb;
table.dataTable tbody th.dt-body-right, }
table.dataTable tbody td.dt-body-right {
text-align: right; } table.dataTable.display tbody tr.even>.sorting_3,
table.dataTable tbody th.dt-body-justify, table.dataTable.order-column.stripe tbody tr.even>.sorting_3 {
table.dataTable tbody td.dt-body-justify { background-color: #fdfdfd;
text-align: justify; } }
table.dataTable tbody th.dt-body-nowrap,
table.dataTable tbody td.dt-body-nowrap { table.dataTable.display tbody tr.even.selected>.sorting_1,
white-space: nowrap; } table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1 {
background-color: #acbad4;
}
table.dataTable.display tbody tr.even.selected>.sorting_2,
table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2 {
background-color: #adbbd6;
}
table.dataTable.display tbody tr.even.selected>.sorting_3,
table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3 {
background-color: #afbdd8;
}
table.dataTable.display tbody tr:hover>.sorting_1,
table.dataTable.order-column.hover tbody tr:hover>.sorting_1 {
background-color: #eaeaea;
}
table.dataTable.display tbody tr:hover>.sorting_2,
table.dataTable.order-column.hover tbody tr:hover>.sorting_2 {
background-color: #ebebeb;
}
table.dataTable.display tbody tr:hover>.sorting_3,
table.dataTable.order-column.hover tbody tr:hover>.sorting_3 {
background-color: #eeeeee;
}
table.dataTable.display tbody tr:hover.selected>.sorting_1,
table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1 {
background-color: #a1aec7;
}
table.dataTable.display tbody tr:hover.selected>.sorting_2,
table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2 {
background-color: #a2afc8;
}
table.dataTable.display tbody tr:hover.selected>.sorting_3,
table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3 {
background-color: #a4b2cb;
}
table.dataTable.no-footer {
border-bottom: 1px solid #111111;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
table.dataTable.compact thead th,
table.dataTable.compact thead td {
padding: 4px 17px 4px 4px;
}
table.dataTable.compact tfoot th,
table.dataTable.compact tfoot td {
padding: 4px;
}
table.dataTable.compact tbody th,
table.dataTable.compact tbody td {
padding: 4px;
}
table.dataTable th.dt-left,
table.dataTable td.dt-left {
text-align: left;
}
table.dataTable th.dt-center,
table.dataTable td.dt-center,
table.dataTable td.dataTables_empty {
text-align: center;
}
table.dataTable th.dt-right,
table.dataTable td.dt-right {
text-align: right;
}
table.dataTable th.dt-justify,
table.dataTable td.dt-justify {
text-align: justify;
}
table.dataTable th.dt-nowrap,
table.dataTable td.dt-nowrap {
white-space: nowrap;
}
table.dataTable thead th.dt-head-left,
table.dataTable thead td.dt-head-left,
table.dataTable tfoot th.dt-head-left,
table.dataTable tfoot td.dt-head-left {
text-align: left;
}
table.dataTable thead th.dt-head-center,
table.dataTable thead td.dt-head-center,
table.dataTable tfoot th.dt-head-center,
table.dataTable tfoot td.dt-head-center {
text-align: center;
}
table.dataTable thead th.dt-head-right,
table.dataTable thead td.dt-head-right,
table.dataTable tfoot th.dt-head-right,
table.dataTable tfoot td.dt-head-right {
text-align: right;
}
table.dataTable thead th.dt-head-justify,
table.dataTable thead td.dt-head-justify,
table.dataTable tfoot th.dt-head-justify,
table.dataTable tfoot td.dt-head-justify {
text-align: justify;
}
table.dataTable thead th.dt-head-nowrap,
table.dataTable thead td.dt-head-nowrap,
table.dataTable tfoot th.dt-head-nowrap,
table.dataTable tfoot td.dt-head-nowrap {
white-space: nowrap;
}
table.dataTable tbody th.dt-body-left,
table.dataTable tbody td.dt-body-left {
text-align: left;
}
table.dataTable tbody th.dt-body-center,
table.dataTable tbody td.dt-body-center {
text-align: center;
}
table.dataTable tbody th.dt-body-right,
table.dataTable tbody td.dt-body-right {
text-align: right;
}
table.dataTable tbody th.dt-body-justify,
table.dataTable tbody td.dt-body-justify {
text-align: justify;
}
table.dataTable tbody th.dt-body-nowrap,
table.dataTable tbody td.dt-body-nowrap {
white-space: nowrap;
}
table.dataTable, table.dataTable,
table.dataTable th, table.dataTable th,
table.dataTable td { table.dataTable td {
box-sizing: content-box; } box-sizing: content-box;
}
/* /*
* Control feature layout * Control feature layout
*/ */
@ -214,204 +367,278 @@ table.dataTable td {
position: relative; position: relative;
clear: both; clear: both;
*zoom: 1; *zoom: 1;
zoom: 1; } zoom: 1;
.dataTables_wrapper .dataTables_length { }
float: left; }
.dataTables_wrapper .dataTables_filter { .dataTables_wrapper .dataTables_length {
float: right; float: left;
text-align: right; } }
.dataTables_wrapper .dataTables_filter input {
margin-left: 0.5em; } .dataTables_wrapper .dataTables_filter {
.dataTables_wrapper .dataTables_info { float: right;
clear: both; text-align: right;
float: left; }
padding-top: 0.755em; }
.dataTables_wrapper .dataTables_paginate { .dataTables_wrapper .dataTables_filter input {
float: right; margin-left: 0.5em;
text-align: right; }
padding-top: 0.25em; }
.dataTables_wrapper .dataTables_paginate .paginate_button { .dataTables_wrapper .dataTables_info {
box-sizing: border-box; clear: both;
display: inline-block; float: left;
min-width: 1.5em; padding-top: 0.755em;
padding: 0.5em 1em; }
margin-left: 2px;
text-align: center; .dataTables_wrapper .dataTables_paginate {
text-decoration: none !important; float: right;
cursor: pointer; text-align: right;
*cursor: hand; padding-top: 0.25em;
color: #333333 !important; }
border: 1px solid transparent;
border-radius: 2px; } .dataTables_wrapper .dataTables_paginate .paginate_button {
.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { box-sizing: border-box;
color: #333333 !important; display: inline-block;
border: 1px solid #979797; min-width: 1.5em;
background-color: white; padding: 0.5em 1em;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, gainsboro)); margin-left: 2px;
/* Chrome,Safari4+ */ text-align: center;
background: -webkit-linear-gradient(top, white 0%, gainsboro 100%); text-decoration: none !important;
/* Chrome10+,Safari5.1+ */ cursor: pointer;
background: -moz-linear-gradient(top, white 0%, gainsboro 100%); *cursor: hand;
/* FF3.6+ */ color: #333333 !important;
background: -ms-linear-gradient(top, white 0%, gainsboro 100%); border: 1px solid transparent;
/* IE10+ */ border-radius: 2px;
background: -o-linear-gradient(top, white 0%, gainsboro 100%); }
/* Opera 11.10+ */
background: linear-gradient(to bottom, white 0%, gainsboro 100%); .dataTables_wrapper .dataTables_paginate .paginate_button.current,
/* W3C */ } .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { color: #333333 !important;
cursor: default; border: 1px solid #979797;
color: #666 !important; background-color: white;
border: 1px solid transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, gainsboro));
background: transparent; /* Chrome,Safari4+ */
box-shadow: none; } background: -webkit-linear-gradient(top, white 0%, gainsboro 100%);
.dataTables_wrapper .dataTables_paginate .paginate_button:hover { /* Chrome10+,Safari5.1+ */
color: white !important; background: -moz-linear-gradient(top, white 0%, gainsboro 100%);
border: 1px solid #111111; /* FF3.6+ */
background-color: #585858; background: -ms-linear-gradient(top, white 0%, gainsboro 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111111)); /* IE10+ */
/* Chrome,Safari4+ */ background: -o-linear-gradient(top, white 0%, gainsboro 100%);
background: -webkit-linear-gradient(top, #585858 0%, #111111 100%); /* Opera 11.10+ */
/* Chrome10+,Safari5.1+ */ background: linear-gradient(to bottom, white 0%, gainsboro 100%);
background: -moz-linear-gradient(top, #585858 0%, #111111 100%); /* W3C */
/* FF3.6+ */ }
background: -ms-linear-gradient(top, #585858 0%, #111111 100%);
/* IE10+ */ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
background: -o-linear-gradient(top, #585858 0%, #111111 100%); .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,
/* Opera 11.10+ */ .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
background: linear-gradient(to bottom, #585858 0%, #111111 100%); cursor: default;
/* W3C */ } color: #666 !important;
.dataTables_wrapper .dataTables_paginate .paginate_button:active { border: 1px solid transparent;
outline: none; background: transparent;
background-color: #2b2b2b; box-shadow: none;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); }
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
/* Chrome10+,Safari5.1+ */ color: white !important;
background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); border: 1px solid #111111;
/* FF3.6+ */ background-color: #585858;
background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111111));
/* IE10+ */ /* Chrome,Safari4+ */
background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); background: -webkit-linear-gradient(top, #585858 0%, #111111 100%);
/* Opera 11.10+ */ /* Chrome10+,Safari5.1+ */
background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); background: -moz-linear-gradient(top, #585858 0%, #111111 100%);
/* W3C */ /* FF3.6+ */
box-shadow: inset 0 0 3px #111; } background: -ms-linear-gradient(top, #585858 0%, #111111 100%);
.dataTables_wrapper .dataTables_paginate .ellipsis { /* IE10+ */
padding: 0 1em; } background: -o-linear-gradient(top, #585858 0%, #111111 100%);
.dataTables_wrapper .dataTables_processing { /* Opera 11.10+ */
position: absolute; background: linear-gradient(to bottom, #585858 0%, #111111 100%);
top: 50%; /* W3C */
left: 50%; }
width: 100%;
height: 40px; .dataTables_wrapper .dataTables_paginate .paginate_button:active {
margin-left: -50%; outline: none;
margin-top: -25px; background-color: #2b2b2b;
padding-top: 20px; background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
text-align: center; /* Chrome,Safari4+ */
font-size: 1.2em; background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
background-color: white; /* Chrome10+,Safari5.1+ */
background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); /* FF3.6+ */
background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); /* IE10+ */
background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); } /* Opera 11.10+ */
.dataTables_wrapper .dataTables_length, background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
.dataTables_wrapper .dataTables_filter, /* W3C */
.dataTables_wrapper .dataTables_info, box-shadow: inset 0 0 3px #111;
.dataTables_wrapper .dataTables_processing, }
.dataTables_wrapper .dataTables_paginate {
color: #333333; } .dataTables_wrapper .dataTables_paginate .ellipsis {
.dataTables_wrapper .dataTables_scroll { padding: 0 1em;
clear: both; } }
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
*margin-top: -1px; .dataTables_wrapper .dataTables_processing {
-webkit-overflow-scrolling: touch; } position: absolute;
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td { top: 50%;
vertical-align: middle; } left: 50%;
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing, width: 100%;
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing, height: 40px;
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing { margin-left: -50%;
height: 0; margin-top: -25px;
overflow: hidden; padding-top: 20px;
margin: 0 !important; text-align: center;
padding: 0 !important; } font-size: 1.2em;
.dataTables_wrapper.no-footer .dataTables_scrollBody { background-color: white;
border-bottom: 1px solid #111111; } background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
.dataTables_wrapper.no-footer div.dataTables_scrollHead > table, background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
.dataTables_wrapper.no-footer div.dataTables_scrollBody > table { background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
border-bottom: none; } background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
.dataTables_wrapper:after { background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
visibility: hidden; background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
display: block; }
content: "";
clear: both; .dataTables_wrapper .dataTables_length,
height: 0; } .dataTables_wrapper .dataTables_filter,
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_processing,
.dataTables_wrapper .dataTables_paginate {
color: #333333;
}
.dataTables_wrapper .dataTables_scroll {
clear: both;
}
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
*margin-top: -1px;
-webkit-overflow-scrolling: touch;
}
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td {
vertical-align: middle;
}
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing {
height: 0;
overflow: hidden;
margin: 0 !important;
padding: 0 !important;
}
.dataTables_wrapper.no-footer .dataTables_scrollBody {
border-bottom: 1px solid #111111;
}
.dataTables_wrapper.no-footer div.dataTables_scrollHead>table,
.dataTables_wrapper.no-footer div.dataTables_scrollBody>table {
border-bottom: none;
}
.dataTables_wrapper:after {
visibility: hidden;
display: block;
content: "";
clear: both;
height: 0;
}
@media screen and (max-width: 767px) { @media screen and (max-width: 767px) {
.dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_paginate { .dataTables_wrapper .dataTables_paginate {
float: none; float: none;
text-align: center; } text-align: center;
}
.dataTables_wrapper .dataTables_paginate { .dataTables_wrapper .dataTables_paginate {
margin-top: 0.5em; } } margin-top: 0.5em;
}
}
@media screen and (max-width: 640px) { @media screen and (max-width: 640px) {
.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter { .dataTables_wrapper .dataTables_filter {
float: none; float: none;
text-align: center; } text-align: center;
}
.dataTables_wrapper .dataTables_filter { .dataTables_wrapper .dataTables_filter {
margin-top: 0.5em; } } margin-top: 0.5em;
}
}
/* ------ Ajouts spécifiques pour ScoDoc: /* ------ Ajouts spécifiques pour ScoDoc:
*/ */
table.gt_table td { table.gt_table td {
text-align: right; text-align: right;
} }
table.gt_table tbody th { table.gt_table tbody th {
font-weight: normal; font-weight: normal;
text-align: left; text-align: left;
} }
table.table_leftalign tr td {
table.table_leftalign tr td {
text-align: left; text-align: left;
} }
/* Ligne(s) de titre */ /* Ligne(s) de titre */
table.dataTable thead tr th { table.dataTable thead tr th {
background-color: rgb(90%,90%,90%); background-color: rgb(90%, 90%, 90%);
} }
table.dataTable thead tr td { table.dataTable thead tr td {
background-color: rgb(95%,95%,95%); background-color: rgb(95%, 95%, 95%);
border-top: none; border-top: none;
border-bottom: none; border-bottom: none;
border-right: 1px solid #dddddd; border-right: 1px solid #dddddd;
} }
table.dataTable thead tr td:first-child { table.dataTable thead tr td:first-child {
border-left: 1px solid #dddddd; border-left: 1px solid #dddddd;
} }
/* Lignes impaires des tableaux "stripe" */ /* Lignes impaires des tableaux "stripe" */
table.dataTable.stripe tbody tr.odd td, table.dataTable.stripe tbody tr.odd td.sorting_1, table.dataTable.order-column.stripe tbody tr.odd td.sorting_1 { table.dataTable.stripe tbody tr.odd td,
background-color: rgb(90%,95%,90%); table.dataTable.stripe tbody tr.odd td.sorting_1,
table.dataTable.order-column.stripe tbody tr.odd td.sorting_1 {
background-color: rgb(90%, 95%, 90%);
} }
table.dataTable.stripe.hover tbody tr.odd:hover td, table.dataTable.stripe.hover tbody tr.odd:hover td.sorting_1, table.dataTable.order-column.stripe.hover tbody tr.odd:hover td.sorting_1 { table.dataTable.stripe.hover tbody tr.odd:hover td,
background-color: rgb(80%,85%,80%);; table.dataTable.stripe.hover tbody tr.odd:hover td.sorting_1,
table.dataTable.order-column.stripe.hover tbody tr.odd:hover td.sorting_1 {
background-color: rgb(80%, 85%, 80%);
;
} }
/* Lignes paires */ /* Lignes paires */
table.dataTable.stripe tbody tr.even td, table.dataTable.stripe tbody tr.even td.sorting_1, table.dataTable.order-column.stripe tbody tr.even td.sorting_1 { table.dataTable.stripe tbody tr.even td,
background-color: rgb(95%,95%,95%); table.dataTable.stripe tbody tr.even td.sorting_1,
table.dataTable.order-column.stripe tbody tr.even td.sorting_1 {
background-color: rgb(95%, 95%, 95%);
} }
table.dataTable.stripe.hover tbody tr.even:hover td, table.dataTable.stripe.hover tbody tr.even:hover td.sorting_1, table.dataTable.order-column.stripe.hover tbody tr.even:hover td.sorting_1 {
background-color: rgb(85%,85%,85%);; table.dataTable.stripe.hover tbody tr.even:hover td,
table.dataTable.stripe.hover tbody tr.even:hover td.sorting_1,
table.dataTable.order-column.stripe.hover tbody tr.even:hover td.sorting_1 {
background-color: rgb(85%, 85%, 85%);
;
} }
/* Reglage largeur de la table */ /* Reglage largeur de la table */
table.dataTable.gt_table { table.dataTable.gt_table {
width: auto; width: auto;
padding-right: 5px; padding-right: 5px;
} }

View File

@ -4133,6 +4133,17 @@ table.table_recap td.col_ues_validables {
font-style: normal !important; font-style: normal !important;
} }
table.table_recap td.col_res,
table.table_recap th.col_res {
border-right: 1px dashed green;
border-left: 1px dashed green;
}
table.table_recap td.partition,
table.table_recap th.partition {
border-right: 1px solid rgb(221, 221, 221);
border-left: 1px solid rgb(221, 221, 221);
}
.green-arrow-up { .green-arrow-up {
display: inline-block; display: inline-block;
@ -4228,18 +4239,17 @@ table.table_recap tr.descr_evaluation {
vertical-align: top; vertical-align: top;
} }
table.table_recap tr.apo { table.table_recap tr.apo td:not(.identite_court) {
font-size: 75%; font-size: 75%;
font-family: monospace; font-family: monospace;
} }
table.table_recap tr.apo td { table.table_recap tr.apo td {
border: 1px solid gray; background-color: #f5fdf6;
background-color: #d8f5fe;
} }
table.table_recap tr.type_col { table.table_recap tr.type_col {
font-size: 50%; font-size: 40%;
font-family: monospace; font-family: monospace;
} }

View File

@ -110,18 +110,18 @@ class TableRecap(tb.Table):
for col_id in self.column_ids: for col_id in self.column_ids:
cell: tb.Cell = row_moy.cells.get(col_id) cell: tb.Cell = row_moy.cells.get(col_id)
if cell and "col_empty" in cell.classes: if cell and "col_empty" in cell.classes:
self.column_classes[col_id].append("col_empty") self.column_classes[col_id].add("col_empty")
def add_type_row(self): def add_type_row(self):
"""Ligne avec la classe de chaque colonne recap.""" """Ligne avec la classe de chaque colonne recap."""
# récupère le type à partir des classes css (hack...) # récupère le type à partir du groupe (enlève le préfixe "col_" si présent)
row_type = tb.BottomRow( row_type = tb.BottomRow(
self, self,
"type_col", "type_col",
left_title="Type col.", left_title="Type col.",
left_title_col_ids=["prenom", "nom_short"], left_title_col_ids=["prenom", "nom_short"],
category="bottom_infos", category="bottom_infos",
classes=["bottom_info"], classes=["bottom_info", "type_col"],
) )
for col_id in self.column_ids: for col_id in self.column_ids:
group_name = self.column_group.get(col_id, "") group_name = self.column_group.get(col_id, "")
@ -180,7 +180,7 @@ class TableRecap(tb.Table):
left_title="Code Apogée", left_title="Code Apogée",
left_title_col_ids=["prenom", "nom_short"], left_title_col_ids=["prenom", "nom_short"],
category="bottom_infos", category="bottom_infos",
classes=["bottom_info"], classes=["bottom_info", "apo"],
) )
# --- ECTS # --- ECTS
@ -188,25 +188,58 @@ class TableRecap(tb.Table):
for ue in ues: for ue in ues:
col_id = f"moy_ue_{ue.id}" col_id = f"moy_ue_{ue.id}"
row_ects.add_cell(col_id, None, ue.ects) row_ects.add_cell(col_id, None, ue.ects)
# ajoute cell UE vides sur ligne coef pour borders verticales
# XXX TODO classes dans table sur colonne ajoutées à tous les TD
row_coef.add_cell(col_id, None, "")
row_ects.add_cell( row_ects.add_cell(
"moy_gen", "moy_gen",
None, None,
sum([ue.ects or 0 for ue in ues if ue.type != UE_SPORT]), sum([ue.ects or 0 for ue in ues if ue.type != UE_SPORT]),
) )
# --- MIN, MAX, MOY, APO # --- MIN, MAX, MOY, APO
row_min.add_cell("moy_gen", None, self.fmt_note(res.etud_moy_gen.min())) row_min.add_cell(
row_max.add_cell("moy_gen", None, self.fmt_note(res.etud_moy_gen.max())) "moy_gen",
row_moy.add_cell("moy_gen", None, self.fmt_note(res.etud_moy_gen.mean())) None,
self.fmt_note(res.etud_moy_gen.min()),
# classes=["col_moy_gen"],
)
row_max.add_cell(
"moy_gen",
None,
self.fmt_note(res.etud_moy_gen.max()),
classes=["col_moy_gen"],
)
row_moy.add_cell(
"moy_gen",
None,
self.fmt_note(res.etud_moy_gen.mean()),
# classes=["col_moy_gen"],
)
for ue in ues: for ue in ues:
col_id = f"moy_ue_{ue.id}" col_id = f"moy_ue_{ue.id}"
row_min.add_cell(col_id, None, self.fmt_note(res.etud_moy_ue[ue.id].min())) row_min.add_cell(
row_max.add_cell(col_id, None, self.fmt_note(res.etud_moy_ue[ue.id].max())) col_id,
row_moy.add_cell(col_id, None, self.fmt_note(res.etud_moy_ue[ue.id].mean())) None,
row_apo.add_cell(col_id, None, ue.code_apogee or "") self.fmt_note(res.etud_moy_ue[ue.id].min()),
classes=["col_ue", "col_moy_ue"],
)
row_max.add_cell(
col_id,
None,
self.fmt_note(res.etud_moy_ue[ue.id].max()),
classes=["col_ue", "col_moy_ue"],
)
row_moy.add_cell(
col_id,
None,
self.fmt_note(res.etud_moy_ue[ue.id].mean()),
classes=["col_ue", "col_moy_ue"],
)
row_apo.add_cell(
col_id,
None,
ue.code_apogee or "",
classes=["col_ue", "col_moy_ue"],
)
for modimpl in res.formsemestre.modimpls_sorted: for modimpl in res.formsemestre.modimpls_sorted:
if (modimpl.id, ue.id) in self.modimpl_ue_ids: if (modimpl.id, ue.id) in self.modimpl_ue_ids:
@ -260,13 +293,12 @@ class TableRecap(tb.Table):
group = None # group (dict) de l'étudiant dans cette partition group = None # group (dict) de l'étudiant dans cette partition
# dans NotesTableCompat, à revoir # dans NotesTableCompat, à revoir
etud_etat = self.res.get_etud_etat(row.id) # row.id == etudid etud_etat = self.res.get_etud_etat(row.id) # row.id == etudid
tr_classes = []
if etud_etat == scu.DEMISSION: if etud_etat == scu.DEMISSION:
gr_name = "Dém." gr_name = "Dém."
tr_classes.append("dem") row.add_class("dem")
elif etud_etat == DEF: elif etud_etat == DEF:
gr_name = "Déf." gr_name = "Déf."
tr_classes.append("def") row.add_class("def")
else: else:
group = partition_etud_groups.get(etudid) group = partition_etud_groups.get(etudid)
gr_name = group["group_name"] if group else "" gr_name = group["group_name"] if group else ""
@ -519,7 +551,7 @@ class RowRecap(tb.Row):
"moy_gen", "moy_gen",
"Moy", "Moy",
table.fmt_note(moy_gen), table.fmt_note(moy_gen),
"col_moy_gen", group="col_moy_gen",
classes=[note_class], classes=[note_class],
) )
# Ajoute bulle sur titre du pied de table: # Ajoute bulle sur titre du pied de table:
@ -553,7 +585,7 @@ class RowRecap(tb.Row):
val_fmt_html, val_fmt_html,
raw_content=val_fmt, raw_content=val_fmt,
group=f"col_ue_{ue.id}", group=f"col_ue_{ue.id}",
classes=["col_ue_bonus"], column_classes={"col_ue_bonus"},
) )
# Les moyennes des modules (ou ressources et SAÉs) dans cette UE # Les moyennes des modules (ou ressources et SAÉs) dans cette UE
self.add_ue_modimpls_cols(ue, ue_status["is_capitalized"]) self.add_ue_modimpls_cols(ue, ue_status["is_capitalized"])
@ -566,17 +598,18 @@ class RowRecap(tb.Row):
ue_valid_txt_html += " " + scu.EMO_WARNING ue_valid_txt_html += " " + scu.EMO_WARNING
# place juste avant moy. gen. # place juste avant moy. gen.
table.insert_group("col_ues_validables", before="col_moy_gen") table.insert_group("col_ues_validables", before="col_moy_gen")
classes = ["col_ue"] cell_class = ""
if self.nb_ues_warning: if self.nb_ues_warning:
classes.append("moy_ue_warning") cell_class = "moy_ue_warning"
elif self.nb_ues_validables < len(ues_sans_bonus): elif self.nb_ues_validables < len(ues_sans_bonus):
classes.append("moy_inf") cell_class = "moy_inf"
self.add_cell( self.add_cell(
"ues_validables", "ues_validables",
"UEs", "UEs",
ue_valid_txt_html, ue_valid_txt_html,
group="col_ues_validables", group="col_ues_validables",
classes=classes, classes=[cell_class],
column_classes={"col_ue"},
raw_content=ue_valid_txt, raw_content=ue_valid_txt,
data={"order": self.nb_ues_validables}, # tri data={"order": self.nb_ues_validables}, # tri
) )
@ -627,7 +660,8 @@ class RowRecap(tb.Row):
ue.acronyme, ue.acronyme,
table.fmt_note(val), table.fmt_note(val),
group=f"col_ue_{ue.id}", group=f"col_ue_{ue.id}",
classes=["col_ue", "col_moy_ue", note_class], classes=[note_class],
column_classes={"col_ue", "col_moy_ue"},
) )
table.foot_title_row.cells[col_id].target_attrs[ table.foot_title_row.cells[col_id].target_attrs[
"title" "title"
@ -678,10 +712,10 @@ class RowRecap(tb.Row):
val_fmt_html, val_fmt_html,
raw_content=val_fmt, raw_content=val_fmt,
group=f"col_ue_{ue.id}_modules", group=f"col_ue_{ue.id}_modules",
classes=[ column_classes={
f"col_{modimpl.module.type_abbrv()}", f"col_{modimpl.module.type_abbrv()}",
f"mod_ue_{ue.id}", f"mod_ue_{ue.id}",
], },
) )
if modimpl.module.module_type == scu.ModuleType.MALUS: if modimpl.module.module_type == scu.ModuleType.MALUS:
# positionne la colonne à droite de l'UE # positionne la colonne à droite de l'UE

View File

@ -26,9 +26,9 @@ class Element:
self.data = data or {} self.data = data or {}
"data-xxx" "data-xxx"
def html(self, extra_classes: list[str] = None) -> str: def html(self, extra_classes: set[str] = None) -> str:
"html for element" "html for element"
classes = [cls for cls in (self.classes + (extra_classes or [])) if cls] classes = [cls for cls in (self.classes + (list(extra_classes or []))) if cls]
attrs_str = f"""class="{' '.join(classes)}" """ if classes else "" attrs_str = f"""class="{' '.join(classes)}" """ if classes else ""
# Autres attributs: # Autres attributs:
attrs_str += " " + " ".join([f'{k}="{v}"' for (k, v) in self.attrs.items()]) attrs_str += " " + " ".join([f'{k}="{v}"' for (k, v) in self.attrs.items()])
@ -40,6 +40,11 @@ class Element:
"Le contenu de l'élément, en html." "Le contenu de l'élément, en html."
return str(self.content or "") return str(self.content or "")
def add_class(self, klass: str):
"Add a class, do nothing if already there"
if klass not in self.classes:
self.classes.append(klass)
class Table(Element): class Table(Element):
"""Construction d'une table de résultats """Construction d'une table de résultats
@ -81,7 +86,7 @@ class Table(Element):
self.foot = [] self.foot = []
self.column_group = {} self.column_group = {}
"the group of the column: { col_id : group }" "the group of the column: { col_id : group }"
self.column_classes: defaultdict[str, list[str]] = defaultdict(lambda: []) self.column_classes: defaultdict[str, set[str]] = defaultdict(set)
"classe ajoutée à toutes les cellules de la colonne: { col_id : class }" "classe ajoutée à toutes les cellules de la colonne: { col_id : class }"
self.selected_row_id = selected_row_id self.selected_row_id = selected_row_id
"l'id de la ligne sélectionnée" "l'id de la ligne sélectionnée"
@ -275,6 +280,7 @@ class Row(Element):
raw_content=None, raw_content=None,
target_attrs: dict = None, target_attrs: dict = None,
target: str = None, target: str = None,
column_classes: set[str] = None,
) -> "Cell": ) -> "Cell":
"""Create cell and add it to the row. """Create cell and add it to the row.
group: groupe de colonnes group: groupe de colonnes
@ -285,6 +291,10 @@ class Row(Element):
classes = [group or ""] + (classes or []) classes = [group or ""] + (classes or [])
else: else:
classes = classes.copy() classes = classes.copy()
if group:
self.table.column_classes[col_id].add(group)
if column_classes:
self.table.column_classes[col_id].update(column_classes)
cell = Cell( cell = Cell(
content, content,
classes, classes,