update to Template

This commit is contained in:
Charles 2025-07-09 09:14:29 +02:00
parent 79c5596766
commit 57e115a6a8
35 changed files with 932 additions and 336 deletions

View File

@ -8,7 +8,11 @@ import './bootstrap.js';
import 'bootstrap/dist/css/bootstrap.min.css';
import './styles/app.css';
import './styles/navbar.css';
import './styles/sidebar.css';
import 'bootstrap';
import './js/template.js';
import './js/off_canvas.js';
import './js/hoverable-collapse.js';
import './js/cookies.js';
console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉');

View File

@ -0,0 +1 @@
<svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708"/></svg>

After

Width:  |  Height:  |  Size: 236 B

View File

@ -0,0 +1 @@
<svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8L4.646 2.354a.5.5 0 0 1 0-.708"/></svg>

After

Width:  |  Height:  |  Size: 236 B

View File

@ -0,0 +1 @@
<svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" fill-rule="evenodd" d="m243.07 65.728l34.263 14.684v46.42l-41.306-17.703l-107.695 61.54l116.919 66.811L256 243.623v146.285l106.667-60.952v-94.288h42.666v119.048l-10.749 6.143l-149.333 85.333l-10.584 6.048l-10.585-6.048l-149.333-85.333L64 353.716V158.289l10.749-6.142l149.333-85.333l9.224-5.271zm-29.737 324.18V268.383l-106.666-60.952v121.525zm106.666-283.24h55.163l-91.581 91.582l30.17 30.17l91.581-91.582v55.163h42.667v-128h-128z" clip-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 548 B

View File

@ -0,0 +1 @@
<svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M9 17.192V6.808L17.154 12zm1-1.842L15.289 12L10 8.65z"/></svg>

After

Width:  |  Height:  |  Size: 152 B

View File

@ -0,0 +1 @@
<svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M10 16h4q.425 0 .713-.288T15 15v-2h-2v1h-2v-4h2v1h2V9q0-.425-.288-.712T14 8h-4q-.425 0-.712.288T9 9v6q0 .425.288.713T10 16m2 6q-2.075 0-3.9-.788t-3.175-2.137T2.788 15.9T2 12t.788-3.9t2.137-3.175T8.1 2.788T12 2t3.9.788t3.175 2.137T21.213 8.1T22 12t-.788 3.9t-2.137 3.175t-3.175 2.138T12 22m0-2q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8"/></svg>

After

Width:  |  Height:  |  Size: 473 B

View File

@ -0,0 +1 @@
<svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M13 8V4q0-.425.288-.712T14 3h6q.425 0 .713.288T21 4v4q0 .425-.288.713T20 9h-6q-.425 0-.712-.288T13 8M3 12V4q0-.425.288-.712T4 3h6q.425 0 .713.288T11 4v8q0 .425-.288.713T10 13H4q-.425 0-.712-.288T3 12m10 8v-8q0-.425.288-.712T14 11h6q.425 0 .713.288T21 12v8q0 .425-.288.713T20 21h-6q-.425 0-.712-.288T13 20M3 20v-4q0-.425.288-.712T4 15h6q.425 0 .713.288T11 16v4q0 .425-.288.713T10 21H4q-.425 0-.712-.288T3 20m2-9h4V5H5zm10 8h4v-6h-4zm0-12h4V5h-4zM5 19h4v-2H5zm4-2"/></svg>

After

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
assets/img/logo-access.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
assets/img/logo-check.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
assets/img/logo-exploit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

BIN
assets/img/sudalys_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

39
assets/js/cookies.js Normal file
View File

@ -0,0 +1,39 @@
var application
function getApplication(){
const body = document.getElementsByTagName('body')[0];
application = body.getAttribute('data-application');
}
getApplication();
// Support pour différents systèmes de navigation
if (typeof Turbo !== 'undefined') {
document.addEventListener('turbo:load', getApplication);
document.addEventListener('turbo:render', getApplication);
}
// Support pour les applications SPA qui utilisent l'historique de navigation
window.addEventListener('popstate', getApplication);
window.setCookie = function (cname, cvalue, exdays) {
const d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
let expires = "expires=" + d.toUTCString();
document.cookie = application + "-" + cname + "=" + cvalue + ";" + expires + ";path=/;SameSite=Strict";
}
window.getCookie = function (cname) {
let name = application + "-" + cname + "=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1);
}
if (c.indexOf(name) === 0) {
return c.substring(name.length, c.length);
}
}
return "";
}

