2024-07-31 08:50:49 +02:00
< section
2024-07-24 09:43:31 +02:00
class = " calendar-strip "
2024-07-26 10:33:31 +02:00
@ mouseleave = " open = false "
2024-07-24 09:43:31 +02:00
x - data = " {
2024-09-11 16:34:58 +02:00
calendar : createEmptyCalendar (),
monthNumb : dayjs () . month () + 1 ,
token : '<?= $site->mapadoToken() ?>' ,
contractId : '<?= $site->mapadoContractId() ?>' ,
targetSessions : [],
open : false ,
today : dayjs () . format ( 'DD-MM-YYYY' ),
2024-09-11 14:36:08 +02:00
2024-09-11 16:34:58 +02:00
get monthName () {
return dayjs () . month ( this . monthNumb - 1 ) . format ( 'MMMM' );
},
2024-09-11 14:36:08 +02:00
2024-09-11 16:34:58 +02:00
get currentMonth () {
return this . calendar [ this . monthNumb ]
},
2024-09-11 14:36:08 +02:00
2024-09-11 16:34:58 +02:00
async updateDates () {
2024-09-11 14:36:08 +02:00
2024-09-11 16:34:58 +02:00
fetch ( '/<?= page(' programme ')->children()->first()->uri() ?>/data.json' )
. then ( res => res . json ())
. then ( json => {
console . log ( 'Saved calendar : ' , json )
this . calendar = json
})
. catch ( error => console . log ( 'No saved calendar.' ))
2024-09-11 14:36:08 +02:00
2024-09-11 16:34:58 +02:00
const daysNode = document . querySelector ( '.calendar-strip__days' );
daysNode . classList . toggle ( 'progress' );
this . calendar = await getCurrentSeasonCalendar ();
console . log ( 'Updated calendar for current season :' , this . calendar );
daysNode . classList . toggle ( 'progress' );
},
2024-09-11 14:36:08 +02:00
2024-09-11 16:34:58 +02:00
handleDayHover () {
if ( ! this . date ) return
if ( this . date . sessions . length > 0 ) {
2024-08-28 19:11:58 +02:00
this . targetSessions = this . date . sessions ;
2024-09-11 16:34:58 +02:00
this . open = true ;
} else {
setTimeout (() => {
this . targetSessions = this . date . sessions ;
}, 100 );
this . open = false ;
}
},
2024-09-11 14:36:08 +02:00
2024-09-11 16:34:58 +02:00
nextMonth () {
if ( this . monthNumb == 12 ) {
this . monthNumb = 1
} else {
this . monthNumb ++
}
},
prevMonth () {
if ( this . monthNumb == 1 ) {
this . monthNumb = 12
} else {
this . monthNumb --
}
2024-09-11 14:36:08 +02:00
}
2024-09-11 16:34:58 +02:00
} "
2024-09-11 14:36:08 +02:00
2024-07-24 15:56:28 +02:00
2024-07-24 18:01:01 +02:00
x - init = " updateDates() "
2024-07-24 09:43:31 +02:00
>
< div class = " calendar-strip__selector " >
2024-09-11 16:34:58 +02:00
< button class = " prev-month " @ click = " prevMonth() " : disabled = " monthNumb === 9 " > ← </ button >
2024-07-24 09:43:31 +02:00
< span x - text = " monthName " ></ span >
2024-09-11 16:34:58 +02:00
< button class = " next-month " @ click = " nextMonth() " : disabled = " monthNumb === 8 " > → </ button >
2024-07-24 09:43:31 +02:00
</ div >
< ul class = " calendar-strip__days " >
2024-09-11 16:34:58 +02:00
< template x - for = " (date, index) in currentMonth " >
2024-08-30 15:39:40 +02:00
< li class = " calendar-strip__day " : class = " targetSessions.length > 0 && open && index == targetSessions[0].day ? 'active' : '' " : style = " 'animation-delay: ' + index * 0.03 + 's' " >
2024-07-26 10:33:31 +02:00
< button
2024-09-11 16:34:58 +02:00
: class = " !date || date.full !== today ? '' : 'today' "
: disabled = " !date || date.sessions.length === 0 ? true : false "
: title = " !date || date.sessions.length === 0 ? 'Pas de représentation.' : 'Voir les représentations.' "
2024-07-26 10:33:31 +02:00
@ mouseenter = " handleDayHover() "
2024-08-28 19:11:58 +02:00
>
2024-09-11 16:34:58 +02:00
< template x - if = " date " >
< span x - text = " date.initial " ></ span >
</ template >
2024-08-28 19:11:58 +02:00
< span x - text = " index " ></ span >
</ button >
2024-07-24 18:19:25 +02:00
</ li >
2024-07-24 09:43:31 +02:00
</ template >
</ ul >
2024-09-03 16:16:06 +02:00
< a href = " <?= page('programme')->url() ?> " class = " calendar-strip__calendar-btn " > calendrier </ a >
2024-07-26 10:33:31 +02:00
< div class = " calendar-strip__date " : class = " open ? 'open' : '' " >
2024-09-12 13:05:44 +02:00
< ul class = " sessions " >
2024-07-26 10:33:31 +02:00
< template x - for = " session in targetSessions " >
2024-09-04 17:02:37 +02:00
< li
x - data = " {
stockThreshold : ( session . totalStock / 100 ) * 25
} "
: style = " '--color: ' + session.color "
class = " session "
>
2024-09-12 13:05:44 +02:00
< a class = " session__event-link " : href = " session.eventUrl " title = " En savoir plus " ></ a >
< div class = " session__info session__info--slot " >
< p x - html = " ` ${ session.day } ${ monthName } ` " ></ p >
< p x - html = " session.time " ></ p >
</ div >
< div class = " session__info session__info--title " >
< p >< strong x - html = " `<strong> ${ session.title } </strong>` " ></ strong ></ p >
< p x - html = " session.authors " ></ p >
</ div >
< div x - text = " session.duration ? session.duration : '' " class = " session__info session__info--duration " ></ div >
< div x - text = " ` ${ session.place } ` " class = " session__info session__info--place " ></ div >
< template x - if = " !session.ticketingUrl " >
< div class = " session__info session__info--book " >
< a class = " ticket-link " target = " _blank " title = " Entrée libre " disabled >< ? php snippet ( 'ticket' ) ?> Entrée libre</a>
2024-09-02 14:02:13 +02:00
</ div >
2024-09-12 13:05:44 +02:00
</ template >
< template x - if = " session.bookableStock === 0 " >
< div class = " session__info session__info--book " >
< a class = " ticket-link " title = " Plus de places disponibles " disabled >< ? php snippet ( 'ticket' ) ?> Complet</a>
2024-07-29 17:42:30 +02:00
</ div >
2024-09-12 13:05:44 +02:00
</ template >
< template x - if = " session.bookableStock > stockThreshold " >
< div class = " session__info " >
< a class = " ticket-link " title = " Plateforme de réservation " : href = " session.ticketingUrl " target = " _blank " >< ? php snippet ( 'ticket' ) ?> Billetterie</a>
</ div >
</ template >
< template x - if = " session.bookableStock !== 0 && session.bookableStock < stockThreshold " >
< div class = " session__info " >
< a class = " ticket-link " title = " Plateforme de réservation " : href = " session.ticketingUrl " target = " _blank " >< ? php snippet ( 'ticket' ) ?> Plus que quelques places !</a>
</ div >
</ template >
2024-07-26 10:33:31 +02:00
</ li >
</ template >
</ ul >
</ div >
2024-07-31 08:50:49 +02:00
</ section >
2024-07-24 18:19:25 +02:00