summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-07-19 13:15:12 +0200
committerpolo <ordipolo@gmx.fr>2025-07-19 13:15:12 +0200
commit976eaa544322be18c9feb1a165b9645533af4538 (patch)
tree39ce8d68222b1b116390276f5b4751b7913b42e8
parent8338cbe662018eb7b7ec01cbbd21531aca1d9b31 (diff)
downloadcms-976eaa544322be18c9feb1a165b9645533af4538.zip
amélioration calendrier écran tactile, selection sans touché prolongé, versionedFileURL() dispo de partout
-rw-r--r--public/css/calendar.css23
-rw-r--r--public/js/calendar.js18
-rw-r--r--public/js/calendar_admin.js2
-rw-r--r--src/view/HeadBuilder.php16
-rw-r--r--src/view/templates/calendar.php4
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
10if($_SESSION['admin'] === true){ 10if($_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}
13else{ 13else{
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>