View File

@ -0,0 +1,39 @@
//Open submenu on hover in compact sidebar mode and horizontal menu mode
function initSubMenu(){
var sidebar = document.querySelectorAll('.sidebar .nav-item')
sidebar.forEach(element => {
element.addEventListener('mouseenter', eventMenu)
element.addEventListener('mouseleave', eventMenu)
})
}
function eventMenu(e){
var body = document.querySelector('body');
var sidebarIconOnly = body.classList.contains("sidebar-icon-only");
var sidebarFixed = body.classList.contains("sidebar-fixed");
if (!('ontouchstart' in document.documentElement)) {
if (sidebarIconOnly) {
var menuItem = this;
if (e.type === 'mouseenter') {
menuItem.classList.add('hover-open')
} else {
menuItem.classList.remove('hover-open')
}
}
}
}
// Exécuter l'initialisation au chargement de la page
document.addEventListener('DOMContentLoaded', initSubMenu);
// Support pour différents systèmes de navigation
if (typeof Turbo !== 'undefined') {
document.addEventListener('turbo:load', initSubMenu);
document.addEventListener('turbo:render', initSubMenu);
}
// Support pour les applications SPA qui utilisent l'historique de navigation
window.addEventListener('popstate', initSubMenu);

0
assets/js/off_canvas.js Normal file
View File

65
assets/js/template.js Normal file
View File

@ -0,0 +1,65 @@
// Utilisation des fonctions de cookies globales définies dans app.js
// Fonction d'initialisation du template
function initTemplate() {
// Appliquer l'état du menu depuis le cookie
applyMenuState();
// Initialiser le bouton de minimisation du menu
initMinimizeButton();
}
// Fonction pour appliquer l'état du menu depuis le cookie
function applyMenuState() {
var body = document.querySelector('body');
var menuState = getCookie('sidebar_state');
// Si le cookie existe, appliquer l'état enregistré
if (menuState === 'collapsed') {
if (!body.classList.contains('sidebar-icon-only')) {
body.classList.add('sidebar-icon-only');
}
} else if (menuState === 'expanded') {
if (body.classList.contains('sidebar-icon-only')) {
body.classList.remove('sidebar-icon-only');
}
}
}
// Fonction pour initialiser le bouton de minimisation du menu
function initMinimizeButton() {
// Supprimer l'ancien gestionnaire d'événements s'il existe
document.querySelectorAll('[data-toggle="minimize"]').forEach(function(button) {
// Créer une copie du bouton pour supprimer tous les écouteurs d'événements
var newButton = button.cloneNode(true);
button.parentNode.replaceChild(newButton, button);
// Ajouter le nouvel écouteur d'événements
newButton.addEventListener("click", function() {
var body = document.querySelector('body');
if ((body.classList.contains('sidebar-toggle-display')) || (body.classList.contains('sidebar-absolute'))) {
body.classList.toggle('sidebar-hidden');
// Enregistrer l'état dans un cookie
var newState = body.classList.contains('sidebar-hidden') ? 'collapsed' : 'expanded';
setCookie('sidebar_state', newState, 365); // Valable 1 an
} else {
body.classList.toggle('sidebar-icon-only');
// Enregistrer l'état dans un cookie
var newState = body.classList.contains('sidebar-icon-only') ? 'collapsed' : 'expanded';
setCookie('sidebar_state', newState, 365); // Valable 1 an
}
});
});
}
// Exécuter l'initialisation au chargement de la page
document.addEventListener('DOMContentLoaded', initTemplate);
// Support pour différents systèmes de navigation
if (typeof Turbo !== 'undefined') {
document.addEventListener('turbo:load', initTemplate);
document.addEventListener('turbo:render', initTemplate);
}
// Support pour les applications SPA qui utilisent l'historique de navigation
window.addEventListener('popstate', initTemplate);

View File

