diff options
author | polo <ordipolo@gmx.fr> | 2025-07-19 13:15:12 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2025-07-19 13:15:12 +0200 |
commit | 976eaa544322be18c9feb1a165b9645533af4538 (patch) | |
tree | 39ce8d68222b1b116390276f5b4751b7913b42e8 | |
parent | 8338cbe662018eb7b7ec01cbbd21531aca1d9b31 (diff) | |
download | cms-976eaa544322be18c9feb1a165b9645533af4538.zip |
amélioration calendrier écran tactile, selection sans touché prolongé, versionedFileURL() dispo de partout
-rw-r--r-- | public/css/calendar.css | 23 | ||||
-rw-r--r-- | public/js/calendar.js | 18 | ||||
-rw-r--r-- | public/js/calendar_admin.js | 2 | ||||
-rw-r--r-- | src/view/HeadBuilder.php | 16 | ||||
-rw-r--r-- | src/view/templates/calendar.php | 4 |
5 files changed, 44 insertions, 19 deletions
diff --git a/public/css/calendar.css b/public/css/calendar.css index 1cfb0fd..314a5ad 100644 --- a/public/css/calendar.css +++ b/public/css/calendar.css | |||
@@ -1,7 +1,10 @@ | |||
1 | /* !important est nécessaire pour écraser le CSS inséré par le javascript de fullcalendar */ | ||
2 | |||
1 | .event{ | 3 | .event{ |
2 | border: 2px double; | 4 | border: 2px double; |
3 | border-radius: 5px; | 5 | border-radius: 5px; |
4 | width: max-content; | 6 | width: max-content; |
7 | max-width: 250px; | ||
5 | padding: 5px; | 8 | padding: 5px; |
6 | } | 9 | } |
7 | #calendar_zone{ | 10 | #calendar_zone{ |
@@ -13,16 +16,17 @@ | |||
13 | #calendar{ | 16 | #calendar{ |
14 | width: 1165px; /* on enlève le "gap" */ | 17 | width: 1165px; /* on enlève le "gap" */ |
15 | } | 18 | } |
19 | #event_modal{} | ||
16 | .event_title_box{ | 20 | .event_title_box{ |
17 | display: flex; | 21 | display: flex; |
18 | align-items: center; | 22 | align-items: center; |
19 | justify-content: space-between; | 23 | justify-content: space-between; |
20 | } | 24 | } |
21 | .event_close_button{ | 25 | .event_close_button{ |
22 | height: fit-content; | 26 | /*height: fit-content;*/ |
23 | } | 27 | } |
24 | .fc-toolbar-title{ | 28 | .fc-toolbar-title{ |
25 | font-size: x-large !important; | 29 | /*font-size: x-large !important;*/ |
26 | } | 30 | } |
27 | .fc-button{ | 31 | .fc-button{ |
28 | padding: 0.2em 0.4em !important; | 32 | padding: 0.2em 0.4em !important; |
@@ -60,12 +64,21 @@ td .fc-timegrid-axis{ | |||
60 | padding: 0; | 64 | padding: 0; |
61 | } | 65 | } |
62 | .fc-toolbar-title{ | 66 | .fc-toolbar-title{ |
63 | font-size: large !important; | 67 | /*font-size: large !important;*/ |
68 | } | ||
69 | .fc-header-toolbar{ | ||
70 | font-size: smaller; | ||
71 | } | ||
72 | h3, p, .event > button{ | ||
73 | font-size: smaller; | ||
64 | } | 74 | } |
65 | } | 75 | } |
66 | @media screen and (max-width: 650px){ | 76 | @media screen and (max-width: 650px){ |
67 | .fc-toolbar-chunk{ | 77 | .fc-header-toolbar{ |
68 | font-size: smaller; | 78 | font-size: small; |
79 | } | ||
80 | .fc-toolbar-title{ | ||
81 | font-size: 1.5em !important; /* au lieu de 1.75em */ | ||
69 | } | 82 | } |
70 | } | 83 | } |
71 | @media screen and (max-width: 550px){ | 84 | @media screen and (max-width: 550px){ |
diff --git a/public/js/calendar.js b/public/js/calendar.js index 7450a91..2275c10 100644 --- a/public/js/calendar.js +++ b/public/js/calendar.js | |||
@@ -29,6 +29,8 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
29 | stickyHeaderDates: true, // garder les en-tête de colonnes lors du scroll | 29 | stickyHeaderDates: true, // garder les en-tête de colonnes lors du scroll |
30 | fixedWeekCount: false, // avec false, affiche 4, 5 ou 6 semaines selon le mois | 30 | fixedWeekCount: false, // avec false, affiche 4, 5 ou 6 semaines selon le mois |
31 | selectable: true, // sélection de jours multiples | 31 | selectable: true, // sélection de jours multiples |
32 | longPressDelay: 0, /* par défaut sur mobile, select est déclenché avec un appui d'une seconde, | ||
33 | chatgpt déconseille 0 par risque de conflit entre selection et scrolling, mettre plutôt 200 ou 300ms */ | ||
32 | navLinks: true, // numéros de jour et de semaines clicables | 34 | navLinks: true, // numéros de jour et de semaines clicables |
33 | 35 | ||
34 | // vue semaine | 36 | // vue semaine |
@@ -43,6 +45,14 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
43 | selected_start_string = info.startStr; // variable "globale" | 45 | selected_start_string = info.startStr; // variable "globale" |
44 | hideModal(); | 46 | hideModal(); |
45 | }, | 47 | }, |
48 | // méthode alternative à longPressDelay: 0 pour obtenir une sélection d'un simple "tap" sur écran tactile (mettre le if inverse dans select) | ||
49 | /*dateClick: function(info) { | ||
50 | if (window.matchMedia('(pointer: coarse)').matches) { | ||
51 | // utile sur mobile/tablette : déclenche sur un tap | ||
52 | console.log('dateClick', info.dateStr); | ||
53 | calendar.select(info.date, info.date); // hack permettant de sélectionner une journée seule uniquement | ||
54 | } | ||
55 | },*/ | ||
46 | //unselect: function(event, view){}, | 56 | //unselect: function(event, view){}, |
47 | 57 | ||
48 | eventClick: function(info){ | 58 | eventClick: function(info){ |
@@ -72,14 +82,14 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
72 | <h3>` + info.event.title + `</h3> | 82 | <h3>` + info.event.title + `</h3> |
73 | <p><i>` + info.event.extendedProps.description + `</i></p>`; | 83 | <p><i>` + info.event.extendedProps.description + `</i></p>`; |
74 | if(checked && (formated_start === formated_end)){ // affichage simplifié évènement d'un jour | 84 | if(checked && (formated_start === formated_end)){ // affichage simplifié évènement d'un jour |
75 | aside_content = aside_content + `<p>le ` + formated_start + `</p> | 85 | aside_content = aside_content + `<p>le ` + formated_start + `</p>`; |
76 | </div>`; | ||
77 | } | 86 | } |
78 | else{ | 87 | else{ |
79 | aside_content = aside_content + `<p>du ` + formated_start + `</p> | 88 | aside_content = aside_content + `<p>du ` + formated_start + `</p> |
80 | <p>au ` + formated_end + `</p> | 89 | <p>au ` + formated_end + `</p>`; |
81 | </div>`; | ||
82 | } | 90 | } |
91 | aside_content += `<button class="event_close_button">Fermer</button> | ||
92 | </div>`; | ||
83 | 93 | ||
84 | aside.innerHTML = aside_content; | 94 | aside.innerHTML = aside_content; |
85 | calendar.updateSize(); | 95 | calendar.updateSize(); |
diff --git a/public/js/calendar_admin.js b/public/js/calendar_admin.js index 76a1ce9..7f167a4 100644 --- a/public/js/calendar_admin.js +++ b/public/js/calendar_admin.js | |||
@@ -30,6 +30,8 @@ document.addEventListener('DOMContentLoaded', function(){ | |||
30 | stickyHeaderDates: true, // garder les en-tête de colonnes lors du scroll | 30 | stickyHeaderDates: true, // garder les en-tête de colonnes lors du scroll |
31 | fixedWeekCount: false, // avec false, affiche 4, 5 ou 6 semaines selon le mois | 31 | fixedWeekCount: false, // avec false, affiche 4, 5 ou 6 semaines selon le mois |
32 | selectable: true, // sélection de jours multiples | 32 | selectable: true, // sélection de jours multiples |
33 | longPressDelay: 0, /* par défaut sur mobile, select est déclenché avec un appui d'une seconde, | ||
34 | chatgpt déconseille 0 par risque de conflit entre selection et scrolling, mettre plutôt 200 ou 300ms */ | ||
33 | navLinks: true, // numéros de jour et de semaines clicables | 35 | navLinks: true, // numéros de jour et de semaines clicables |
34 | 36 | ||
35 | // vue semaine | 37 | // vue semaine |
diff --git a/src/view/HeadBuilder.php b/src/view/HeadBuilder.php index f1f41ba..06a1301 100644 --- a/src/view/HeadBuilder.php +++ b/src/view/HeadBuilder.php | |||
@@ -26,25 +26,25 @@ class HeadBuilder extends AbstractBuilder | |||
26 | $css = ''; | 26 | $css = ''; |
27 | foreach($css_array as $name) | 27 | foreach($css_array as $name) |
28 | { | 28 | { |
29 | $css .= '<link rel="stylesheet" href="' . $this->versionedFileURL('css', $name) . '">' . "\n"; | 29 | $css .= '<link rel="stylesheet" href="' . self::versionedFileURL('css', $name) . '">' . "\n"; |
30 | } | 30 | } |
31 | 31 | ||
32 | $js = ''; | 32 | $js = ''; |
33 | foreach($js_array as $name) | 33 | foreach($js_array as $name) |
34 | { | 34 | { |
35 | $js .= '<script src="' . $this->versionedFileURL('js', $name) . '"></script>' . "\n"; | 35 | $js .= '<script src="' . self::versionedFileURL('js', $name) . '"></script>' . "\n"; |
36 | } | 36 | } |
37 | 37 | ||
38 | if(MainBuilder::$modif_mode){ | 38 | if(MainBuilder::$modif_mode){ |
39 | $css .= '<link rel="stylesheet" href="' . $this->versionedFileURL('css', 'modif_page') . '">' . "\n"; | 39 | $css .= '<link rel="stylesheet" href="' . self::versionedFileURL('css', 'modif_page') . '">' . "\n"; |
40 | $js .= '<script src="' . $this->versionedFileURL('js', 'modif_page') . '"></script>' . "\n"; | 40 | $js .= '<script src="' . self::versionedFileURL('js', 'modif_page') . '"></script>' . "\n"; |
41 | } | 41 | } |
42 | 42 | ||
43 | // tinymce, nécéssite un script de copie dans composer.json | 43 | // tinymce, nécéssite un script de copie dans composer.json |
44 | if($_SESSION['admin']){ | 44 | if($_SESSION['admin']){ |
45 | $css .= '<link rel="stylesheet" href="' . $this->versionedFileURL('css', 'tinymce') . '">' . "\n"; | 45 | $css .= '<link rel="stylesheet" href="' . self::versionedFileURL('css', 'tinymce') . '">' . "\n"; |
46 | $js .= '<script src="' . $this->versionedFileURL('js', 'tinymce/tinymce.min') . '"></script>' . "\n"; // pour js/tinymce/tinymce.min.js | 46 | $js .= '<script src="' . self::versionedFileURL('js', 'tinymce/tinymce.min') . '"></script>' . "\n"; // pour js/tinymce/tinymce.min.js |
47 | $js .= '<script src="' . $this->versionedFileURL('js', 'tinymce') . '"></script>' . "\n"; | 47 | $js .= '<script src="' . self::versionedFileURL('js', 'tinymce') . '"></script>' . "\n"; |
48 | } | 48 | } |
49 | 49 | ||
50 | // titre | 50 | // titre |
@@ -77,7 +77,7 @@ class HeadBuilder extends AbstractBuilder | |||
77 | return $this->stop; | 77 | return $this->stop; |
78 | } | 78 | } |
79 | 79 | ||
80 | private function versionedFileURL(string $type, string $filename): string | 80 | static public function versionedFileURL(string $type, string $filename): string |
81 | { | 81 | { |
82 | $path = $type . '/' . $filename . '.' . $type; | 82 | $path = $type . '/' . $filename . '.' . $type; |
83 | 83 | ||
diff --git a/src/view/templates/calendar.php b/src/view/templates/calendar.php index 144df00..e45f631 100644 --- a/src/view/templates/calendar.php +++ b/src/view/templates/calendar.php | |||
@@ -8,10 +8,10 @@ | |||
8 | <script src='js/fullcalendar/packages/core/locales/fr.global.min.js'></script> | 8 | <script src='js/fullcalendar/packages/core/locales/fr.global.min.js'></script> |
9 | <?php | 9 | <?php |
10 | if($_SESSION['admin'] === true){ | 10 | if($_SESSION['admin'] === true){ |
11 | echo '<script src="js/calendar_admin.js"></script>' . "\n"; | 11 | echo '<script src="' . HeadBuilder::versionedFileURL('js', 'calendar_admin') . '"></script>' . "\n"; |
12 | } | 12 | } |
13 | else{ | 13 | else{ |
14 | echo '<script src="js/calendar.js"></script>' . "\n"; | 14 | echo '<script src="' . HeadBuilder::versionedFileURL('js', 'calendar') . '"></script>' . "\n"; |
15 | } | 15 | } |
16 | ?> | 16 | ?> |
17 | <h3><?= $title ?></h3> | 17 | <h3><?= $title ?></h3> |