summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/css/nav.css77
-rw-r--r--public/js/main.js27
-rw-r--r--src/view/NavBuilder.php5
3 files changed, 87 insertions, 22 deletions
diff --git a/public/css/nav.css b/public/css/nav.css
index 7f47cff..3ccdb1f 100644
--- a/public/css/nav.css
+++ b/public/css/nav.css
@@ -16,6 +16,7 @@
16 /*margin-top: 10px;*/ 16 /*margin-top: 10px;*/
17 /*margin-bottom: 10px;*/ 17 /*margin-bottom: 10px;*/
18 text-wrap: nowrap; 18 text-wrap: nowrap;
19 background-color: #ffffffe1; /* b3 = 179 = 0.7 (x 256) */
19} 20}
20.nav_main > ul 21.nav_main > ul
21{ 22{
@@ -28,39 +29,81 @@ ul
28{ 29{
29 margin: 0; 30 margin: 0;
30} 31}
31.nav_main ul, .nav_main li 32
33.nav_main ul
32{ 34{
33 list-style: none; 35 list-style: none;
34 padding-left: 0; 36 padding-left: 0;
35} 37}
36.nav_main p 38.nav_main li
37{ 39{
40 list-style: none;
38 padding: 7px; 41 padding: 7px;
42}
43.nav_main p
44{
45 display: inline-block; /* à cause du bouton sub-menu-toggle */
39 margin: 0; 46 margin: 0;
40 background-color: #ffffffe1; /* b3 = 179 = 0.7 (x 256) */ 47 /*background-color: #ffffffe1;*/ /* b3 = 179 = 0.7 (x 256) */
41} 48}
42.nav_main p:hover 49.nav_main > ul > li:hover
43{ 50{
44 background-color: white; 51 background-color: white;
45} 52}
46.current > a > p 53.current/* > a > p*/
47{ 54{
48 background-color: white; 55 background-color: white;
49 font-weight: bold; 56 font-weight: bold;
50} 57}
51.drop-down > a > p::after 58li:not(.current){
52{ 59 background-color: initial;
53 content: ' ▼'; 60 font-weight: initial;
54 font-size: x-small;
55} 61}
56 62
57/* faire apparaître sub-menu */ 63/* faire apparaître les sous-menu sur PC */
58.drop-down:hover > .sub-menu{ 64.drop-down:hover > .sub-menu,
65.drop-right:hover > .sub-menu
66{
59 display: block; 67 display: block;
60} 68}
61.drop-right:hover > .sub-menu{ 69@media (pointer: fine) /* fine => précision de la souris */
62 display: block; 70{
71 .drop-down > a > p::after
72 {
73 content: ' ▼';
74 font-size: x-small;
75 }
76 .drop-right > a > p:after
77 {
78 content: " ▶";
79 font-size: x-small;
80 }
81}
82
83/* faire apparaître les sous-menu sur smartphone */
84.sub-menu-toggle
85{
86 display: none; /* masqué par défaut */
87 background: none;
88 /*border: none;*/
89 cursor: pointer;
90 font-size: x-small;
91 vertical-align: text-bottom;
92}
93@media (pointer: coarse) /* coarse = grossier = précision écran tactile */
94{
95 .sub-menu-toggle
96 {
97 display: inline-block; /* visible sur écran tactile */
98 }
99 .drop-down.open > .sub-menu,
100 .drop-right.open > .sub-menu
101 {
102 display: block;
103 }
63} 104}
105
106
64.sub-menu 107.sub-menu
65{ 108{
66 display: none; 109 display: none;
@@ -69,16 +112,10 @@ ul
69 box-shadow: 1px 1px 3px black; 112 box-shadow: 1px 1px 3px black;
70 font-size: 95%; 113 font-size: 95%;
71} 114}
72/*.sub-menu p:hover*/ 115.sub-menu li:hover /* écrase le fond blanc placé en même temps */
73.nav_main p:hover
74{ 116{
75 background-color: yellow; 117 background-color: yellow;
76} 118}
77.drop-right > a > p:after
78{
79 content: " ▶";
80 font-size: x-small;
81}
82 119
83/* 1er sous-menu, poitionnement pour ne pas aggrandir l'élément parent */ 120/* 1er sous-menu, poitionnement pour ne pas aggrandir l'élément parent */
84nav > ul > li > ul 121nav > ul > li > ul
diff --git a/public/js/main.js b/public/js/main.js
index 071a1db..6eb0162 100644
--- a/public/js/main.js
+++ b/public/js/main.js
@@ -8,6 +8,33 @@ function newPassword(page, id = ''){
8 }, 0); 8 }, 0);
9} 9}
10 10
11// ouvrir/fermer les sous-menus avec écran tactile
12document.addEventListener('DOMContentLoaded', () => { // sinon on ne trouve pas les boutons
13 document.querySelectorAll('.sub-menu-toggle').forEach(button => {
14 button.addEventListener('click', e => {
15 e.preventDefault();
16 const li = button.parentElement; // <li class="drop-down">
17
18 // fermer les autres sous-menus de même niveau
19 // :scope pour pouvoir utiliser > pour restreindre aux frères directs
20 li.parentElement.querySelectorAll(':scope > .drop-down, :scope > .drop-right').forEach(sibling => {
21 if(sibling !== li){
22 sibling.classList.remove('open'); // fermer sous-menus frères
23 sibling.querySelectorAll('.drop-right').forEach(desc => {
24 desc.classList.remove('open'); // fermer sous-menus neveux
25 });
26 }
27 });
28
29 if(!li.classList.toggle('open')){ // fermer sous-menu
30 li.querySelectorAll('.drop-right').forEach(desc => {
31 desc.classList.remove('open'); // fermer sous-menus enfants
32 });
33 }
34 });
35 });
36});
37
11function copyInClipBoard(link){ 38function copyInClipBoard(link){
12 // une balise <input> avec des attributs 39 // une balise <input> avec des attributs
13 var element = document.createElement("input"); 40 var element = document.createElement("input");
diff --git a/src/view/NavBuilder.php b/src/view/NavBuilder.php
index fd5f867..a9cf49c 100644
--- a/src/view/NavBuilder.php
+++ b/src/view/NavBuilder.php
@@ -53,7 +53,9 @@ class NavBuilder extends AbstractBuilder
53 { 53 {
54 $li_class .= $data->getParent() == null ? 'drop-down' : 'drop-right'; 54 $li_class .= $data->getParent() == null ? 'drop-down' : 'drop-right';
55 55
56 $nav_html .= '<li class="'. $li_class . '">' . $link . '<p id="m_' . $data->getId() . '">' . $data->getPageName() . '</p></a><ul class="sub-menu">' . "\n"; 56 $nav_html .= '<li class="'. $li_class . '">' . $link . '<p id="m_' . $data->getId() . '">' . $data->getPageName() . '</p></a>
57 <button class="sub-menu-toggle" aria-label="Ouvrir le sous-menu">▼</button>
58 <ul class="sub-menu">' . "\n";
57 $level++; 59 $level++;
58 $nav_html .= $this->navMainHTML($data, $current); 60 $nav_html .= $this->navMainHTML($data, $current);
59 $level--; 61 $level--;
@@ -64,7 +66,6 @@ class NavBuilder extends AbstractBuilder
64 $nav_html .= '<li class="'. $li_class . '">' . $link . '<p id="m_' . $data->getId() . '">' . $data->getPageName() . '</p></a></li>' . "\n"; 66 $nav_html .= '<li class="'. $li_class . '">' . $link . '<p id="m_' . $data->getId() . '">' . $data->getPageName() . '</p></a></li>' . "\n";
65 } 67 }
66 } 68 }
67
68 } 69 }
69 return $nav_html; 70 return $nav_html;
70 } 71 }