@ -31,3 +31,50 @@ body {
overflow: hidden;
}
.page-body-wrapper {
min-height: calc(100vh - 60px);
display: -webkit-flex;
display: flex;
-webkit-flex-direction: row;
flex-direction: row;
padding-left: 0;
padding-right: 0;
padding-top: 60px;
&.full-page-wrapper {
width: 100%;
min-height: 100vh;
padding-top: 0;
}
}
.main-panel {
transition: width 0.25s ease, margin 0.25s ease;
width: calc(100% - 235px);
min-height: calc(100vh - 60px);
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
flex-direction: column;
}
.content-wrapper {
background: #F5F7FF;
width: 100%;
-webkit-flex-grow: 1;
flex-grow: 1;
display: flex;
}
.footer {
background: #fff;
padding: 10px 2.45rem;
transition: all 0.25s ease;
-moz-transition: all 0.25s ease;
-webkit-transition: all 0.25s ease;
-ms-transition: all 0.25s ease;
font-size: calc(0.875rem - 0.05rem);
font-family: "Nunito", sans-serif;
font-weight: 400;
border-top: 1px solid rgba(0, 0, 0, 0.06);
}

View File

@ -69,8 +69,11 @@
border-radius: 0;
}
.navbar-nav-right{
flex-direction: row;
.navbar .navbar-menu-wrapper .navbar-toggler:active,
.navbar .navbar-menu-wrapper .navbar-toggler:focus {
outline: none !important;
box-shadow: none !important;
outline: 0;
}
.navbar .navbar-menu-wrapper .navbar-toggler:not(.navbar-toggler-right) {
@ -82,12 +85,24 @@
transition: transform 0.3s linear;
}
.sidebar-icon-only .navbar .navbar-menu-wrapper .navbar-toggler:not(.navbar-toggler-right) {
transform: rotate(180deg);
}
.navbar-nav-right{
flex-direction: row;
}
.navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-search .input-group{
align-items: center;
}
.navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-search .input-group .form-control{
margin-left: 0.7rem;
}
#navbar-search-icon > #search{
vertical-align: middle;
vertical-align: baseline;
}
.navbar .navbar-menu-wrapper .navbar-nav.navbar-nav-right {
@ -244,4 +259,16 @@
#logo_orga{
width:auto;
max-height:40px;
}
.navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-search .input-group .form-control{
background: transparent;
border: 0;
color: #000;
padding: 0;
}
#change-project{
padding: 2px 5px;
font-size: 16px;
}

290
assets/styles/sidebar.css Normal file
View File

