aboutsummaryrefslogtreecommitdiff
path: root/public/js/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/js/main.js')
-rw-r--r--public/js/main.js27
1 files changed, 22 insertions, 5 deletions
diff --git a/public/js/main.js b/public/js/main.js
index 7020971..c8e10b0 100644
--- a/public/js/main.js
+++ b/public/js/main.js
@@ -59,6 +59,21 @@ function toggleTouchMenu(){
59 } 59 }
60} 60}
61 61
62function makeDropLeftMenuEntries(){
63 // détection d'éléments de 1er niveau possédant un menu déroulant possédant un menu déroulant
64 document.getElementById('nav_zone').querySelector('.nav_main').querySelectorAll('.drop-down:has(.drop-right)').forEach(drop_down => {
65 const rect = drop_down.getBoundingClientRect(); // coordonnées spatiales
66
67 // il se situe dans la moitié droite
68 if((rect.width / 2 + rect.left) > (window.innerWidth / 2)){ // centre de l'élément > largeur de la fenêtre?
69 drop_down.querySelectorAll('.drop-right').forEach(drop_right => {
70 drop_right.classList.remove('drop-right');
71 drop_right.classList.add('drop-left');
72 });
73 }
74 });
75}
76
62// exécuté à la fin du chargement de la page 77// exécuté à la fin du chargement de la page
63document.addEventListener('DOMContentLoaded', () => { 78document.addEventListener('DOMContentLoaded', () => {
64 79
@@ -70,17 +85,18 @@ document.addEventListener('DOMContentLoaded', () => {
70 85
71 // fermer les autres sous-menus de même niveau 86 // fermer les autres sous-menus de même niveau
72 // :scope pour pouvoir utiliser > pour restreindre aux frères directs 87 // :scope pour pouvoir utiliser > pour restreindre aux frères directs
73 li.parentElement.querySelectorAll(':scope > .drop-down, :scope > .drop-right').forEach(sibling => { 88 li.parentElement.querySelectorAll(':scope > .drop-down, :scope > .drop-right, :scope > .drop-left').forEach(sibling => {
74 if(sibling !== li){ 89 if(sibling !== li){
75 sibling.classList.remove('open'); // fermer sous-menus frères 90 sibling.classList.remove('open'); // fermer sous-menus frères
76 sibling.querySelectorAll('.drop-right').forEach(desc => { 91 sibling.querySelectorAll('.drop-right, .drop-left').forEach(desc => {
77 desc.classList.remove('open'); // fermer sous-menus neveux 92 desc.classList.remove('open'); // fermer sous-menus neveux
78 }); 93 });
79 } 94 }
80 }); 95 });
81 96
82 if(!li.classList.toggle('open')){ // ouvrir ou fermer ce sous-menu 97 // ouvrir ou fermer un sous-menu
83 li.querySelectorAll('.drop-right').forEach(desc => { 98 if(!li.classList.toggle('open')){
99 li.querySelectorAll('.drop-right, .drop-left').forEach(desc => {
84 desc.classList.remove('open'); // fermer sous-menus enfants 100 desc.classList.remove('open'); // fermer sous-menus enfants
85 }); 101 });
86 } 102 }
@@ -88,6 +104,7 @@ document.addEventListener('DOMContentLoaded', () => {
88 }); 104 });
89 105
90 navHeight(); // hauteur de <nav> en fonction de celle du menu en position fixe 106 navHeight(); // hauteur de <nav> en fonction de celle du menu en position fixe
107 makeDropLeftMenuEntries(); // changer en drop-left les drop-right des éléments du menu dans la moitié droite de la fenêtre
91 insertLocalDates(); 108 insertLocalDates();
92}); 109});
93 110
@@ -95,7 +112,7 @@ function navHeight(){
95 const nav = document.querySelector('nav'); // détection 112 const nav = document.querySelector('nav'); // détection
96 const nav_zone = document.getElementById('nav_zone'); 113 const nav_zone = document.getElementById('nav_zone');
97 const resize_observer = new ResizeObserver(entries => { // param de type tableau 114 const resize_observer = new ResizeObserver(entries => { // param de type tableau
98 let nav_button_height = window.innerWidth <= 600 ? 26 : 0; // 26 = taille du bouton 115 let nav_button_height = window.innerWidth <= 768 ? 26 : 0; // 26 = taille du bouton
99 nav_button_height += nav.classList.contains('show') ? 15 : 0; 116 nav_button_height += nav.classList.contains('show') ? 15 : 0;
100 for(const entry of entries){ 117 for(const entry of entries){
101 nav_zone.style.height = (entry.contentRect.height + nav_button_height) + 'px'; 118 nav_zone.style.height = (entry.contentRect.height + nav_button_height) + 'px';