@ -0,0 +1,290 @@
.sidebar {
min-height: calc(100vh - 60px);
background: #fff;
font-weight: 500;
padding: 0;
width: 235px;
z-index: 11;
transition: width 0.25s ease, background 0.25s ease;
-webkit-transition: width 0.25s ease, background 0.25s ease;
-moz-transition: width 0.25s ease, background 0.25s ease;
-ms-transition: width 0.25s ease, background 0.25s ease;
}
.sidebar .nav {
overflow: hidden;
flex-wrap: nowrap;
flex-direction: column;
margin-bottom: 60px;
}
.sidebar .nav:not(.sub-menu) {
padding-top: 1.45rem;
padding-left: 1rem;
padding-right: 1rem;
padding-bottom: 0.5rem;
}
.sidebar .nav .nav-item {
-webkit-transition-duration: 0.25s;
-moz-transition-duration: 0.25s;
-o-transition-duration: 0.25s;
transition-duration: 0.25s;
transition-property: background;
-webkit-transition-property: background;
}
.sidebar .nav .nav-item .collapse {
z-index: 999;
}
.sidebar .nav .nav-item.active {
border-radius: 8px;
box-shadow: 0px 0px 5px 0px rgba(197, 197, 197, 0.75);
}
.sidebar .nav:not(.sub-menu) > .nav-item {
border-radius: 8px;
margin-top: 0.2rem;
}
.sidebar > .nav:not(.sub-menu) > .nav-item:hover {
border-radius: 8px;
color: #494949;
}
.sidebar .nav .nav-item .nav-link {
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
white-space: nowrap;
padding: 0.8125rem 1.937rem 0.8125rem 1rem;
color: #848484;
border-radius: 8px;
-webkit-transition-duration: 0.45s;
-moz-transition-duration: 0.45s;
-o-transition-duration: 0.45s;
transition-duration: 0.45s;
transition-property: color;
-webkit-transition-property: color;
height: 50px;
}
.sidebar .nav .nav-item.active > .nav-link {
color:lightgrey;
position: relative;
}
.sidebar .nav:not(.sub-menu) > .nav-item > .nav-link {
margin: 0;
}
.sidebar .nav .nav-item .nav-link i.menu-icon {
font-size: 1rem;
line-height: 1;
margin-right: 1rem;
color: #838383;
}
.sidebar .nav .nav-item .nav-link i.menu-arrow {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
margin-left: auto;
margin-right: 0;
color: #686868;
transform: rotate(0deg);
-webkit-transition: transform 0.3s linear;
-moz-transition: transform 0.3s linear;
-ms-transition: transform 0.3s linear;
-o-transition: transform 0.3s linear;
transition: transform 0.3s linear;
}
.sidebar .nav .nav-item .nav-link .menu-title {
display: inline-block;
font-size: 0.875rem;
line-height: 1;
vertical-align: middle;
}
.sidebar .nav .nav-item.active > .nav-link i, .sidebar .nav .nav-item.active > .nav-link .menu-title, .sidebar .nav .nav-item.active > .nav-link .menu-arrow {
color: #494949;
}
.sidebar .nav:not(.sub-menu) > .nav-item > .nav-link[aria-expanded=true] {
border-radius: 8px 8px 0 0;
color: #494949;
}
.sidebar .nav:not(.sub-menu) > .nav-item > .nav-link[aria-expanded=true] i.menu-arrow {
transform: rotate(90deg);
}
.sidebar .nav.sub-menu {
margin-bottom: 0;
margin-top: 0;
list-style: none;
padding: 0.25rem 1.5rem 0 2rem;
padding-bottom: 12px;
}
.sidebar .nav.sub-menu .nav-item {
position: relative;
padding: 0;
display: flex;
align-items: center;
color: #969696;
justify-content: space-between;
list-style: none;
}
.sidebar .nav.sub-menu .nav-item svg {
position: absolute;
color: #b2b2b2;
}
.sidebar .nav.sub-menu .nav-item .nav-link {
padding: 0.7rem 1rem;
position: relative;
font-size: 0.875rem;
line-height: 1;
height: auto;
border-top: 0;
font-weight: 400;
}
.sidebar .nav:not(.sub-menu) .nav-link:hover{
color: #494949;
}
@media (min-width: 992px) {
.sidebar-icon-only .sidebar {
width: 70px;
}
.sidebar-icon-only .sidebar .nav {
overflow: visible;
padding-left: 0;
padding-right: 0;
}
.sidebar-icon-only .navbar .navbar-brand-wrapper {
width: 70px;
}
.sidebar-icon-only .navbar .navbar-brand-wrapper .brand-logo {
display: none;
}
.sidebar-icon-only .navbar .navbar-brand-wrapper .brand-logo-mini {
display: inline-block;
}
.sidebar-icon-only .sidebar .nav .nav-item .nav-link {
display: block;
padding-left: 0.5rem;
padding-right: 0.5rem;
text-align: center;
position: static;
}
.sidebar-icon-only .sidebar .nav .nav-item {
border-radius: 0px;
position: relative;
}
.sidebar-icon-only .sidebar .nav .nav-item .collapse {
display: none;
}
.sidebar-icon-only .sidebar .nav:not(.sub-menu) .nav-item.active {
border-radius: 0;
box-shadow: 4px 0px 7px 0px rgba(182, 185, 189, 0.25);
}
.sidebar-icon-only .sidebar .nav .nav-item .nav-link i.menu-icon {
margin-right: 0;
margin-left: 0;
margin-bottom: 0;
}
.sidebar-icon-only .sidebar .nav .nav-item .nav-link i.menu-arrow {
display: none;
}
.sidebar-icon-only .sidebar .nav.sub-menu {
padding: 0 0 0 1.5rem;
}
.sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link {
text-align: left;
padding-left: 20px;
}
.sidebar-icon-only .main-panel {
width: calc(100% - 70px);
}
.sidebar-icon-only .navbar .navbar-menu-wrapper {
width: calc(100% - 70px);
}
.sidebar-icon-only .sidebar .nav .nav-item .nav-link .menu-title, .sidebar-icon-only .sidebar .nav .nav-item .nav-link .badge, .sidebar-icon-only .sidebar .nav .nav-item .nav-link .menu-sub-title {
display: none;
}
.sidebar-icon-only .sidebar .nav .nav-item .nav-link .menu-title {
border-radius: 0 5px 5px 0px;
}
.sidebar .nav:not(.sub-menu) > .nav-item:hover {
border-radius: 8px;
box-shadow: 0px 0px 5px 0px rgba(197, 197, 197, 0.75);
}
.sidebar-icon-only .nav:not(.sub-menu) > .nav-item:hover,
.sidebar-icon-only .nav:not(.sub-menu) > .nav-item:hover .nav-link{
border-radius: 0;
}
.sidebar-icon-only .sidebar .nav .nav-item:hover .nav-link[aria-expanded] .menu-title {
border-radius: 0 5px 0 0;
}
}
.sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title {
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
background: #ffffff;
padding: 0.5rem 1.4rem;
left: 70px;
position: absolute;
text-align: left;
top: 0;
bottom: 0;
width: 190px;
z-index: 10000;
line-height: 1.8;
-webkit-box-shadow: 4px 0px 7px 0px rgba(182, 185, 189, 0.25);
box-shadow: 4px 0px 7px 0px rgba(182, 185, 189, 0.25);
}
.sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title:after {
display: none;
}
.sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapse,
.sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapsing {
display: block;
background: #fff;
border-radius: 0 0 5px 0;
position: absolute;
left: 70px;
width: 190px;
-webkit-box-shadow: 4px 4px 7px 0px rgba(182, 185, 189, 0.25);
box-shadow: 4px 4px 7px 0px rgba(182, 185, 189, 0.25);
}

637
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,10 @@ twig:
file_name_pattern: '*.twig'
form_themes: ['bootstrap_5_layout.html.twig']
globals:
application: '%env(APPLICATION)%'
version: '0.4'
when@test:
twig:
strict_variables: true

View File

@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
{% block title %}
{{application}}
{% endblock %}
</title>
<link rel="icon" href="{{ asset('favicon.ico') }}">
@ -18,14 +19,29 @@
{% block importmap %}{{ importmap('app') }}{% endblock %}
{% endblock %}
</head>
<body>
<div class="container-scroller container-fluid">
<body data-application="{{application}}">
<div class="container-scroller">
{{ include('elements/navbar.html.twig')}}
{% block body %}
{% endblock %}
<div class="container-fluid page-body-wrapper">
{{ include('elements/menu.html.twig')}}
<div class="main-panel">
<div class="content-wrapper">
{% block body %}
{% endblock %}
</div>
<footer class="footer">
<div class="d-sm-flex justify-content-center justify-content-sm-between">
<span>
<img src="{{asset('img/sudalys_icone.png')}}" alt="logo sudalys" style="vertical-align:bottom"> Sudalys <i style="vertical-align:text-bottom">{{ ux_icon('material-symbols:copyright-outline', {height: '20px', width: '20px'}) }}</i> {{ "now"|date("Y") }}
</span>
<span>
Version {{version}}
</span>
</div>
</footer>
</div>
</div>
<div>
</body>
</html>

View File

@ -0,0 +1,32 @@
<nav class="sidebar sidebar-offcanvas" id="sidebar">
<ul class="nav">
<li class="nav-item active">
<a class="nav-link" href="#">
<i class="icon-grid menu-icon">{{ ux_icon('material-symbols:dashboard-outline-rounded', {height: '16px', width: '16px'}) }}</i>
<span class="menu-title">Dashboard</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="collapse" href="#ui-basic" aria-expanded="false" aria-controls="ui-basic">
<i class="icon-layout menu-icon">{{ ux_icon('bi:menu-up', {height: '16px', width: '16px'}) }}</i>
<span class="menu-title">Menu</span>
<i class="menu-arrow">{{ ux_icon('bi:chevron-right', {height: '16px', width: '16px'}) }}</i>
</a>
<div class="collapse" id="ui-basic">
<ul class="nav sub-menu flex-column">
<li class="nav-item">{{ ux_icon('material-symbols-light:play-arrow-outline', {height: '16px', width: '16px'}) }} <a class="nav-link" href="#">Accordions</a></li>
<li class="nav-item">{{ ux_icon('material-symbols-light:play-arrow-outline', {height: '16px', width: '16px'}) }} <a class="nav-link" href="#">Buttons</a></li>
<li class="nav-item">{{ ux_icon('material-symbols-light:play-arrow-outline', {height: '16px', width: '16px'}) }} <a class="nav-link" href="#">Badges</a></li>
<li class="nav-item">{{ ux_icon('material-symbols-light:play-arrow-outline', {height: '16px', width: '16px'}) }} <a class="nav-link" href="#">Breadcrumbs</a></li>
<li class="nav-item">{{ ux_icon('material-symbols-light:play-arrow-outline', {height: '16px', width: '16px'}) }} <a class="nav-link" href="#">Dropdowns</a></li>
</ul>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<i class="icon-grid menu-icon">{{ ux_icon('bi:menu-up', {height: '15px', width: '15px'}) }}</i>
<span class="menu-title">Menu 2</span>
</a>
</li>
</ul>
</nav>

View File

@ -1,13 +1,13 @@
<nav class="navbar col-lg-12 col-12 p-0 fixed-top d-flex flex-row">
<div class="text-center navbar-brand-wrapper d-flex align-items-center justify-content-start">
<a class="navbar-brand brand-logo" href="#"><img class="me-2" src="{{ asset('img/logo.png')}}" alt="logo application"/></a>
<a class="navbar-brand brand-logo-mini" href="#"><img src="{{ asset('img/logo-mini.png')}}" alt="logo apllication"/></a>
<a class="navbar-brand brand-logo" href="/"><img class="me-2" src="{{ asset('img/logo-'~application~'.png')}}" alt="logo application"/></a>
<a class="navbar-brand brand-logo-mini" href="/"><img src="{{ asset('img/logo-'~application~'-mini.png')}}" alt="logo apllication"/></a>
</div>
<div class="navbar-menu-wrapper d-flex align-items-center justify-content-end">
<button class="navbar-toggler navbar-toggler align-self-center">
<span>
<button class="navbar-toggler navbar-toggler align-self-center" type="button" data-toggle="minimize">
<i>
{{ ux_icon('bi:list', {height: '20px', width: '20px'}) }}
</span>
</i>
</button>
<ul class="navbar-nav ms-lg-3">
<li class="nav-item nav-search d-none d-lg-block">
@ -21,6 +21,21 @@
</div>
</li>
</ul>
<ul class="navbar-nav w-auto m-auto">
<li class="nav-item nav-search d-none d-lg-block">
<div class="input-group">
<div id="navbar-search-icon" class="input-group-prepend hover-cursor">
<span id="search">
<i style="width:22px; height:22px">{{ ux_icon('ix:project-arrow-diagonal-top-right', {height: '22px', width: '22px'}) }}</i>
</span>
</div>
<select id="change-project" class="form-control">
<option>Projet 1</option>
<option>Projet 2</option>
</select>
</div>
</li>
</ul>
<ul class="navbar-nav navbar-nav-right">
<li class="nav-item d-flex">
<img id="logo_orga" class="m-auto" src="{{asset('logo_org/logo-sudalys.png')}}" alt="logo organisation">
@ -79,5 +94,10 @@
</div>
</li>
</ul>
<button class="navbar-toggler navbar-toggler-right d-lg-none align-self-center" type="button" data-toggle="offcanvas">
<i>
{{ ux_icon('bi:list', {height: '20px', width: '20px'}) }}
</i>
</button>
</div>
</nav>

View File

@ -1,12 +1,13 @@
{% extends 'base.html.twig' %}
{% block title %}Test - index{% endblock %}
{% block title %}{{application}} - accueil{% endblock %}
{% block body %}
{% if app.user %}
<div class="mb-3">
<div class="w-100 h-100 p-5 m-auto">
You are logged in as {{ app.user.userIdentifier }}, <a href="{{ path('sso_logout') }}">Logout</a>
</div>
{% endif %}
{% endblock %}

View File

@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
{% block title %}
{{application}}
{% endblock %}
</title>
<link rel="icon" href="{{ asset('favicon.ico') }}">

View File

@ -1,10 +1,10 @@
{% extends 'publicBase.html.twig' %}
{% block title %}Test - index{% endblock %}
{% block title %}{{application}} - login{% endblock %}
{% block body %}
<div class="col col-sm-10 col-md-7 col-lg-4 col-xl-3 col-xxl-3 shadow rounded px-4 py-3">
<form method="post" class='d-flex flex-column'>
<img src="{{ asset('img/logo.png') }}" class="img-fluid rounded-top m-auto" alt="Logo-application" />
<img src="{{ asset('img/logo-'~application~'.png') }}" class="img-fluid rounded-top m-auto" alt="Logo-application" />
{% if error %}
<div class="alert alert-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}