3318 lines
246 KiB
XML
3318 lines
246 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<theme name="Default" author_name="Invision Power Services, Inc" author_url="https://www.invisioncommunity.com">
|
|
<template template_group="browse" template_name="calendarDay" template_data="$calendars, $date, $events, $tomorrow, $yesterday, $today, $thisCalendar, $jump" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsPager cCalendarNav i-color_hard i-padding-block_2 i-padding-inline_3 i-background_2 i-border-start-start-radius_box i-border-start-end-radius_box'>
|
|
<div class='ipsPager_prev'>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&id={$thisCalendar->_id}&y={$yesterday->year}&m={$yesterday->mon}&d={$yesterday->mday}" seoTemplate="calendar_calday" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&y={$yesterday->year}&m={$yesterday->mon}&d={$yesterday->mday}" seoTemplate="calendar_day"}{{endif}}" title='{lang="cal_month_day" sprintf="$yesterday->monthName, $yesterday->mday, $yesterday->year"}' rel='prev nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{lang="cal_month_day_noyear" sprintf="$yesterday->monthName, $yesterday->mday"}</span>
|
|
<span class='ipsPager_title'>{$yesterday->year}</span>
|
|
</a>
|
|
</div>
|
|
<div class='ipsPager_center cCalendarNav' data-role='calendarNav'>
|
|
<h1 class='ipsTitle ipsTitle--h3'>{lang="cal_month_day" sprintf="$date->monthName, $date->mday, $date->year"}</h1>
|
|
</div>
|
|
<div class='ipsPager_next'>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&id={$thisCalendar->_id}&y={$tomorrow->year}&m={$tomorrow->mon}&d={$tomorrow->mday}" seoTemplate="calendar_calday" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&y={$tomorrow->year}&m={$tomorrow->mon}&d={$tomorrow->mday}" seoTemplate="calendar_day"}{{endif}}" title='{lang="cal_month_day" sprintf="$tomorrow->monthName, $tomorrow->mday, $tomorrow->year"}' rel='next nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{lang="cal_month_day_noyear" sprintf="$tomorrow->monthName, $tomorrow->mday"}</span>
|
|
<span class='ipsPager_title'>{$tomorrow->year}</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
{{if $events['count'] > 0}}
|
|
{{if isset( $events['allDay'] ) && \count( $events['allDay'] )}}
|
|
<h2 class='ipsTitle ipsTitle--h4 ipsTitle--padding i-background_2'>{lang="day_view_all_day"}</h2>
|
|
<i-data>
|
|
<ol class='ipsData ipsData--featured ipsData--calendarAllDay'>
|
|
{{foreach $events['allDay'] as $event}}
|
|
{template="eventBlock" app="calendar" group="view" params="$event, $date, true"}
|
|
{{endforeach}}
|
|
</ol>
|
|
</i-data>
|
|
{{endif}}
|
|
{{foreach $events as $hour => $hourEvents}}
|
|
{{if !empty( $hourEvents ) && $hour !== 'allDay' && $hour !== 'count'}}
|
|
<h2 class='ipsTitle ipsTitle--h4 ipsTitle--padding i-background_2'>
|
|
{{if \IPS\calendar\Date::usesAmPm()}}
|
|
{expression="\IPS\calendar\Date::getTwelveHour( $hour )"}<span>{expression="\IPS\calendar\Date::getAmPm( $hour )"}</span>
|
|
{{else}}
|
|
{$hour}<span>:00</span>
|
|
{{endif}}
|
|
</h2>
|
|
<i-data>
|
|
<ol class='ipsData ipsData--featured ipsData--calendarHourly'>
|
|
{{foreach $hourEvents as $idx => $event}}
|
|
{template="eventBlock" app="calendar" group="view" params="$event, $date, true"}
|
|
{{endforeach}}
|
|
</ol>
|
|
</i-data>
|
|
{{endif}}
|
|
{{endforeach}}
|
|
{{else}}
|
|
<div class='ipsEmptyMessage'>{lang="no_events_today"}</div>
|
|
{{endif}}]]></template>
|
|
<template template_group="browse" template_name="calendarHeader" template_data="$calendars, $thisCalendar, $jump, $downloadLinks" template_location="front" template_app="calendar"><![CDATA[
|
|
{{if $thisCalendar and $club = $thisCalendar->club()}}
|
|
{{if settings.clubs and settings.clubs_header == 'full'}}
|
|
{template="header" app="core" group="clubs" params="$club, $thisCalendar"}
|
|
{{endif}}
|
|
{{endif}}
|
|
|
|
<div class="ipsPageHeader ipsBox ipsBox--calendarHeader ipsPull" id='elCalendarsHeader'>
|
|
<div class='ipsPageHeader__row'>
|
|
<div class="ipsPageHeader__primary">
|
|
<span class="ipsPageHeader__title">
|
|
{{if $thisCalendar and $club = $thisCalendar->club()}}
|
|
{$thisCalendar->_title}
|
|
{{else}}
|
|
<button id='elCalendars' popovertarget="elCalendars_menu">
|
|
{{if $thisCalendar}}{$thisCalendar->_title}{{else}}{lang="all_calendars"}{{endif}} <i class='fa-solid fa-angle-down'></i>
|
|
</button>
|
|
{{endif}}
|
|
</span>
|
|
</div>
|
|
<div class='ipsButtons'>
|
|
{{if $thisCalendar and \IPS\Application::appIsEnabled('cloud')}}
|
|
{template="analyticsButton" app="cloud" group="analytics" params="$thisCalendar, $thisCalendar->id"}
|
|
{{endif}}
|
|
<button id='elCalendarSettings' popovertarget="elCalendarSettings_menu" class="ipsButton ipsButton--inherit">
|
|
<span>{lang="subscribe_button"}</span><i class='fa-solid fa-caret-down'></i>
|
|
</button>
|
|
<button popovertarget="elCalendarJump" class="ipsButton ipsButton--inherit">
|
|
<span>{lang="jump_to"}</span><i class='fa-solid fa-caret-down'></i>
|
|
</button>
|
|
{{if $thisCalendar}}
|
|
<div class='ipsResponsive_hidePhone'>
|
|
{template="follow" app="core" group="global" params="'calendar', 'calendar', $thisCalendar->id, \IPS\calendar\Event::containerFollowerCount( $thisCalendar )"}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{$jump->customTemplate( array( \IPS\Theme::i()->getTemplate( 'browse' ), 'dateJump' ) )|raw}
|
|
|
|
<i-dropdown id="elCalendars_menu" popover>
|
|
<div class="iDropdown">
|
|
<ul class='iDropdown__items'>
|
|
<li><a href='{url="app=calendar&module=calendar&controller=view&view=month" seoTemplate="calendar"}'><span class='cCalendarIcon cEvents_style_blank'></span> {lang="all_calendars"}</a></li>
|
|
{{foreach $calendars as $calendar}}
|
|
{{if $club = $calendar->club()}}
|
|
<li><a href='{$calendar->url()}'><span class='cCalendarIcon cEvents_style_blank'></span> {lang="club_node" sprintf="$club->name, $calendar->_title"}</a></li>
|
|
{{else}}
|
|
<li><a href='{$calendar->url()}'><span class='cCalendarIcon cEvents_style{$calendar->id}'></span> {$calendar->_title}</a></li>
|
|
{{endif}}
|
|
{{endforeach}}
|
|
</ul>
|
|
</div>
|
|
</i-dropdown>
|
|
{template="subscribeMenu" app="calendar" group="global" params="$thisCalendar, $downloadLinks"}
|
|
]]></template>
|
|
<template template_group="browse" template_name="calendarMonth" template_data="$calendars, $date, $events, $today, $thisCalendar, $jump, $startDates=array()" template_location="front" template_app="calendar"><![CDATA[<div>
|
|
<div class='ipsPager cCalendarNav i-color_hard i-padding-block_2 i-padding-inline_3 i-background_2 i-border-start-start-radius_box i-border-start-end-radius_box'>
|
|
<div class='ipsPager_prev'>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&view=month&id={$thisCalendar->_id}&y={$date->lastMonth('year')}&m={$date->lastMonth('mon')}" seoTemplate="calendar_calmonth" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&y={$date->lastMonth('year')}&m={$date->lastMonth('mon')}" seoTemplate="calendar_month"}{{endif}}" title='{lang="cal_month_title" sprintf="$date->lastMonth('monthName'), $date->lastMonth('year')"}' rel='prev nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{$date->lastMonth('monthName')}</span>
|
|
<span class='ipsPager_title'>{$date->lastMonth('year')}</span>
|
|
</a>
|
|
</div>
|
|
<div class='ipsPager_center cCalendarNav' data-role='calendarNav'>
|
|
<h1 class='ipsTitle ipsTitle--h3'>{lang="cal_month_title" sprintf="$date->monthName, $date->year"}</h1>
|
|
</div>
|
|
<div class='ipsPager_next'>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&view=month&id={$thisCalendar->_id}&y={$date->nextMonth('year')}&m={$date->nextMonth('mon')}" seoTemplate="calendar_calmonth" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&y={$date->nextMonth('year')}&m={$date->nextMonth('mon')}" seoTemplate="calendar_month"}{{endif}}" title='{lang="cal_month_title" sprintf="$date->nextMonth('monthName'), $date->nextMonth('year')"}' rel='next nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{$date->nextMonth('monthName')}</span>
|
|
<span class='ipsPager_title'>{$date->nextMonth('year')}</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class=''>
|
|
<table class='cCalendar' data-controller='calendar.front.browse.monthView'>
|
|
<tr>
|
|
{{foreach \IPS\calendar\Date::getDayNames() as $day }}
|
|
<th class='' data-short='{$day['abbreviated']}' data-veryShort='{$day['letter']}'><span>{$day['full']}</span></th>
|
|
{{endforeach}}
|
|
</tr>
|
|
<tr>
|
|
{{for $i=0; $i < $date->firstDayOfMonth('wday'); $i++ }}
|
|
<td class='cCalendar_nonDate'> </td>
|
|
{{endfor}}
|
|
|
|
{{for $j=$i+$date->lastDayOfMonth('mday'), $k=1; $i < $j; $i++, $k++ }}
|
|
{{$k = str_pad( $k, 2, '0', STR_PAD_LEFT );}}
|
|
{{if $i%7 == 0}}
|
|
</tr>
|
|
<tr>
|
|
{{endif}}
|
|
<td class='cCalendar_date{{if $k == 1}} cCalendar_firstDay{{endif}}{{if $today->mysqlDatetime( FALSE ) == $date->year . '-' . $date->mon . '-' . $k }} cCalendar_today{{endif}}{{if isset( $events[ $date->year . '-' . $date->mon . '-' . $k ] )}} cCalendar_hasEvents{{endif}}'>
|
|
<div>
|
|
<a href='{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&id={$thisCalendar->_id}&y={$date->year}&m={$date->mon}&d={$k}&view=day" seoTemplate="calendar_calday" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&y={$date->year}&m={$date->mon}&d={$k}&view=day" seoTemplate="calendar_day"}{{endif}}' class='cCalendar_dayNumber'>{$k}</a>
|
|
{{if ( $thisCalendar AND $thisCalendar->can('add') ) OR ( !$thisCalendar AND \IPS\calendar\Calendar::canOnAny('add') )}}
|
|
<a href='{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=submit&do=submit&id={$thisCalendar->_id}&y={$date->year}&m={$date->mon}&d={$k}&view=day" seoTemplate="calendar_submit"}{{else}}{url="app=calendar&module=calendar&controller=submit&y={$date->year}&m={$date->mon}&d={$k}&view=day" seoTemplate="calendar_submit"}{{endif}}' data-ipsTooltip title='{lang="add_event"}' class='cCalendar_miniAddEvent'><i class='fa-solid fa-plus'></i></a>
|
|
{{endif}}
|
|
{{if isset( $events[ $date->year . '-' . $date->mon . '-' . $k ] )}}
|
|
<ul class='cEvents_wrapper'>
|
|
{{if isset( $events[ $date->year . '-' . $date->mon . '-' . $k ]['ranged'] )}}
|
|
<li class='cEvents_ranged'>
|
|
<ul class='cEvents'>
|
|
{{foreach $events[ $date->year . '-' . $date->mon . '-' . $k ]['ranged'] as $event }}
|
|
<li class='cEvents_event cEvents_style{$event->calendar_id}{{if $event->nextOccurrence( \IPS\calendar\Date::getDate( $date->year, $date->mon, $k ), 'startDate' ) AND $event->nextOccurrence( \IPS\calendar\Date::getDate( $date->year, $date->mon, $k ), 'startDate' )->mysqlDatetime( FALSE ) == $date->year . '-' . $date->mon . '-' . $k }}{{$startDates[ $event->id ] = $date->year . '-' . $date->mon . '-' . $k;}} cEvents_first{{endif}}{{if $event->nextOccurrence( \IPS\calendar\Date::getDate( $date->year, $date->mon, $k ) ?: $event->nextOccurrence( \IPS\calendar\Date::getDate( $date->year, $date->mon, $k ), 'startDate' ), 'endDate' ) AND $event->nextOccurrence( \IPS\calendar\Date::getDate( $date->year, $date->mon, $k ) ?: $event->nextOccurrence( \IPS\calendar\Date::getDate( $date->year, $date->mon, $k ), 'startDate' ), 'endDate' )->mysqlDatetime( FALSE ) == $date->year . '-' . $date->mon . '-' . $k }} cEvents_last{{endif}} {$event->ui('css')}' data-eventID='{$event->id}' {$event->ui('dataAttributes')}>
|
|
<a href='{$event->url()}' data-ipsHover data-ipsHover-target='{$event->url('hovercard')->setQuerystring( 'sd', isset( $startDates[ $event->id ] ) ? $startDates[ $event->id ] : $date->year . '-' . $date->mon . '-' . $k )}' title='{$event->title}'>{{if !$event->all_day}}<span class='cEvents_time'>{$event->_start_date->localeTime( FALSE )}</span> {{endif}}{truncate="$event->title" length="15"}{{if $event->hidden() === 1}} <i class='fa-solid fa-triangle-exclamation'></i>{{endif}}</a>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</li>
|
|
{{endif}}
|
|
{{if isset( $events[ $date->year . '-' . $date->mon . '-' . $k ]['single'] )}}
|
|
<li class='cEvents_single'>
|
|
<ul class='cEvents'>
|
|
{{foreach $events[ $date->year . '-' . $date->mon . '-' . $k ]['single'] as $event }}
|
|
<li class="cEvents_event cEvents_style{$event->calendar_id} {$event->ui('css')}" data-eventID='{$event->id}' {$event->ui('dataAttributes')}>
|
|
<a href='{$event->url()}' data-ipsHover data-ipsHover-target='{$event->url('hovercard')->setQuerystring( 'sd', $date->year . '-' . $date->mon . '-' . $k )}' title='{$event->title}'>{{if !$event->all_day}}<span class='cEvents_time'>{$event->_start_date->localeTime( FALSE )}</span> {{endif}}{truncate="$event->title" length="15"}{{if $event->hidden() === 1}} <i class='fa-solid fa-triangle-exclamation'></i>{{endif}}</a>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</li>
|
|
{{endif}}
|
|
</ul>
|
|
{{endif}}
|
|
</div>
|
|
</td>
|
|
{{endfor}}
|
|
|
|
{{for ; $i%7 != 0; $i++}}
|
|
<td class='cCalendar_nonDate'> </td>
|
|
{{endfor}}
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="browse" template_name="calendarWeek" template_data="$calendars, $date, $events, $nextWeek, $lastWeek, $days, $today, $thisCalendar, $jump, $startDates=array()" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class=''>
|
|
<div class='ipsPager cCalendarNav i-color_hard i-padding-block_2 i-padding-inline_3 i-background_2 i-border-start-start-radius_box i-border-start-end-radius_box'>
|
|
<div class='ipsPager_prev'>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&view=week&id={$thisCalendar->_id}&w={$lastWeek->year}-{$lastWeek->mon}-{$lastWeek->mday}" seoTemplate="calendar_calweek" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&view=week&w={$lastWeek->year}-{$lastWeek->mon}-{$lastWeek->mday}" seoTemplate="calendar_week"}{{endif}}" title='{lang="cal_week_title" sprintf="$lastWeek->firstDayOfWeek('monthNameShort'), $lastWeek->firstDayOfWeek('mday'), $lastWeek->firstDayOfWeek('year'), $lastWeek->lastDayOfWeek('monthNameShort'), $lastWeek->lastDayOfWeek('mday'), $lastWeek->lastDayOfWeek('year')"}' rel='prev nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{lang="previous_week"}</span>
|
|
<span class='ipsPager_title'>
|
|
<span class='ipsResponsive_hidePhone'>
|
|
{lang="cal_week_title" sprintf="$lastWeek->firstDayOfWeek('monthNameShort'), $lastWeek->firstDayOfWeek('mday'), $lastWeek->firstDayOfWeek('year'), $lastWeek->lastDayOfWeek('monthNameShort'), $lastWeek->lastDayOfWeek('mday'), $lastWeek->lastDayOfWeek('year')"}
|
|
</span>
|
|
<span class='ipsResponsive_showPhone'>
|
|
{lang="cal_week_title_wb" sprintf="$lastWeek->firstDayOfWeek('monthNameShort'), $lastWeek->firstDayOfWeek('mday'), $lastWeek->firstDayOfWeek('year')"}
|
|
</span>
|
|
</span>
|
|
</a>
|
|
</div>
|
|
<div class='ipsPager_center cCalendarNav' data-role='calendarNav'>
|
|
<h1 class='ipsTitle ipsTitle--h3'>{lang="cal_week_title" sprintf="$date->firstDayOfWeek('monthNameShort'), $date->firstDayOfWeek('mday'), $date->firstDayOfWeek('year'), $date->lastDayOfWeek('monthNameShort'), $date->lastDayOfWeek('mday'), $date->lastDayOfWeek('year')"}</h1>
|
|
</div>
|
|
<div class='ipsPager_next'>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&view=week&id={$thisCalendar->_id}&w={$nextWeek->year}-{$nextWeek->mon}-{$nextWeek->mday}" seoTemplate="calendar_calweek" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&view=week&w={$nextWeek->year}-{$nextWeek->mon}-{$nextWeek->mday}" seoTemplate="calendar_week"}{{endif}}" title='{lang="cal_week_title" sprintf="$nextWeek->firstDayOfWeek('monthNameShort'), $nextWeek->firstDayOfWeek('mday'), $nextWeek->firstDayOfWeek('year'), $nextWeek->lastDayOfWeek('monthNameShort'), $nextWeek->lastDayOfWeek('mday'), $nextWeek->lastDayOfWeek('year')"}' rel='next nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{lang="next_week"}</span>
|
|
<span class='ipsPager_title'>
|
|
<span class='ipsResponsive_hidePhone'>
|
|
{lang="cal_week_title" sprintf="$nextWeek->firstDayOfWeek('monthNameShort'), $nextWeek->firstDayOfWeek('mday'), $nextWeek->firstDayOfWeek('year'), $nextWeek->lastDayOfWeek('monthNameShort'), $nextWeek->lastDayOfWeek('mday'), $nextWeek->lastDayOfWeek('year')"}
|
|
</span>
|
|
<span class='ipsResponsive_showPhone'>
|
|
{lang="cal_week_title_wb" sprintf="$nextWeek->firstDayOfWeek('monthNameShort'), $nextWeek->firstDayOfWeek('mday'), $nextWeek->firstDayOfWeek('year')"}
|
|
</span>
|
|
</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class=''>
|
|
<ul class='cCalendarWeek'>
|
|
{{foreach $days as $day}}
|
|
<li class='ipsColumns ipsColumns--lines i-border-bottom_1'>
|
|
<div class='ipsColumns__secondary i-basis_280 i-padding_3 cCalendarWeek_day {{if $today->year == $day->year AND $today->mon == $day->mon AND $today->mday == $day->mday}} i-background_5{{else}}i-background_2{{endif}}'>
|
|
<h2 class='ipsTitle ipsTitle--h5 ipsTitle--margin i-color_hard i-link-color_inherit'><a href='{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&id={$thisCalendar->_id}&y={$day->year}&m={$day->mon}&d={$day->mday}&view=day" seoTemplate="calendar_calday" seoTitle="$thisCalendar->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=view&y={$day->year}&m={$day->mon}&d={$day->mday}&view=day" seoTemplate="calendar_day"}{{endif}}'>{$day->dayName}</a></h2>
|
|
<p class='i-text-transform_uppercase i-font-weight_600 i-font-size_-1'>{lang="cal_month_day" sprintf="$day->monthName, $day->mday, $day->year"}</p>
|
|
</div>
|
|
<div class='ipsColumns__primary i-padding_3 {{if $today->year == $day->year AND $today->mon == $day->mon AND $today->mday == $day->mday}} i-background_2{{endif}}'>
|
|
{{if isset( $events[ $day->year . '-' . $day->mon . '-' . $day->mday ] )}}
|
|
<ul class='cEvents_wrapper'>
|
|
{{if isset( $events[ $day->year . '-' . $day->mon . '-' . $day->mday ]['ranged'] )}}
|
|
<li class='cEvents_ranged'>
|
|
<ul class='cEvents'>
|
|
{{foreach $events[ $day->year . '-' . $day->mon . '-' . $day->mday ]['ranged'] as $event }}
|
|
<li class="cEvents_event cEvents_style{$event->calendar_id}{{if $event->nextOccurrence( $day, 'startDate' ) AND $event->nextOccurrence( $day, 'startDate' )->mysqlDatetime( FALSE ) == $day->mysqlDatetime( FALSE ) }}{{$startDates[ $event->id ] = $day->mysqlDatetime( FALSE );}} cEvents_first{{endif}}{{if $event->nextOccurrence( $day ?: $event->nextOccurrence( $day, 'startDate' ), 'endDate' ) AND $event->nextOccurrence( $day ?: $event->nextOccurrence( $day, 'startDate' ), 'endDate' )->mysqlDatetime( FALSE ) == $day->mysqlDatetime( FALSE ) }} cEvents_last{{endif}} {$event->ui('css')}" {$event->ui('dataAttributes')}>
|
|
<a href='{$event->url()}' data-ipsHover data-ipsHover-target='{$event->url('hovercard')->setQuerystring( 'sd', isset( $startDates[ $event->id ] ) ? $startDates[ $event->id ] : $day->mysqlDatetime( FALSE ) )}'>{$event->title}{{if $event->hidden() === 1}} <i class='fa-solid fa-triangle-exclamation'></i>{{endif}}</a>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</li>
|
|
{{endif}}
|
|
{{if isset( $events[ $day->year . '-' . $day->mon . '-' . $day->mday ]['single'] )}}
|
|
<li class='cEvents_single'>
|
|
<ul class='cEvents'>
|
|
{{foreach $events[ $day->year . '-' . $day->mon . '-' . $day->mday ]['single'] as $event }}
|
|
<li class="cEvents_event cEvents_style{$event->calendar_id} {$event->ui('css')}" {$event->ui('dataAttributes')}>
|
|
<a href='{$event->url()}' data-ipsHover data-ipsHover-target='{$event->url('hovercard')->setQuerystring( 'sd', $day->year . '-' . $day->mon . '-' . $day->mday )}'>{$event->title}{{if $event->hidden() === 1}} <i class='fa-solid fa-triangle-exclamation'></i>{{endif}}</a>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</li>
|
|
{{endif}}
|
|
</ul>
|
|
{{else}}
|
|
<p class='ipsEmptyMessage'>{lang="no_events_today"}</p>
|
|
{{endif}}
|
|
</div>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="browse" template_name="calendarWrapper" template_data="$calendar, $calendars, $thisCalendar, $jump, $date, $downloadLinks" template_location="front" template_app="calendar"><![CDATA[
|
|
{{if !$thisCalendar or !$thisCalendar->club()}}
|
|
{template="header" group="overview" app="calendar" params="$date, $thisCalendar"}
|
|
{{endif}}
|
|
{template="calendarHeader" group="browse" app="calendar" params="$calendars, $thisCalendar, $jump, $downloadLinks"}
|
|
{{if $thisCalendar and $club = $thisCalendar->club()}}
|
|
{template="header" group="overview" app="calendar" params="$date, $thisCalendar, null, false"}
|
|
{{endif}}
|
|
|
|
<div data-controller='calendar.front.browse.main' class='ipsBox ipsBox--calendarMain ipsPull'>
|
|
{$calendar|raw}
|
|
</div>
|
|
|
|
{{if $thisCalendar}}
|
|
<div class="ipsBox ipsBox--calendarWrapper ipsBox--padding ipsPull ipsResponsive_showPhone">
|
|
{template="follow" app="core" group="global" params="'calendar', 'calendar', $thisCalendar->id, \IPS\calendar\Event::containerFollowerCount( $thisCalendar )"}
|
|
</div>
|
|
{{endif}}]]></template>
|
|
<template template_group="browse" template_name="dateJump" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="calendar"><![CDATA[<i-dropdown id="elCalendarJump" popover>
|
|
<div class="iDropdown">
|
|
<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--date-jump" method='post' action='{$action}' data-ipsForm>
|
|
<input type="hidden" name="{$id}_submitted" value="1">
|
|
{{foreach $hiddenValues as $k => $v}}
|
|
<input type="hidden" name="{$k}" value="{$v}">
|
|
{{endforeach}}
|
|
<ul class="ipsForm ipsForm--vertical ipsForm--data-jump">
|
|
{{foreach $elements as $collection}}
|
|
{{foreach $collection as $input}}
|
|
{{if $input instanceof \IPS\Helpers\Form\Date}}
|
|
<li class='ipsFieldRow ipsFieldRow--fullWidth'>
|
|
<input type="date" class='ipsInput ipsInput--text' data-control="date" name='{$input->name}' id='{$input->htmlId}' {{if $input->required === TRUE}}required{{endif}} value="{{if $input->defaultValue instanceof \IPS\DateTime}}{$input->defaultValue->format('Y-m-d')}{{endif}}">
|
|
</li>
|
|
{{else}}
|
|
{$input->rowHtml($form)|raw}
|
|
{{endif}}
|
|
{{endforeach}}
|
|
{{endforeach}}
|
|
<li class='ipsFieldRow'>
|
|
<button type="submit" class="ipsButton ipsButton--primary ipsButton--wide ipsButton--small" value="{lang="calendar_jump"}">{lang="calendar_jump"}</button>
|
|
</li>
|
|
<li class='ipsFieldRow'>
|
|
<button type="submit" class="ipsButton ipsButton--text ipsButton--wide ipsButton--small" value="{lang="calendar_jump_today"}" name="goto">{lang="calendar_jump_today"}</button>
|
|
</li>
|
|
</ul>
|
|
</form>
|
|
</div>
|
|
</i-dropdown>]]></template>
|
|
<template template_group="events" template_name="event" template_data="$event, $size='normal', $date=NULL" template_location="front" template_app="calendar"><![CDATA[{{$date = $date ?: \IPS\calendar\Date::getDate();}}
|
|
{{$sameDay = FALSE;}}
|
|
{{if $event->_end_date}}
|
|
{{$sameDay = !( ($event->_start_date->mday != $event->_end_date->mday) or ($event->_start_date->mon != $event->_end_date->mon) or ($event->_start_date->year != $event->_end_date->year) );}}
|
|
{{endif}}
|
|
<li class="ipsData__item {$event->ui('css')}" data-eventID='{$event->id}' {$event->ui('dataAttributes')}>
|
|
<a href="{$event->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$event->title}</span></a>
|
|
{{$image = FALSE;}}
|
|
{{if $event->flyer}}
|
|
{{$image = \IPS\File::get('calendar_Events', $event->flyer);}}
|
|
{{else}}
|
|
{{$coverPhoto = $event->coverPhoto();}}
|
|
{{if $coverPhoto->file}}
|
|
{{$image = $coverPhoto->file;}}
|
|
{{elseif $event->container()->club() !== NULL && $event->container()->club()->cover_photo}}
|
|
{{$image = \IPS\File::get('core_Clubs', $event->container()->club()->cover_photo );}}
|
|
{{else}}
|
|
{{$image = $event->primaryImage();}}
|
|
{{endif}}
|
|
{{endif}}
|
|
<div class="ipsData__image" aria-hidden="true" data-ips-hook='image'>
|
|
{{if $image}}
|
|
<img src='{$image->url}' alt='{$event->title}' loading="lazy">
|
|
{{else}}
|
|
<i></i>
|
|
{{endif}}
|
|
<div class='ipsCalendarDate' data-ips-hook='date'>
|
|
{{if $event->nextOccurrence( $date, 'startDate' )}}
|
|
<span class='ipsCalendarDate__month'>{lang="_date_month_short" pluralize="$event->nextOccurrence( $date, 'startDate' )->format( 'n' )"}</span>
|
|
<span class='ipsCalendarDate__date'>{$event->nextOccurrence( $date, 'startDate' )->format( 'd' )}</span>
|
|
{{else}}
|
|
<span class='ipsCalendarDate__month'>{lang="_date_month_short" pluralize="$event->lastOccurrence( 'startDate' )->format( 'n' )"}</span>
|
|
<span class='ipsCalendarDate__date'>{$event->lastOccurrence( 'startDate' )->format('d')}</span>
|
|
{{endif}}
|
|
</div>
|
|
{{if $event->online and $event->online_type}}
|
|
<div class='cEvent__onlineLogo'>
|
|
{{if $event->online_type === "zoom"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 224"><path d="M814.1856 67.3887c3.8225 6.595 5.073 14.0983 5.486 22.5337l.5427 11.2433v78.62l.5544 11.2551c1.109 18.3809 14.6646 31.9719 33.187 33.128l11.1961.5546V101.1657l.5545-11.2433c.4601-8.341 1.699-15.986 5.5804-22.628a44.9022 44.9022 0 0 1 77.747.1415c3.8225 6.595 5.0141 14.2399 5.4742 22.4865l.5545 11.2079v78.6555l.5545 11.255c1.1562 18.4753 14.6056 32.0663 33.187 33.128l11.1961.5546V89.9224A89.8988 89.8988 0 0 0 910.1366.0236a89.6628 89.6628 0 0 0-67.424 30.45A89.7808 89.7808 0 0 0 775.2884.0118c-18.664 0-35.9831 5.663-50.3292 15.4433C716.2053 5.6865 696.6211.0118 685.3779.0118v224.7116l11.2432-.5545c18.8056-1.2388 32.3966-14.464 33.128-33.128l.6018-11.2551v-78.6202l.5545-11.2432c.4719-8.4826 1.6516-15.9387 5.486-22.5809a45.0202 45.0202 0 0 1 38.897-22.392 44.9494 44.9494 0 0 1 38.8972 22.4392zm-769.248 156.792 11.2432.5427h168.5307l-.5545-11.2079c-1.5219-18.4752-14.6056-31.9719-33.1398-33.1752l-11.2432-.5545H78.6673l134.801-134.8482-.5545-11.196c-.873-18.664-14.5112-32.1489-33.1398-33.1753L168.5307.059 0 .0118l.5545 11.2433c1.4747 18.2983 14.7472 32.078 33.128 33.1398l11.255.5545h101.1067L11.2432 179.7976l.5545 11.2432c1.109 18.5225 14.4759 31.9365 33.1399 33.128zM641.266 32.9039a112.3499 112.3499 0 0 1 0 158.9038 112.4325 112.4325 0 0 1-158.9391 0c-43.8758-43.8758-43.8758-115.028 0-158.9038A112.2909 112.2909 0 0 1 561.7258 0a112.3735 112.3735 0 0 1 79.5403 32.9157Zm-31.7949 31.8185a67.4477 67.4477 0 0 1 0 95.3494 67.4477 67.4477 0 0 1-95.3493 0 67.4477 67.4477 0 0 1 0-95.3494 67.4477 67.4477 0 0 1 95.3493 0zM325.9126 0a112.2909 112.2909 0 0 1 79.3987 32.9157c43.8876 43.864 43.8876 115.028 0 158.892a112.4325 112.4325 0 0 1-158.9391 0c-43.8758-43.8758-43.8758-115.028 0-158.9038A112.2909 112.2909 0 0 1 325.771 0Zm47.6038 64.6988a67.4477 67.4477 0 0 1 0 95.3612 67.4477 67.4477 0 0 1-95.3493 0 67.4477 67.4477 0 0 1 0-95.3494 67.4477 67.4477 0 0 1 95.3493 0z" fill="#2d8cff" fill-rule="evenodd"/></svg>
|
|
{{elseif $event->online_type === "eventbrite"}}
|
|
<svg viewBox="0 0 200 36" xmlns="http://www.w3.org/2000/svg"><path d="M186.292 17.513a6.657 6.657 0 0 1 6.878 2.584l-11.905 2.693c.411-2.52 2.333-4.668 5.027-5.277zm6.945 9.91a6.57 6.57 0 0 1-3.98 2.679c-2.711.614-5.417-.51-6.907-2.626l11.941-2.702 1.945-.44 3.72-.841a11.77 11.77 0 0 0-.31-2.372c-1.514-6.426-8.056-10.432-14.612-8.949-6.556 1.484-10.644 7.896-9.13 14.321 1.513 6.426 8.055 10.433 14.611 8.95 3.863-.875 6.868-3.46 8.376-6.751l-5.654-1.269zm-28.102 7.695V18.082h-3.677v-5.804h3.677V4.289h6.244v7.989h4.69v5.804h-4.69v17.036h-6.244zm-11.928 0h6.03v-22.84h-6.03v22.84zm-.784-30.853c0-2.114 1.667-3.7 3.824-3.7s3.775 1.586 3.775 3.7c0 2.115-1.618 3.748-3.775 3.748s-3.824-1.633-3.824-3.748zm-1.315 8.077c-3.083.16-4.901.633-6.75 1.973v-2.037h-6.027v22.84h6.026v-11.2c0-3.524.86-5.529 6.751-5.726v-5.85zm-33.601 11.715c.15 3.333 3.051 6.128 6.602 6.128 3.602 0 6.553-2.942 6.553-6.422 0-3.432-2.951-6.373-6.553-6.373-3.55 0-6.452 2.843-6.602 6.128v.539zm-5.88 11.061V1.38l6.03-1.364v13.962c1.863-1.49 4.07-2.115 6.472-2.115 6.864 0 12.355 5.286 12.355 11.918 0 6.583-5.49 11.965-12.355 11.965-2.402 0-4.609-.624-6.472-2.114v1.487h-6.03v-.001zm-12.835 0V17.965h-3.677v-5.687h3.677V4.283l6.244-1.413v9.408h4.69v5.687h-4.69v17.153h-6.244zm-11.05 0V22.915c0-4.421-2.403-5.382-4.806-5.382-2.402 0-4.804.913-4.804 5.286v12.299h-6.03v-22.84h6.03v1.699c1.323-.961 2.941-2.115 6.129-2.115 5.098 0 9.511 2.932 9.511 10.092v13.164h-6.03zM56.831 17.513c2.694-.61 5.382.495 6.878 2.584L51.805 22.79c.41-2.52 2.333-4.668 5.026-5.277zm6.945 9.91a6.57 6.57 0 0 1-3.98 2.679 6.656 6.656 0 0 1-6.907-2.626l11.942-2.702 1.945-.44 3.719-.841a11.77 11.77 0 0 0-.31-2.372c-1.514-6.426-8.056-10.432-14.612-8.949-6.556 1.484-10.644 7.896-9.13 14.321 1.514 6.426 8.055 10.433 14.612 8.95 3.863-.875 6.868-3.46 8.375-6.751l-5.654-1.269zm-31.538 7.695-9.365-22.84h6.57l5.933 15.49 5.981-15.49h6.57l-9.364 22.84h-6.325zM11.05 17.507a6.658 6.658 0 0 1 6.879 2.584L6.024 22.785c.41-2.52 2.333-4.668 5.026-5.278zm6.945 9.91a6.57 6.57 0 0 1-3.98 2.68c-2.71.613-5.416-.51-6.907-2.626l11.942-2.702 1.945-.44 3.719-.842a11.782 11.782 0 0 0-.31-2.371c-1.514-6.426-8.055-10.433-14.612-8.95C3.236 13.65-.85 20.063.662 26.489c1.514 6.426 8.056 10.432 14.612 8.949 3.863-.874 6.868-3.46 8.376-6.75l-5.655-1.27v-.001z" fill="#F05537"/></svg>
|
|
{{elseif $event->online_type === "on24"}}
|
|
<svg viewBox="-0.0374 -5.1555 205.0374 63.5155" xmlns="http://www.w3.org/2000/svg"><path d="m122.92 12.87-.76-.55c5.08-7.59 10.41-12 20.34-12 10.15 0 17.51 6.78 17.51 16v.17c0 8.24-4.35 13.31-14.28 21.94l-15.1 13.41h29.94v5.83h-35.23a4.21 4.21 0 0 1-4.21-4.21v-.73L141.6 34.6c8.63-7.76 11.79-12.11 11.79-17.75C153.4 10.21 148.16 6 142 6c-5 0-8.65 2-12.15 5.9l-.71.76a4.21 4.21 0 0 1-5.95.35z" fill="#232323"/><path d="M194.25 57.61A4.21 4.21 0 0 1 190 53.4v-9.21h-26.83a4.21 4.21 0 0 1-4-3l-.46-1.68 32-38.83h5.66v38.18H205v5.33h-8.7v13.42zm-4.17-18.75V9.73l-23.74 29.13z" fill="#232323"/><path d="M76.67 18.72v38.89h-6.38a3.35 3.35 0 0 1-3.68-3.69V.86h7.23a4.24 4.24 0 0 1 3.25 1.5l27.34 36.25V.86l6.4.05a3.35 3.35 0 0 1 3.68 3.68v53h-6.28a4.25 4.25 0 0 1-3.32-1.6zM50.22 6.26l.07.11a21.59 21.59 0 0 1 4 15.63C53 33.17 43.91 41.21 34.06 40c-7.83-1-13.78-7.52-15.21-15.75-3.12 7.25-.85 15.32 5.28 20.59a15.36 15.36 0 0 0 6.15 3.45H29.2a20.7 20.7 0 1 1 18.42-32l.13.14C45.09 6.94 37.93 0 26.09 0a22.37 22.37 0 0 0-10.82 2.77A29.63 29.63 0 0 0 0 28.62C0 45 13.56 58.36 30.27 58.36S60.55 45 60.55 28.62A29.42 29.42 0 0 0 50.26 6.29z" fill="#3040e8"/></svg>
|
|
{{elseif $event->online_type === "facebook"}}
|
|
<svg viewBox="0 0 62.488 12.094" xmlns="http://www.w3.org/2000/svg"><g><path d="M4.8891 1.8945c-.7357 0-.9484.3263-.9484 1.046v1.194h1.9624l-.1967 1.9287H3.9415v5.8536h-2.355V6.0632H0V4.1344h1.5865v-1.161C1.5865 1.0276 2.371 0 4.5598 0c.4586-.001.917.0262 1.3723.0816v1.8152ZM6.0663 7.7801c0-2.1743 1.03-3.8119 3.1882-3.8119 1.1771 0 1.896.6053 2.2399 1.357V4.1345h2.2559v7.7824h-2.2559v-1.1771c-.327.7524-1.0628 1.341-2.2399 1.341-2.1583 0-3.1882-1.6353-3.1882-3.8119Zm2.3542.5238c0 1.1603.4246 1.9288 1.5202 1.9288.9651 0 1.4554-.703 1.4554-1.8145v-.7814c0-1.1116-.4903-1.8145-1.4554-1.8145-1.0956 0-1.5202.7685-1.5202 1.9288ZM18.6554 3.9705c.9149 0 1.7817.1967 2.256.523l-.523 1.668a3.7043 3.7043 0 0 0-1.5698-.3598c-1.2755 0-1.8297.7357-1.8297 1.9952v.4574c0 1.2595.5557 1.9952 1.8297 1.9952a3.7055 3.7055 0 0 0 1.5697-.3599l.523 1.6673c-.4742.3271-1.3402.5238-2.2559.5238-2.7636 0-4.0223-1.4882-4.0223-3.8752v-.3598c0-2.387 1.2587-3.8752 4.0223-3.8752ZM21.2216 8.323v-.6862c0-2.2071 1.2587-3.6594 3.8264-3.6594 2.4198 0 3.4825 1.4714 3.4825 3.6297v1.2426h-4.9554c.0495 1.0628.5237 1.537 1.8297 1.537.8836 0 1.8152-.18 2.5021-.4742l.4308 1.6124c-.6214.3278-1.8968.5726-3.0244.5726-2.9801-.0008-4.0917-1.4874-4.0917-3.7746Zm2.3542-1.014h2.8452v-.196c0-.85-.343-1.5247-1.3722-1.5247-1.0636.0007-1.473.6716-1.473 1.7176ZM37.2575 8.271c0 2.1744-1.046 3.812-3.202 3.812-1.1771 0-1.9944-.5886-2.3214-1.341v1.177H29.511V.2266L31.8652.013v5.1994c.343-.6861 1.0955-1.2427 2.191-1.2427 2.1584 0 3.202 1.6353 3.202 3.812Zm-2.3542-.5397c0-1.0955-.4247-1.9128-1.553-1.9128-.9652 0-1.4882.6862-1.4882 1.7985v.8172c0 1.1116.523 1.7985 1.4882 1.7985 1.1283 0 1.553-.8173 1.553-1.9128ZM38.045 8.2215v-.3918c0-2.2407 1.2755-3.8592 3.8752-3.8592s3.876 1.6185 3.876 3.8592v.3918c0 2.2399-1.2755 3.8592-3.8752 3.8592s-3.876-1.6193-3.876-3.8592Zm5.3962-.5557c0-1.03-.4254-1.8473-1.5248-1.8473-1.0993 0-1.521.8173-1.521 1.8473v.7196c0 1.03.4255 1.8473 1.521 1.8473 1.0956 0 1.5248-.8173 1.5248-1.8473ZM46.5791 8.2215v-.3918c0-2.2407 1.2755-3.8592 3.8752-3.8592s3.8752 1.6185 3.8752 3.8592v.3918c0 2.2399-1.2755 3.8592-3.8752 3.8592s-3.8752-1.6193-3.8752-3.8592Zm5.3962-.5557c0-1.03-.4255-1.8473-1.521-1.8473s-1.5202.8173-1.5202 1.8473v.7196c0 1.03.4247 1.8473 1.5202 1.8473s1.521-.8173 1.521-1.8473ZM57.5665 7.8457l2.3215-3.7113h2.5014l-2.4358 3.8424 2.5341 3.94h-2.5014l-2.4198-3.812v3.812h-2.355V.2265l2.355-.2135Z" fill="#1877f2"/></g></svg>
|
|
{{elseif $event->online_type === "google"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 272 92"><path fill="#EA4335" d="M115.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18C71.25 34.32 81.24 25 93.5 25s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44S80.99 39.2 80.99 47.18c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#FBBC05" d="M163.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18c0-12.85 9.99-22.18 22.25-22.18s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44s-12.51 5.46-12.51 13.44c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#4285F4" d="M209.75 26.34v39.82c0 16.38-9.66 23.07-21.08 23.07-10.75 0-17.22-7.19-19.66-13.07l8.48-3.53c1.51 3.61 5.21 7.87 11.17 7.87 7.31 0 11.84-4.51 11.84-13v-3.19h-.34c-2.18 2.69-6.38 5.04-11.68 5.04-11.09 0-21.25-9.66-21.25-22.09 0-12.52 10.16-22.26 21.25-22.26 5.29 0 9.49 2.35 11.68 4.96h.34v-3.61h9.25zm-8.56 20.92c0-7.81-5.21-13.52-11.84-13.52-6.72 0-12.35 5.71-12.35 13.52 0 7.73 5.63 13.36 12.35 13.36 6.63 0 11.84-5.63 11.84-13.36z"/><path fill="#34A853" d="M225 3v65h-9.5V3h9.5z"/><path fill="#EA4335" d="m262.02 54.48 7.56 5.04c-2.44 3.61-8.32 9.83-18.48 9.83-12.6 0-22.01-9.74-22.01-22.18 0-13.19 9.49-22.18 20.92-22.18 11.51 0 17.14 9.16 18.98 14.11l1.01 2.52-29.65 12.28c2.27 4.45 5.8 6.72 10.75 6.72 4.96 0 8.4-2.44 10.92-6.14zm-23.27-7.98 19.82-8.23c-1.09-2.77-4.37-4.7-8.23-4.7-4.95 0-11.84 4.37-11.59 12.93z"/><path fill="#4285F4" d="M35.29 41.41V32H67c.31 1.64.47 3.58.47 5.68 0 7.06-1.93 15.79-8.15 22.01-6.05 6.3-13.78 9.66-24.02 9.66C16.32 69.35.36 53.89.36 34.91.36 15.93 16.32.47 35.3.47c10.5 0 17.98 4.12 23.6 9.49l-6.64 6.64c-4.03-3.78-9.49-6.72-16.97-6.72-13.86 0-24.7 11.17-24.7 25.03 0 13.86 10.84 25.03 24.7 25.03 8.99 0 14.11-3.61 17.39-6.89 2.66-2.66 4.41-6.46 5.1-11.65l-22.49.01z"/></svg>
|
|
{{elseif $event->online_type === "webex"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 195.4 77.5"><defs><style>.svg__webex-logo{fill:#010101}</style></defs><path class="svg__webex-logo" d="M47.5 13.9H55L44.1 46.7h-8.6L27.4 22l-8.1 24.8h-8.4L0 13.9h7.6l7.8 25 8-25h8.1L39.7 39l7.8-25.1ZM87 33H62.8c.2 1.7.9 3.3 1.8 4.7.9 1.2 2.1 2.2 3.4 2.8 1.4.6 2.9.9 4.4.9 1.7 0 3.4-.3 5-.9 1.6-.6 3.2-1.5 4.5-2.6l3.6 5.1c-1.8 1.6-3.9 2.8-6.2 3.5-2.4.7-4.8 1.1-7.3 1.1-3 .1-6-.7-8.7-2.1-2.5-1.4-4.6-3.5-5.9-6.1-1.4-2.6-2.1-5.6-2.1-9.1-.1-3.1.7-6.2 2.1-9 1.3-2.5 3.3-4.6 5.8-6.1 2.6-1.5 5.5-2.2 8.5-2.2 2.8-.1 5.6.7 8.1 2.2 2.4 1.5 4.3 3.6 5.5 6.1 1.4 2.8 2 5.9 2 9-.2.7-.2 1.6-.3 2.7Zm-7.2-5.5c-.4-2.6-1.3-4.5-2.8-6-1.4-1.4-3.3-2.1-5.5-2.1-2.4 0-4.4.7-5.9 2.2s-2.4 3.4-2.8 5.9h17ZM117.6 15.3c2.5 1.5 4.5 3.6 5.9 6.2 1.5 2.7 2.2 5.8 2.2 8.9s-.7 6.2-2.2 8.9c-1.4 2.6-3.4 4.7-5.9 6.2s-5.4 2.3-8.3 2.2c-2 0-4.1-.4-5.9-1.2-1.7-.8-3.2-2-4.4-3.5v3.9h-7.2V0H99v17.9c1.2-1.5 2.7-2.7 4.4-3.5 1.9-.9 3.9-1.3 5.9-1.2 2.9-.1 5.8.6 8.3 2.1Zm-3.9 24.2c1.5-.9 2.7-2.2 3.5-3.8.8-1.7 1.2-3.5 1.2-5.3s-.4-3.7-1.2-5.3c-.8-1.6-2-2.9-3.5-3.8-1.6-1-3.4-1.4-5.2-1.4s-3.6.4-5.2 1.4c-1.5.9-2.7 2.2-3.5 3.8-.8 1.7-1.3 3.5-1.2 5.4 0 1.9.4 3.7 1.2 5.4.8 1.6 2 2.9 3.5 3.8 1.6.9 3.3 1.4 5.2 1.4 1.8-.2 3.6-.7 5.2-1.6ZM161.2 33H137c.2 1.7.9 3.3 1.8 4.7.9 1.2 2.1 2.2 3.4 2.8 1.4.6 2.9.9 4.4.9 1.7 0 3.4-.3 5-.9 1.6-.6 3.2-1.5 4.5-2.6l3.6 5.1c-1.8 1.6-3.9 2.8-6.2 3.5-2.4.7-4.8 1.1-7.3 1.1-3 .1-6-.7-8.7-2.1-2.5-1.4-4.6-3.5-5.9-6.1-1.4-2.6-2.1-5.6-2.1-9.1-.1-3.1.7-6.2 2.1-9 1.3-2.5 3.3-4.6 5.8-6.1 2.6-1.5 5.5-2.2 8.5-2.2 2.8-.1 5.6.7 8.1 2.2 2.4 1.5 4.3 3.6 5.5 6.1 1.4 2.8 2 5.9 2 9-.1.7-.2 1.6-.3 2.7Zm-7.2-5.5c-.4-2.6-1.3-4.5-2.8-6-1.4-1.4-3.3-2.1-5.6-2.1s-4.4.7-5.9 2.2c-1.5 1.4-2.4 3.4-2.8 5.9H154ZM195.4 46.8h-8.8l-8.3-11.4-8.2 11.4h-8.4L174.1 30l-12.3-16.1h8.8l8 11 8-11h8.5l-12.1 16 12.4 16.9ZM109.1 73.9h-1.5V60.7h1.8v5c.4-.5.8-.9 1.4-1.2s1.2-.4 1.8-.4 1.2.1 1.8.3c.6.3 1 .6 1.4 1.1.7.9 1 2.1 1 3.5 0 1.7-.5 3-1.4 4-.4.4-.9.7-1.4.9-.5.2-1.1.3-1.6.3-.6 0-1.2-.1-1.8-.4-.5-.3-1-.7-1.4-1.2l-.1 1.3ZM115 69c0-1.2-.3-2.1-.9-2.7-.2-.2-.5-.4-.9-.6-.3-.1-.7-.2-1-.2-.4 0-.8.1-1.2.2-.4.2-.7.4-.9.7-.5.7-.8 1.6-.7 2.5 0 1.2.3 2.2.9 2.8.2.3.6.5.9.6.3.1.7.2 1.1.2s.8-.1 1.2-.2c.4-.2.7-.4.9-.8.4-.4.6-1.3.6-2.5ZM126.3 64.4l-3.3 9.7c-.4 1.3-.9 2.2-1.3 2.6-.2.3-.5.5-.8.6s-.7.2-1 .2c-.4 0-.8-.1-1.1-.2v-1.4c.3.1.6.1.9.1.2 0 .3 0 .5-.1s.3-.2.4-.3c.3-.5.6-1.1.8-1.7h-.6l-3.5-9.6h1.9l2.7 8.1 2.7-8.1 1.7.1ZM150.5 60.7h-3.3V74h3.3V60.7ZM177.5 64.5c-.9-.5-1.8-.7-2.8-.7-2.2 0-3.7 1.5-3.7 3.5s1.4 3.5 3.7 3.5c1 0 1.9-.2 2.8-.7v3.6c-1 .3-2 .5-3 .5-3.8 0-7.1-2.6-7.1-6.9 0-4 3-6.9 7.1-6.9 1 0 2.1.2 3 .5v3.6ZM142.6 64.5c-.9-.5-1.8-.7-2.8-.7-2.2 0-3.7 1.5-3.7 3.5s1.4 3.5 3.7 3.5c1 0 1.9-.2 2.8-.7v3.6c-1 .3-2 .5-3.1.5-3.8 0-7.1-2.6-7.1-6.9 0-4 3-6.9 7.1-6.9 1 0 2.1.2 3.1.5v3.6ZM188 63.9c-.5 0-.9.1-1.3.3-.4.2-.8.4-1.1.8-.3.3-.6.7-.7 1.1-.2.4-.3.9-.2 1.3 0 .5.1.9.2 1.3.2.4.4.8.7 1.1.3.3.7.6 1.1.8.4.2.9.3 1.3.3.5 0 .9-.1 1.3-.3.4-.2.8-.4 1.1-.8.3-.3.6-.7.7-1.1.2-.4.3-.9.2-1.3 0-.5-.1-.9-.2-1.3-.2-.4-.4-.8-.7-1.1-.3-.3-.7-.6-1.1-.8-.4-.3-.8-.3-1.3-.3Zm7 3.4c0 3.8-2.9 6.9-7 6.9s-7-3.1-7-6.9 2.9-6.9 7-6.9c4.1.1 7 3.2 7 6.9ZM163.2 63.7c-.9-.2-1.7-.4-2.6-.4-1.3 0-2.1.4-2.1 1.1 0 .8 1 1.1 1.5 1.3l.9.3c2.2.7 3.2 2.2 3.2 3.8 0 3.3-2.9 4.4-5.5 4.4-1.2 0-2.4-.1-3.6-.4v-3.1c1 .3 2.1.5 3.2.5 1.7 0 2.4-.5 2.4-1.2s-.7-1.1-1.5-1.3l-.7-.2c-1.8-.6-3.4-1.7-3.4-3.9 0-2.5 1.8-4.1 4.9-4.1 1.1 0 2.2.2 3.3.4v2.8Z"/></svg>
|
|
{{elseif $event->online_type === "slack"}}
|
|
<svg viewBox="0 0 498 127" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="m159.5 99.5 6.2-14.4c6.7 5 15.6 7.6 24.4 7.6 6.5 0 10.6-2.5 10.6-6.3-.1-10.6-38.9-2.3-39.2-28.9-.1-13.5 11.9-23.9 28.9-23.9 10.1 0 20.2 2.5 27.4 8.2L212 56.5c-6.6-4.2-14.8-7.2-22.6-7.2-5.3 0-8.8 2.5-8.8 5.7.1 10.4 39.2 4.7 39.6 30.1 0 13.8-11.7 23.5-28.5 23.5-12.3 0-23.6-2.9-32.2-9.1m237.9-19.6c-3.1 5.4-8.9 9.1-15.6 9.1-9.9 0-17.9-8-17.9-17.9 0-9.9 8-17.9 17.9-17.9 6.7 0 12.5 3.7 15.6 9.1l17.1-9.5c-6.4-11.4-18.7-19.2-32.7-19.2-20.7 0-37.5 16.8-37.5 37.5s16.8 37.5 37.5 37.5c14.1 0 26.3-7.7 32.7-19.2l-17.1-9.5zM228.8 2.5h21.4v104.7h-21.4zm194.1 0v104.7h21.4V75.8l25.4 31.4h27.4l-32.3-37.3 29.9-34.8h-26.2L444.3 64V2.5zM313.8 80.1c-3.1 5.1-9.5 8.9-16.7 8.9-9.9 0-17.9-8-17.9-17.9 0-9.9 8-17.9 17.9-17.9 7.2 0 13.6 4 16.7 9.2v17.7zm0-45v8.5c-3.5-5.9-12.2-10-21.3-10-18.8 0-33.6 16.6-33.6 37.4 0 20.8 14.8 37.6 33.6 37.6 9.1 0 17.8-4.1 21.3-10v8.5h21.4v-72h-21.4z" fill="#000"/><path d="M27.2 80c0 7.3-5.9 13.2-13.2 13.2C6.7 93.2.8 87.3.8 80c0-7.3 5.9-13.2 13.2-13.2h13.2V80zm6.6 0c0-7.3 5.9-13.2 13.2-13.2 7.3 0 13.2 5.9 13.2 13.2v33c0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V80z" fill="#E01E5A"/><path d="M47 27c-7.3 0-13.2-5.9-13.2-13.2C33.8 6.5 39.7.6 47 .6c7.3 0 13.2 5.9 13.2 13.2V27H47zm0 6.7c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H13.9C6.6 60.1.7 54.2.7 46.9c0-7.3 5.9-13.2 13.2-13.2H47z" fill="#36C5F0"/><path d="M99.9 46.9c0-7.3 5.9-13.2 13.2-13.2 7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H99.9V46.9zm-6.6 0c0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V13.8C66.9 6.5 72.8.6 80.1.6c7.3 0 13.2 5.9 13.2 13.2v33.1z" fill="#2EB67D"/><path d="M80.1 99.8c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V99.8h13.2zm0-6.6c-7.3 0-13.2-5.9-13.2-13.2 0-7.3 5.9-13.2 13.2-13.2h33.1c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H80.1z" fill="#ECB22E"/></g></svg>
|
|
{{elseif $event->online_type === "discord"}}
|
|
<svg id="svg__discord-a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 292 56.47"><defs><clipPath id="svg__discord-b"><path class="svg__discord-d" d="M0 0h292v56.47H0z"/></clipPath><clipPath id="svg__discord-c"><path class="svg__discord-d" d="M0 0h292v56.47H0z"/></clipPath><style>.svg__discord-d{fill:none}.svg__discord-e{fill:#5865f2}</style></defs><g clip-path="url(#svg__discord-b)"><g clip-path="url(#svg__discord-c)"><path class="svg__discord-e" d="M61.8 4.73C57.08 2.52 52.03.91 46.75 0c-.65 1.17-1.41 2.75-1.93 4-5.61-.84-11.17-.84-16.68 0-.52-1.25-1.3-2.83-1.95-4-5.28.91-10.34 2.53-15.06 4.74C1.6 19.13-.98 33.17.31 47.01c6.32 4.72 12.44 7.58 18.46 9.46 1.49-2.05 2.81-4.22 3.95-6.51-2.17-.83-4.26-1.85-6.23-3.03.52-.39 1.03-.79 1.53-1.21 12 5.61 25.05 5.61 36.91 0 .5.42 1.01.82 1.53 1.21-1.97 1.19-4.06 2.21-6.24 3.04 1.14 2.29 2.46 4.47 3.95 6.51 6.02-1.88 12.15-4.74 18.47-9.46 1.51-16.04-2.59-29.95-10.84-42.28ZM24.36 38.5c-3.6 0-6.56-3.36-6.56-7.46s2.89-7.47 6.56-7.47 6.62 3.36 6.56 7.47c0 4.1-2.89 7.46-6.56 7.46Zm24.24 0c-3.6 0-6.56-3.36-6.56-7.46s2.89-7.47 6.56-7.47 6.62 3.36 6.56 7.47c0 4.1-2.89 7.46-6.56 7.46ZM98.03 14.41h15.66c3.78 0 6.97.6 9.58 1.81 2.61 1.2 4.57 2.88 5.86 5.02 1.3 2.14 1.95 4.6 1.95 7.37s-.68 5.16-2.03 7.36c-1.35 2.2-3.41 3.94-6.19 5.23-2.77 1.28-6.2 1.93-10.31 1.93H98.01V14.41Zm14.38 21.41c2.54 0 4.5-.65 5.86-1.95 1.37-1.3 2.05-3.07 2.05-5.32 0-2.08-.61-3.74-1.82-4.98-1.22-1.24-3.06-1.87-5.52-1.87h-4.9v14.11h4.33ZM154.54 43.08c-2.17-.57-4.13-1.41-5.86-2.5v-6.81c1.31 1.04 3.07 1.89 5.28 2.57 2.21.67 4.34 1 6.41 1 .96 0 1.69-.13 2.19-.39.49-.26.74-.57.74-.93 0-.41-.13-.75-.4-1.03s-.79-.5-1.57-.7l-4.82-1.11c-2.76-.66-4.72-1.56-5.88-2.73-1.17-1.16-1.75-2.68-1.75-4.57 0-1.59.51-2.97 1.53-4.14 1.01-1.18 2.46-2.09 4.34-2.73 1.88-.64 4.07-.97 6.59-.97 2.25 0 4.31.25 6.19.74 1.88.49 3.43 1.12 4.66 1.89v6.44c-1.26-.77-2.71-1.37-4.36-1.83-1.65-.45-3.34-.67-5.08-.67-2.52 0-3.77.44-3.77 1.31 0 .41.2.72.59.92.39.21 1.11.42 2.15.64l4.02.74c2.62.46 4.58 1.28 5.86 2.44 1.29 1.16 1.93 2.88 1.93 5.15 0 2.49-1.06 4.47-3.19 5.93s-5.15 2.2-9.06 2.2c-2.3 0-4.54-.29-6.71-.87ZM182.98 42.22c-2.3-1.15-4.04-2.71-5.2-4.68s-1.74-4.18-1.74-6.65.6-4.66 1.81-6.6 2.97-3.46 5.3-4.57c2.33-1.11 5.11-1.66 8.35-1.66 4.02 0 7.35.86 10 2.58v7.51c-.93-.66-2.03-1.19-3.27-1.6-1.25-.41-2.58-.62-4-.62-2.49 0-4.43.46-5.84 1.39-1.41.93-2.11 2.14-2.11 3.65s.68 2.68 2.05 3.63c1.37.94 3.35 1.42 5.94 1.42 1.34 0 2.66-.2 3.96-.59 1.3-.4 2.42-.88 3.35-1.46v7.26c-2.94 1.81-6.36 2.71-10.24 2.71-3.27-.01-6.06-.59-8.36-1.73ZM211.52 42.22c-2.32-1.15-4.09-2.72-5.3-4.72-1.22-2-1.83-4.23-1.83-6.69s.61-4.66 1.83-6.59c1.22-1.93 2.98-3.44 5.29-4.54 2.3-1.1 5.05-1.64 8.23-1.64s5.93.55 8.23 1.64 4.06 2.6 5.26 4.51c1.21 1.92 1.81 4.11 1.81 6.6s-.6 4.69-1.81 6.69-2.97 3.57-5.28 4.72c-2.32 1.15-5.06 1.72-8.22 1.72s-5.9-.57-8.21-1.72Zm12.2-7.28c.98-1 1.47-2.31 1.47-3.96s-.49-2.95-1.47-3.91c-.98-.97-2.31-1.46-3.99-1.46s-3.06.49-4.04 1.46c-.97.97-1.46 2.27-1.46 3.91s.49 2.96 1.46 3.96c.98 1 2.32 1.5 4.04 1.5 1.69 0 3.02-.5 3.99-1.5ZM259.17 19.57v8.86c-1.02-.69-2.34-1.03-3.98-1.03-2.14 0-3.79.66-4.94 1.99-1.15 1.32-1.73 3.39-1.73 6.18v7.55h-9.84v-24h9.64v7.63c.53-2.79 1.4-4.85 2.59-6.18 1.19-1.32 2.72-1.99 4.6-1.99 1.42 0 2.63.33 3.66.98ZM291.86 13.59v29.54h-9.84v-5.37c-.83 2.02-2.09 3.56-3.79 4.62-1.7 1.05-3.8 1.58-6.29 1.58-2.23 0-4.16-.55-5.82-1.66-1.66-1.11-2.94-2.63-3.84-4.55-.89-1.93-1.35-4.11-1.35-6.55-.03-2.51.45-4.77 1.43-6.77s2.36-3.56 4.14-4.68c1.78-1.12 3.81-1.68 6.09-1.68 4.69 0 7.83 2.08 9.44 6.24V13.59h9.84Zm-11.31 21.19c1-1 1.5-2.29 1.5-3.87s-.49-2.78-1.46-3.73c-.98-.96-2.31-1.44-3.99-1.44s-2.98.49-3.98 1.46c-.99.97-1.49 2.23-1.49 3.79s.49 2.83 1.49 3.82 2.3 1.48 3.94 1.48c1.66 0 2.99-.5 3.99-1.5ZM139.38 21.68c2.71 0 4.91-2.02 4.91-4.5s-2.2-4.5-4.91-4.5-4.91 2.01-4.91 4.5 2.2 4.5 4.91 4.5ZM134.47 24.78c3.01 1.32 6.74 1.38 9.81 0v18.47h-9.81V24.78Z"/></g></g></svg>
|
|
{{elseif $event->online_type === "teams"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2228.833 2073.333"><path fill="#5059C9" d="M1554.637 777.5h575.713c54.391 0 98.483 44.092 98.483 98.483v524.398c0 199.901-162.051 361.952-361.952 361.952h-1.711c-199.901.028-361.975-162-362.004-361.901V828.971c.001-28.427 23.045-51.471 51.471-51.471z"/><circle fill="#5059C9" cx="1943.75" cy="440.583" r="233.25"/><circle fill="#7B83EB" cx="1218.083" cy="336.917" r="336.917"/><path fill="#7B83EB" d="M1667.323 777.5H717.01c-53.743 1.33-96.257 45.931-95.01 99.676v598.105c-7.505 322.519 247.657 590.16 570.167 598.053 322.51-7.893 577.671-275.534 570.167-598.053V877.176c1.245-53.745-41.268-98.346-95.011-99.676z"/><path opacity=".1" d="M1244 777.5v838.145c-.258 38.435-23.549 72.964-59.09 87.598a91.8564 91.8564 0 0 1-35.765 7.257H667.613c-6.738-17.105-12.958-34.21-18.142-51.833a631.2871 631.2871 0 0 1-27.472-183.49V877.02c-1.246-53.659 41.198-98.19 94.855-99.52H1244z"/><path opacity=".2" d="M1192.167 777.5v889.978a91.8383 91.8383 0 0 1-7.257 35.765c-14.634 35.541-49.163 58.833-87.598 59.09H691.975c-8.812-17.105-17.105-34.21-24.362-51.833-7.257-17.623-12.958-34.21-18.142-51.833a631.282 631.282 0 0 1-27.472-183.49V877.02c-1.246-53.659 41.198-98.19 94.855-99.52h475.313z"/><path opacity=".2" d="M1192.167 777.5v786.312c-.395 52.223-42.632 94.46-94.855 94.855h-447.84A631.282 631.282 0 0 1 622 1475.177V877.02c-1.246-53.659 41.198-98.19 94.855-99.52h475.312z"/><path opacity=".2" d="M1140.333 777.5v786.312c-.395 52.223-42.632 94.46-94.855 94.855H649.472A631.282 631.282 0 0 1 622 1475.177V877.02c-1.246-53.659 41.198-98.19 94.855-99.52h423.478z"/><path opacity=".1" d="M1244 509.522v163.275c-8.812.518-17.105 1.037-25.917 1.037-8.812 0-17.105-.518-25.917-1.037a284.4725 284.4725 0 0 1-51.833-8.293c-104.963-24.857-191.679-98.469-233.25-198.003a288.0208 288.0208 0 0 1-16.587-51.833h258.648c52.305.198 94.657 42.549 94.856 94.854z"/><path opacity=".2" d="M1192.167 561.355v111.442a284.4725 284.4725 0 0 1-51.833-8.293c-104.963-24.857-191.679-98.469-233.25-198.003h190.228c52.304.198 94.656 42.55 94.855 94.854z"/><path opacity=".2" d="M1192.167 561.355v111.442a284.4725 284.4725 0 0 1-51.833-8.293c-104.963-24.857-191.679-98.469-233.25-198.003h190.228c52.304.198 94.656 42.55 94.855 94.854z"/><path opacity=".2" d="M1140.333 561.355v103.148c-104.963-24.857-191.679-98.469-233.25-198.003h138.395c52.305.199 94.656 42.551 94.855 94.855z"/><linearGradient id="svg__teams-a" gradientUnits="userSpaceOnUse" x1="198.099" y1="1683.0726" x2="942.2344" y2="394.2607" gradientTransform="matrix(1 0 0 -1 0 2075.3333)"><stop offset="0" stop-color="#5a62c3"/><stop offset=".5" stop-color="#4d55bd"/><stop offset="1" stop-color="#3940ab"/></linearGradient><path fill="url(#svg__teams-a)" d="M95.01 466.5h950.312c52.473 0 95.01 42.538 95.01 95.01v950.312c0 52.473-42.538 95.01-95.01 95.01H95.01c-52.473 0-95.01-42.538-95.01-95.01V561.51c0-52.472 42.538-95.01 95.01-95.01z"/><path fill="#FFF" d="M820.211 828.193h-189.97v517.297h-121.03V828.193H320.123V727.844h500.088v100.349z"/></svg>
|
|
{{elseif $event->online_type === "tiktok"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 291.379" xml:space="preserve"><path fill="#FF004F" d="M191.102 105.182c18.814 13.442 41.862 21.351 66.755 21.351V78.656c-4.711.001-9.41-.49-14.019-1.466v37.686c-24.891 0-47.936-7.909-66.755-21.35v97.703c0 48.876-39.642 88.495-88.54 88.495-18.245 0-35.203-5.513-49.29-14.968 16.078 16.431 38.5 26.624 63.306 26.624 48.901 0 88.545-39.619 88.545-88.497v-97.701h-.002zm17.294-48.302c-9.615-10.499-15.928-24.067-17.294-39.067v-6.158h-13.285c3.344 19.065 14.75 35.353 30.579 45.225zM70.181 227.25a40.2992 40.2992 0 0 1-8.262-24.507c0-22.354 18.132-40.479 40.502-40.479 4.169-.001 8.313.637 12.286 1.897v-48.947a89.3489 89.3489 0 0 0-14.013-.807v38.098a40.561 40.561 0 0 0-12.292-1.896c-22.37 0-40.501 18.123-40.501 40.48 0 15.808 9.063 29.494 22.28 36.161z"/><path d="M177.083 93.525c18.819 13.441 41.864 21.35 66.755 21.35V77.189c-13.894-2.958-26.194-10.215-35.442-20.309-15.83-9.873-27.235-26.161-30.579-45.225h-34.896v191.226c-.079 22.293-18.18 40.344-40.502 40.344-13.154 0-24.84-6.267-32.241-15.975-13.216-6.667-22.279-20.354-22.279-36.16 0-22.355 18.131-40.48 40.501-40.48 4.286 0 8.417.667 12.292 1.896v-38.098c-48.039.992-86.674 40.224-86.674 88.474 0 24.086 9.621 45.921 25.236 61.875 14.087 9.454 31.045 14.968 49.29 14.968 48.899 0 88.54-39.621 88.54-88.496V93.525h-.001z"/><path fill="#00F2EA" d="M243.838 77.189v-10.19a66.768 66.768 0 0 1-35.442-10.12 66.9532 66.9532 0 0 0 35.442 20.31zm-66.021-65.534a68.2815 68.2815 0 0 1-.734-5.497V0h-48.182v191.228c-.077 22.29-18.177 40.341-40.501 40.341-6.554 0-12.742-1.555-18.222-4.318 7.401 9.707 19.087 15.973 32.241 15.973 22.32 0 40.424-18.049 40.502-40.342V11.655h34.896zm-77.123 102.753V103.56c-4.026-.55-8.085-.826-12.149-.824C39.642 102.735 0 142.356 0 191.228c0 30.64 15.58 57.643 39.255 73.527-15.615-15.953-25.236-37.789-25.236-61.874 0-48.249 38.634-87.481 86.675-88.473z"/><path fill="#FF004F" d="M802.126 239.659c34.989 0 63.354-28.136 63.354-62.84 0-34.703-28.365-62.844-63.354-62.844h-9.545c34.99 0 63.355 28.14 63.355 62.844s-28.365 62.84-63.355 62.84h9.545z"/><path fill="#00F2EA" d="M791.716 113.975h-9.544c-34.988 0-63.358 28.14-63.358 62.844s28.37 62.84 63.358 62.84h9.544c-34.993 0-63.358-28.136-63.358-62.84-.001-34.703 28.365-62.844 63.358-62.844z"/><path d="M310.062 85.572v31.853h37.311v121.374h37.326V118.285h30.372l10.414-32.712H310.062zm305.482 0v31.853h37.311v121.374h37.326V118.285h30.371l10.413-32.712H615.544zm-183.11 18.076c0-9.981 8.146-18.076 18.21-18.076 10.073 0 18.228 8.095 18.228 18.076 0 9.982-8.15 18.077-18.228 18.077-10.064-.005-18.21-8.095-18.21-18.077zm0 30.993h36.438v104.158h-36.438V134.641zm52.062-49.069v153.226h36.452v-39.594l11.283-10.339 35.577 50.793h39.05l-51.207-74.03 45.997-44.768H557.39l-36.442 36.153V85.572h-36.452zm393.127 0v153.226h36.457v-39.594l11.278-10.339 35.587 50.793H1000l-51.207-74.03 45.995-44.768h-44.256l-36.452 36.153V85.572h-36.457zM792.578 239.659c34.988 0 63.358-28.136 63.358-62.84 0-34.703-28.37-62.844-63.358-62.844h-.865c-34.99 0-63.355 28.14-63.355 62.844s28.365 62.84 63.355 62.84h.865zm-31.242-62.84c0-16.881 13.8-30.555 30.817-30.555 17.005 0 30.804 13.674 30.804 30.555s-13.799 30.563-30.804 30.563c-17.017-.003-30.817-13.682-30.817-30.563z"/></svg>
|
|
{{elseif $event->online_type === "twitch"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 454.9307 150.776"><path d="M444.54 51.9893 426.3453 33.796h-33.8v-23.4H363.944v106.5867h28.6013v-54.596h23.3934v54.596H444.54V51.9893ZM353.552 33.796h-44.1947l-18.1986 18.1933v46.792l18.1986 18.2014h44.1947V88.3893h-33.8V62.3867h33.8V33.796zm-72.792 0h-23.3933v-23.4h-28.6014v88.3853l18.1987 18.2014h33.796V88.3893h-23.3933V62.3867H280.76V33.796zm-62.3933-23.4h-28.5934v13.0027h28.5934V10.396zm0 23.4h-28.5934v83.1853h28.5934V33.796zm-38.992 0h-28.596v54.5933h-10.396V33.796h-28.5974v54.5933h-10.3946V33.796H72.7893v83.1867H161.18l18.1947-18.2014V33.796zm-116.984 0H38.996v-23.4H10.4v88.3853l18.1973 18.2014h33.7934V88.3893H38.996V62.3867h23.3947V33.796zm392.54 12.9933v77.988l-38.992 25.9987H389.944v-13.0027l-18.1973 13.0027h-23.3934v-13.0027l-12.9946 13.0027h-41.596L280.76 137.7733l-2.6027 13.0027H241.768l-14.8813-13.0027-.8334 13.0027h-41.2466l-1.4587-13.0027-11.1653 13.0027h-63l-13-5.2v5.2h-33.792l-38.996-23.4027L0 103.988V0h49.396l23.3933 23.3987h106.5854V0h88.3866v23.3987h23.3974v12.9946l13.0026-12.9946h25.9907L353.552 0h49.392v23.3987h28.5973l23.3894 23.3906Z" fill="#6441a5" fill-rule="evenodd"/></svg>
|
|
{{elseif $event->online_type === "vimeo"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 70 20" fill="#1ab7ea"><path d="M15.72 9.431c-.069 1.514-1.127 3.588-3.172 6.22-2.114 2.749-3.903 4.124-5.367 4.124-.906 0-1.673-.837-2.3-2.512-.418-1.535-.837-3.069-1.255-4.604-.465-1.674-.964-2.512-1.498-2.512-.116 0-.524.245-1.221.733l-.731-.943C.943 9.263 1.7 8.588 2.445 7.912c1.024-.884 1.792-1.35 2.305-1.397 1.21-.116 1.955.712 2.235 2.483.302 1.912.511 3.101.628 3.566.349 1.586.733 2.378 1.152 2.378.326 0 .815-.515 1.467-1.543.651-1.029 1-1.812 1.047-2.349.093-.888-.256-1.333-1.047-1.333-.373 0-.757.085-1.151.255.764-2.504 2.224-3.721 4.38-3.652 1.598.047 2.351 1.084 2.259 3.111"/><path d="M22.281 1.918c-.023.58-.314 1.136-.874 1.669-.628.602-1.373.903-2.234.903-1.327 0-1.968-.579-1.921-1.737.022-.602.378-1.182 1.064-1.738.687-.555 1.449-.834 2.288-.834.489 0 .896.192 1.223.574.325.382.477.77.454 1.163zm3.038 12.419c-.652 1.232-1.548 2.349-2.689 3.349-1.56 1.349-3.119 2.024-4.679 2.024-.723 0-1.275-.233-1.659-.699-.384-.465-.565-1.069-.541-1.814.022-.767.261-1.954.715-3.56.454-1.605.682-2.466.682-2.582 0-.605-.21-.908-.629-.908-.139 0-.536.245-1.188.733l-.803-.943c.745-.674 1.49-1.349 2.235-2.025 1.001-.884 1.746-1.35 2.236-1.397.768-.069 1.332.157 1.693.679.36.523.494 1.2.402 2.035-.303 1.415-.629 3.212-.978 5.392-.024.998.337 1.496 1.082 1.496.326 0 .908-.344 1.746-1.033.699-.574 1.269-1.114 1.712-1.62l.663.873"/><path d="M47.127 14.336c-.652 1.233-1.548 2.349-2.689 3.349-1.56 1.349-3.12 2.024-4.679 2.024-1.514 0-2.247-.837-2.2-2.513.022-.745.168-1.639.436-2.686.267-1.048.413-1.862.436-2.444.024-.883-.245-1.326-.806-1.326-.607 0-1.331.722-2.172 2.165-.887 1.514-1.367 2.98-1.436 4.4-.05 1.002.05 1.77.293 2.305-1.624.047-2.762-.221-3.411-.803-.582-.512-.848-1.361-.801-2.549.02-.745.136-1.49.343-2.235.205-.745.319-1.408.342-1.991.05-.861-.268-1.292-.944-1.292-.583 0-1.213.664-1.888 1.991-.676 1.326-1.049 2.712-1.119 4.155-.05 1.305.04 2.212.25 2.724-1.598.047-2.733-.29-3.404-1.01-.558-.603-.812-1.52-.765-2.751.02-.603.129-1.445.321-2.524.192-1.08.299-1.921.321-2.525.05-.417-.06-.627-.314-.627-.14 0-.536.236-1.188.707l-.838-.943c.117-.092.849-.768 2.2-2.025.978-.907 1.641-1.373 1.99-1.396.606-.047 1.094.203 1.467.75.372.547.559 1.182.559 1.903 0 .233-.02.454-.07.664.349-.535.756-1.002 1.222-1.398 1.071-.93 2.27-1.455 3.597-1.571 1.141-.093 1.955.174 2.445.803.395.512.581 1.246.558 2.2.163-.139.338-.291.525-.454.534-.628 1.058-1.128 1.57-1.501.861-.629 1.759-.978 2.689-1.048 1.118-.093 1.921.173 2.41.8.418.51.605 1.241.559 2.191-.024.65-.181 1.595-.472 2.836-.292 1.241-.436 1.953-.436 2.139-.024.488.023.824.139 1.009.117.186.395.278.838.278.326 0 .907-.344 1.746-1.034.698-.573 1.269-1.113 1.712-1.619l.664.872"/><path d="M52.295 10.654c.022-.625-.233-.938-.767-.938-.698 0-1.407.481-2.127 1.442-.721.961-1.093 1.882-1.116 2.762-.013 0-.013.151 0 .452 1.139-.417 2.127-1.053 2.964-1.911.674-.741 1.022-1.344 1.046-1.807zm7.927 3.646c-.675 1.117-2.002 2.232-3.981 3.348-2.467 1.418-4.971 2.126-7.508 2.126-1.885 0-3.237-.628-4.051-1.885-.582-.861-.861-1.885-.838-3.072.023-1.885.862-3.677 2.515-5.377 1.815-1.862 3.957-2.794 6.425-2.794 2.282 0 3.492.93 3.632 2.787.093 1.184-.559 2.404-1.956 3.658-1.49 1.371-3.365 2.241-5.622 2.612.418.581 1.046.871 1.885.871 1.676 0 3.504-.426 5.483-1.279 1.42-.599 2.538-1.221 3.353-1.866l.663.871"/><path d="M65.755 11.828c.023-.63-.064-1.207-.262-1.732-.198-.524-.484-.788-.855-.788-1.188 0-2.166.642-2.933 1.925-.653 1.05-1.003 2.17-1.048 3.358-.024.584.081 1.098.314 1.54.255.514.616.77 1.083.77 1.047 0 1.944-.617 2.689-1.854.628-1.027.965-2.1 1.012-3.219zm3.946.132c-.093 2.139-.884 3.987-2.374 5.544-1.49 1.557-3.342 2.336-5.553 2.336-1.839 0-3.236-.593-4.19-1.779-.698-.883-1.083-1.987-1.152-3.311-.118-2 .604-3.836 2.165-5.51 1.676-1.859 3.782-2.789 6.32-2.789 1.629 0 2.863.547 3.702 1.639.792 1 1.152 2.29 1.082 3.87"/></svg>
|
|
{{elseif $event->online_type === "spotme"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 131 35"><defs><path id="spotme-a" d="M96.11 34.27h10.4v11.1h-10.4z"/><path id="spotme-e" d="M106.51 39.82c0 3.07-2.33 5.56-5.2 5.56s-5.2-2.49-5.2-5.56c0-3.06 2.33-5.55 5.2-5.55s5.2 2.49 5.2 5.55"/><path id="spotme-b" d="M127.4 68.4h-13.83V46.21h13.84z"/><path id="spotme-g" d="M113.72 64.98c.28-.4.52-.87.8-1.27s.71-.52 1.05-.24c.18.15 2.56 2.12 4.93 2.12 2.13 0 3.49-1.3 3.49-2.86 0-1.85-1.6-3.02-4.66-4.28-3.14-1.33-5.6-2.96-5.6-6.53 0-2.4 1.84-5.7 6.74-5.7 3.09 0 5.4 1.6 5.7 1.82.25.15.5.58.19 1.04l-.77 1.17c-.25.4-.65.59-1.08.31-.22-.12-2.37-1.54-4.16-1.54-2.6 0-3.48 1.63-3.48 2.77 0 1.76 1.35 2.84 3.91 3.89 3.58 1.44 6.63 3.14 6.63 6.9 0 3.2-2.87 5.81-6.88 5.81a10 10 0 0 1-6.62-2.43c-.28-.24-.5-.46-.19-.98"/><path id="spotme-h" d="M133.72 57.47v-7.7h4.2c2.1 0 3.86 1.62 3.86 3.73a3.91 3.91 0 0 1-3.86 3.97zM130.6 67.8c0 .31.24.6.58.6h1.97a.6.6 0 0 0 .58-.6v-7.29h4.4c3.72 0 6.79-3.13 6.79-6.98a6.87 6.87 0 0 0-6.81-6.86h-6.93a.58.58 0 0 0-.58.59z"/><path id="spotme-i" d="M157.71 65.9a8.01 8.01 0 0 1-7.95-8.03c0-4.4 3.6-8.1 7.95-8.1a8.1 8.1 0 0 1 7.98 8.1c0 4.43-3.59 8.03-7.98 8.03zm0-19.23c-6.14 0-11.02 5-11.02 11.2a11.03 11.03 0 1 0 22.07 0c0-6.2-4.9-11.2-11.05-11.2z"/><path id="spotme-j" d="M174.93 49.59h-4.99a.59.59 0 0 1-.58-.6v-1.73c0-.31.24-.59.58-.59h13.16c.33 0 .58.28.58.59V49c0 .3-.25.59-.58.59h-4.99V67.8a.6.6 0 0 1-.58.58h-2.02a.6.6 0 0 1-.58-.58z"/><path id="spotme-k" d="M187.43 47.13c.06-.24.3-.46.55-.46h.48c.18 0 .45.15.51.34l6.3 15.85h.13L201.67 47c.07-.19.3-.34.52-.34h.48c.24 0 .48.22.54.46l3.72 20.84c.09.44-.12.72-.55.72h-1.96a.63.63 0 0 1-.57-.44L201.6 54.4h-.08l-5.44 14.27c-.06.18-.24.34-.51.34h-.54c-.24 0-.46-.16-.52-.34l-5.46-14.27h-.12l-2.17 13.86c-.03.22-.3.44-.55.44h-1.96c-.42 0-.63-.28-.57-.72z"/><path id="spotme-c" d="M223.93 68.69v-21.9h-13.26v21.9h13.26z"/><path id="spotme-m" d="M210.67 47.38c0-.3.24-.59.58-.59h12.1c.34 0 .58.28.58.6v1.75c0 .3-.24.59-.57.59h-9.57v6.38h8.09c.3 0 .57.28.57.6v1.75c0 .34-.27.6-.57.6h-8.1v6.72h9.58c.33 0 .57.28.57.6v1.72c0 .3-.24.59-.57.59h-12.11a.58.58 0 0 1-.58-.6z"/><path id="spotme-n" d="M106.88 50.86c.08.1.09.22 0 .31-.3.36-1.08 1.24-1.57 1.78-.14.16-.4.05-.4-.16l.1-3.27c.01-.2.25-.3.4-.16l1.47 1.5zm-8.98-1.5a.23.23 0 0 1 .39.16l.1 3.27c0 .21-.26.32-.4.16-.5-.54-1.26-1.42-1.58-1.78a.23.23 0 0 1 .01-.3c.3-.33 1.03-1.06 1.48-1.5zm7.26 7.4c-.1-.35 0-.73.27-.97l4.66-4.16a.63.63 0 0 0 .02-.92c-.89-.87-2.7-2.6-3.7-3.6a1.53 1.53 0 0 0-1.08-.44h-7.36c-.4 0-.78.16-1.07.44l-3.71 3.6a.63.63 0 0 0 .02.92l4.66 4.16c.27.24.38.62.27.97l-2.8 9.29c-.08.23-1.65 1.58-2.27 2.12a.13.13 0 0 0 .09.22h5.55c.12 0 .22-.09.24-.21.95-5.7 1.71-8.42 2.24-9.74a.5.5 0 0 1 .92 0c.53 1.32 1.29 4.03 2.24 9.74.02.12.12.21.25.21h5.55c.11 0 .17-.14.08-.22-.62-.54-2.19-1.9-2.27-2.12z"/><clipPath id="spotme-d"><use xlink:href="#spotme-a"/></clipPath><clipPath id="spotme-f"><use xlink:href="#spotme-b"/></clipPath><clipPath id="spotme-l"><use xlink:href="#spotme-c"/></clipPath></defs><g clip-path="url(#spotme-d)" transform="translate(-93 -34)"><use fill="#e85224" xlink:href="#spotme-e"/></g><g clip-path="url(#spotme-f)" transform="translate(-93 -34)"><use fill="#e85224" xlink:href="#spotme-g"/></g><use fill="#e85224" xlink:href="#spotme-h" transform="translate(-93 -34)"/><use fill="#e85224" xlink:href="#spotme-i" transform="translate(-93 -34)"/><use fill="#e85224" xlink:href="#spotme-j" transform="translate(-93 -34)"/><use fill="#e85224" xlink:href="#spotme-k" transform="translate(-93 -34)"/><g clip-path="url(#spotme-l)" transform="translate(-93 -34)"><use fill="#e85224" xlink:href="#spotme-m"/></g><use fill="#353431" xlink:href="#spotme-n" transform="translate(-93 -34)"/></svg>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
<div class="ipsData__content">
|
|
<div class='ipsData__main' data-ips-hook='metadata'>
|
|
<div class='i-color_primary i-font-weight_500 i-font-size_-2 i-text-transform_uppercase i-margin-bottom_1'>
|
|
{{if $event->_happening}}
|
|
<span class="ipsBadge" title="{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format( 'M' )} {$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format( 'd' )}{{if !$event->all_day}}{{if $sameDay}},{{else}} at{{endif}} {$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->localeTime( FALSE )}{{endif}}
|
|
{{else}}
|
|
{$event->lastOccurrence( 'startDate' )->format('M')} {$event->lastOccurrence( 'startDate' )->format('d')}
|
|
{{if !$event->all_day}}
|
|
{$event->lastOccurrence( 'startDate' )->localeTime( FALSE )}
|
|
{{endif}}
|
|
{{endif}}
|
|
{{if $event->_end_date}}
|
|
-
|
|
{{if $event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )}}
|
|
{{if !$sameDay}}
|
|
{$event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )->format('M')} {$event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )->format('d')}
|
|
{{endif}}
|
|
{{if !$event->all_day}}
|
|
{{if !$sameDay}} at{{endif}} {$event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )->localeTime( FALSE )}
|
|
{{endif}}
|
|
{{else}}
|
|
{$event->lastOccurrence( 'endDate' )->format('M')} {$event->lastOccurrence( 'endDate' )->format('d')}{{if !$event->all_day}} {$event->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
{{endif}}
|
|
{{endif}}
|
|
" data-ipsTooltip>{$event->_happening}</span>
|
|
{{else}}
|
|
<time datetime='{expression="$event->_start_date->format( 'Y-m-d' )"}'>
|
|
{{if $event->nextOccurrence( $date, 'startDate' )}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( $date, 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
|
|
{$event->nextOccurrence( $date, 'startDate' )->calendarDate()}{{if !$event->all_day}}, {{endif}}
|
|
</span>
|
|
{{if !$event->all_day}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->localeTime( FALSE )}
|
|
</span>
|
|
{{endif}}
|
|
{{else}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
|
|
{$event->lastOccurrence( 'startDate' )->calendarDate()}{{if !$event->all_day}}, {{endif}}
|
|
</span>
|
|
{{if !$event->all_day}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$event->lastOccurrence( 'startDate' )->localeTime( FALSE )}
|
|
</span>
|
|
{{endif}}
|
|
{{endif}}
|
|
</time>
|
|
{{if $event->_end_date}}
|
|
<span class="i-opacity_4"><i class="fa-solid fa-arrow-right-long" style="margin-inline:.5em;"></i></span>
|
|
<time datetime='{expression="$event->_end_date->format( 'Y-m-d' )"}'>
|
|
{{if $endDate = $event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )}}
|
|
{{if !$sameDay}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$endDate->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
|
|
{$endDate->calendarDate()}{{if !$event->all_day}}, {{endif}}
|
|
</span>
|
|
{{endif}}
|
|
{{if !$event->all_day}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$endDate->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$endDate->localeTime( FALSE )}
|
|
</span>
|
|
{{endif}}
|
|
{{else}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'endDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$event->lastOccurrence( 'endDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
</span>
|
|
{{endif}}
|
|
</time>
|
|
{{endif}}
|
|
{{endif}}
|
|
</div>
|
|
<h3 class='ipsData__title' data-ips-hook='title'><a href='{$event->url()}'>{$event->title}</a></h3>
|
|
<p class="ipsData__desc">{$event->truncated(TRUE, 400)}</p>
|
|
</div>
|
|
{{if $event->container()->club() !== NULL || $event->venue || $event->location}}
|
|
{{if $event->container()->club() !== NULL || $event->venue || $event->location}}
|
|
<ul class='ipsList ipsList--icons i-font-weight_500 i-margin-top_3' data-ips-hook='details'>
|
|
{{if $event->container()->club() !== NULL}}
|
|
<li>
|
|
<i class='fa-solid fa-users'></i> <a href='{$event->container()->club()->url()}'>{$event->container()->club()->name}</a>
|
|
</li>
|
|
{{endif}}
|
|
{{if $event->venue AND $event->venue()}}
|
|
<li>
|
|
<i class='fa-solid fa-location-dot'></i> {expression="\IPS\Member::loggedIn()->language()->get( $event->venue()->_titleLanguageKey )"}
|
|
</li>
|
|
{{elseif $event->location}}
|
|
{{$location = \IPS\GeoLocation::buildFromjson( $event->location );}}
|
|
<li>
|
|
<i class='fa-solid fa-location-dot'></i> {$location->toString()}
|
|
</li>
|
|
{{endif}}
|
|
</ul>
|
|
{{endif}}
|
|
{{endif}}
|
|
</div>
|
|
</li>]]></template>
|
|
<template template_group="events" template_name="featured" template_data="$featured" template_location="front" template_app="calendar"><![CDATA[
|
|
{{if \count( $featured )}}
|
|
<section class="ipsBox ipsBox--calendarFeatured cEvents__overview-featured">
|
|
<header class="ipsBox__header">
|
|
<h2>{lang="featured_events"}</h2>
|
|
{template="carouselNavigation" group="global" app="core" params="'carousel--events-featured'"}
|
|
</header>
|
|
<i-data>
|
|
<ul class='ipsData ipsData--wallpaper ipsData--carousel ipsData--events-featured i-basis_100p' id='carousel--events-featured' tabindex="0">
|
|
{{foreach $featured as $idx => $event}}
|
|
{template="featuredEvent" app="calendar" group="events" params="$event, $idx"}
|
|
{{endforeach}}
|
|
</ul>
|
|
</i-data>
|
|
</section>
|
|
{{endif}}]]></template>
|
|
<template template_group="events" template_name="featuredEvent" template_data="$event, $idx = 0" template_location="front" template_app="calendar"><![CDATA[
|
|
{{$image = FALSE;}}
|
|
{{$coverPhoto = $event->coverPhoto();}}
|
|
{{if $coverPhoto->file}}
|
|
{{$image = $coverPhoto->file;}}
|
|
{{elseif $event->container()->club() !== NULL && $event->container()->club()->cover_photo}}
|
|
{{$image = \IPS\File::get('core_Clubs', $event->container()->club()->cover_photo );}}
|
|
{{else}}
|
|
{{$image = $event->primaryImage();}}
|
|
{{endif}}
|
|
|
|
<li class="ipsData__item {$event->ui('css')}" {$event->ui('dataAttributes')}>
|
|
<a href="{$event->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$event->title}</span></a>
|
|
<div class="ipsData__image" aria-hidden="true" data-ips-hook='image'>
|
|
{{if $image}}
|
|
<img src='{$image->url}' alt='{$event->title}' loading="lazy">
|
|
{{else}}
|
|
<i></i>
|
|
{{endif}}
|
|
</div>
|
|
<div class="ipsData__content">
|
|
<div class='ipsData__main' data-ips-hook='main'>
|
|
<div class='ipsCalendarDate' data-ips-hook='date'>
|
|
{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
<span class='ipsCalendarDate__month'>{lang="_date_month_short" pluralize="$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format( 'n' )"}</span>
|
|
<span class='ipsCalendarDate__date'>{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format( 'd' )}</span>
|
|
{{else}}
|
|
<span class='ipsCalendarDate__month'>{lang="_date_month_short" pluralize="$event->lastOccurrence( 'startDate' )->format( 'n' )"}</span>
|
|
<span class='ipsCalendarDate__date'>{$event->lastOccurrence( 'startDate' )->format('d')}</span>
|
|
{{endif}}
|
|
</div>
|
|
{{if $event->_happening}}
|
|
<div class='ipsBadge'>{$event->_happening}</div>
|
|
{{endif}}
|
|
<h3 class='ipsData__title' data-ips-hook='title'>
|
|
<a href="{$event->url()}">{$event->title}</a>
|
|
</h3>
|
|
<p class='i-font-weight_500 i-font-size_-2 i-text-transform_uppercase' data-ips-hook='metadata'>
|
|
<time datetime='{expression="$event->_start_date->format( 'Y-m-d' )"}'>
|
|
{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
|
|
{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->calendarDate()}{{if !$event->all_day}}, {{endif}}
|
|
</span>
|
|
{{if !$event->all_day}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->localeTime( FALSE )}
|
|
</span>
|
|
{{endif}}
|
|
{{else}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
|
|
{$event->lastOccurrence( 'startDate' )->calendarDate()}{{if !$event->all_day}}, {{endif}}
|
|
</span>
|
|
{{if !$event->all_day}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$event->lastOccurrence( 'startDate' )->localeTime( FALSE )}
|
|
</span>
|
|
{{endif}}
|
|
{{endif}}
|
|
</time>
|
|
|
|
{{if $event->_end_date}}
|
|
-
|
|
<time datetime='{expression="$event->_end_date->format( 'Y-m-d' )"}'>
|
|
{{$sameDay = FALSE;}}
|
|
{{if $event->_end_date}}
|
|
{{$sameDay = !( ($event->_start_date->mday != $event->_end_date->mday) or ($event->_start_date->mon != $event->_end_date->mon) or ($event->_start_date->year != $event->_end_date->year) );}}
|
|
{{endif}}
|
|
{{if $endDate = $event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )}}
|
|
{{if !$sameDay}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$endDate->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
|
|
{$endDate->calendarDate()}{{if !$event->all_day}}, {{endif}}
|
|
</span>
|
|
{{endif}}
|
|
{{if !$event->all_day}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$endDate->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$endDate->localeTime( FALSE )}
|
|
</span>
|
|
{{endif}}
|
|
{{else}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'endDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$event->lastOccurrence( 'endDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
</span>
|
|
{{endif}}
|
|
</time>
|
|
{{endif}}
|
|
</p>
|
|
<p class='ipsData__desc'>{$event->truncated(TRUE, 400)}</p>
|
|
</div>
|
|
{{if ($event->club_associations && \count( $event->getAssociatedClubs() )) || $event->venue || $event->location}}
|
|
<ul class='ipsList ipsList--icons ipsList--inline i-margin-top_2' data-ips-hook='details'>
|
|
{{if $event->club_associations && \count( $event->getAssociatedClubs() )}}
|
|
{{$clubNames = [];}}
|
|
{{foreach $event->getAssociatedClubs() as $club}}
|
|
{{$clubNames[] = $club->name;}}
|
|
{{endforeach}}
|
|
{{shuffle( $clubNames );}}
|
|
<li>
|
|
<i class='fa-solid fa-earth-americas'></i> {expression="implode(', ', $clubNames )"}
|
|
</li>
|
|
{{elseif $event->container()->club() !== NULL}}
|
|
<li>
|
|
<i class='fa-solid fa-earth-americas'></i> {$event->container()->club()->name}
|
|
</li>
|
|
{{endif}}
|
|
{{if $event->venue || $event->location}}
|
|
{{if $event->venue}}
|
|
<li><i class='fa-solid fa-location-dot'></i> {lang="calendar_venue_{$event->venue()->id}" escape="true"}</li>
|
|
{{elseif $event->location}}
|
|
{{$location = \IPS\GeoLocation::buildFromjson( $event->location );}}
|
|
<li><i class='fa-solid fa-location-dot'></i> {$location->toString()}</li>
|
|
{{endif}}
|
|
{{endif}}
|
|
</ul>
|
|
{{endif}}
|
|
</div>
|
|
</li>]]></template>
|
|
<template template_group="events" template_name="nearMe" template_data="$nearme, $mapMarkers" template_location="front" template_app="calendar"><![CDATA[<section class='ipsBox ipsBox--calendarNearMe' data-controller='calendar.front.overview.nearMe' {{if settings.googlemaps AND !settings.mapbox}}data-nearme-use-google data-googlemaps-api-key='{setting="google_maps_api_key"}'{{endif}}>
|
|
<header class='ipsBox__header'>
|
|
<h2>{lang="events_happening_near_you"}</h2>
|
|
<label class='ipsBox__header-secondary i-flex i-gap_2 i-align-items_center i-cursor_pointer'>
|
|
<input type='checkbox' id='useCurrentLocation' class="ipsInput ipsInput--toggle">
|
|
{lang="events_search_use_location"}
|
|
</label>
|
|
</header>
|
|
<div class='ipsBox__content'>
|
|
<p class='i-padding_3 i-color_soft'>{lang="showing_events_near_you"} <a href='{url="app=calendar&do=search&form_submitted=1&lat=0&lon=0"}' data-role='nearMeLink' data-action='moreNearMe' class="i-font-weight_500 i-text-decoration_underline">{lang="see_more_events_near_you"} <i class='fa-solid fa-angle-right'></i></a></p>
|
|
<div class='ipsJS_hide' data-role='locationEvents'>
|
|
{template="nearMeContent" group="events" app="calendar" params="$nearme, $mapMarkers"}
|
|
</div>
|
|
</div>
|
|
</section>]]></template>
|
|
<template template_group="events" template_name="nearMeContent" template_data="$nearme, $mapMarkers" template_location="front" template_app="calendar"><![CDATA[
|
|
{{if \count( $nearme )}}
|
|
<i-data>
|
|
<ul class='ipsData ipsData--grid ipsData--events-list ipsEventList ipsEventList--nearMe'>
|
|
<li class="ipsData__item ipsEventsNearMe__map">
|
|
<div id='map' data-markers="{expression="json_encode( $mapMarkers )"}"></div>
|
|
</li>
|
|
{{foreach $nearme as $event}}
|
|
{template="event" group="events" app="calendar" params="$event"}
|
|
{{endforeach}}
|
|
</ul>
|
|
</i-data>
|
|
{{else}}
|
|
<p class='ipsEmptyMessage'>
|
|
{lang="events_near_you_soon"}
|
|
</p>
|
|
{{endif}}]]></template>
|
|
<template template_group="events" template_name="noEvents" template_data="" template_location="front" template_app="calendar"><![CDATA[<div class='ipsEmptyMessage'>{lang="no_events_month"}</div>]]></template>
|
|
<template template_group="events" template_name="online" template_data="$events" template_location="front" template_app="calendar"><![CDATA[{{if \count( $events )}}
|
|
<section class='ipsBox ipsBox--calendarOnlineEvents i-margin-bottom_block'>
|
|
<h2 class='ipsBox__header'>{lang="events_online_events"}</h2>
|
|
<i-data>
|
|
<ul class='ipsEventList ipsData ipsData--grid ipsData--events-list'>
|
|
{{foreach $events as $event}}
|
|
{template="event" app="calendar" group="events" params="$event, 'small'"}
|
|
{{endforeach}}
|
|
</ul>
|
|
</i-data>
|
|
</section>
|
|
{{endif}}]]></template>
|
|
<template template_group="events" template_name="searchResults" template_data="$results" template_location="front" template_app="calendar">{{if \count($results)}}
|
|
{{foreach $results as $event}}
|
|
{template="event" group="events" app="calendar" params="$event"}
|
|
{{endforeach}}
|
|
{{endif}}</template>
|
|
<template template_group="events" template_name="searchResultsWrapper" template_data="$results=array(), $mapMarkers=NULL" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsBox ipsBox--calendarSearchResults'>
|
|
<div class="ipsButtonBar ipsButtonBar--top">
|
|
<ul class='ipsDataFilters i-flex_01'>
|
|
<li>
|
|
<a href='{url="app=calendar"}' class='ipsDataFilters__button' data-action='backToOverview'><i class='fa-solid fa-angle-left'></i> {lang="events_search_back_to_overview"}</a>
|
|
</li>
|
|
</ul>
|
|
<div class='ipsButtonBar__end'>
|
|
<ul class='ipsDataFilters'>
|
|
<li>
|
|
<button id="elSortMenu" popovertarget="elSortMenu_menu" class="ipsDataFilters__button">
|
|
<strong>{lang="events_search_sort_by"}</strong> <span data-role='searchOrder'>{lang="events_search_distance"}</span> <i class='fa-solid fa-caret-down'></i>
|
|
</button>
|
|
<i-dropdown id="elSortMenu_menu" popover data-i-dropdown-selectable="radio">
|
|
<div class="iDropdown">
|
|
<ul class="iDropdown__items">
|
|
<li>
|
|
<button type="button" data-ipsMenuValue='nearest' aria-selected="true"><i class="iDropdown__input"></i>{lang="events_search_distance"}</button>
|
|
</li>
|
|
<li>
|
|
<button type="button" data-ipsMenuValue='date'><i class="iDropdown__input"></i>{lang="events_search_date"}</button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</i-dropdown>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class='cEvents__searchMap cEvents__searchMap--loading event' data-role='searchResultsMap' {{if $mapMarkers}}data-markers="{$mapMarkers}"{{endif}}></div>
|
|
<ul class='ipsEventList ipsData ipsData--grid ipsData--events-list {{if !\count( $results )}}ipsHide{{endif}}' data-role='searchResults'>
|
|
{template="searchResults" app="calendar" group="events" params="$results"}
|
|
</ul>
|
|
<div class='i-padding_2'>
|
|
<button class='ipsButton ipsButton--inherit ipsHide' data-action='loadMoreSearch'>{lang="events_search_show_more"}</button>
|
|
<p class='ipsEmptyMessage ipsHide' data-role='noMoreSearchResults'>{lang="events_search_no_events"}</p>
|
|
</div>
|
|
<p class='ipsEmptyMessage' {{if \count( $results )}}hidden{{endif}} data-role='noSearchResults'>
|
|
{lang="events_search_no_events_long"}
|
|
</p>
|
|
</div>]]></template>
|
|
<template template_group="global" template_name="commentTableHeader" template_data="$comment, $event" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='i-flex i-align-items_center i-gap_2'>
|
|
{{$date = ( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) == NULL ) ? $event->lastOccurrence() : $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' );}}
|
|
<div class='i-flex_00 i-basis_50'>
|
|
<time datetime='{$date->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$date->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$date->mday}</span>
|
|
</time>
|
|
</div>
|
|
<div class='i-flex_11'>
|
|
<h3 class='ipsTitle ipsTitle--h3'><a href='{$event->url( "getPrefComment" )}'title='{lang="view_this_event" sprintf="$event->title"}'>{$event->title}</a></h3>
|
|
<div class='i-color_soft i-link-color_inherit i-flex i-align-items_center i-flex-wrap_wrap i-gap_2'>
|
|
<a href='{$event->container()->url()}'>{$event->container()->_title}</a>
|
|
{{if $event->container()->allow_comments}}
|
|
<span><i class='fa-regular fa-comment i-color_soft i-margin-start_2'></i> {$event->comments}</span>
|
|
{{endif}}
|
|
{{if $event->container()->allow_reviews}}
|
|
{template="rating" group="global" location="front" app="core" params="'large', $event->rating, \IPS\Settings::i()->reviews_rating_out_of"}
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="global" template_name="embedEvent" template_data="$item, $url, $image=NULL" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsRichEmbed ipsRichEmbed--event'>
|
|
{template="embedHeader" group="embed" app="core" params="$item, $item->mapped('title'), $item->mapped('date'), $url"}
|
|
|
|
{{if $item->map( 500, 270 )}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead ipsRichEmbed_masthead--map'>
|
|
{$item->map( 500, 270 )|raw}
|
|
</a>
|
|
{{elseif $item->coverPhoto() && $item->coverPhoto()->file}}
|
|
{{$photo = $item->coverPhoto()->file;}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead'>
|
|
<img src='{$photo->url}' alt='{$item->mapped('title')}' loading="lazy">
|
|
</a>
|
|
{{elseif $club = $item->container()->club()}}
|
|
{{if $club->coverPhoto() and $club->coverPhoto()->file}}
|
|
{{$photo = $club->coverPhoto()->file;}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead'>
|
|
<img src='{$photo->url}' alt='{$item->mapped('title')}' loading="lazy">
|
|
</a>
|
|
{{endif}}
|
|
{{endif}}
|
|
<div class='ipsRichEmbed__content'>
|
|
<div class='ipsColumns'>
|
|
<span class='ipsColumns__secondary i-basis_50'>
|
|
<a href='{$url}'>
|
|
{{$nextOccurrence = $item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: $item->lastOccurrence( 'startDate' );}}
|
|
<time datetime='{$nextOccurrence->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$nextOccurrence->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$nextOccurrence->mday}</span>
|
|
</time>
|
|
</a>
|
|
</span>
|
|
<div class="ipsColumns__primary">
|
|
<div class="i-margin-bottom_2">
|
|
{{if $item->_end_date}}
|
|
<dl class='cCalendarEmbed_dates'>
|
|
<dt>{lang="from"}</dt>
|
|
<dd>
|
|
<time datetime='{expression="$item->_start_date->format( 'Y-m-d' )"}'>
|
|
{$item->_start_date->dayName} {$item->_start_date->mday} {$item->_start_date->monthName} {$item->_start_date->year}{{if !$item->all_day}}, {$item->_start_date->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
</dd>
|
|
<dt>{lang="until"}</dt>
|
|
<dd>
|
|
<time datetime='{expression="$item->_end_date->format( 'Y-m-d' )"}'>
|
|
{{$sameDay = !( ($item->_start_date->mday != $item->_end_date->mday) or ($item->_start_date->mon != $item->_end_date->mon) or ($item->_start_date->year != $item->_end_date->year) );}}
|
|
{{if !$sameDay}}{$item->_end_date->dayName} {$item->_end_date->mday} {$item->_end_date->monthName} {$item->_end_date->year}{{endif}}{{if !$item->all_day}}{{if !$sameDay}}, {{endif}}{$item->_end_date->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
</dd>
|
|
</dl>
|
|
{{else}}
|
|
<p>
|
|
<time datetime='{expression="$item->_start_date->format( 'Y-m-d' )"}'>
|
|
{$item->_start_date->dayName} {$item->_start_date->mday} {$item->_start_date->monthName} {$item->_start_date->year}{{if !$item->all_day}}, {$item->_start_date->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
</p>
|
|
{{endif}}
|
|
</div>
|
|
{{if $desc = $item->truncated(TRUE)}}
|
|
<div class='ipsRichEmbed__snippet'>
|
|
{$desc|raw}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
|
|
{{if $item->rsvp}}
|
|
{{$attendees = $item->attendees();}}
|
|
<div class='i-flex i-align-items_center i-justify-content_space-between i-font-size_-1 i-font-weight_500'>
|
|
{{if isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
<div class='i-color_positive'>
|
|
<i class='fa-solid fa-check-circle'></i>
|
|
{lang="you_are_going"}
|
|
</div>
|
|
{{elseif isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
<div class='i-color_negative'>
|
|
<i class='fa-solid fa-circle-xmark'></i>
|
|
{lang="you_arent_going"}
|
|
</div>
|
|
{{elseif $item->can('rsvp') && !( $item->rsvp_limit > 0 AND \count($attendees[1]) >= $item->rsvp_limit )}}
|
|
<ul class='ipsList ipsList--inline i-gap_1'>
|
|
<li>
|
|
<a href='{$item->url('rsvp')->setQueryString( 'action', 'yes' )->csrf()}' class='ipsButton ipsButton--primary'>{lang="rsvp_attend_event"}</a>
|
|
</li>
|
|
{{if $item->rsvp_limit == -1}}
|
|
<li>
|
|
<a href='{$item->url('rsvp')->setQueryString( 'action', 'maybe' )->csrf()}' class='ipsButton ipsButton--inherit'>{lang="rsvp_maybe_event"}</a>
|
|
</li>
|
|
{{endif}}
|
|
<li>
|
|
<a href='{$item->url('rsvp')->setQueryString( 'action', 'no' )->csrf()}' class='ipsButton ipsButton--inherit'>{lang="rsvp_notgoing_event"}</a>
|
|
</li>
|
|
</ul>
|
|
{{endif}}
|
|
|
|
<div class='i-margin-start_auto {{if !\count($attendees[1])}}i-color_soft{{endif}}'>
|
|
<i class='fa-solid fa-user'></i> {lang="x_users_going" pluralize="\count($attendees[1])"}
|
|
</div>
|
|
</div>
|
|
{{endif}}
|
|
|
|
{template="embedItemStats" group="embed" app="core" params="$item"}
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="global" template_name="embedEventComment" template_data="$comment, $item, $url" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsRichEmbed ipsRichEmbed--event-comment'>
|
|
{template="embedHeader" group="embed" app="core" params="$comment, $item->mapped('title'), $comment->mapped('date'), $url"}
|
|
<div class='ipsRichEmbed__content'>
|
|
<div class='ipsRichEmbed_originalItem'>
|
|
<div>
|
|
{{if $item->map( 500, 100 )}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead ipsRichEmbed_masthead--map'>
|
|
{$item->map( 500, 100 )|raw}
|
|
</a>
|
|
{{elseif $item->coverPhoto() && $item->coverPhoto()->file}}
|
|
{{$photo = $item->coverPhoto()->file;}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead ipsRichEmbed_masthead_small'>
|
|
<img src='{$photo->url}' alt='{$item->mapped('title')}' loading="lazy">
|
|
</div>
|
|
{{elseif $club = $item->container()->club()}}
|
|
{{if $club->coverPhoto() and $club->coverPhoto()->file}}
|
|
{{$photo = $club->coverPhoto()->file;}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead'>
|
|
<img src='{$photo->url}' alt='{$item->mapped('title')}' loading="lazy">
|
|
</a>
|
|
{{endif}}
|
|
{{endif}}
|
|
<div class='i-padding_3'>
|
|
<div class='ipsPhotoPanel'>
|
|
<span class='cCalendarEmbed_calendar'>
|
|
<a href='{$url}'>
|
|
{{$nextOccurrence = $item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: $item->lastOccurrence( 'startDate' );}}
|
|
<time datetime='{$nextOccurrence->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$nextOccurrence->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$nextOccurrence->mday}</span>
|
|
</time>
|
|
</a>
|
|
</span>
|
|
<div class='ipsPhotoPanel__text'>
|
|
{template="embedOriginalItem" group="embed" app="core" params="$item, FALSE, \IPS\Theme::i()->getTemplate( 'global', 'calendar' )->embedEventItemSnippet( $item )"}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class='ipsRichEmbed__snippet'>
|
|
{$comment->truncated(TRUE)|raw}
|
|
</div>
|
|
|
|
{{if settings.reputation_enabled AND \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) AND \count( $comment->reactions() )}}
|
|
<ul class='ipsList ipsList--inline i-margin-top_2'>
|
|
<li>
|
|
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
|
|
</li>
|
|
</ul>
|
|
{{endif}}
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="global" template_name="embedEventItemSnippet" template_data="$item" template_location="front" template_app="calendar"><![CDATA[
|
|
{{if $item->_end_date}}
|
|
<dl class='cCalendarEmbed_dates'>
|
|
<dt>{lang="from"}</dt>
|
|
<dd>
|
|
<time datetime='{expression="$item->_start_date->format( 'Y-m-d' )"}'>
|
|
{$item->_start_date->dayName} {$item->_start_date->mday} {$item->_start_date->monthName} {$item->_start_date->year}{{if !$item->all_day}}, {$item->_start_date->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
</dd>
|
|
<dt>{lang="until"}</dt>
|
|
<dd>
|
|
<time datetime='{expression="$item->_end_date->format( 'Y-m-d' )"}'>
|
|
{{$sameDay = !( ($item->_start_date->mday != $item->_end_date->mday) or ($item->_start_date->mon != $item->_end_date->mon) or ($item->_start_date->year != $item->_end_date->year) );}}
|
|
{{if !$sameDay}}{$item->_end_date->dayName} {$item->_end_date->mday} {$item->_end_date->monthName} {$item->_end_date->year}{{endif}}{{if !$item->all_day}}{{if !$sameDay}}, {{endif}}{$item->_end_date->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
</dd>
|
|
</dl>
|
|
{{else}}
|
|
<p>
|
|
<time datetime='{expression="$item->_start_date->format( 'Y-m-d' )"}'>
|
|
{$item->_start_date->dayName} {$item->_start_date->mday} {$item->_start_date->monthName} {$item->_start_date->year}{{if !$item->all_day}}, {$item->_start_date->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
</p>
|
|
{{endif}}]]></template>
|
|
<template template_group="global" template_name="embedEventReview" template_data="$comment, $item, $url" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsRichEmbed ipsRichEmbed--event-review'>
|
|
{template="embedHeader" group="embed" app="core" params="$comment, $item->mapped('title'), $comment->mapped('date'), $url"}
|
|
<div class='ipsRichEmbed__content'>
|
|
<div class='ipsRichEmbed_originalItem'>
|
|
<div>
|
|
{{if $item->map( 500, 100 )}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead ipsRichEmbed_masthead--map'>
|
|
{$item->map( 500, 100 )|raw}
|
|
</a>
|
|
{{elseif $item->coverPhoto() && $item->coverPhoto()->file}}
|
|
{{$photo = $item->coverPhoto()->file;}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead ipsRichEmbed_masthead_small'>
|
|
<img src='{$photo->url}' alt='{$item->mapped('title')}' loading="lazy">
|
|
</a>
|
|
{{elseif $club = $item->container()->club()}}
|
|
{{if $club->coverPhoto() and $club->coverPhoto()->file}}
|
|
{{$photo = $club->coverPhoto()->file;}}
|
|
<a href='{$url}' title='{$item->mapped('title')}' class='ipsRichEmbed_masthead'>
|
|
<img src='{$photo->url}' alt='{$item->mapped('title')}' loading="lazy">
|
|
</a>
|
|
{{endif}}
|
|
{{endif}}
|
|
<div class='i-padding_3'>
|
|
<div class='ipsPhotoPanel'>
|
|
<span class='cCalendarEmbed_calendar'>
|
|
<a href='{$url}'>
|
|
{{$nextOccurrence = $item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: $item->lastOccurrence( 'startDate' );}}
|
|
<time datetime='{$nextOccurrence->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$nextOccurrence->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$nextOccurrence->mday}</span>
|
|
</time>
|
|
</a>
|
|
</span>
|
|
<div class='ipsPhotoPanel__text'>
|
|
{template="embedOriginalItem" group="embed" app="core" params="$item, FALSE, \IPS\Theme::i()->getTemplate( 'global', 'calendar' )->embedEventItemSnippet( $item )"}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{template="rating" app="core" params="'veryLarge', $comment->mapped('rating')" group="global"}
|
|
{{if $comment->mapped('votes_total')}}
|
|
<p>{$comment->helpfulLine()|raw}</p>
|
|
{{endif}}
|
|
<hr class='ipsHr'>
|
|
<div class='ipsRichEmbed__snippet'>
|
|
{$comment->truncated(TRUE)|raw}
|
|
</div>
|
|
|
|
{{if settings.reputation_enabled AND \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) AND \count( $comment->reactions() )}}
|
|
<ul class='ipsList ipsList--inline i-margin-top_2'>
|
|
<li>
|
|
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
|
|
</li>
|
|
</ul>
|
|
{{endif}}
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="global" template_name="manageFollowRow" template_data="$table, $headers, $rows, $includeFirstCommentInCommentCount=TRUE" template_location="front" template_app="calendar"><![CDATA[{{if \count( $rows )}}
|
|
{{foreach $rows as $row}}
|
|
{{$idField = $row::$databaseColumnId;}}
|
|
<li class="ipsData__item {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}} {{if $row->hidden()}}ipsModerated{{endif}}" {{if $row->unread()}}data-ips-unread{{else}}data-ips-read{{endif}} data-controller='core.front.system.manageFollowed' data-followID='{$row->_followData['follow_area']}-{$row->_followData['follow_rel_id']}'>
|
|
{{if $row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
<time datetime='{$row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->mday}</span>
|
|
</time>
|
|
{{else}}
|
|
<time datetime='{$row->lastOccurrence( 'startDate' )->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$row->lastOccurrence( 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$row->lastOccurrence( 'startDate' )->mday}</span>
|
|
</time>
|
|
{{endif}}
|
|
<div class='ipsData__content'>
|
|
<div class='ipsData__main'>
|
|
<div class='ipsData__title'>
|
|
<div class="ipsBadges">
|
|
{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}
|
|
{{if $row->prefix()}}
|
|
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
|
|
{{endif}}
|
|
</div>
|
|
<h4>
|
|
<a href='{$row->url( "getPrefComment" )}'>{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}</a>
|
|
</h4>
|
|
</div>
|
|
{{if method_exists( $row, 'tableDescription' )}}
|
|
<div class='ipsData__desc ipsTruncate_2'>{$row->tableDescription()|raw}</div>
|
|
{{else}}
|
|
<div class="ipsData__meta">
|
|
{lang="byline_name_date" htmlsprintf="$row->author()->link( $row->warningRef() ), \IPS\DateTime::ts( $row->__get( $row::$databaseColumnMap['date'] ) )->html(TRUE)"}
|
|
{lang="in"} <a href="{$row->container()->url()}">{$row->container()->_title}</a>
|
|
</div>
|
|
{{endif}}
|
|
<ul class="ipsList ipsList--inline i-row-gap_0 i-margin-top_1 i-font-weight_500">
|
|
<li title='{lang="follow_how"}' data-role='followFrequency'>
|
|
{{if $row->_followData['follow_notify_freq'] == 'none'}}
|
|
<i class='fa-regular fa-bell-slash'></i>
|
|
{{else}}
|
|
<i class='fa-regular fa-bell'></i>
|
|
{{endif}} {lang="follow_freq_{$row->_followData['follow_notify_freq']}"}
|
|
</li>
|
|
<li data-role='followAnonymous' {{if !$row->_followData['follow_is_anon']}}hidden{{endif}}><i class="fa-regular fa-eye-slash"></i> {lang="follow_is_anon"}</li>
|
|
</ul>
|
|
</div>
|
|
<div class='cFollowedContent_manage'>
|
|
{template="manageFollow" group="system" app="core" params="$row->_followData['follow_app'], $row->_followData['follow_area'], $row->_followData['follow_rel_id']"}
|
|
</div>
|
|
</div>
|
|
{{if $table->canModerate()}}
|
|
<div class='ipsData__mod'>
|
|
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
|
|
</div>
|
|
{{endif}}
|
|
</li>
|
|
{{endforeach}}
|
|
{{endif}}
|
|
]]></template>
|
|
<template template_group="global" template_name="rows" template_data="$table, $headers, $rows" template_location="front" template_app="calendar"><![CDATA[{{if \count( $rows )}}
|
|
{{foreach $rows as $row}}
|
|
<li class="ipsData__item {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}} {{if $row->hidden()}}ipsModerated{{endif}} {$row->ui( 'css' )}" {$row->ui( 'dataAttributes' )}>
|
|
{{if $row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
<time datetime='{$row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->mysqlDatetime()}' class='ipsCalendarDate ipsCalendarDate--large'>
|
|
<span class='ipsCalendarDate__month'>{$row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$row->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->mday}</span>
|
|
</time>
|
|
{{else}}
|
|
<time datetime='{$row->lastOccurrence( 'startDate' )->mysqlDatetime()}' class='ipsCalendarDate ipsCalendarDate--large'>
|
|
<span class='ipsCalendarDate__month'>{$row->lastOccurrence( 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$row->lastOccurrence( 'startDate' )->mday}</span>
|
|
</time>
|
|
{{endif}}
|
|
<div class='ipsData__content'>
|
|
<div class='ipsData__main'>
|
|
<div class='ipsData__title'>
|
|
{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}
|
|
{{if $row->prefix()}}
|
|
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
|
|
{{endif}}
|
|
<h4>
|
|
<a href='{$row->url( "getPrefComment" )}' {{if $row->tableHoverUrl}}data-ipsHover{{endif}}>
|
|
{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
|
|
</a>
|
|
</h4>
|
|
</div>
|
|
<div class='ipsData__desc'>{$row->eventBlurb()|raw}</div>
|
|
{{if $row->rsvp}}
|
|
{{if $attendees = $row->attendees() and isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] ) }}
|
|
<p class='i-font-size_2 i-color_positive'><strong><i class='fa-solid fa-check-circle'></i> {lang="you_are_going_to_this"}</strong></p>
|
|
{{else}}
|
|
<p class='i-font-size_2 i-color_soft'><em><i class='fa-solid fa-circle-xmark'></i> {lang="you_are_not_going_to_this"}</em></p>
|
|
{{endif}}
|
|
|
|
{{if \count( $attendees[1] )}}
|
|
<ul class='ipsList ipsList--inline'>
|
|
<li class='i-color_soft'>{lang="rsvp_attend_event"}:</li>
|
|
{{foreach $attendees[1] as $idx => $attendee}}
|
|
{{if $idx < 6}}
|
|
<li>{template="userPhoto" group="global" app="core" params="$attendee, 'tiny', NULL, NULL, TRUE"}</li>
|
|
{{endif}}
|
|
{{endforeach}}
|
|
{{if \count( $attendees[1] ) > 5}}
|
|
<li class='i-color_soft'>{lang="and_x_more" pluralize="\count( $attendees[1] ) - 5"}</li>
|
|
{{endif}}
|
|
</ul>
|
|
{{endif}}
|
|
{{endif}}
|
|
{{if \count( $row->tags() )}}
|
|
{template="tags" group="global" app="core" params="$row->tags(), true, true"}
|
|
{{endif}}
|
|
</div>
|
|
<div class='i-basis_220'>
|
|
{{if $row->container()->allow_reviews}}
|
|
{template="rating" group="global" location="front" app="core" params="'large', $row->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $row->memberReviewRating()"} <span class='i-color_soft'>({lang="num_reviews" pluralize="$row->reviews"})</span>
|
|
{{endif}}
|
|
{{if $row->container()->allow_comments}}
|
|
<p>
|
|
{{if $row->comments}}
|
|
<a href='{$row->url()->setQueryString( 'tab', 'comments' )->setFragment('replies')}'>
|
|
{{endif}}
|
|
<i class='fa-solid fa-comment'></i> {lang="num_comments" pluralize="$row->comments"}
|
|
{{if $row->comments}}
|
|
</a>
|
|
{{endif}}
|
|
</p>
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
{{if $table->canModerate()}}
|
|
<div class='ipsData__mod'>
|
|
{{$idField = $row::$databaseColumnId;}}
|
|
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
|
|
</div>
|
|
{{endif}}
|
|
</li>
|
|
{{endforeach}}
|
|
{{endif}}]]></template>
|
|
<template template_group="global" template_name="searchResultCommentSnippet" template_data="$indexData, $nextOccurance, $startDate, $endDate, $allDay, $reviewRating, $condensed" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsStreamItem__content-thumb ipsStreamItem__content-thumb--events'>
|
|
<time datetime='{$nextOccurance->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$nextOccurance->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$nextOccurance->mday}</span>
|
|
</time>
|
|
</div>
|
|
{{if !$condensed}}
|
|
<div class='ipsStreamItem__content-content ipsStreamItem__content-thumb--events'>
|
|
{{if $reviewRating !== NULL}}
|
|
{template="rating" app="core" params="'medium', $reviewRating" group="global"}
|
|
{{endif}}
|
|
<div class='ipsStream__comment'>
|
|
<p class="i-font-size_2 i-font-weight_600">
|
|
<time datetime='{expression="$startDate->format( 'Y-m-d' )"}'>
|
|
{$startDate->dayName} {$startDate->mday} {$startDate->monthName} {$startDate->year}{{if !$allDay}}, {$startDate->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
{{if $endDate}}
|
|
{lang="until_lc"}
|
|
{{$sameDay = !( ($startDate->mday != $endDate->mday) or ($startDate->mon != $endDate->mon) or ($startDate->year != $endDate->year) );}}
|
|
<time datetime='{expression="$endDate->format( 'Y-m-d' )"}'>
|
|
{{if !$sameDay}}{$endDate->dayName} {$endDate->mday} {$endDate->monthName} {$endDate->year}{{endif}}{{if !$allDay}}{{if !$sameDay}}, {{endif}}{$endDate->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
{{endif}}
|
|
</p>
|
|
{{if trim( $indexData['index_content'] ) !== ''}}
|
|
<div {{if !( \IPS\Dispatcher::i()->application->directory == 'core' and \IPS\Dispatcher::i()->module and \IPS\Dispatcher::i()->module->key == 'search' )}}class='ipsRichText ipsTruncate_3'{{else}}class='ipsRichText' data-searchable data-findTerm{{endif}}>
|
|
{expression="\IPS\Content\Search\Result::preDisplay( $indexData['index_content'] )" raw="true"}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
{{endif}}]]></template>
|
|
<template template_group="global" template_name="searchResultEventSnippet" template_data="$indexData, $itemData, $nextOccurance, $startDate, $endDate, $allDay, $condensed" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsStreamItem__content-thumb ipsStreamItem__content-thumb--events'>
|
|
<time datetime='{$nextOccurance->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month' data-controller="core.global.core.datetime" data-time="{$nextOccurance->format('c')}" data-format="%h" >{$nextOccurance->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date' data-controller="core.global.core.datetime" data-time="{$nextOccurance->format('c')}" data-format="%d">{$nextOccurance->mday}</span>
|
|
</time>
|
|
</div>
|
|
{{if !$condensed}}
|
|
<div class='ipsStreamItem__content-content ipsStreamItem__content-thumb--events'>
|
|
<p class="i-font-size_2 i-font-weight_600">
|
|
<time datetime='{expression="$startDate->format( 'Y-m-d' )"}'>
|
|
{$startDate->dayName} {$startDate->mday} {$startDate->monthName} {$startDate->year}{{if !$allDay}}, {$startDate->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
{{if $endDate}}
|
|
{lang="until_lc"}
|
|
{{$sameDay = !( ($startDate->mday != $endDate->mday) or ($startDate->mon != $endDate->mon) or ($startDate->year != $endDate->year) );}}
|
|
<time datetime='{expression="$endDate->format( 'Y-m-d' )"}'>
|
|
{{if !$sameDay}}{$endDate->dayName} {$endDate->mday} {$endDate->monthName} {$endDate->year}{{endif}}{{if !$allDay}}{{if !$sameDay}}, {{endif}}{$endDate->localeTime( FALSE )}{{endif}}
|
|
</time>
|
|
{{endif}}
|
|
</p>
|
|
{{if trim( $indexData['index_content'] ) !== ''}}
|
|
<div {{if !( \IPS\Dispatcher::i()->application->directory == 'core' and \IPS\Dispatcher::i()->module and \IPS\Dispatcher::i()->module->key == 'search' )}}class='ipsRichText ipsTruncate_2'{{else}}class='ipsRichText' data-searchable data-findTerm{{endif}}>
|
|
{expression="\IPS\Content\Search\Result::preDisplay( $indexData['index_content'] )" raw="true"}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}]]></template>
|
|
<template template_group="global" template_name="subscribeMenu" template_data="$thisCalendar, $downloadLinks" template_location="front" template_app="calendar"><![CDATA[{{if $downloadLinks}}
|
|
<i-dropdown id="elCalendarSettings_menu" popover>
|
|
<div class="iDropdown">
|
|
<ul class="iDropdown__items">
|
|
<li class="iDropdown__title">{{if $thisCalendar}}{lang="with_calendar" sprintf="$thisCalendar->_title"}{{else}}{lang="with_all_calendars"}{{endif}}</li>
|
|
<li><a href='{{if $thisCalendar}}{$downloadLinks['iCalCalendar']}{{else}}{$downloadLinks['iCalAll']}{{endif}}'><i class='fa-solid fa-download'></i> {lang="download_webcal"}</a></li>
|
|
<li><a href='{expression="str_replace( array( 'http://', 'https://' ), 'webcal://', $thisCalendar ? $downloadLinks['iCalCalendar'] : $downloadLinks['iCalAll'] )"}'><i class='fa-solid fa-calendar'></i> {lang="subscribe_webcal"}</a></li>
|
|
</ul>
|
|
</div>
|
|
</i-dropdown>
|
|
{{endif}}]]></template>
|
|
<template template_group="livesearch" template_name="calendar" template_data="$calendar" template_location="admin" template_app="calendar"><![CDATA[<li data-role='result'>
|
|
<a href='{url="app=calendar&module=calendars&controller=calendars&do=form&id="}{$calendar->id}'>{$calendar->_title}</a>
|
|
</li>
|
|
|
|
]]></template>
|
|
<template template_group="modcp" template_name="approvalQueueItem" template_data="$item, $ref, $container, $title" template_location="front" template_app="calendar"><![CDATA[<div id="elApprovePanel" class='ipsBox ipsBox--calendarApprovalQueue'>
|
|
<article class="">
|
|
<div class='i-flex i-flex-wrap_wrap i-gap_2 i-padding_3'>
|
|
<div class="ipsPhotoPanel">
|
|
{template="userPhoto" group="global" params="$item->author()"}
|
|
<div class='ipsPhotoPanel__text'>
|
|
<button type="button" id="user{$item->author()->member_id}" popovertarget="user{$item->author()->member_id}_menu" class="ipsTitle ipsTitle--h3">{$item->author()->name}<i class="fa-solid fa-caret-down"></i></button>
|
|
<i-dropdown popover id="user{$item->author()->member_id}_menu">
|
|
<div class="iDropdown">
|
|
<ul class="iDropdown__items">
|
|
{{if \IPS\Member::loggedIn()->modPermission('mod_can_warn')}}
|
|
<li><a href='{url="app=core&module=system&controller=warnings&do=warn&id={$item->author()->member_id}&ref={$ref}" seoTemplate="warn_add" seoTitle="$item->author()->members_seo_name"}' data-ipsDialog data-ipsDialog-title="{lang="warn_member" sprintf="$item->author()->name"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="warning_issued"}" data-role="warnUserDialog">{lang="warn_user"}</a></li>
|
|
{{endif}}
|
|
{{if $item->author()->member_id != \IPS\Member::loggedIn()->member_id}}
|
|
{{if $item->author()->members_bitoptions['bw_is_spammer']}}
|
|
<li><a href='{url="app=core&module=system&controller=moderation&do=flagAsSpammer&id={$item->author()->member_id}&s=0" seoTemplate="flag_as_spammer" seoTitle="$item->author()->members_seo_name" csrf="true"}' data-confirm data-confirmSubMessage="{lang="spam_unflag_confirm"}" data-ipsMenuValue='spamFlagButton'>{lang="spam_unflag"}</a></li>
|
|
{{else}}
|
|
<li><a href='{url="app=core&module=system&controller=moderation&do=flagAsSpammer&id={$item->author()->member_id}&s=1" seoTemplate="flag_as_spammer" seoTitle="$item->author()->members_seo_name" csrf="true"}' data-confirm data-ipsMenuValue='spamFlagButton'>{lang="spam_flag"}</a></li>
|
|
{{endif}}
|
|
{{endif}}
|
|
<li><a href='{url="app=core&module=messaging&controller=messenger&do=compose&to={$item->author()->member_id}" seoTemplate="messenger_compose"}' data-ipsDialog data-ipsDialog-title='{lang="compose_new"}' data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="message_sent"}">{lang="message_send"}</a></li>
|
|
</ul>
|
|
</div>
|
|
</i-dropdown>
|
|
{{if $container}}
|
|
<p>{lang="posted_in_container"} <a href="{$container->url()}">{$container->_title}</a></p>
|
|
{{endif}}
|
|
<p class="i-color_soft">{lang="date_replied" htmlsprintf="\IPS\DateTime::ts( $item->mapped('date') )->html(FALSE)"}</p>
|
|
|
|
<p>
|
|
<time datetime='{expression="$item->_start_date->format( 'Y-m-d' )"}'>
|
|
{{if $item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
{$item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->calendarDate()}{{if !$item->all_day}}, {$item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->localeTime( FALSE )} {{endif}}
|
|
{{else}}
|
|
{$item->lastOccurrence( 'startDate' )->calendarDate()}{{if !$item->all_day}} {$item->lastOccurrence( 'startDate' )->localeTime( FALSE )} {{endif}}
|
|
{{endif}}
|
|
</time>
|
|
{{if $item->_end_date}}
|
|
<i class='fa-solid fa-circle-arrow-right i-font-size_2 i-color_soft'></i>
|
|
<time datetime='{expression="$item->_end_date->format( 'Y-m-d' )"}'>
|
|
{{if $item->nextOccurrence( $item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )}}
|
|
{$item->nextOccurrence( $item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )->calendarDate()}{{if !$item->all_day}}, {$item->nextOccurrence( $item->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
{{else}}
|
|
{$item->lastOccurrence( 'endDate' )->calendarDate()}{{if !$item->all_day}} {$item->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
{{endif}}
|
|
</time>
|
|
{{endif}}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<p class="i-margin-start_auto">
|
|
<a href='{$item->url()}' class='i-color_soft'>
|
|
<i class='fa-solid fa-{$item::$icon}'></i> {lang="$item::$title"}
|
|
</a>
|
|
</p>
|
|
</div>
|
|
<div class='i-background_2 i-padding_3'>
|
|
<div class='ipsBox ipsBox--calendarApprovalQueueItem'>
|
|
<h2 class="ipsBox__header"><a href="{$item->url()}">{$title}</a></h2>
|
|
{template="richText" group="global" app="core" location="global" params="$item->content(), array('ipsPost', 'i-padding_3')"}
|
|
</div>
|
|
</div>
|
|
</article>
|
|
</div>
|
|
{{if $reason = $item->approvalQueueReason()}}
|
|
<div class='ipsBox ipsBox--calendarApprovalQueueReason'>
|
|
<div class='ipsBox__header'>{lang="reason_for_approval"}</div>
|
|
<div class='i-background_2 i-border-bottom_3 i-padding_2'>
|
|
<p class='i-color_soft'>{$reason}</p>
|
|
</div>
|
|
</div>
|
|
{{endif}}]]></template>
|
|
<template template_group="overview" template_name="byMonth" template_data="$calendars, $date, $featured, $events, $thisCalendar, $months=array()" template_location="front" template_app="calendar"><![CDATA[<section class='ipsBox ipsBox--calendarBrowseMonth' data-controller="calendar.front.overview.eventList" data-ips-hook="main">
|
|
<h2 class='ipsBox__header'>{lang="events_browse_by_month"}</h2>
|
|
<div class='cEvents__monthNav' data-role='monthNav' data-ips-hook="navigation">
|
|
{{foreach $months as $monthObj }}
|
|
<a class='cEvents__monthNav__monthItem {{if $monthObj->format( 'n' ) == $date->mon}}cEvents__monthNav__monthItem--active{{endif}}' href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&id={$thisCalendar->_id}&y={$monthObj->format( 'Y' )}&m={$monthObj->format( 'n' )}"}{{else}}{url="app=calendar&module=calendar&controller=view&y={$monthObj->format( 'Y' )}&m={$monthObj->format( 'n' )}"}{{endif}}" rel='nofollow' data-action='changeMonth' data-month='{$monthObj->format( 'n' )}' data-year='{$monthObj->format( 'Y' )}'>
|
|
<span class='cEvents__monthNav__month'>{lang="_date_month_short" pluralize="$monthObj->format( 'n' )"}</span>
|
|
<span class='cEvents__monthNav__year'>{$monthObj->format( 'Y' )}</span>
|
|
</a>
|
|
{{endforeach}}
|
|
</div>
|
|
{{if \count($events) }}
|
|
<i-data>
|
|
<ul class='ipsEventList ipsData ipsData--grid ipsData--events-list' data-role='eventList' data-ips-hook="eventsList">
|
|
{{foreach $events as $event}}
|
|
{template="event" app="calendar" group="events" params="$event, 'normal', \IPS\calendar\Date::getDate( $date->firstDayOfMonth('year'), $date->firstDayOfMonth('mon'), $date->firstDayOfMonth('mday') )"}
|
|
{{endforeach}}
|
|
</ul>
|
|
</i-data>
|
|
<div class='i-padding_2 i-text-align_center i-border-top_3'>
|
|
<button class='ipsButton ipsButton--secondary' {{if \count( $events ) < 16}}hidden{{endif}} data-action='loadMore'>{lang="events_show_more"}</button>
|
|
<p class='ipsEmptyMessage i-padding_0' {{if \count( $events ) >= 16}}hidden{{endif}} data-role='noMoreResults'>{lang="events_no_more_this_month"}</p>
|
|
</div>
|
|
{{else}}
|
|
<i-data>
|
|
<ul class='ipsEventList ipsData ipsData--grid ipsData--events-list' data-role='eventList'>
|
|
{template="noEvents" app="calendar" group="events"}
|
|
</ul>
|
|
</i-data>
|
|
{{endif}}
|
|
</section>]]></template>
|
|
<template template_group="overview" template_name="header" template_data="$date, $thisCalendar=NULL, $downloadLinks=NULL, $showTitle=TRUE" template_location="front" template_app="calendar"><![CDATA[
|
|
<header class="ipsPageHeader ipsPageHeader--calendar">
|
|
<div class="ipsPageHeader__row">
|
|
<div data-ips-hook="header" class="ipsPageHeader__primary">
|
|
{{if $showTitle}}<h1 data-ips-hook="title" class="ipsPageHeader__title">{lang="frontnavigation_calendar"}</h1>{{endif}}
|
|
</div>
|
|
<ul data-ips-hook="buttons" class="ipsButtons ipsButtons--main">
|
|
<li>
|
|
{{if \IPS\Application::appIsEnabled('cloud') and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'cloud', 'livetopics' ) ) and \IPS\cloud\LiveTopic::canCreate( \IPS\Member::loggedIn() )}}
|
|
<button id='elEventCreate' popovertarget="elEventCreate_menu" class="ipsButton ipsButton--primary">
|
|
<span>{lang="livetopic_create_event"}</span><i class="fa-solid fa-caret-down"></i>
|
|
</button>
|
|
<i-dropdown id="elEventCreate_menu" popover>
|
|
<div class="iDropdown">
|
|
<ul class="iDropdown__items">
|
|
<li data-menuItem="livetopic">
|
|
{{if !\IPS\Settings::i()->club_nodes_in_apps and $theOnlyNode = \IPS\calendar\Calendar::theOnlyNode() }}
|
|
<a href="{url="app=calendar&module=calendar&controller=submit&do=livetopic&id={$theOnlyNode->_id}" seoTemplate="calendar_submit"}">{lang="event_create_livetopic"}</a>
|
|
{{elseif ( $thisCalendar AND $thisCalendar->can('add') )}}
|
|
<a href='{url="app=calendar&module=calendar&controller=submit&do=livetopic&id={$thisCalendar->_id}" seoTemplate="calendar_submit"}'>{lang="event_create_livetopic"}</a>
|
|
{{elseif \IPS\calendar\Calendar::canOnAny('add')}}
|
|
<a href="{url="app=calendar&module=calendar&controller=submit&do=livetopic" seoTemplate="calendar_submit"}">{lang="event_create_livetopic"}</a>
|
|
{{endif}}
|
|
</li>
|
|
<li data-menuItem="event">
|
|
{{if !\IPS\Settings::i()->club_nodes_in_apps and $theOnlyNode = \IPS\calendar\Calendar::theOnlyNode() }}
|
|
<a href="{url="app=calendar&module=calendar&controller=submit&do=submit&id={$theOnlyNode->_id}" seoTemplate="calendar_submit"}">{lang="event_create_normal"}</a>
|
|
{{elseif ( $thisCalendar AND $thisCalendar->can('add') )}}
|
|
<a href='{url="app=calendar&module=calendar&controller=submit&do=submit&id={$thisCalendar->_id}" seoTemplate="calendar_submit"}'>{lang="event_create_normal"}</a>
|
|
{{elseif \IPS\calendar\Calendar::canOnAny('add')}}
|
|
<a href="{url="app=calendar&module=calendar&controller=submit" seoTemplate="calendar_submit"}" data-ipsdialog="" data-ipsdialog-size="narrow" data-ipsdialog-title="{lang="select_calendar"}">{lang="event_create_normal"}</a>
|
|
{{endif}}
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</i-dropdown>
|
|
{{else}}
|
|
{{if !\IPS\Settings::i()->club_nodes_in_apps and $theOnlyNode = \IPS\calendar\Calendar::theOnlyNode() }}
|
|
<a class="ipsButton ipsButton--primary" href="{url="app=calendar&module=calendar&controller=submit&do=submit&id={$theOnlyNode->_id}" seoTemplate="calendar_submit"}">{lang="create_event"}</a>
|
|
{{elseif ( $thisCalendar AND $thisCalendar->can('add') )}}
|
|
<a class="ipsButton ipsButton--primary" href='{url="app=calendar&module=calendar&controller=submit&do=submit&id={$thisCalendar->_id}" seoTemplate="calendar_submit"}' data-ipsTooltip title='{lang="add_event"}'>{lang="create_event"}</a>
|
|
{{elseif \IPS\calendar\Calendar::canOnAny('add')}}
|
|
<a class="ipsButton ipsButton--primary" href="{url="app=calendar&module=calendar&controller=submit" seoTemplate="calendar_submit"}" data-ipsdialog="" data-ipsdialog-size="narrow" data-ipsdialog-title="{lang="select_calendar"}">{lang="create_event"}</a>
|
|
{{endif}}
|
|
{{endif}}
|
|
</li>
|
|
{{if request.view=='overview'}}
|
|
<li>
|
|
<button id='elCalendarSettings' popovertarget="elCalendarSettings_menu" class="ipsButton ipsButton--inherit">
|
|
<span>{lang="subscribe_button"}</span><i class='fa-solid fa-caret-down'></i>
|
|
</button>
|
|
</li>
|
|
{{endif}}
|
|
<li>
|
|
<ul class="ipsButtonGroup">
|
|
{{if !$thisCalendar or !(\IPS\IPS::classUsesTrait( $thisCalendar, 'IPS\Content\ClubContainer' ) AND $thisCalendar->club() )}}
|
|
<li>
|
|
<a href="{url="app=calendar&module=calendar&controller=view&view=overview" seoTemplate="calendar"}" class="ipsButton {{if request.view=='overview'}} ipsButton--active{{endif}}" data-ipstooltip="" data-ipstooltip-safe="" title="{lang="event_view_overview"}" rel="nofollow">
|
|
<i class="fa-solid fa-align-justify" aria-hidden="true"></i>
|
|
<span class="ipsInvisible">{lang="event_view_overview"}</span>
|
|
</a>
|
|
</li>
|
|
{{endif}}
|
|
<li>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&view=month&y={$date->year}&m={$date->mon}&id={$thisCalendar->_id}" seoTemplate="calendar_month"}{{else}}{url="app=calendar&module=calendar&controller=view&view=month&y={$date->year}&m={$date->mon}" seoTemplate="calendar_month"}{{endif}}" class="ipsButton {{if request.view=='month'}}ipsButton--active{{endif}}" data-ipstooltip="" data-ipstooltip-safe="" title="{lang="event_view_monthly"}" rel="nofollow">
|
|
<i class="fa-solid fa-calendar" aria-hidden="true"></i>
|
|
<span class="ipsInvisible">{lang="event_view_monthly"}</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&view=week&w={$date->year}-{$date->mon}-{$date->mday}&id={$thisCalendar->_id}" seoTemplate="calendar_week"}{{else}}{url="app=calendar&module=calendar&controller=view&view=week&w={$date->year}-{$date->mon}-{$date->mday}" seoTemplate="calendar_week"}{{endif}}" class="ipsButton {{if request.view=='week'}}ipsButton--active{{endif}}" data-ipstooltip="" data-ipstooltip-safe="" title="{lang="event_view_weekly"}" rel="nofollow">
|
|
<i class="fa-regular fa-calendar-minus" aria-hidden="true"></i>
|
|
<span class="ipsInvisible">{lang="event_view_weekly"}</span>
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="{{if $thisCalendar}}{url="app=calendar&module=calendar&controller=view&view=day&y={$date->year}&m={$date->mon}&d={$date->mday}&id={$thisCalendar->_id}" seoTemplate="calendar_day"}{{else}}{url="app=calendar&module=calendar&controller=view&view=day&y={$date->year}&m={$date->mon}&d={$date->mday}" seoTemplate="calendar_day"}{{endif}}" class="ipsButton {{if request.view=='day'}}ipsButton--active{{endif}}" data-ipstooltip="" data-ipstooltip-safe="" title="{lang="event_view_daily"}" rel="nofollow">
|
|
<i class="fa-regular fa-calendar" aria-hidden="true"></i>
|
|
<span class="ipsInvisible">{lang="event_view_daily"}</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</header>
|
|
{template="subscribeMenu" app="calendar" group="global" params="$thisCalendar, $downloadLinks"}]]></template>
|
|
<template template_group="overview" template_name="search" template_data="$searchForm, $results=array(), $mapMarkers=NULL" template_location="front" template_app="calendar"><![CDATA[
|
|
{$searchForm->customTemplate( array( \IPS\Theme::i()->getTemplate( 'overview', 'calendar' ), 'searchBar' ) )|raw}
|
|
{template="searchResultsWrapper" group="events" app="calendar" params="$results, $mapMarkers"}]]></template>
|
|
<template template_group="overview" template_name="searchBar" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar='', $form=NULL" template_location="front" template_app="calendar"><![CDATA[
|
|
<form accept-charset='utf-8' class="ipsForm {$class} i-flex_11" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm data-controller='calendar.front.overview.search'{{if \IPS\GeoLocation::enabled()}} data-placeholder='{$elements['']['location']->options['placeholder']}'{{endif}}>
|
|
<input type="hidden" name="{$id}_submitted" value="1">
|
|
{{foreach $hiddenValues as $k => $v}}
|
|
{{if \is_array($v)}}
|
|
{{foreach $v as $_k => $_v}}
|
|
<input type="hidden" name="{$k}[{$_k}]" value="{$_v}">
|
|
{{endforeach}}
|
|
{{else}}
|
|
<input type="hidden" name="{$k}" value="{$v}">
|
|
{{endif}}
|
|
{{endforeach}}
|
|
|
|
{{$byLocation = FALSE;}}
|
|
{{if isset( \IPS\Request::i()->lat ) && isset( \IPS\Request::i()->lon )}}
|
|
<input type='hidden' name='lat' value='{request="lat"}'>
|
|
<input type='hidden' name='lon' value='{request="lon"}'>
|
|
{{endif}}
|
|
|
|
{{if isset( \IPS\Request::i()->searchNearLocation )}}
|
|
<input type='hidden' name='searchNearLocation' value='1'>
|
|
{{$byLocation = TRUE;}}
|
|
{{endif}}
|
|
|
|
<ul class='cEvents__search'>
|
|
{{foreach $elements[''] as $key => $input}}
|
|
{{if $key === 'location'}}
|
|
<li class='cEvents__search__field cEvents__search__field--location'>
|
|
<div class="i-flex i-justify-content_space-between">
|
|
<label class='cEvents__search__label' for="elInput_location">{lang="events_search_location"}</label>
|
|
<div class='i-flex i-gap_1'>
|
|
{{if $byLocation}}
|
|
{{$input->options['placeholder'] = \IPS\Member::loggedIn()->language()->addToStack( "events_search_your_location" );}}
|
|
{{$input->options['disabled'] = TRUE;}}
|
|
<button type="button" class='ipsEventSearch__searchLocation' hidden data-action='useMyLocation'><i class='fa-solid fa-crosshairs'></i> <span>{lang="events_search_use_location"}</span></button>
|
|
<button type="button" class='ipsEventSearch__searchLocation' data-action='cancelLocation'><span>{lang="events_search_cancel_location"}</span></button>
|
|
{{else}}
|
|
<button type="button" class='ipsEventSearch__searchLocation' data-action='useMyLocation'><i class='fa-solid fa-crosshairs'></i> <span>{lang="events_search_use_location"}</span></button>
|
|
<button type="button" class='ipsEventSearch__searchLocation' hidden data-action='cancelLocation'><span>{lang="events_search_cancel_location"}</span></button>
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
{$input->html()|raw}
|
|
</li>
|
|
{{elseif $key === 'show'}}
|
|
<li class='cEvents__search__field cEvents__search__field--show'>
|
|
<label class="cEvents__search__input">
|
|
<span class='cEvents__search__label'>{lang="events_search_type"}</span>
|
|
{$input->html()|raw}
|
|
</label>
|
|
</li>
|
|
{{elseif $key === 'date'}}
|
|
<li class='cEvents__search__field cEvents__search__field--date cEvents__search__field--from'>
|
|
<label class="cEvents__search__input">
|
|
<span class='cEvents__search__label'>{lang="events_search_from"}</span>
|
|
{$input->start->html()|raw}
|
|
</label>
|
|
</li>
|
|
<li class='cEvents__search__field cEvents__search__field--date cEvents__search__field--to'>
|
|
<label class="cEvents__search__input">
|
|
<span class='cEvents__search__label'>{lang="events_search_to"}</span>
|
|
{$input->end->html()|raw}
|
|
</label>
|
|
</li>
|
|
{{endif}}
|
|
{{endforeach}}
|
|
<li class='cEvents__search__field cEvents__search__field--submit'>
|
|
<button type='submit' class='ipsButton ipsButton--large ipsButton--primary i-width_100p'><i class="fa-solid fa-magnifying-glass"></i><span>{lang="events_search_search"}</span></button>
|
|
</li>
|
|
</ul>
|
|
</form>]]></template>
|
|
<template template_group="overview" template_name="wrapper" template_data="$featured, $nearme, $stream, $searchForm, $mapMarkers, $online, $date, $downloadLinks" template_location="front" template_app="calendar"><![CDATA[
|
|
<div data-role='eventsPage' class='ipsBlockSpacer'>
|
|
{template="header" group="overview" app="calendar" params="$date, NULL, $downloadLinks"}
|
|
|
|
<div class='cEvents__overview-header'>
|
|
{{if \count( $featured )}}
|
|
{template="featured" group="events" app="calendar" params="$featured"}
|
|
{{endif}}
|
|
<section class='ipsBox ipsBox--calendarSearch {{if \count( $featured )}} i-flex i-flex-direction_column{{endif}}'>
|
|
<h2 class="ipsBox__header">{lang="events_search_events"}</h2>
|
|
<div class='ipsBox__content ipsBox__padding {{if \count( $featured )}}i-flex_11 i-flex i-align-items_center{{endif}}'>
|
|
<div class='i-flex_11 ipsEventSearch {{if \count( $featured )}}ipsEventSearch--vertical{{else}}ipsEventSearch--horizontal{{endif}}'>
|
|
{$searchForm->customTemplate( array( \IPS\Theme::i()->getTemplate( 'overview', 'calendar' ), 'searchBar' ) )|raw}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
|
|
<div data-role='eventsOverview' class='ipsBlockSpacer'>
|
|
{{if \IPS\GeoLocation::enabled() }}
|
|
{template="nearMe" group="events" app="calendar" params="$nearme, $mapMarkers"}
|
|
{{endif}}
|
|
{template="online" group="events" app="calendar" params="$online"}
|
|
|
|
{$stream|raw}
|
|
</div>
|
|
|
|
<div data-role='searchResultsWrapper' class='ipsHide'>
|
|
{template="searchResultsWrapper" group="events" app="calendar" params=""}
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="submit" template_name="calendarSelector" template_data="$form" template_location="front" template_app="calendar"><![CDATA[<div class=''>
|
|
{$form|raw}
|
|
</div>]]></template>
|
|
<template template_group="submit" template_name="datesForm" template_data="$name, $value, $timeZones, $error=''" template_location="front" template_app="calendar"><![CDATA[
|
|
<div data-controller='calendar.front.submit.dates' id='eventDateSelection'>
|
|
{{if $error}}
|
|
<div class="ipsMessage ipsMessage--error">{lang="$error"}</div>
|
|
{{endif}}
|
|
<ul class='i-basis_100p i-padding_3 ipsList ipsList--inline i-align-items_center'>
|
|
<li>
|
|
<label class="i-flex i-align-items_center i-gap_1">
|
|
<input type="checkbox" role="checkbox" name="event_dates[single_day]" {{if isset($value['single_day']) AND $value['single_day']}}checked{{endif}} value="1" id="check_single_day" class="ipsInput ipsInput--toggle">
|
|
{lang="event_single_day"}
|
|
</label>
|
|
</li>
|
|
<li>
|
|
<label class="i-flex i-align-items_center i-gap_1">
|
|
<input type="checkbox" role="checkbox" name="event_dates[all_day]" {{if isset($value['all_day']) AND $value['all_day']}}checked{{endif}} value="1" id="check_all_day" class="ipsInput ipsInput--toggle">
|
|
{lang="event_all_day"}
|
|
</label>
|
|
</li>
|
|
<li class='i-color_soft i-link-color_inherit' id='elTimezone'>
|
|
<button type="button" id="elTimezoneSelector" class='ipsButton ipsButton--text' popovertarget="elTimezoneSelector_menu">
|
|
<i class='fa-solid fa-earth-americas i-margin-end_icon'></i> {lang="event_timezone"}: <span class="i-color_hard i-font-weight_500" data-role="timezone_display"></span> <i class='fa-solid fa-angle-down'></i>
|
|
</button>
|
|
<i-dropdown id="elTimezoneSelector_menu" popover>
|
|
<div class="iDropdown">
|
|
<div class='ipsForm'>
|
|
<div class="ipsFieldRow">
|
|
<select class="ipsInput ipsInput--select" name="event_dates[event_timezone]" id="event_timezone">
|
|
{{foreach $timeZones as $k => $v}}
|
|
<option value='{$k}' {{if $value['event_timezone'] == $k}}selected{{endif}} data-abbreviated="{$k}">{$k}</option>
|
|
{{endforeach}}
|
|
</select>
|
|
</div>
|
|
<div class='ipsSubmitRow'>
|
|
<button class='ipsButton ipsButton--primary' data-action="updateTimezone" type="button" popovertarget="elTimezoneSelector_menu">{lang="change"}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</i-dropdown>
|
|
</li>
|
|
</ul>
|
|
<div class='ipsFluid i-basis_340 i-gap_lines i-border-bottom_3 i-border-top_3'>
|
|
<div class='i-padding_3 i-background_2' id='elDateGrid_start'>
|
|
<div class='i-flex i-flex-wrap_wrap i-align-items_center i-gap_1'>
|
|
<label class='i-flex_11'>
|
|
<div class="i-color_hard i-font-weight_600 i-font-size_3 i-margin-bottom_2"><i class="fa-regular fa-calendar i-color_soft i-margin-end_icon i-opacity_5"></i> {lang="submit_event_start_date"}</div>
|
|
<input type="date" data-summaryControl name="event_dates[start_date]" value="{{if $value['start_date'] instanceof \IPS\DateTime}}{$value['start_date']->format('Y-m-d')}{{else}}{$value['start_date']}{{endif}}" required class="ipsInput ipsInput--text" data-control="date" id='event_start_date' placeholder='{expression="str_replace( array( 'YYYY', 'MM', 'DD' ), array( \IPS\Member::loggedIn()->language()->addToStack('_date_format_yyyy'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_mm'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_dd') ), str_replace( 'Y', 'YY', \IPS\Member::loggedIn()->language()->preferredDateFormat() ) )"}'>
|
|
</label>
|
|
<label class='i-flex_11' id='start_time_wrap'>
|
|
<div class="i-color_hard i-font-weight_600 i-font-size_3 i-margin-bottom_2"><i class="fa-regular fa-clock i-color_soft i-margin-end_icon i-opacity_5"></i> {lang="submit_event_start_time"}</div>
|
|
<input name="event_dates[start_time]" id="start_time" type="time" size='12' class="ipsInput ipsInput--text" placeholder="{lang="_time_format_hhmm"}" step='60' min='00:00' value="{$value['start_time']}">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class='i-padding_3 i-background_2' id='elDateGrid_end'>
|
|
<div class='i-flex i-flex-wrap_wrap i-align-items_center i-gap_1'>
|
|
<label class='i-flex_11' id='event_end_date_wrap'>
|
|
<div class="i-color_hard i-font-weight_600 i-font-size_3 i-margin-bottom_2"><i class="fa-regular fa-calendar i-color_soft i-margin-end_icon i-opacity_5"></i> {lang="submit_event_end_date"}</div>
|
|
<input type="date" name="event_dates[end_date]" value="{{if $value['end_date'] instanceof \IPS\DateTime}}{$value['end_date']->format('Y-m-d')}{{else}}{$value['end_date']}{{endif}}" class="ipsInput ipsInput--text" data-control="date" id="event_end_date" placeholder='{expression="mb_strtoupper( str_replace( 'Y', 'YY', \IPS\Member::loggedIn()->language()->preferredDateFormat() ) )"}'>
|
|
</label>
|
|
<label class='i-flex_11' id='end_time_wrap'>
|
|
<div class="i-color_hard i-font-weight_600 i-font-size_3 i-margin-bottom_2"><i class="fa-regular fa-clock i-color_soft i-margin-end_icon i-opacity_5"></i> {lang="submit_event_end_time"}</div>
|
|
<input name="event_dates[end_time]" id="end_time" type="time" size='12' class="ipsInput ipsInput--text" placeholder="{lang="_time_format_hhmm"}" step='60' min='00:00' value="{{if isset( $value['end_time'] )}}{$value['end_time']}{{endif}}">
|
|
</label>
|
|
</div>
|
|
<div id='end_date_controls'>
|
|
<label class="i-margin-top_2 i-flex i-align-items_center i-gap_1">
|
|
<input type="checkbox" role="checkbox" name="event_dates[no_end_time]" {{if !isset( $value['end_time'] ) OR !$value['end_time']}}checked{{endif}} value="1" id="check_no_end_time" class="ipsInput ipsInput--toggle">
|
|
{lang="no_end_time"}
|
|
</label>
|
|
</div>
|
|
</div>
|
|
{{if $value['allow_recurring']}}
|
|
<div class='i-padding_3 i-background_2'>
|
|
<strong class='i-color_hard i-font-weight_600 i-font-size_3 i-margin-bottom_2 i-display_block'><i class="fa-solid fa-clipboard-list i-color_soft i-margin-end_icon i-opacity_5"></i> {lang="submit_event_summary"}</strong>
|
|
<p><span data-role='dateSummary'></span></p>
|
|
<p id='elRepeatRow_hidden' class="i-margin-top_1">
|
|
<label class="i-flex i-align-items_center i-gap_1">
|
|
<input type='checkbox' role='checkbox' name='event_dates[event_repeat]' value='1' id="elRepeatCb" {{if isset($value['event_repeat']) AND $value['event_repeat']}}checked{{endif}} class="ipsInput ipsInput--toggle">
|
|
{lang="submit_event_repeats_check"}
|
|
</label>
|
|
</p>
|
|
<div id='elRepeatRow_shown' class='i-margin-top_1 ipsJS_hide'>
|
|
<span class='i-color_soft'>{lang="submit_event_repeats"}</span>
|
|
<button type="button" id="elRecurEdit" popovertarget="elRecurEdit_menu" class='i-cursor_pointer i-color_hard i-font-weight_600'><span data-role='recurringSummary'></span> <i class='fa-solid fa-caret-down'></i></button>
|
|
<label for="elRepeatCb" id='elRecurRemove' class='i-margin-start_2 i-font-size_-2 i-cursor_pointer'>({lang="submit_event_remove_repeat"})</label>
|
|
<i-dropdown id="elRecurEdit_menu" popover>
|
|
<div class="iDropdown">
|
|
<ul class="ipsForm">
|
|
<li class='ipsFieldRow'>
|
|
<label class='ipsFieldRow__label' for=''>{lang="event_rpm_repeats"}</label>
|
|
<div class='ipsFieldRow__content'>
|
|
{template="select" group="forms" app="core" location="front" params="'event_dates[event_repeats]', $value['event_repeats'], FALSE, array( 'daily' => \IPS\Member::loggedIn()->language()->addToStack('event_rpm_repeats_daily'), 'weekly' => \IPS\Member::loggedIn()->language()->addToStack('event_rpm_repeats_weekly'), 'monthly' => \IPS\Member::loggedIn()->language()->addToStack('event_rpm_repeats_monthly'), 'yearly' => \IPS\Member::loggedIn()->language()->addToStack('event_rpm_repeats_yearly') ), FALSE, '', FALSE, array( 'daily' => array( 'repeatFreqPer_day' ), 'weekly' => array( 'elRepeatOn', 'repeatFreqPer_week' ), 'monthly' => array( 'repeatFreqPer_month' ), 'yearly' => array( 'repeatFreqPer_year' ) ), 'event_repeats'"}
|
|
</div>
|
|
</li>
|
|
<li class='ipsFieldRow'>
|
|
<label class='ipsFieldRow__label' for=''>{lang="event_rpm_repeatevery"}</label>
|
|
<div class='ipsFieldRow__content'>
|
|
{template="select" group="forms" app="core" location="front" params="'event_dates[event_repeat_freq]', $value['event_repeat_freq'], FALSE, array_combine( range( 1, 30 ), range( 1, 30 ) ), FALSE, '', FALSE, array(), 'event_repeat_freq'"}
|
|
<span id='repeatFreqPer_day' {{if $value['event_repeats'] and $value['event_repeats'] != 'daily'}}hidden{{endif}}>{lang="event_rpm_repeatevery_day"}</span>
|
|
<span id='repeatFreqPer_week' {{if $value['event_repeats'] != 'weekly'}}hidden{{endif}}>{lang="event_rpm_repeatevery_week"}</span>
|
|
<span id='repeatFreqPer_month' {{if $value['event_repeats'] != 'monthly'}}hidden{{endif}}>{lang="event_rpm_repeatevery_month"}</span>
|
|
<span id='repeatFreqPer_year' {{if $value['event_repeats'] != 'yearly'}}hidden{{endif}}>{lang="event_rpm_repeatevery_year"}</span>
|
|
</div>
|
|
</li>
|
|
<li class='ipsFieldRow' id='elRepeatOn'>
|
|
<label class='ipsFieldRow__label'>{lang="event_rpm_repeaton"}</label>
|
|
<ul class='ipsFieldRow__content ipsFieldRow__content--checkboxes'>
|
|
{{foreach \IPS\calendar\Date::getDayNames() as $day }}
|
|
<li>
|
|
<input type="checkbox" role="checkbox" name="event_dates[repeat_freq_on_{$day['ical']}]" value="1" id="check_repeat_freq_on_{$day['ical']}" data-iCal='{$day['ical']}' {{if ( isset( $value['repeat_freq_on_' . $day['ical'] ] ) AND $value['repeat_freq_on_' . $day['ical'] ] )}}checked{{endif}} class="ipsInput ipsInput--toggle">
|
|
<label for="check_repeat_freq_on_{$day['ical']}">{$day['abbreviated']}</label>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</li>
|
|
<li class='ipsFieldRow'>
|
|
<label class='ipsFieldRow__label' for=''>{lang="event_rpm_ends"}</label>
|
|
<ul class='ipsFieldRow__content ipsFieldList'>
|
|
<li>
|
|
<input type='radio' name='event_dates[repeat_end]' id='event_repeat_end_never' value='never'{{if !$value['repeat_end_occurrences'] AND !$value['repeat_end_date']}} checked{{endif}} class="ipsInput ipsInput--toggle">
|
|
<div class='ipsFieldList__content'>
|
|
<label for="event_repeat_end_never">{lang="event_rpm_ends_never"}</label>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<input type='radio' name='event_dates[repeat_end]' id='event_repeat_end_afterx' value='after'{{if $value['repeat_end_occurrences']}} checked{{endif}} class="ipsInput ipsInput--toggle">
|
|
<div class='ipsFieldList__content'>
|
|
<label for="event_repeat_end_afterx">{lang="event_rpm_ends_afterx"}</label> <input type='number' name='event_dates[repeat_end_occurrences]' class='ipsInput ipsInput--text cCalendar_shortInput' size='4' min='1' value='{$value['repeat_end_occurrences']}'> {lang="event_rpm_ends_occurrencesx"}
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<input type='radio' name='event_dates[repeat_end]' id='event_repeat_end_ondate' value='date'{{if $value['repeat_end_date']}} checked{{endif}} class="ipsInput ipsInput--toggle">
|
|
<div class='ipsFieldList__content'>
|
|
<label for="event_repeat_end_ondate">{lang="event_rpm_ends_date"}</label> <input type='date' name='event_dates[repeat_end_date]' class='ipsInput ipsInput--text cCalendar_shortInput' size='10' value='{{if $value['repeat_end_date'] instanceof \IPS\calendar\Date}}{$value['repeat_end_date']->mysqlDatetime( FALSE )}{{else}}{$value['repeat_end_date']}{{endif}}'>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class='ipsSubmitRow'>
|
|
<button type='button' class='ipsButton ipsButton--primary' data-action="updateRepeat" popovertarget="elRecurEdit_menu">{lang="ok"}</button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</i-dropdown>
|
|
</div>
|
|
</div>
|
|
{{else}}
|
|
<input type='hidden' name='event_dates[event_repeat]' value='0'>
|
|
<input type='hidden' name='event_dates[repeat_end]' value='never'>
|
|
{{endif}}
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="submit" template_name="submitForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_location="front" template_app="calendar"><![CDATA[
|
|
<form accept-charset='utf-8' class="ipsFormWrap ipsFormWrap--event-submit" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} data-ipsForm data-ipsFormSubmit>
|
|
<input type="hidden" name="{$id}_submitted" value="1">
|
|
{{foreach $hiddenValues as $k => $v}}
|
|
<input type="hidden" name="{$k}" value="{$v}">
|
|
{{endforeach}}
|
|
{{if $uploadField}}
|
|
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
|
|
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
|
|
{{endif}}
|
|
|
|
<div class='ipsBox ipsBox--calendarSubmit ipsPull'>
|
|
<ul class='{$class}'>
|
|
{{foreach $elements as $collection}}
|
|
{{foreach $collection as $inputName => $input}}
|
|
{{if $inputName == 'event_dates'}}
|
|
{$input->html()|raw}
|
|
{{endif}}
|
|
{{endforeach}}
|
|
{{endforeach}}
|
|
</ul>
|
|
<ul class='ipsForm {$class} ipsForm--vertical ipsForm--event-submit'>
|
|
{{foreach $elements as $collection}}
|
|
{{foreach $collection as $inputName => $input}}
|
|
{{if $inputName != 'event_dates'}}
|
|
{$input|raw}
|
|
{{endif}}
|
|
{{endforeach}}
|
|
{{endforeach}}
|
|
</ul>
|
|
<div class='ipsSubmitRow'>
|
|
<button type='submit' class='ipsButton ipsButton--primary'>{lang="submit_event"}</button>
|
|
</div>
|
|
</div>
|
|
</form>]]></template>
|
|
<template template_group="submit" template_name="submitPage" template_data="$output, $pageHeader, $calendar=NULL" template_location="front" template_app="calendar"><![CDATA[
|
|
{{if $calendar and $club = $calendar->club()}}
|
|
{{if settings.clubs and settings.clubs_header == 'full'}}
|
|
{template="header" app="core" group="clubs" params="$club, $calendar"}
|
|
{{endif}}
|
|
{{endif}}
|
|
|
|
{template="pageHeader" group="global" app="core" params="$pageHeader"}
|
|
|
|
{{if isset( \IPS\Request::i()->do ) and \IPS\Request::i()->do === 'livetopic'}}
|
|
<div class="i-margin-block_block">{lang="ai_service_livetopics_desc"}</div>
|
|
{{endif}}
|
|
|
|
{$output|raw}]]></template>
|
|
<template template_group="venue" template_name="upcomingStream" template_data="$date, $events, $venue" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsPager cCalendarNav i-color_hard i-margin-bottom_3 i-position_sticky-top'>
|
|
<div class='ipsPager_prev'>
|
|
<a href="{{if $venue}}{url="app=calendar&module=calendar&controller=venue&id={$venue->_id}&y={$date->lastMonth('year')}&m={$date->lastMonth('mon')}" seoTemplate="calendar_venue" seoTitle="$venue->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=venue&y={$date->lastMonth('year')}&m={$date->lastMonth('mon')}" seoTemplate="calendar_venue"}{{endif}}" title='{lang="cal_month_stream_title" sprintf="$date->lastMonth('monthName'), $date->lastMonth('year')"}' rel='prev nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{$date->lastMonth('monthName')}</span>
|
|
<span class='ipsPager_title'>{$date->lastMonth('year')}</span>
|
|
</a>
|
|
</div>
|
|
<div class='ipsPager_center cCalendarNav' data-role='calendarNav'>
|
|
<h1 class='ipsTitle ipsTitle--h3 i-text-align_center'>{lang="cal_month_title" sprintf="$date->monthName, $date->year"}</h1>
|
|
|
|
</div>
|
|
<div class='ipsPager_next'>
|
|
<a href="{{if $venue}}{url="app=calendar&module=calendar&controller=venue&id={$venue->_id}&y={$date->nextMonth('year')}&m={$date->nextMonth('mon')}" seoTemplate="calendar_venue" seoTitle="$venue->title_seo"}{{else}}{url="app=calendar&module=calendar&controller=venue&y={$date->nextMonth('year')}&m={$date->nextMonth('mon')}" seoTemplate="calendar_venue"}{{endif}}" title='{lang="cal_month_stream_title" sprintf="$date->nextMonth('monthName'), $date->nextMonth('year')"}' rel='next nofollow' data-action='changeView'>
|
|
<span class='ipsPager_type'>{$date->nextMonth('monthName')}</span>
|
|
<span class='ipsPager_title'>{$date->nextMonth('year')}</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<section class='i-background_3 i-padding_3' id='venueStream'>
|
|
{{if \count($events) }}
|
|
<div>
|
|
<div>
|
|
{{foreach $events as $event}}
|
|
<div>
|
|
{template="eventStreamBlock" app="calendar" group="view" params="$event, $date, TRUE, array( 240, 185 ), TRUE"}
|
|
</div>
|
|
{{endforeach}}
|
|
</div>
|
|
</div>
|
|
{{else}}
|
|
<div class='ipsEmptyMessage'>{lang="no_events_month"}</div>
|
|
{{endif}}
|
|
</section>]]></template>
|
|
<template template_group="venue" template_name="view" template_data="$venue, $upcoming=array(), $past=array(), $address=NULL" template_location="front" template_app="calendar"><![CDATA[<div>
|
|
<section>
|
|
<div class='ipsColumns'>
|
|
<aside class='ipsColumns__secondary i-basis_280'>
|
|
{$venue->map( 270, 270 )|raw}
|
|
<div class='i-background_2'>
|
|
{{if $address}}
|
|
<div class='i-padding_2 i-background_3'>
|
|
<h3 class='ipsMinorTitle'>
|
|
<strong>{lang="venue_address"}</strong>
|
|
</h3>
|
|
{$address|raw}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
{{if \IPS\Member::loggedIn()->member_id}}
|
|
<ul class="ipsButtons ipsButtons--main">
|
|
<li>
|
|
<a class="ipsButton ipsButton--primary" href="{url="app=calendar&module=calendar&controller=submit&venue={$venue->id}" seoTemplate="calendar_submit"}" data-ipsDialog data-ipsdialog-size="narrow" rel='nofollow noindex'>{lang="create_event"}</a>
|
|
</li>
|
|
</ul>
|
|
{{endif}}
|
|
</aside>
|
|
<div class='ipsColumns__primary'>
|
|
<div class='ipsBox i-padding_3'>
|
|
{{if $venue->description}}
|
|
<h2 class='ipsTitle ipsTitle--h3 i-margin-bottom_3'>{lang="venue_details"}</h2>
|
|
|
|
<div>
|
|
<div class='ipsRichText'>
|
|
{$venue->description|raw}
|
|
</div>
|
|
</div>
|
|
<br>
|
|
{{endif}}
|
|
<h2 class='ipsTitle ipsTitle--h3 i-margin-bottom_3'>{lang="venue_upcoming_events"}</h2>
|
|
<div data-controller='calendar.front.venue.main'>
|
|
{{if $upcoming}}
|
|
{$upcoming|raw}
|
|
{{else}}
|
|
{lang="no_upcoming_events"}
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="attendees" template_data="$event" template_location="front" template_app="calendar"><![CDATA[<div class="ipsPrint">
|
|
<h1>{setting="board_name"}</h1>
|
|
<h2>{lang="event_attendees" sprintf="$event->title"}</h2>
|
|
<h4 class='date'>
|
|
{$event->_start_date->dayName} {$event->_start_date->mday} {$event->_start_date->monthName}, {$event->_start_date->year}{{if !$event->all_day}}, {$event->_start_date->localeTime( FALSE )}{{endif}}
|
|
{{if $event->_end_date}} - {$event->_end_date->dayName} {$event->_end_date->mday} {$event->_end_date->monthName}, {$event->_end_date->year} {{if !$event->all_day}}, {$event->_end_date->localeTime( FALSE )}{{endif}}{{endif}}
|
|
</h4>
|
|
<div></div>
|
|
<div></div>
|
|
|
|
<h3>{lang="event_rsvp_attendees"}</h3>
|
|
<ul>
|
|
{{if \count( $event->attendees( \IPS\calendar\Event::RSVP_YES ) ) }}
|
|
{{foreach $event->attendees( \IPS\calendar\Event::RSVP_YES ) as $attendee }}
|
|
<li>{$attendee->name}</li>
|
|
{{endforeach}}
|
|
{{else}}
|
|
<li><em>{lang="no_rsvps_yet"}</em></li>
|
|
{{endif}}
|
|
</ul>
|
|
|
|
{{if \count( $event->attendees( \IPS\calendar\Event::RSVP_MAYBE ) ) }}
|
|
<div></div>
|
|
<h3>{lang="rsvp_maybe_attendees"}</h3>
|
|
<ul>
|
|
{{foreach $event->attendees( \IPS\calendar\Event::RSVP_MAYBE ) as $attendee }}
|
|
<li>{$attendee->name}</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
{{endif}}
|
|
|
|
{{if \count( $event->attendees( \IPS\calendar\Event::RSVP_NO ) ) }}
|
|
<div></div>
|
|
<h3>{lang="rsvp_notgoing_attendees"}</h3>
|
|
<ul>
|
|
{{foreach $event->attendees( \IPS\calendar\Event::RSVP_NO ) as $attendee }}
|
|
<li>{$attendee->name}</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
{{endif}}
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="comments" template_data="$event" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='' data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$event->url()}' {{if $event->isLastPage()}}data-lastPage{{endif}} data-feedID='{$event->feedId}' id='comments' data-follow-area-id="event-{$event->id}">
|
|
|
|
{template="featuredComments" group="global" app="core" params="$event->featuredComments(), $event->url()->setQueryString('tab', 'comments')->setQueryString('recommended', 'comments')"}
|
|
<div class="ipsButtonBar ipsButtonBar--top">
|
|
{{if $event->commentPageCount() > 1}}
|
|
<div class="ipsButtonBar__pagination">
|
|
{$event->commentPagination( array( 'tab' ) )|raw}
|
|
</div>
|
|
{{endif}}
|
|
<div class="ipsButtonBar__end">
|
|
{template="commentMultimodHeader" app="core" group="global" params="$event, '#comments'"}
|
|
</div>
|
|
</div>
|
|
|
|
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
|
|
<form action="{$event->url()->csrf()->setQueryString( 'do', 'multimodComment' )->setPage('page',\IPS\Request::i()->page)}" method="post" data-ipsPageAction data-role='moderationTools'>
|
|
{{if ( $comments = $event->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) and \count( $comments ) )}}
|
|
|
|
{{$commentCount=0; $timeLastRead = $event->timeLastRead(); $lined = FALSE;}}
|
|
{{foreach $comments as $comment}}
|
|
{{if !$lined and $timeLastRead and $timeLastRead->getTimestamp() < $comment->mapped('date')}}
|
|
{{if $lined = TRUE and $commentCount}}
|
|
<hr class="ipsUnreadBar">
|
|
{{endif}}
|
|
{{endif}}
|
|
{{$commentCount++;}}
|
|
{$comment->html()|raw}
|
|
{{endforeach}}
|
|
{{else}}
|
|
<p class='ipsEmptyMessage' data-role='noComments'>{lang="no_comments"}</p>
|
|
{{endif}}
|
|
{template="commentMultimod" app="core" group="global" params="$event"}
|
|
</form>
|
|
</div>
|
|
{{if $event->commentPageCount() > 1}}
|
|
<hr class='ipsHr'>
|
|
{$event->commentPagination( array( 'tab' ) )|raw}
|
|
{{endif}}
|
|
{{if $event->commentForm() || $event->locked() || \IPS\Member::loggedIn()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings'] || !\IPS\Member::loggedIn()->checkPostsPerDay()}}
|
|
<div data-role='replyArea' class='ipsComposeAreaWrapper' id='replyForm'>
|
|
{{if $event->commentForm()}}
|
|
{{if $event->locked()}}
|
|
<p class='ipsComposeArea_warning'><i class='fa-solid fa-circle-info'></i> {lang="event_locked_can_comment"}</p>
|
|
{{endif}}
|
|
{$event->commentForm()|raw}
|
|
{{else}}
|
|
{{if $event->locked()}}
|
|
{template="commentUnavailable" group="forms" location="front" app="core" params="'event_locked_cannot_comment'"}
|
|
{{elseif \IPS\Member::loggedIn()->restrict_post}}
|
|
{template="commentUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment', \IPS\Member::loggedIn()->warnings(5,NULL,'rpa'), \IPS\Member::loggedIn()->restrict_post"}
|
|
{{elseif \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
|
|
{template="commentUnavailable" group="forms" location="front" app="core" params="'unacknowledged_warning_cannot_post', \IPS\Member::loggedIn()->warnings( 1, FALSE )"}
|
|
{{elseif !\IPS\Member::loggedIn()->checkPostsPerDay()}}
|
|
{template="commentUnavailable" group="forms" location="front" app="core" params="'member_exceeded_posts_per_day'"}
|
|
{{endif}}
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="coverPhotoOverlay" template_data="$event" template_location="front" template_app="calendar"><![CDATA[{{$sameDay = FALSE;}}
|
|
{{if $event->_end_date}}
|
|
{{$sameDay = !( ($event->_start_date->mday != $event->_end_date->mday) or ($event->_start_date->mon != $event->_end_date->mon) or ($event->_start_date->year != $event->_end_date->year) );}}
|
|
{{endif}}
|
|
|
|
<div class="ipsPageHeader__row">
|
|
<div class="ipsPageHeader__primary" data-ips-hook='header'>
|
|
{{if $event->_happening}}
|
|
<div><span class="ipsBadge i-margin-bottom_1">{$event->_happening}</span></div>
|
|
{{endif}}
|
|
<div class='ipsPageHeader__title'>
|
|
<h1 data-ips-hook='title'>
|
|
{{if $event->canEdit()}}
|
|
<span data-controller="core.front.core.moderation">
|
|
<span data-role="editableTitle" title='{lang="click_hold_edit"}'>{$event->title}</span>
|
|
</span>
|
|
{{else}}
|
|
{$event->title}
|
|
{{endif}}
|
|
</h1>
|
|
<div class='ipsBadges' data-ips-hook='badges'>
|
|
{{foreach $event->badges() as $badge}}{$badge|raw}{{endforeach}}
|
|
</div>
|
|
</div>
|
|
{{if $event->container()->allow_reviews}}
|
|
<div class="ipsPageHeader__rating">{template="rating" group="global" location="front" app="core" params="'large', $event->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $event->memberReviewRating()"} <span class='i-color_soft'>({lang="num_reviews" pluralize="$event->reviews"})</span></div>
|
|
{{endif}}
|
|
{{if \count( $event->tags() ) OR ( $event->canEdit() AND $event::canTag( NULL, $event->container() ) )}}
|
|
{template="tagsWithPrefix" group="global" app="core" params="$event->tags(), $event->prefix(), FALSE, FALSE, ( $event->canEdit() AND ( \count( $event->tags() ) OR $event::canTag( NULL, $event->container() ) ) ) ? $event->url() : NULL"}
|
|
{{endif}}
|
|
</div>
|
|
<div class='ipsCoverPhoto__buttons'>
|
|
<div class='ipsButtons' data-ips-hook='buttons'>
|
|
{{if $event->canRemind()}}
|
|
{template="reminder" app="calendar" group="view" params="$event, $event->getReminder()"}
|
|
{{endif}}
|
|
{{if \count( $event->shareLinks() )}}
|
|
{template="shareButton" app="core" group="sharelinks" params="$event"}
|
|
{{endif}}
|
|
{{if \IPS\Application::appIsEnabled('cloud')}}
|
|
{template="spam" app="cloud" group="spam" params="$event"}
|
|
{{endif}}
|
|
{template="follow" app="core" group="global" params="'calendar', 'event', $event->id, $event->followersCount()"}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="ipsPageHeader__row ipsPageHeader__row--footer">
|
|
<div class="ipsPageHeader__primary">
|
|
<div class="ipsPhotoPanel ipsPhotoPanel--inline">
|
|
{template="userPhoto" app="core" group="global" params="$event->author(), 'tiny'"}
|
|
<div class="ipsPhotoPanel__text" data-ips-hook='metadata'>
|
|
<p class="ipsPhotoPanel__primary">
|
|
{lang="event_created_by" htmlsprintf="$event->author()->link( $event->warningRef(), NULL, $event->isAnonymous() )"}
|
|
{{if $event->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
|
|
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{$event->url( 'reveal' )->csrf()}"><span class="cAuthorPane_badge cAuthorPane_badge_small cAuthorPane_badge--anon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
|
|
{{endif}}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<a href='{$event->container()->url()}' class='cEvents_event cEvents_eventSmall cEvents_style{$event->container()->id}'>{$event->container()->_title}</a>
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="eventBlock" template_data="$event, $date, $truncate=FALSE, $map=array( 300, 200 ), $revertToFirst=FALSE" template_location="front" template_app="calendar"><![CDATA[{{$coverPhoto = $event->coverPhoto();}}
|
|
{{if ( $coverPhoto === null or $coverPhoto->file === null ) and $club = $event->container()->club()}}
|
|
{{$coverPhoto = $club->coverPhoto();}}
|
|
{{endif}}
|
|
<li class="ipsData__item {$event->ui('css')}" data-eventID='{$event->id}' {$event->ui( 'dataAttributes' )}>
|
|
<a href="{$event->url( 'getPrefComment' )}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$event->title}</span></a>
|
|
<div class="ipsData__image" aria-hidden="true">
|
|
<a href="{$event->url( 'getPrefComment' )}" class='ipsCoverPhoto' data-controller='core.global.core.coverPhoto' data-coverOffset='{$coverPhoto->offset}' style='--offset:{$coverPhoto->offset}' aria-hidden="true" tabindex="-1">
|
|
{{if $coverPhoto->file}}
|
|
<div class='ipsCoverPhoto__container'>
|
|
<img src='{$coverPhoto->file->url}' class='ipsCoverPhoto__image' alt='{$event->title}' loading='lazy'>
|
|
</div>
|
|
{{elseif $image = $event->primaryImage()}}
|
|
<div class='ipsCoverPhoto__container'>
|
|
<img src='{$image->url}' class='ipsCoverPhoto__image' alt='{$event->title}' loading='lazy'>
|
|
</div>
|
|
{{endif}}
|
|
</a>
|
|
</div>
|
|
<div class="ipsData__content">
|
|
<div class="ipsData__main">
|
|
<div class="ipsPhotoPanel i-margin-bottom_2">
|
|
<div class='ipsUserPhoto ipsUserPhoto--mini'>
|
|
<img src='{$event->author()->photo}' alt='' loading='lazy'>
|
|
</div>
|
|
<div class="ipsPhotoPanel__text">
|
|
<p class="i-color_primary i-font-weight_500 i-font-size_-2 i-text-transform_uppercase i-margin-bottom_1">
|
|
{{$startDate = $event->nextOccurrence( $date, 'startDate' );}}
|
|
{{if $revertToFirst AND $startDate AND $startDate->mon > $date->mon}}
|
|
{{$startDate = $event->nextOccurrence( \IPS\calendar\Date::getDate( $date->year, $date->mon, 1 ), 'startDate' );}}
|
|
{{endif}}
|
|
{{if $startDate}}
|
|
{{$nextEndDate = $event->nextOccurrence( $startDate ?: $date, 'endDate' );}}
|
|
{{$sameDay = ( $nextEndDate AND $startDate->calendarDate() == $nextEndDate->calendarDate() );}}
|
|
{$startDate->calendarDate()}{{if !$event->all_day}} {$startDate->localeTime( FALSE )} {{endif}}
|
|
{{if $event->_end_date AND $event->nextOccurrence( $startDate ?: $date, 'endDate' ) }}
|
|
<span class="i-opacity_4"><i class="fa-solid fa-arrow-right-long" style="margin-inline:.5em;"></i></span>
|
|
{{if !$sameDay}}
|
|
{$event->nextOccurrence( $startDate ?: $date, 'endDate' )->calendarDate()}
|
|
{{endif}}
|
|
{{if !$event->all_day}}
|
|
{{if !$sameDay}} {{endif}}
|
|
{$event->nextOccurrence( $startDate ?: $date, 'endDate' )->localeTime( FALSE )}
|
|
{{endif}}
|
|
{{endif}}
|
|
{{else}}
|
|
{$event->lastOccurrence( 'startDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'startDate' )->localeTime( FALSE )} {{endif}}
|
|
{{if $event->_end_date AND $event->lastOccurrence( 'endDate' ) }}
|
|
<span class="i-opacity_4"><i class="fa-solid fa-arrow-right-long" style="margin-inline:.5em;"></i></span>{$event->lastOccurrence( 'endDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
{{endif}}
|
|
{{endif}}
|
|
</p>
|
|
<h2 class='ipsData__title' data-ips-hook='title'>
|
|
<div class="ipsBadges" data-ips-hook='badges'>
|
|
{{if $event->hidden() === 1}}<span class="ipsBadge ipsBadge--icon ipsBadge--warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa-solid fa-triangle-exclamation'></i></span>{{endif}}
|
|
</div>
|
|
<a href='{$event->url( "getPrefComment" )}' title='{$event->title}'>{$event->title}</a>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="ipsColumns">
|
|
<div class="ipsColumns__primary" data-ips-hook='details'>
|
|
{{if $event->recurring}}<p class='i-color_soft i-margin-bottom_2'>{$event->_recurring_text}</p>{{endif}}
|
|
<div class='ipsRichText {{if ( \IPS\Request::i()->isAjax() or $truncate ) && $event->content}} ipsTruncate_3{{endif}}'>
|
|
{{if $event->content}}
|
|
{{if \IPS\Request::i()->isAjax() or $truncate}}
|
|
{$event->truncated()|raw}
|
|
{{else}}
|
|
{$event->content|raw}
|
|
{{endif}}
|
|
{{endif}}
|
|
<p class='ipsRichText i-margin-block_2'><a href='{$event->url( "getPrefComment" )}'>{lang="event_details"}</a></p>
|
|
</div>
|
|
{{if $event->rsvp }}
|
|
<h4 class="i-font-weight_500 i-margin-top_3">{lang="event_rsvp_attendees_list" pluralize="$event->attendeeCount( \IPS\calendar\Event::RSVP_YES )"}</h4>
|
|
{{if \count( $event->attendees( \IPS\calendar\Event::RSVP_YES, 5 ) )}}
|
|
<ul class='ipsCaterpillar i-margin-top_2'>
|
|
{{foreach $event->attendees( \IPS\calendar\Event::RSVP_YES, 5 ) as $attendee}}
|
|
<li>{template="userPhoto" app="core" group="global" params="$attendee, 'tiny'"}</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
{{endif}}
|
|
{{endif}}
|
|
</div>
|
|
{{if $map !== FALSE AND $event->map( $map[0], $map[1] )}}
|
|
<div class='ipsColumns__secondary i-basis_300 cCalendarBlock_map'>
|
|
{$event->map( $map[0], $map[1] )|raw}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
<div class="i-flex i-flex-wrap_wrap i-gap_2 i-align-items_center i-margin-top_3" data-ips-hook='stats'>
|
|
<a href='{$event->container()->url()}' class='cEvents_event cEvents_eventSmall cEvents_style{$event->container()->id} i-margin-end_auto'>{$event->container()->_title}</a>
|
|
<div class="i-flex i-flex-wrap_wrap i-gap_3 i-align-items_center">
|
|
{{if $event->container()->allow_comments}}<a href='{$event->url()->setQueryString( 'tab', 'comments' )}' class="i-color_soft">{lang="event_comment_count" pluralize="$event->comments"}</a>{{endif}}
|
|
{{if $event->container()->allow_reviews}}<a href='{$event->url()->setQueryString( 'tab', 'reviews' )}' class="i-color_soft">{lang="event_review_count" pluralize="$event->reviews"}</a>{{endif}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{if settings.core_datalayer_enabled}}
|
|
<script>
|
|
$('body').trigger( 'ipsDataLayer', {
|
|
_key: 'content_view',
|
|
_properties: {
|
|
{{foreach $event->getDataLayerProperties() as $key => $value}}
|
|
{expression="json_encode( $value )" raw="true"},
|
|
{{endforeach}}
|
|
'hovercard',
|
|
}
|
|
} )
|
|
</script>
|
|
{{endif}}
|
|
</li>]]></template>
|
|
<template template_group="view" template_name="eventBlocks" template_data="$events" template_location="front" template_app="calendar"><![CDATA[
|
|
<ul class="ipsGrid ipsGrid--auto-fit i-basis_340 i-gap_4">
|
|
{{foreach $events as $event}}
|
|
<li class='i-flex i-gap_3'>
|
|
<div class='i-basis_50 i-flex_00'>
|
|
{{$nextOccurrence = $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: $event->lastOccurrence();}}
|
|
<time datetime='{$nextOccurrence->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$nextOccurrence->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$nextOccurrence->mday}</span>
|
|
</time>
|
|
</div>
|
|
<div class='i-flex_11'>
|
|
<div class='ipsTitle ipsTitle--h6'><a href="{$event->url( "getPrefComment" )}" title='{lang="view_this_event" sprintf="$event->title"}'>{$event->title}</a></div>
|
|
<span class='i-color_soft i-font-size_-1'>{lang="byline_nodate" sprintf="$event->author()->name"}</span>
|
|
</div>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>]]></template>
|
|
<template template_group="view" template_name="eventHovercard" template_data="$event, $date" template_location="front" template_app="calendar"><![CDATA[<i-data>
|
|
<ul class="ipsData ipsData--grid ipsData--eventHovercard">
|
|
{template="eventBlock" app="calendar" group="view" params="$event, $date, true"}
|
|
</ul>
|
|
</i-data>]]></template>
|
|
<template template_group="view" template_name="eventSidebar" template_data="$event, $attendees, $tabId='', $address=NULL" template_location="front" template_app="calendar"><![CDATA[
|
|
<div class='ipsBlockSpacer'>
|
|
{{if !$event->online and ( $address || $event->map( 500, 500 ) )}}
|
|
<div data-ips-hook="mapWrapper" class='ipsBox ipsBox--calendarEventMap ipsPull'>
|
|
{{if $event->map( 500, 500 )}}
|
|
<div data-ips-hook="map" class='cEvents__sidebarMap'>
|
|
{$event->map( 500, 500 )|raw}
|
|
</div>
|
|
{{endif}}
|
|
{{if $event->venue || $address}}
|
|
<div data-ips-hook="venueWrapper" class='i-padding_3'>
|
|
{{if $event->venue}}
|
|
<div data-ips-hook="venue" class=''>
|
|
<h3 class='ipsMinorTitle'>
|
|
<strong>{lang="event_venue_name"}</strong>
|
|
</h3>
|
|
{lang="calendar_venue_{$event->venue()->id}" escape="true"}
|
|
</div>
|
|
{{endif}}
|
|
{{if $address}}
|
|
<div data-ips-hook="address">{$address|raw}</div>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
|
|
{{if $event->online and $event->url}}
|
|
{{if ( ( $event->rsvp and isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] ) ) or !$event->rsvp ) and !$event->hasPassed() }}
|
|
<div data-ips-hook="rsvped" class='ipsBox ipsBox--calendarEventAttendees ipsPull i-padding_3'>
|
|
<a data-ips-hook="rsvpedEventUrl" href='{$event->url}' target='_blank' class='ipsButton ipsButton--primary ipsButton--wide i-margin-bottom_block'>{lang="open_event"} <i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i></a>
|
|
{{if $event->online_type}}
|
|
<div data-ips-hook="rsvpedOnline" class='cEvents__sidebarOnlineLogo'>
|
|
<span>{lang="powered_by"}</span>
|
|
{{if $event->online_type === "zoom"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 224"><path d="M814.1856 67.3887c3.8225 6.595 5.073 14.0983 5.486 22.5337l.5427 11.2433v78.62l.5544 11.2551c1.109 18.3809 14.6646 31.9719 33.187 33.128l11.1961.5546V101.1657l.5545-11.2433c.4601-8.341 1.699-15.986 5.5804-22.628a44.9022 44.9022 0 0 1 77.747.1415c3.8225 6.595 5.0141 14.2399 5.4742 22.4865l.5545 11.2079v78.6555l.5545 11.255c1.1562 18.4753 14.6056 32.0663 33.187 33.128l11.1961.5546V89.9224A89.8988 89.8988 0 0 0 910.1366.0236a89.6628 89.6628 0 0 0-67.424 30.45A89.7808 89.7808 0 0 0 775.2884.0118c-18.664 0-35.9831 5.663-50.3292 15.4433C716.2053 5.6865 696.6211.0118 685.3779.0118v224.7116l11.2432-.5545c18.8056-1.2388 32.3966-14.464 33.128-33.128l.6018-11.2551v-78.6202l.5545-11.2432c.4719-8.4826 1.6516-15.9387 5.486-22.5809a45.0202 45.0202 0 0 1 38.897-22.392 44.9494 44.9494 0 0 1 38.8972 22.4392zm-769.248 156.792 11.2432.5427h168.5307l-.5545-11.2079c-1.5219-18.4752-14.6056-31.9719-33.1398-33.1752l-11.2432-.5545H78.6673l134.801-134.8482-.5545-11.196c-.873-18.664-14.5112-32.1489-33.1398-33.1753L168.5307.059 0 .0118l.5545 11.2433c1.4747 18.2983 14.7472 32.078 33.128 33.1398l11.255.5545h101.1067L11.2432 179.7976l.5545 11.2432c1.109 18.5225 14.4759 31.9365 33.1399 33.128zM641.266 32.9039a112.3499 112.3499 0 0 1 0 158.9038 112.4325 112.4325 0 0 1-158.9391 0c-43.8758-43.8758-43.8758-115.028 0-158.9038A112.2909 112.2909 0 0 1 561.7258 0a112.3735 112.3735 0 0 1 79.5403 32.9157Zm-31.7949 31.8185a67.4477 67.4477 0 0 1 0 95.3494 67.4477 67.4477 0 0 1-95.3493 0 67.4477 67.4477 0 0 1 0-95.3494 67.4477 67.4477 0 0 1 95.3493 0zM325.9126 0a112.2909 112.2909 0 0 1 79.3987 32.9157c43.8876 43.864 43.8876 115.028 0 158.892a112.4325 112.4325 0 0 1-158.9391 0c-43.8758-43.8758-43.8758-115.028 0-158.9038A112.2909 112.2909 0 0 1 325.771 0Zm47.6038 64.6988a67.4477 67.4477 0 0 1 0 95.3612 67.4477 67.4477 0 0 1-95.3493 0 67.4477 67.4477 0 0 1 0-95.3494 67.4477 67.4477 0 0 1 95.3493 0z" fill="#2d8cff" fill-rule="evenodd"/></svg>
|
|
{{elseif $event->online_type === "eventbrite"}}
|
|
<svg viewBox="0 0 200 36" xmlns="http://www.w3.org/2000/svg"><path d="M186.292 17.513a6.657 6.657 0 0 1 6.878 2.584l-11.905 2.693c.411-2.52 2.333-4.668 5.027-5.277zm6.945 9.91a6.57 6.57 0 0 1-3.98 2.679c-2.711.614-5.417-.51-6.907-2.626l11.941-2.702 1.945-.44 3.72-.841a11.77 11.77 0 0 0-.31-2.372c-1.514-6.426-8.056-10.432-14.612-8.949-6.556 1.484-10.644 7.896-9.13 14.321 1.513 6.426 8.055 10.433 14.611 8.95 3.863-.875 6.868-3.46 8.376-6.751l-5.654-1.269zm-28.102 7.695V18.082h-3.677v-5.804h3.677V4.289h6.244v7.989h4.69v5.804h-4.69v17.036h-6.244zm-11.928 0h6.03v-22.84h-6.03v22.84zm-.784-30.853c0-2.114 1.667-3.7 3.824-3.7s3.775 1.586 3.775 3.7c0 2.115-1.618 3.748-3.775 3.748s-3.824-1.633-3.824-3.748zm-1.315 8.077c-3.083.16-4.901.633-6.75 1.973v-2.037h-6.027v22.84h6.026v-11.2c0-3.524.86-5.529 6.751-5.726v-5.85zm-33.601 11.715c.15 3.333 3.051 6.128 6.602 6.128 3.602 0 6.553-2.942 6.553-6.422 0-3.432-2.951-6.373-6.553-6.373-3.55 0-6.452 2.843-6.602 6.128v.539zm-5.88 11.061V1.38l6.03-1.364v13.962c1.863-1.49 4.07-2.115 6.472-2.115 6.864 0 12.355 5.286 12.355 11.918 0 6.583-5.49 11.965-12.355 11.965-2.402 0-4.609-.624-6.472-2.114v1.487h-6.03v-.001zm-12.835 0V17.965h-3.677v-5.687h3.677V4.283l6.244-1.413v9.408h4.69v5.687h-4.69v17.153h-6.244zm-11.05 0V22.915c0-4.421-2.403-5.382-4.806-5.382-2.402 0-4.804.913-4.804 5.286v12.299h-6.03v-22.84h6.03v1.699c1.323-.961 2.941-2.115 6.129-2.115 5.098 0 9.511 2.932 9.511 10.092v13.164h-6.03zM56.831 17.513c2.694-.61 5.382.495 6.878 2.584L51.805 22.79c.41-2.52 2.333-4.668 5.026-5.277zm6.945 9.91a6.57 6.57 0 0 1-3.98 2.679 6.656 6.656 0 0 1-6.907-2.626l11.942-2.702 1.945-.44 3.719-.841a11.77 11.77 0 0 0-.31-2.372c-1.514-6.426-8.056-10.432-14.612-8.949-6.556 1.484-10.644 7.896-9.13 14.321 1.514 6.426 8.055 10.433 14.612 8.95 3.863-.875 6.868-3.46 8.375-6.751l-5.654-1.269zm-31.538 7.695-9.365-22.84h6.57l5.933 15.49 5.981-15.49h6.57l-9.364 22.84h-6.325zM11.05 17.507a6.658 6.658 0 0 1 6.879 2.584L6.024 22.785c.41-2.52 2.333-4.668 5.026-5.278zm6.945 9.91a6.57 6.57 0 0 1-3.98 2.68c-2.71.613-5.416-.51-6.907-2.626l11.942-2.702 1.945-.44 3.719-.842a11.782 11.782 0 0 0-.31-2.371c-1.514-6.426-8.055-10.433-14.612-8.95C3.236 13.65-.85 20.063.662 26.489c1.514 6.426 8.056 10.432 14.612 8.949 3.863-.874 6.868-3.46 8.376-6.75l-5.655-1.27v-.001z" fill="#F05537"/></svg>
|
|
{{elseif $event->online_type === "on24"}}
|
|
<svg viewBox="-0.0374 -5.1555 205.0374 63.5155" xmlns="http://www.w3.org/2000/svg"><path d="m122.92 12.87-.76-.55c5.08-7.59 10.41-12 20.34-12 10.15 0 17.51 6.78 17.51 16v.17c0 8.24-4.35 13.31-14.28 21.94l-15.1 13.41h29.94v5.83h-35.23a4.21 4.21 0 0 1-4.21-4.21v-.73L141.6 34.6c8.63-7.76 11.79-12.11 11.79-17.75C153.4 10.21 148.16 6 142 6c-5 0-8.65 2-12.15 5.9l-.71.76a4.21 4.21 0 0 1-5.95.35z" fill="#232323"/><path d="M194.25 57.61A4.21 4.21 0 0 1 190 53.4v-9.21h-26.83a4.21 4.21 0 0 1-4-3l-.46-1.68 32-38.83h5.66v38.18H205v5.33h-8.7v13.42zm-4.17-18.75V9.73l-23.74 29.13z" fill="#232323"/><path d="M76.67 18.72v38.89h-6.38a3.35 3.35 0 0 1-3.68-3.69V.86h7.23a4.24 4.24 0 0 1 3.25 1.5l27.34 36.25V.86l6.4.05a3.35 3.35 0 0 1 3.68 3.68v53h-6.28a4.25 4.25 0 0 1-3.32-1.6zM50.22 6.26l.07.11a21.59 21.59 0 0 1 4 15.63C53 33.17 43.91 41.21 34.06 40c-7.83-1-13.78-7.52-15.21-15.75-3.12 7.25-.85 15.32 5.28 20.59a15.36 15.36 0 0 0 6.15 3.45H29.2a20.7 20.7 0 1 1 18.42-32l.13.14C45.09 6.94 37.93 0 26.09 0a22.37 22.37 0 0 0-10.82 2.77A29.63 29.63 0 0 0 0 28.62C0 45 13.56 58.36 30.27 58.36S60.55 45 60.55 28.62A29.42 29.42 0 0 0 50.26 6.29z" fill="#3040e8"/></svg>
|
|
{{elseif $event->online_type === "facebook"}}
|
|
<svg viewBox="0 0 62.488 12.094" xmlns="http://www.w3.org/2000/svg"><g><path d="M4.8891 1.8945c-.7357 0-.9484.3263-.9484 1.046v1.194h1.9624l-.1967 1.9287H3.9415v5.8536h-2.355V6.0632H0V4.1344h1.5865v-1.161C1.5865 1.0276 2.371 0 4.5598 0c.4586-.001.917.0262 1.3723.0816v1.8152ZM6.0663 7.7801c0-2.1743 1.03-3.8119 3.1882-3.8119 1.1771 0 1.896.6053 2.2399 1.357V4.1345h2.2559v7.7824h-2.2559v-1.1771c-.327.7524-1.0628 1.341-2.2399 1.341-2.1583 0-3.1882-1.6353-3.1882-3.8119Zm2.3542.5238c0 1.1603.4246 1.9288 1.5202 1.9288.9651 0 1.4554-.703 1.4554-1.8145v-.7814c0-1.1116-.4903-1.8145-1.4554-1.8145-1.0956 0-1.5202.7685-1.5202 1.9288ZM18.6554 3.9705c.9149 0 1.7817.1967 2.256.523l-.523 1.668a3.7043 3.7043 0 0 0-1.5698-.3598c-1.2755 0-1.8297.7357-1.8297 1.9952v.4574c0 1.2595.5557 1.9952 1.8297 1.9952a3.7055 3.7055 0 0 0 1.5697-.3599l.523 1.6673c-.4742.3271-1.3402.5238-2.2559.5238-2.7636 0-4.0223-1.4882-4.0223-3.8752v-.3598c0-2.387 1.2587-3.8752 4.0223-3.8752ZM21.2216 8.323v-.6862c0-2.2071 1.2587-3.6594 3.8264-3.6594 2.4198 0 3.4825 1.4714 3.4825 3.6297v1.2426h-4.9554c.0495 1.0628.5237 1.537 1.8297 1.537.8836 0 1.8152-.18 2.5021-.4742l.4308 1.6124c-.6214.3278-1.8968.5726-3.0244.5726-2.9801-.0008-4.0917-1.4874-4.0917-3.7746Zm2.3542-1.014h2.8452v-.196c0-.85-.343-1.5247-1.3722-1.5247-1.0636.0007-1.473.6716-1.473 1.7176ZM37.2575 8.271c0 2.1744-1.046 3.812-3.202 3.812-1.1771 0-1.9944-.5886-2.3214-1.341v1.177H29.511V.2266L31.8652.013v5.1994c.343-.6861 1.0955-1.2427 2.191-1.2427 2.1584 0 3.202 1.6353 3.202 3.812Zm-2.3542-.5397c0-1.0955-.4247-1.9128-1.553-1.9128-.9652 0-1.4882.6862-1.4882 1.7985v.8172c0 1.1116.523 1.7985 1.4882 1.7985 1.1283 0 1.553-.8173 1.553-1.9128ZM38.045 8.2215v-.3918c0-2.2407 1.2755-3.8592 3.8752-3.8592s3.876 1.6185 3.876 3.8592v.3918c0 2.2399-1.2755 3.8592-3.8752 3.8592s-3.876-1.6193-3.876-3.8592Zm5.3962-.5557c0-1.03-.4254-1.8473-1.5248-1.8473-1.0993 0-1.521.8173-1.521 1.8473v.7196c0 1.03.4255 1.8473 1.521 1.8473 1.0956 0 1.5248-.8173 1.5248-1.8473ZM46.5791 8.2215v-.3918c0-2.2407 1.2755-3.8592 3.8752-3.8592s3.8752 1.6185 3.8752 3.8592v.3918c0 2.2399-1.2755 3.8592-3.8752 3.8592s-3.8752-1.6193-3.8752-3.8592Zm5.3962-.5557c0-1.03-.4255-1.8473-1.521-1.8473s-1.5202.8173-1.5202 1.8473v.7196c0 1.03.4247 1.8473 1.5202 1.8473s1.521-.8173 1.521-1.8473ZM57.5665 7.8457l2.3215-3.7113h2.5014l-2.4358 3.8424 2.5341 3.94h-2.5014l-2.4198-3.812v3.812h-2.355V.2265l2.355-.2135Z" fill="#1877f2"/></g></svg>
|
|
{{elseif $event->online_type === "google"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 272 92"><path fill="#EA4335" d="M115.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18C71.25 34.32 81.24 25 93.5 25s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44S80.99 39.2 80.99 47.18c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#FBBC05" d="M163.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18c0-12.85 9.99-22.18 22.25-22.18s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44s-12.51 5.46-12.51 13.44c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#4285F4" d="M209.75 26.34v39.82c0 16.38-9.66 23.07-21.08 23.07-10.75 0-17.22-7.19-19.66-13.07l8.48-3.53c1.51 3.61 5.21 7.87 11.17 7.87 7.31 0 11.84-4.51 11.84-13v-3.19h-.34c-2.18 2.69-6.38 5.04-11.68 5.04-11.09 0-21.25-9.66-21.25-22.09 0-12.52 10.16-22.26 21.25-22.26 5.29 0 9.49 2.35 11.68 4.96h.34v-3.61h9.25zm-8.56 20.92c0-7.81-5.21-13.52-11.84-13.52-6.72 0-12.35 5.71-12.35 13.52 0 7.73 5.63 13.36 12.35 13.36 6.63 0 11.84-5.63 11.84-13.36z"/><path fill="#34A853" d="M225 3v65h-9.5V3h9.5z"/><path fill="#EA4335" d="m262.02 54.48 7.56 5.04c-2.44 3.61-8.32 9.83-18.48 9.83-12.6 0-22.01-9.74-22.01-22.18 0-13.19 9.49-22.18 20.92-22.18 11.51 0 17.14 9.16 18.98 14.11l1.01 2.52-29.65 12.28c2.27 4.45 5.8 6.72 10.75 6.72 4.96 0 8.4-2.44 10.92-6.14zm-23.27-7.98 19.82-8.23c-1.09-2.77-4.37-4.7-8.23-4.7-4.95 0-11.84 4.37-11.59 12.93z"/><path fill="#4285F4" d="M35.29 41.41V32H67c.31 1.64.47 3.58.47 5.68 0 7.06-1.93 15.79-8.15 22.01-6.05 6.3-13.78 9.66-24.02 9.66C16.32 69.35.36 53.89.36 34.91.36 15.93 16.32.47 35.3.47c10.5 0 17.98 4.12 23.6 9.49l-6.64 6.64c-4.03-3.78-9.49-6.72-16.97-6.72-13.86 0-24.7 11.17-24.7 25.03 0 13.86 10.84 25.03 24.7 25.03 8.99 0 14.11-3.61 17.39-6.89 2.66-2.66 4.41-6.46 5.1-11.65l-22.49.01z"/></svg>
|
|
{{elseif $event->online_type === "webex"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 195.4 77.5"><defs><style>.svg__webex-logo{fill:#010101}</style></defs><path class="svg__webex-logo" d="M47.5 13.9H55L44.1 46.7h-8.6L27.4 22l-8.1 24.8h-8.4L0 13.9h7.6l7.8 25 8-25h8.1L39.7 39l7.8-25.1ZM87 33H62.8c.2 1.7.9 3.3 1.8 4.7.9 1.2 2.1 2.2 3.4 2.8 1.4.6 2.9.9 4.4.9 1.7 0 3.4-.3 5-.9 1.6-.6 3.2-1.5 4.5-2.6l3.6 5.1c-1.8 1.6-3.9 2.8-6.2 3.5-2.4.7-4.8 1.1-7.3 1.1-3 .1-6-.7-8.7-2.1-2.5-1.4-4.6-3.5-5.9-6.1-1.4-2.6-2.1-5.6-2.1-9.1-.1-3.1.7-6.2 2.1-9 1.3-2.5 3.3-4.6 5.8-6.1 2.6-1.5 5.5-2.2 8.5-2.2 2.8-.1 5.6.7 8.1 2.2 2.4 1.5 4.3 3.6 5.5 6.1 1.4 2.8 2 5.9 2 9-.2.7-.2 1.6-.3 2.7Zm-7.2-5.5c-.4-2.6-1.3-4.5-2.8-6-1.4-1.4-3.3-2.1-5.5-2.1-2.4 0-4.4.7-5.9 2.2s-2.4 3.4-2.8 5.9h17ZM117.6 15.3c2.5 1.5 4.5 3.6 5.9 6.2 1.5 2.7 2.2 5.8 2.2 8.9s-.7 6.2-2.2 8.9c-1.4 2.6-3.4 4.7-5.9 6.2s-5.4 2.3-8.3 2.2c-2 0-4.1-.4-5.9-1.2-1.7-.8-3.2-2-4.4-3.5v3.9h-7.2V0H99v17.9c1.2-1.5 2.7-2.7 4.4-3.5 1.9-.9 3.9-1.3 5.9-1.2 2.9-.1 5.8.6 8.3 2.1Zm-3.9 24.2c1.5-.9 2.7-2.2 3.5-3.8.8-1.7 1.2-3.5 1.2-5.3s-.4-3.7-1.2-5.3c-.8-1.6-2-2.9-3.5-3.8-1.6-1-3.4-1.4-5.2-1.4s-3.6.4-5.2 1.4c-1.5.9-2.7 2.2-3.5 3.8-.8 1.7-1.3 3.5-1.2 5.4 0 1.9.4 3.7 1.2 5.4.8 1.6 2 2.9 3.5 3.8 1.6.9 3.3 1.4 5.2 1.4 1.8-.2 3.6-.7 5.2-1.6ZM161.2 33H137c.2 1.7.9 3.3 1.8 4.7.9 1.2 2.1 2.2 3.4 2.8 1.4.6 2.9.9 4.4.9 1.7 0 3.4-.3 5-.9 1.6-.6 3.2-1.5 4.5-2.6l3.6 5.1c-1.8 1.6-3.9 2.8-6.2 3.5-2.4.7-4.8 1.1-7.3 1.1-3 .1-6-.7-8.7-2.1-2.5-1.4-4.6-3.5-5.9-6.1-1.4-2.6-2.1-5.6-2.1-9.1-.1-3.1.7-6.2 2.1-9 1.3-2.5 3.3-4.6 5.8-6.1 2.6-1.5 5.5-2.2 8.5-2.2 2.8-.1 5.6.7 8.1 2.2 2.4 1.5 4.3 3.6 5.5 6.1 1.4 2.8 2 5.9 2 9-.1.7-.2 1.6-.3 2.7Zm-7.2-5.5c-.4-2.6-1.3-4.5-2.8-6-1.4-1.4-3.3-2.1-5.6-2.1s-4.4.7-5.9 2.2c-1.5 1.4-2.4 3.4-2.8 5.9H154ZM195.4 46.8h-8.8l-8.3-11.4-8.2 11.4h-8.4L174.1 30l-12.3-16.1h8.8l8 11 8-11h8.5l-12.1 16 12.4 16.9ZM109.1 73.9h-1.5V60.7h1.8v5c.4-.5.8-.9 1.4-1.2s1.2-.4 1.8-.4 1.2.1 1.8.3c.6.3 1 .6 1.4 1.1.7.9 1 2.1 1 3.5 0 1.7-.5 3-1.4 4-.4.4-.9.7-1.4.9-.5.2-1.1.3-1.6.3-.6 0-1.2-.1-1.8-.4-.5-.3-1-.7-1.4-1.2l-.1 1.3ZM115 69c0-1.2-.3-2.1-.9-2.7-.2-.2-.5-.4-.9-.6-.3-.1-.7-.2-1-.2-.4 0-.8.1-1.2.2-.4.2-.7.4-.9.7-.5.7-.8 1.6-.7 2.5 0 1.2.3 2.2.9 2.8.2.3.6.5.9.6.3.1.7.2 1.1.2s.8-.1 1.2-.2c.4-.2.7-.4.9-.8.4-.4.6-1.3.6-2.5ZM126.3 64.4l-3.3 9.7c-.4 1.3-.9 2.2-1.3 2.6-.2.3-.5.5-.8.6s-.7.2-1 .2c-.4 0-.8-.1-1.1-.2v-1.4c.3.1.6.1.9.1.2 0 .3 0 .5-.1s.3-.2.4-.3c.3-.5.6-1.1.8-1.7h-.6l-3.5-9.6h1.9l2.7 8.1 2.7-8.1 1.7.1ZM150.5 60.7h-3.3V74h3.3V60.7ZM177.5 64.5c-.9-.5-1.8-.7-2.8-.7-2.2 0-3.7 1.5-3.7 3.5s1.4 3.5 3.7 3.5c1 0 1.9-.2 2.8-.7v3.6c-1 .3-2 .5-3 .5-3.8 0-7.1-2.6-7.1-6.9 0-4 3-6.9 7.1-6.9 1 0 2.1.2 3 .5v3.6ZM142.6 64.5c-.9-.5-1.8-.7-2.8-.7-2.2 0-3.7 1.5-3.7 3.5s1.4 3.5 3.7 3.5c1 0 1.9-.2 2.8-.7v3.6c-1 .3-2 .5-3.1.5-3.8 0-7.1-2.6-7.1-6.9 0-4 3-6.9 7.1-6.9 1 0 2.1.2 3.1.5v3.6ZM188 63.9c-.5 0-.9.1-1.3.3-.4.2-.8.4-1.1.8-.3.3-.6.7-.7 1.1-.2.4-.3.9-.2 1.3 0 .5.1.9.2 1.3.2.4.4.8.7 1.1.3.3.7.6 1.1.8.4.2.9.3 1.3.3.5 0 .9-.1 1.3-.3.4-.2.8-.4 1.1-.8.3-.3.6-.7.7-1.1.2-.4.3-.9.2-1.3 0-.5-.1-.9-.2-1.3-.2-.4-.4-.8-.7-1.1-.3-.3-.7-.6-1.1-.8-.4-.3-.8-.3-1.3-.3Zm7 3.4c0 3.8-2.9 6.9-7 6.9s-7-3.1-7-6.9 2.9-6.9 7-6.9c4.1.1 7 3.2 7 6.9ZM163.2 63.7c-.9-.2-1.7-.4-2.6-.4-1.3 0-2.1.4-2.1 1.1 0 .8 1 1.1 1.5 1.3l.9.3c2.2.7 3.2 2.2 3.2 3.8 0 3.3-2.9 4.4-5.5 4.4-1.2 0-2.4-.1-3.6-.4v-3.1c1 .3 2.1.5 3.2.5 1.7 0 2.4-.5 2.4-1.2s-.7-1.1-1.5-1.3l-.7-.2c-1.8-.6-3.4-1.7-3.4-3.9 0-2.5 1.8-4.1 4.9-4.1 1.1 0 2.2.2 3.3.4v2.8Z"/></svg>
|
|
{{elseif $event->online_type === "slack"}}
|
|
<svg viewBox="0 0 498 127" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="m159.5 99.5 6.2-14.4c6.7 5 15.6 7.6 24.4 7.6 6.5 0 10.6-2.5 10.6-6.3-.1-10.6-38.9-2.3-39.2-28.9-.1-13.5 11.9-23.9 28.9-23.9 10.1 0 20.2 2.5 27.4 8.2L212 56.5c-6.6-4.2-14.8-7.2-22.6-7.2-5.3 0-8.8 2.5-8.8 5.7.1 10.4 39.2 4.7 39.6 30.1 0 13.8-11.7 23.5-28.5 23.5-12.3 0-23.6-2.9-32.2-9.1m237.9-19.6c-3.1 5.4-8.9 9.1-15.6 9.1-9.9 0-17.9-8-17.9-17.9 0-9.9 8-17.9 17.9-17.9 6.7 0 12.5 3.7 15.6 9.1l17.1-9.5c-6.4-11.4-18.7-19.2-32.7-19.2-20.7 0-37.5 16.8-37.5 37.5s16.8 37.5 37.5 37.5c14.1 0 26.3-7.7 32.7-19.2l-17.1-9.5zM228.8 2.5h21.4v104.7h-21.4zm194.1 0v104.7h21.4V75.8l25.4 31.4h27.4l-32.3-37.3 29.9-34.8h-26.2L444.3 64V2.5zM313.8 80.1c-3.1 5.1-9.5 8.9-16.7 8.9-9.9 0-17.9-8-17.9-17.9 0-9.9 8-17.9 17.9-17.9 7.2 0 13.6 4 16.7 9.2v17.7zm0-45v8.5c-3.5-5.9-12.2-10-21.3-10-18.8 0-33.6 16.6-33.6 37.4 0 20.8 14.8 37.6 33.6 37.6 9.1 0 17.8-4.1 21.3-10v8.5h21.4v-72h-21.4z" fill="#000"/><path d="M27.2 80c0 7.3-5.9 13.2-13.2 13.2C6.7 93.2.8 87.3.8 80c0-7.3 5.9-13.2 13.2-13.2h13.2V80zm6.6 0c0-7.3 5.9-13.2 13.2-13.2 7.3 0 13.2 5.9 13.2 13.2v33c0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V80z" fill="#E01E5A"/><path d="M47 27c-7.3 0-13.2-5.9-13.2-13.2C33.8 6.5 39.7.6 47 .6c7.3 0 13.2 5.9 13.2 13.2V27H47zm0 6.7c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H13.9C6.6 60.1.7 54.2.7 46.9c0-7.3 5.9-13.2 13.2-13.2H47z" fill="#36C5F0"/><path d="M99.9 46.9c0-7.3 5.9-13.2 13.2-13.2 7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H99.9V46.9zm-6.6 0c0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V13.8C66.9 6.5 72.8.6 80.1.6c7.3 0 13.2 5.9 13.2 13.2v33.1z" fill="#2EB67D"/><path d="M80.1 99.8c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2-7.3 0-13.2-5.9-13.2-13.2V99.8h13.2zm0-6.6c-7.3 0-13.2-5.9-13.2-13.2 0-7.3 5.9-13.2 13.2-13.2h33.1c7.3 0 13.2 5.9 13.2 13.2 0 7.3-5.9 13.2-13.2 13.2H80.1z" fill="#ECB22E"/></g></svg>
|
|
{{elseif $event->online_type === "discord"}}
|
|
<svg id="svg__discord-a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 292 56.47"><defs><clipPath id="svg__discord-b"><path class="svg__discord-d" d="M0 0h292v56.47H0z"/></clipPath><clipPath id="svg__discord-c"><path class="svg__discord-d" d="M0 0h292v56.47H0z"/></clipPath><style>.svg__discord-d{fill:none}.svg__discord-e{fill:#5865f2}</style></defs><g clip-path="url(#svg__discord-b)"><g clip-path="url(#svg__discord-c)"><path class="svg__discord-e" d="M61.8 4.73C57.08 2.52 52.03.91 46.75 0c-.65 1.17-1.41 2.75-1.93 4-5.61-.84-11.17-.84-16.68 0-.52-1.25-1.3-2.83-1.95-4-5.28.91-10.34 2.53-15.06 4.74C1.6 19.13-.98 33.17.31 47.01c6.32 4.72 12.44 7.58 18.46 9.46 1.49-2.05 2.81-4.22 3.95-6.51-2.17-.83-4.26-1.85-6.23-3.03.52-.39 1.03-.79 1.53-1.21 12 5.61 25.05 5.61 36.91 0 .5.42 1.01.82 1.53 1.21-1.97 1.19-4.06 2.21-6.24 3.04 1.14 2.29 2.46 4.47 3.95 6.51 6.02-1.88 12.15-4.74 18.47-9.46 1.51-16.04-2.59-29.95-10.84-42.28ZM24.36 38.5c-3.6 0-6.56-3.36-6.56-7.46s2.89-7.47 6.56-7.47 6.62 3.36 6.56 7.47c0 4.1-2.89 7.46-6.56 7.46Zm24.24 0c-3.6 0-6.56-3.36-6.56-7.46s2.89-7.47 6.56-7.47 6.62 3.36 6.56 7.47c0 4.1-2.89 7.46-6.56 7.46ZM98.03 14.41h15.66c3.78 0 6.97.6 9.58 1.81 2.61 1.2 4.57 2.88 5.86 5.02 1.3 2.14 1.95 4.6 1.95 7.37s-.68 5.16-2.03 7.36c-1.35 2.2-3.41 3.94-6.19 5.23-2.77 1.28-6.2 1.93-10.31 1.93H98.01V14.41Zm14.38 21.41c2.54 0 4.5-.65 5.86-1.95 1.37-1.3 2.05-3.07 2.05-5.32 0-2.08-.61-3.74-1.82-4.98-1.22-1.24-3.06-1.87-5.52-1.87h-4.9v14.11h4.33ZM154.54 43.08c-2.17-.57-4.13-1.41-5.86-2.5v-6.81c1.31 1.04 3.07 1.89 5.28 2.57 2.21.67 4.34 1 6.41 1 .96 0 1.69-.13 2.19-.39.49-.26.74-.57.74-.93 0-.41-.13-.75-.4-1.03s-.79-.5-1.57-.7l-4.82-1.11c-2.76-.66-4.72-1.56-5.88-2.73-1.17-1.16-1.75-2.68-1.75-4.57 0-1.59.51-2.97 1.53-4.14 1.01-1.18 2.46-2.09 4.34-2.73 1.88-.64 4.07-.97 6.59-.97 2.25 0 4.31.25 6.19.74 1.88.49 3.43 1.12 4.66 1.89v6.44c-1.26-.77-2.71-1.37-4.36-1.83-1.65-.45-3.34-.67-5.08-.67-2.52 0-3.77.44-3.77 1.31 0 .41.2.72.59.92.39.21 1.11.42 2.15.64l4.02.74c2.62.46 4.58 1.28 5.86 2.44 1.29 1.16 1.93 2.88 1.93 5.15 0 2.49-1.06 4.47-3.19 5.93s-5.15 2.2-9.06 2.2c-2.3 0-4.54-.29-6.71-.87ZM182.98 42.22c-2.3-1.15-4.04-2.71-5.2-4.68s-1.74-4.18-1.74-6.65.6-4.66 1.81-6.6 2.97-3.46 5.3-4.57c2.33-1.11 5.11-1.66 8.35-1.66 4.02 0 7.35.86 10 2.58v7.51c-.93-.66-2.03-1.19-3.27-1.6-1.25-.41-2.58-.62-4-.62-2.49 0-4.43.46-5.84 1.39-1.41.93-2.11 2.14-2.11 3.65s.68 2.68 2.05 3.63c1.37.94 3.35 1.42 5.94 1.42 1.34 0 2.66-.2 3.96-.59 1.3-.4 2.42-.88 3.35-1.46v7.26c-2.94 1.81-6.36 2.71-10.24 2.71-3.27-.01-6.06-.59-8.36-1.73ZM211.52 42.22c-2.32-1.15-4.09-2.72-5.3-4.72-1.22-2-1.83-4.23-1.83-6.69s.61-4.66 1.83-6.59c1.22-1.93 2.98-3.44 5.29-4.54 2.3-1.1 5.05-1.64 8.23-1.64s5.93.55 8.23 1.64 4.06 2.6 5.26 4.51c1.21 1.92 1.81 4.11 1.81 6.6s-.6 4.69-1.81 6.69-2.97 3.57-5.28 4.72c-2.32 1.15-5.06 1.72-8.22 1.72s-5.9-.57-8.21-1.72Zm12.2-7.28c.98-1 1.47-2.31 1.47-3.96s-.49-2.95-1.47-3.91c-.98-.97-2.31-1.46-3.99-1.46s-3.06.49-4.04 1.46c-.97.97-1.46 2.27-1.46 3.91s.49 2.96 1.46 3.96c.98 1 2.32 1.5 4.04 1.5 1.69 0 3.02-.5 3.99-1.5ZM259.17 19.57v8.86c-1.02-.69-2.34-1.03-3.98-1.03-2.14 0-3.79.66-4.94 1.99-1.15 1.32-1.73 3.39-1.73 6.18v7.55h-9.84v-24h9.64v7.63c.53-2.79 1.4-4.85 2.59-6.18 1.19-1.32 2.72-1.99 4.6-1.99 1.42 0 2.63.33 3.66.98ZM291.86 13.59v29.54h-9.84v-5.37c-.83 2.02-2.09 3.56-3.79 4.62-1.7 1.05-3.8 1.58-6.29 1.58-2.23 0-4.16-.55-5.82-1.66-1.66-1.11-2.94-2.63-3.84-4.55-.89-1.93-1.35-4.11-1.35-6.55-.03-2.51.45-4.77 1.43-6.77s2.36-3.56 4.14-4.68c1.78-1.12 3.81-1.68 6.09-1.68 4.69 0 7.83 2.08 9.44 6.24V13.59h9.84Zm-11.31 21.19c1-1 1.5-2.29 1.5-3.87s-.49-2.78-1.46-3.73c-.98-.96-2.31-1.44-3.99-1.44s-2.98.49-3.98 1.46c-.99.97-1.49 2.23-1.49 3.79s.49 2.83 1.49 3.82 2.3 1.48 3.94 1.48c1.66 0 2.99-.5 3.99-1.5ZM139.38 21.68c2.71 0 4.91-2.02 4.91-4.5s-2.2-4.5-4.91-4.5-4.91 2.01-4.91 4.5 2.2 4.5 4.91 4.5ZM134.47 24.78c3.01 1.32 6.74 1.38 9.81 0v18.47h-9.81V24.78Z"/></g></g></svg>
|
|
{{elseif $event->online_type === "teams"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2228.833 2073.333"><path fill="#5059C9" d="M1554.637 777.5h575.713c54.391 0 98.483 44.092 98.483 98.483v524.398c0 199.901-162.051 361.952-361.952 361.952h-1.711c-199.901.028-361.975-162-362.004-361.901V828.971c.001-28.427 23.045-51.471 51.471-51.471z"/><circle fill="#5059C9" cx="1943.75" cy="440.583" r="233.25"/><circle fill="#7B83EB" cx="1218.083" cy="336.917" r="336.917"/><path fill="#7B83EB" d="M1667.323 777.5H717.01c-53.743 1.33-96.257 45.931-95.01 99.676v598.105c-7.505 322.519 247.657 590.16 570.167 598.053 322.51-7.893 577.671-275.534 570.167-598.053V877.176c1.245-53.745-41.268-98.346-95.011-99.676z"/><path opacity=".1" d="M1244 777.5v838.145c-.258 38.435-23.549 72.964-59.09 87.598a91.8564 91.8564 0 0 1-35.765 7.257H667.613c-6.738-17.105-12.958-34.21-18.142-51.833a631.2871 631.2871 0 0 1-27.472-183.49V877.02c-1.246-53.659 41.198-98.19 94.855-99.52H1244z"/><path opacity=".2" d="M1192.167 777.5v889.978a91.8383 91.8383 0 0 1-7.257 35.765c-14.634 35.541-49.163 58.833-87.598 59.09H691.975c-8.812-17.105-17.105-34.21-24.362-51.833-7.257-17.623-12.958-34.21-18.142-51.833a631.282 631.282 0 0 1-27.472-183.49V877.02c-1.246-53.659 41.198-98.19 94.855-99.52h475.313z"/><path opacity=".2" d="M1192.167 777.5v786.312c-.395 52.223-42.632 94.46-94.855 94.855h-447.84A631.282 631.282 0 0 1 622 1475.177V877.02c-1.246-53.659 41.198-98.19 94.855-99.52h475.312z"/><path opacity=".2" d="M1140.333 777.5v786.312c-.395 52.223-42.632 94.46-94.855 94.855H649.472A631.282 631.282 0 0 1 622 1475.177V877.02c-1.246-53.659 41.198-98.19 94.855-99.52h423.478z"/><path opacity=".1" d="M1244 509.522v163.275c-8.812.518-17.105 1.037-25.917 1.037-8.812 0-17.105-.518-25.917-1.037a284.4725 284.4725 0 0 1-51.833-8.293c-104.963-24.857-191.679-98.469-233.25-198.003a288.0208 288.0208 0 0 1-16.587-51.833h258.648c52.305.198 94.657 42.549 94.856 94.854z"/><path opacity=".2" d="M1192.167 561.355v111.442a284.4725 284.4725 0 0 1-51.833-8.293c-104.963-24.857-191.679-98.469-233.25-198.003h190.228c52.304.198 94.656 42.55 94.855 94.854z"/><path opacity=".2" d="M1192.167 561.355v111.442a284.4725 284.4725 0 0 1-51.833-8.293c-104.963-24.857-191.679-98.469-233.25-198.003h190.228c52.304.198 94.656 42.55 94.855 94.854z"/><path opacity=".2" d="M1140.333 561.355v103.148c-104.963-24.857-191.679-98.469-233.25-198.003h138.395c52.305.199 94.656 42.551 94.855 94.855z"/><linearGradient id="svg__teams-a" gradientUnits="userSpaceOnUse" x1="198.099" y1="1683.0726" x2="942.2344" y2="394.2607" gradientTransform="matrix(1 0 0 -1 0 2075.3333)"><stop offset="0" stop-color="#5a62c3"/><stop offset=".5" stop-color="#4d55bd"/><stop offset="1" stop-color="#3940ab"/></linearGradient><path fill="url(#svg__teams-a)" d="M95.01 466.5h950.312c52.473 0 95.01 42.538 95.01 95.01v950.312c0 52.473-42.538 95.01-95.01 95.01H95.01c-52.473 0-95.01-42.538-95.01-95.01V561.51c0-52.472 42.538-95.01 95.01-95.01z"/><path fill="#FFF" d="M820.211 828.193h-189.97v517.297h-121.03V828.193H320.123V727.844h500.088v100.349z"/></svg>
|
|
{{elseif $event->online_type === "tiktok"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 291.379" xml:space="preserve"><path fill="#FF004F" d="M191.102 105.182c18.814 13.442 41.862 21.351 66.755 21.351V78.656c-4.711.001-9.41-.49-14.019-1.466v37.686c-24.891 0-47.936-7.909-66.755-21.35v97.703c0 48.876-39.642 88.495-88.54 88.495-18.245 0-35.203-5.513-49.29-14.968 16.078 16.431 38.5 26.624 63.306 26.624 48.901 0 88.545-39.619 88.545-88.497v-97.701h-.002zm17.294-48.302c-9.615-10.499-15.928-24.067-17.294-39.067v-6.158h-13.285c3.344 19.065 14.75 35.353 30.579 45.225zM70.181 227.25a40.2992 40.2992 0 0 1-8.262-24.507c0-22.354 18.132-40.479 40.502-40.479 4.169-.001 8.313.637 12.286 1.897v-48.947a89.3489 89.3489 0 0 0-14.013-.807v38.098a40.561 40.561 0 0 0-12.292-1.896c-22.37 0-40.501 18.123-40.501 40.48 0 15.808 9.063 29.494 22.28 36.161z"/><path d="M177.083 93.525c18.819 13.441 41.864 21.35 66.755 21.35V77.189c-13.894-2.958-26.194-10.215-35.442-20.309-15.83-9.873-27.235-26.161-30.579-45.225h-34.896v191.226c-.079 22.293-18.18 40.344-40.502 40.344-13.154 0-24.84-6.267-32.241-15.975-13.216-6.667-22.279-20.354-22.279-36.16 0-22.355 18.131-40.48 40.501-40.48 4.286 0 8.417.667 12.292 1.896v-38.098c-48.039.992-86.674 40.224-86.674 88.474 0 24.086 9.621 45.921 25.236 61.875 14.087 9.454 31.045 14.968 49.29 14.968 48.899 0 88.54-39.621 88.54-88.496V93.525h-.001z"/><path fill="#00F2EA" d="M243.838 77.189v-10.19a66.768 66.768 0 0 1-35.442-10.12 66.9532 66.9532 0 0 0 35.442 20.31zm-66.021-65.534a68.2815 68.2815 0 0 1-.734-5.497V0h-48.182v191.228c-.077 22.29-18.177 40.341-40.501 40.341-6.554 0-12.742-1.555-18.222-4.318 7.401 9.707 19.087 15.973 32.241 15.973 22.32 0 40.424-18.049 40.502-40.342V11.655h34.896zm-77.123 102.753V103.56c-4.026-.55-8.085-.826-12.149-.824C39.642 102.735 0 142.356 0 191.228c0 30.64 15.58 57.643 39.255 73.527-15.615-15.953-25.236-37.789-25.236-61.874 0-48.249 38.634-87.481 86.675-88.473z"/><path fill="#FF004F" d="M802.126 239.659c34.989 0 63.354-28.136 63.354-62.84 0-34.703-28.365-62.844-63.354-62.844h-9.545c34.99 0 63.355 28.14 63.355 62.844s-28.365 62.84-63.355 62.84h9.545z"/><path fill="#00F2EA" d="M791.716 113.975h-9.544c-34.988 0-63.358 28.14-63.358 62.844s28.37 62.84 63.358 62.84h9.544c-34.993 0-63.358-28.136-63.358-62.84-.001-34.703 28.365-62.844 63.358-62.844z"/><path d="M310.062 85.572v31.853h37.311v121.374h37.326V118.285h30.372l10.414-32.712H310.062zm305.482 0v31.853h37.311v121.374h37.326V118.285h30.371l10.413-32.712H615.544zm-183.11 18.076c0-9.981 8.146-18.076 18.21-18.076 10.073 0 18.228 8.095 18.228 18.076 0 9.982-8.15 18.077-18.228 18.077-10.064-.005-18.21-8.095-18.21-18.077zm0 30.993h36.438v104.158h-36.438V134.641zm52.062-49.069v153.226h36.452v-39.594l11.283-10.339 35.577 50.793h39.05l-51.207-74.03 45.997-44.768H557.39l-36.442 36.153V85.572h-36.452zm393.127 0v153.226h36.457v-39.594l11.278-10.339 35.587 50.793H1000l-51.207-74.03 45.995-44.768h-44.256l-36.452 36.153V85.572h-36.457zM792.578 239.659c34.988 0 63.358-28.136 63.358-62.84 0-34.703-28.37-62.844-63.358-62.844h-.865c-34.99 0-63.355 28.14-63.355 62.844s28.365 62.84 63.355 62.84h.865zm-31.242-62.84c0-16.881 13.8-30.555 30.817-30.555 17.005 0 30.804 13.674 30.804 30.555s-13.799 30.563-30.804 30.563c-17.017-.003-30.817-13.682-30.817-30.563z"/></svg>
|
|
{{elseif $event->online_type === "twitch"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 454.9307 150.776"><path d="M444.54 51.9893 426.3453 33.796h-33.8v-23.4H363.944v106.5867h28.6013v-54.596h23.3934v54.596H444.54V51.9893ZM353.552 33.796h-44.1947l-18.1986 18.1933v46.792l18.1986 18.2014h44.1947V88.3893h-33.8V62.3867h33.8V33.796zm-72.792 0h-23.3933v-23.4h-28.6014v88.3853l18.1987 18.2014h33.796V88.3893h-23.3933V62.3867H280.76V33.796zm-62.3933-23.4h-28.5934v13.0027h28.5934V10.396zm0 23.4h-28.5934v83.1853h28.5934V33.796zm-38.992 0h-28.596v54.5933h-10.396V33.796h-28.5974v54.5933h-10.3946V33.796H72.7893v83.1867H161.18l18.1947-18.2014V33.796zm-116.984 0H38.996v-23.4H10.4v88.3853l18.1973 18.2014h33.7934V88.3893H38.996V62.3867h23.3947V33.796zm392.54 12.9933v77.988l-38.992 25.9987H389.944v-13.0027l-18.1973 13.0027h-23.3934v-13.0027l-12.9946 13.0027h-41.596L280.76 137.7733l-2.6027 13.0027H241.768l-14.8813-13.0027-.8334 13.0027h-41.2466l-1.4587-13.0027-11.1653 13.0027h-63l-13-5.2v5.2h-33.792l-38.996-23.4027L0 103.988V0h49.396l23.3933 23.3987h106.5854V0h88.3866v23.3987h23.3974v12.9946l13.0026-12.9946h25.9907L353.552 0h49.392v23.3987h28.5973l23.3894 23.3906Z" fill="#6441a5" fill-rule="evenodd"/></svg>
|
|
{{elseif $event->online_type === "vimeo"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 70 20" fill="#1ab7ea"><path d="M15.72 9.431c-.069 1.514-1.127 3.588-3.172 6.22-2.114 2.749-3.903 4.124-5.367 4.124-.906 0-1.673-.837-2.3-2.512-.418-1.535-.837-3.069-1.255-4.604-.465-1.674-.964-2.512-1.498-2.512-.116 0-.524.245-1.221.733l-.731-.943C.943 9.263 1.7 8.588 2.445 7.912c1.024-.884 1.792-1.35 2.305-1.397 1.21-.116 1.955.712 2.235 2.483.302 1.912.511 3.101.628 3.566.349 1.586.733 2.378 1.152 2.378.326 0 .815-.515 1.467-1.543.651-1.029 1-1.812 1.047-2.349.093-.888-.256-1.333-1.047-1.333-.373 0-.757.085-1.151.255.764-2.504 2.224-3.721 4.38-3.652 1.598.047 2.351 1.084 2.259 3.111"/><path d="M22.281 1.918c-.023.58-.314 1.136-.874 1.669-.628.602-1.373.903-2.234.903-1.327 0-1.968-.579-1.921-1.737.022-.602.378-1.182 1.064-1.738.687-.555 1.449-.834 2.288-.834.489 0 .896.192 1.223.574.325.382.477.77.454 1.163zm3.038 12.419c-.652 1.232-1.548 2.349-2.689 3.349-1.56 1.349-3.119 2.024-4.679 2.024-.723 0-1.275-.233-1.659-.699-.384-.465-.565-1.069-.541-1.814.022-.767.261-1.954.715-3.56.454-1.605.682-2.466.682-2.582 0-.605-.21-.908-.629-.908-.139 0-.536.245-1.188.733l-.803-.943c.745-.674 1.49-1.349 2.235-2.025 1.001-.884 1.746-1.35 2.236-1.397.768-.069 1.332.157 1.693.679.36.523.494 1.2.402 2.035-.303 1.415-.629 3.212-.978 5.392-.024.998.337 1.496 1.082 1.496.326 0 .908-.344 1.746-1.033.699-.574 1.269-1.114 1.712-1.62l.663.873"/><path d="M47.127 14.336c-.652 1.233-1.548 2.349-2.689 3.349-1.56 1.349-3.12 2.024-4.679 2.024-1.514 0-2.247-.837-2.2-2.513.022-.745.168-1.639.436-2.686.267-1.048.413-1.862.436-2.444.024-.883-.245-1.326-.806-1.326-.607 0-1.331.722-2.172 2.165-.887 1.514-1.367 2.98-1.436 4.4-.05 1.002.05 1.77.293 2.305-1.624.047-2.762-.221-3.411-.803-.582-.512-.848-1.361-.801-2.549.02-.745.136-1.49.343-2.235.205-.745.319-1.408.342-1.991.05-.861-.268-1.292-.944-1.292-.583 0-1.213.664-1.888 1.991-.676 1.326-1.049 2.712-1.119 4.155-.05 1.305.04 2.212.25 2.724-1.598.047-2.733-.29-3.404-1.01-.558-.603-.812-1.52-.765-2.751.02-.603.129-1.445.321-2.524.192-1.08.299-1.921.321-2.525.05-.417-.06-.627-.314-.627-.14 0-.536.236-1.188.707l-.838-.943c.117-.092.849-.768 2.2-2.025.978-.907 1.641-1.373 1.99-1.396.606-.047 1.094.203 1.467.75.372.547.559 1.182.559 1.903 0 .233-.02.454-.07.664.349-.535.756-1.002 1.222-1.398 1.071-.93 2.27-1.455 3.597-1.571 1.141-.093 1.955.174 2.445.803.395.512.581 1.246.558 2.2.163-.139.338-.291.525-.454.534-.628 1.058-1.128 1.57-1.501.861-.629 1.759-.978 2.689-1.048 1.118-.093 1.921.173 2.41.8.418.51.605 1.241.559 2.191-.024.65-.181 1.595-.472 2.836-.292 1.241-.436 1.953-.436 2.139-.024.488.023.824.139 1.009.117.186.395.278.838.278.326 0 .907-.344 1.746-1.034.698-.573 1.269-1.113 1.712-1.619l.664.872"/><path d="M52.295 10.654c.022-.625-.233-.938-.767-.938-.698 0-1.407.481-2.127 1.442-.721.961-1.093 1.882-1.116 2.762-.013 0-.013.151 0 .452 1.139-.417 2.127-1.053 2.964-1.911.674-.741 1.022-1.344 1.046-1.807zm7.927 3.646c-.675 1.117-2.002 2.232-3.981 3.348-2.467 1.418-4.971 2.126-7.508 2.126-1.885 0-3.237-.628-4.051-1.885-.582-.861-.861-1.885-.838-3.072.023-1.885.862-3.677 2.515-5.377 1.815-1.862 3.957-2.794 6.425-2.794 2.282 0 3.492.93 3.632 2.787.093 1.184-.559 2.404-1.956 3.658-1.49 1.371-3.365 2.241-5.622 2.612.418.581 1.046.871 1.885.871 1.676 0 3.504-.426 5.483-1.279 1.42-.599 2.538-1.221 3.353-1.866l.663.871"/><path d="M65.755 11.828c.023-.63-.064-1.207-.262-1.732-.198-.524-.484-.788-.855-.788-1.188 0-2.166.642-2.933 1.925-.653 1.05-1.003 2.17-1.048 3.358-.024.584.081 1.098.314 1.54.255.514.616.77 1.083.77 1.047 0 1.944-.617 2.689-1.854.628-1.027.965-2.1 1.012-3.219zm3.946.132c-.093 2.139-.884 3.987-2.374 5.544-1.49 1.557-3.342 2.336-5.553 2.336-1.839 0-3.236-.593-4.19-1.779-.698-.883-1.083-1.987-1.152-3.311-.118-2 .604-3.836 2.165-5.51 1.676-1.859 3.782-2.789 6.32-2.789 1.629 0 2.863.547 3.702 1.639.792 1 1.152 2.29 1.082 3.87"/></svg>
|
|
{{elseif $event->online_type === "spotme"}}
|
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 131 35"><defs><path id="spotme-a" d="M96.11 34.27h10.4v11.1h-10.4z"/><path id="spotme-e" d="M106.51 39.82c0 3.07-2.33 5.56-5.2 5.56s-5.2-2.49-5.2-5.56c0-3.06 2.33-5.55 5.2-5.55s5.2 2.49 5.2 5.55"/><path id="spotme-b" d="M127.4 68.4h-13.83V46.21h13.84z"/><path id="spotme-g" d="M113.72 64.98c.28-.4.52-.87.8-1.27s.71-.52 1.05-.24c.18.15 2.56 2.12 4.93 2.12 2.13 0 3.49-1.3 3.49-2.86 0-1.85-1.6-3.02-4.66-4.28-3.14-1.33-5.6-2.96-5.6-6.53 0-2.4 1.84-5.7 6.74-5.7 3.09 0 5.4 1.6 5.7 1.82.25.15.5.58.19 1.04l-.77 1.17c-.25.4-.65.59-1.08.31-.22-.12-2.37-1.54-4.16-1.54-2.6 0-3.48 1.63-3.48 2.77 0 1.76 1.35 2.84 3.91 3.89 3.58 1.44 6.63 3.14 6.63 6.9 0 3.2-2.87 5.81-6.88 5.81a10 10 0 0 1-6.62-2.43c-.28-.24-.5-.46-.19-.98"/><path id="spotme-h" d="M133.72 57.47v-7.7h4.2c2.1 0 3.86 1.62 3.86 3.73a3.91 3.91 0 0 1-3.86 3.97zM130.6 67.8c0 .31.24.6.58.6h1.97a.6.6 0 0 0 .58-.6v-7.29h4.4c3.72 0 6.79-3.13 6.79-6.98a6.87 6.87 0 0 0-6.81-6.86h-6.93a.58.58 0 0 0-.58.59z"/><path id="spotme-i" d="M157.71 65.9a8.01 8.01 0 0 1-7.95-8.03c0-4.4 3.6-8.1 7.95-8.1a8.1 8.1 0 0 1 7.98 8.1c0 4.43-3.59 8.03-7.98 8.03zm0-19.23c-6.14 0-11.02 5-11.02 11.2a11.03 11.03 0 1 0 22.07 0c0-6.2-4.9-11.2-11.05-11.2z"/><path id="spotme-j" d="M174.93 49.59h-4.99a.59.59 0 0 1-.58-.6v-1.73c0-.31.24-.59.58-.59h13.16c.33 0 .58.28.58.59V49c0 .3-.25.59-.58.59h-4.99V67.8a.6.6 0 0 1-.58.58h-2.02a.6.6 0 0 1-.58-.58z"/><path id="spotme-k" d="M187.43 47.13c.06-.24.3-.46.55-.46h.48c.18 0 .45.15.51.34l6.3 15.85h.13L201.67 47c.07-.19.3-.34.52-.34h.48c.24 0 .48.22.54.46l3.72 20.84c.09.44-.12.72-.55.72h-1.96a.63.63 0 0 1-.57-.44L201.6 54.4h-.08l-5.44 14.27c-.06.18-.24.34-.51.34h-.54c-.24 0-.46-.16-.52-.34l-5.46-14.27h-.12l-2.17 13.86c-.03.22-.3.44-.55.44h-1.96c-.42 0-.63-.28-.57-.72z"/><path id="spotme-c" d="M223.93 68.69v-21.9h-13.26v21.9h13.26z"/><path id="spotme-m" d="M210.67 47.38c0-.3.24-.59.58-.59h12.1c.34 0 .58.28.58.6v1.75c0 .3-.24.59-.57.59h-9.57v6.38h8.09c.3 0 .57.28.57.6v1.75c0 .34-.27.6-.57.6h-8.1v6.72h9.58c.33 0 .57.28.57.6v1.72c0 .3-.24.59-.57.59h-12.11a.58.58 0 0 1-.58-.6z"/><path id="spotme-n" d="M106.88 50.86c.08.1.09.22 0 .31-.3.36-1.08 1.24-1.57 1.78-.14.16-.4.05-.4-.16l.1-3.27c.01-.2.25-.3.4-.16l1.47 1.5zm-8.98-1.5a.23.23 0 0 1 .39.16l.1 3.27c0 .21-.26.32-.4.16-.5-.54-1.26-1.42-1.58-1.78a.23.23 0 0 1 .01-.3c.3-.33 1.03-1.06 1.48-1.5zm7.26 7.4c-.1-.35 0-.73.27-.97l4.66-4.16a.63.63 0 0 0 .02-.92c-.89-.87-2.7-2.6-3.7-3.6a1.53 1.53 0 0 0-1.08-.44h-7.36c-.4 0-.78.16-1.07.44l-3.71 3.6a.63.63 0 0 0 .02.92l4.66 4.16c.27.24.38.62.27.97l-2.8 9.29c-.08.23-1.65 1.58-2.27 2.12a.13.13 0 0 0 .09.22h5.55c.12 0 .22-.09.24-.21.95-5.7 1.71-8.42 2.24-9.74a.5.5 0 0 1 .92 0c.53 1.32 1.29 4.03 2.24 9.74.02.12.12.21.25.21h5.55c.11 0 .17-.14.08-.22-.62-.54-2.19-1.9-2.27-2.12z"/><clipPath id="spotme-d"><use xlink:href="#spotme-a"/></clipPath><clipPath id="spotme-f"><use xlink:href="#spotme-b"/></clipPath><clipPath id="spotme-l"><use xlink:href="#spotme-c"/></clipPath></defs><g clip-path="url(#spotme-d)" transform="translate(-93 -34)"><use fill="#e85224" xlink:href="#spotme-e"/></g><g clip-path="url(#spotme-f)" transform="translate(-93 -34)"><use fill="#e85224" xlink:href="#spotme-g"/></g><use fill="#e85224" xlink:href="#spotme-h" transform="translate(-93 -34)"/><use fill="#e85224" xlink:href="#spotme-i" transform="translate(-93 -34)"/><use fill="#e85224" xlink:href="#spotme-j" transform="translate(-93 -34)"/><use fill="#e85224" xlink:href="#spotme-k" transform="translate(-93 -34)"/><g clip-path="url(#spotme-l)" transform="translate(-93 -34)"><use fill="#e85224" xlink:href="#spotme-m"/></g><use fill="#353431" xlink:href="#spotme-n" transform="translate(-93 -34)"/></svg>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
{{endif}}
|
|
{{if $livetopic = $event->_livetopic_id}}
|
|
<div data-ips-hook="livetopic" class='ipsBox ipsBox--calendarLiveTopicButton ipsPull i-padding_3'>
|
|
<a href='{$livetopic->url()}' target='_blank' class='ipsButton ipsButton--primary ipsButton--wide'>{lang="open_event"} <i class="fa-solid fa-arrow-up-right-from-square" aria-hidden="true"></i></a>
|
|
</div>
|
|
{{endif}}
|
|
{{if $event->rsvp }}
|
|
{template="rsvpControls" group="view" params="$event, $attendees"}
|
|
<div data-ips-hook="rsvpWrapper" class='ipsWidget ipsWidget--calendarEventRSVP'>
|
|
<div class='ipsWidget__header'>
|
|
<h3>{lang="event_rsvp_attendees"}</h3>
|
|
{{if \count($attendees[0]) OR \count($attendees[1]) OR \count($attendees[2]) }}
|
|
<a href='{$event->url('downloadRsvp')}' class='ipsWidget__header-secondary' rel="noindex nofollow"><i class="fa-solid fa-download"></i> {lang="rsvp_download"}</a>
|
|
{{endif}}
|
|
</div>
|
|
<i-tabs class='ipsTabs ipsTabs--small ipsTabs--stretch' id='ipsTabs_elAttendees{$tabId}' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_elAttendees{$tabId}_content'>
|
|
<div data-ips-hook="rsvpTabs" role="tablist">
|
|
<button type="button" id='ipsTabs_elAttendees{$tabId}_elGoing' class='ipsTabs__tab' role="tab" aria-controls="ipsTabs_elAttendees{$tabId}_elGoing_panel" aria-selected='true'>{{if $event->hasPassed()}}{lang="rsvp_attendees_past"}{{else}}{lang="rsvp_attendees"}{{endif}} {{if \count($attendees[1])}}({expression="\count($attendees[1])"}){{endif}}</button>
|
|
{{if $event->rsvp_limit == -1}}
|
|
<button type="button" id='ipsTabs_elAttendees{$tabId}_elMaybe' class='ipsTabs__tab' role="tab" aria-controls="ipsTabs_elAttendees{$tabId}_elMaybe_panel" aria-selected='false'>{lang="rsvp_maybe_attendees"} {{if \count($attendees[2])}}({expression="\count($attendees[2])"}){{endif}}</button>
|
|
{{endif}}
|
|
<button type="button" id='ipsTabs_elAttendees{$tabId}_elNotGoing' class='ipsTabs__tab' role="tab" aria-controls="ipsTabs_elAttendees{$tabId}_elNotGoing_panel" aria-selected='false'>{lang="rsvp_notgoing_attendees"} {{if \count($attendees[0])}}({expression="\count($attendees[0])"}){{endif}}</button>
|
|
</div>
|
|
{template="tabScrollers" app="core" group="global" location="global"}
|
|
</i-tabs>
|
|
<div id='ipsTabs_elAttendees{$tabId}_content' class='ipsTabs__panels ipsTabs__panels--padded'>
|
|
<div data-ips-hook="rsvpAttendees" id="ipsTabs_elAttendees{$tabId}_elGoing_panel" class='ipsTabs__panel' role="tabpanel" aria-labelledby="ipsTabs_elAttendees{$tabId}_elGoing">
|
|
{{if \count($attendees[1]) }}
|
|
<ul class='ipsGrid ipsGrid--event-attendees i-basis_40'>
|
|
{{foreach $attendees[1] as $attendee}}
|
|
<li>
|
|
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) ) }}
|
|
<a href='{$attendee->url()}' title="{$attendee->name}" data-ipsTooltip class='ipsUserPhoto ipsUserPhoto--mini' aria-label='{$attendee->name}'>
|
|
{{else}}
|
|
<span class='ipsUserPhoto ipsUserPhoto--mini' aria-label='{$attendee->name}'>
|
|
{{endif}}
|
|
<img src='{$attendee->photo}' alt='' loading='lazy'>
|
|
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) ) }}
|
|
</a>
|
|
{{else}}
|
|
</span>
|
|
{{endif}}
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
{{else}}
|
|
<p class='i-color_soft i-padding_3 i-text-align_center'>
|
|
{{if $event->hasPassed()}}{lang="no_rsvps_past"}{{else}}{lang="no_rsvps_yet"}{{endif}}
|
|
</p>
|
|
{{endif}}
|
|
</div>
|
|
{{if $event->rsvp_limit == -1}}
|
|
<div data-ips-hook="rsvpMaybeWrapper" id="ipsTabs_elAttendees{$tabId}_elMaybe_panel" class='ipsTabs__panel' role="tabpanel" aria-labelledby="ipsTabs_elAttendees{$tabId}_elMaybe" hidden>
|
|
{{if \count($attendees[2]) }}
|
|
<ul data-ips-hook="rsvpMaybe" class='ipsGrid ipsGrid--event-attendees i-basis_40'>
|
|
{{foreach $attendees[2] as $attendee}}
|
|
<li>
|
|
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) ) }}
|
|
<a href='{$attendee->url()}' title="{$attendee->name}" data-ipsTooltip class='ipsUserPhoto ipsUserPhoto--mini'>
|
|
{{else}}
|
|
<span class='ipsUserPhoto ipsUserPhoto--mini'>
|
|
{{endif}}
|
|
<img src='{$attendee->photo}' alt='' loading='lazy'>
|
|
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) ) }}
|
|
</a>
|
|
{{else}}
|
|
</span>
|
|
{{endif}}
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
{{else}}
|
|
<p class='i-color_soft i-padding_3 i-text-align_center'>
|
|
{{if $event->hasPassed()}}{lang="no_maybe_rsvps_past"}{{else}}{lang="no_maybe_rsvps_yet"}{{endif}}
|
|
</p>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
<div data-ips-hook="rsvpNotGoingWrapper" id="ipsTabs_elAttendees{$tabId}_elNotGoing_panel" class='ipsTabs__panel' role="tabpanel" aria-labelledby="ipsTabs_elAttendees{$tabId}_elNotGoing" hidden>
|
|
{{if \count($attendees[0]) }}
|
|
<ul data-ips-hook="rsvpNotGoing" class='ipsGrid ipsGrid--event-attendees i-basis_40'>
|
|
{{foreach $attendees[0] as $attendee}}
|
|
<li>
|
|
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) ) }}
|
|
<a href='{$attendee->url()}' title="{$attendee->name}" data-ipsTooltip class='ipsUserPhoto ipsUserPhoto--mini'>
|
|
{{else}}
|
|
<span class='ipsUserPhoto ipsUserPhoto--mini'>
|
|
{{endif}}
|
|
<img src='{$attendee->photo}' alt='' loading='lazy'>
|
|
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) ) }}
|
|
</a>
|
|
{{else}}
|
|
</span>
|
|
{{endif}}
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
{{else}}
|
|
<p class='i-color_soft i-padding_3 i-text-align_center'>
|
|
{{if $event->hasPassed()}}{lang="no_decline_rsvps_past"}{{else}}{lang="no_decline_rsvps_yet"}{{endif}}
|
|
</p>
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{endif}}
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="eventStreamBlock" template_data="$event, $date, $truncate=FALSE, $map=array( 300, 200 ), $revertToFirst=FALSE" template_location="front" template_app="calendar"><![CDATA[{{$coverPhoto = $event->coverPhoto();}}
|
|
{{if ( $coverPhoto === null or $coverPhoto->file === null ) and $club = $event->container()->club()}}
|
|
{{$coverPhoto = $club->coverPhoto();}}
|
|
{{endif}}
|
|
|
|
<div class='cCalendarBlock i-background_1 ipsInnerBox i-margin-bottom_block {$event->ui( 'css' )}' {$event->ui( 'dataAttributes' )}>
|
|
<div class='ipsCoverPhoto' data-controller='core.global.core.coverPhoto' data-coverOffset='{$coverPhoto->offset}' style='--offset:{$coverPhoto->offset}' data-ips-hook='image'>
|
|
{{if $coverPhoto->file}}
|
|
<div class='ipsCoverPhoto__container'>
|
|
<img src='{$coverPhoto->file->url}' class='ipsCoverPhoto__image' alt='' loading='lazy'>
|
|
</div>
|
|
{{endif}}
|
|
<div class='i-flex i-align-items_center i-gap_4'>
|
|
<div class='i-flex_00'>
|
|
<div class="ipsUserPhoto ipsUserPhoto--mini">
|
|
<img src='{$event->author()->photo}' alt='' loading='lazy'>
|
|
</div>
|
|
</div>
|
|
<div class='i-flex_11'>
|
|
<h2 class='ipsTitle ipsTitle--h3 ipsPageHead_barText ipsPageHead_barText_small' data-ips-hook='title'><a href='{$event->url( "getPrefComment" )}' title='{$event->title}'>{$event->title}{{if $event->hidden() === 1}} <span class="ipsBadge ipsBadge--icon ipsBadge--warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa-solid fa-triangle-exclamation'></i></span>{{endif}}</a></h2>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='i-flex i-gap_2 i-flex-wrap_wrap i-padding_3'>
|
|
<div class='i-flex_91 i-basis_600 i-flex i-gap_4'>
|
|
<div class='i-flex_00'>
|
|
<div class='eventStreamDate'>
|
|
<a href='{$event->url( "getPrefComment" )}'>
|
|
{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
<time datetime='{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->mday}</span>
|
|
{{else}}
|
|
<time datetime='{$event->lastOccurrence( 'startDate' )->mysqlDatetime()}{{if !$event->all_day}} {$event->lastOccurrence( 'startDate' )->mysqlDatetime( FALSE )} {{endif}}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month'>{$event->lastOccurrence( 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date'>{$event->lastOccurrence( 'startDate' )->mday}</span>
|
|
{{endif}}
|
|
</time>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<div class='i-flex_11'>
|
|
<div class='i-flex i-flex-wrap_wrap'>
|
|
<div class='i-flex_11' style='flex-basis: 450px'>
|
|
<h3 data-ips-hook='date'>
|
|
<time datetime='{expression="$event->_start_date->format( 'Y-m-d' )"}'>
|
|
{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->calendarDate()}{{if !$event->all_day}}, {$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->localeTime( FALSE )} {{endif}}
|
|
{{else}}
|
|
{$event->lastOccurrence( 'startDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'startDate' )->localeTime( FALSE )} {{endif}}
|
|
{{endif}}
|
|
</time>
|
|
{{if $event->_end_date}}
|
|
<i class='fa-solid fa-circle-arrow-right i-font-size_2 i-color_soft'></i>
|
|
<time datetime='{expression="$event->_end_date->format( 'Y-m-d' )"}'>
|
|
{{$sameDay = !( ($event->_start_date->mday != $event->_end_date->mday) or ($event->_start_date->mon != $event->_end_date->mon) or ($event->_start_date->year != $event->_end_date->year) );}}
|
|
{{if $event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )}}
|
|
{{if !$sameDay}}{$event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )->calendarDate()}{{endif}}{{if !$event->all_day}}{{if !$sameDay}}, {{endif}}{$event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
{{else}}
|
|
{$event->lastOccurrence( 'endDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
{{endif}}
|
|
</time>
|
|
{{endif}}
|
|
</h3>
|
|
{{if $event->recurring}}<p class='i-color_soft'>{$event->_recurring_text}</p><br>{{endif}}
|
|
<div class='ipsRichText {{if ( \IPS\Request::i()->isAjax() or $truncate ) && $event->content}} ipsTruncate_5{{endif}}'>
|
|
{{if $event->content}}
|
|
{{if \IPS\Request::i()->isAjax() or $truncate}}
|
|
{$event->truncated()|raw}
|
|
{{else}}
|
|
{$event->content|raw}
|
|
{{endif}}
|
|
{{endif}}
|
|
</div>
|
|
{{if $event->container()->allow_comments OR $event->container()->allow_reviews OR $event->rsvp}}
|
|
<div class='i-margin-top_3' data-ips-hook='stats'>
|
|
{{if $event->container()->allow_comments}}<a href='{$event->url()->setQueryString( 'tab', 'comments' )}'>{lang="event_comment_count" pluralize="$event->comments"}</a>{{endif}}
|
|
{{if $event->container()->allow_comments AND $event->container()->allow_reviews}}·{{endif}}
|
|
{{if $event->container()->allow_reviews}}<a href='{$event->url()->setQueryString( 'tab', 'reviews' )}'>{lang="event_review_count" pluralize="$event->reviews"}</a>{{endif}}
|
|
{{if $event->rsvp }}
|
|
<hr class='ipsHr'>
|
|
<h4><strong>{lang="event_rsvp_attendees_list" pluralize="$event->attendeeCount( \IPS\calendar\Event::RSVP_YES )"}</strong></h4>
|
|
{{if \count( $event->attendees( \IPS\calendar\Event::RSVP_YES, 5 ) )}}
|
|
<ul class='ipsList ipsList--inline i-gap_0 i-margin-top_2'>
|
|
{{foreach $event->attendees( \IPS\calendar\Event::RSVP_YES, 5 ) as $attendee}}
|
|
<li>{template="userPhoto" app="core" group="global" params="$attendee, 'tiny'"}</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
{{endif}}
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
<div class='i-flex_00'>
|
|
<a href='{$event->container()->url()}' class='cEvents_event cEvents_eventSmall cEvents_style{$event->container()->id}'>{$event->container()->_title}</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{if $map !== FALSE AND $event->map( $map[0], $map[1] )}}
|
|
<div class='i-flex_11 cCalendarBlock_map' data-ips-hook='map'>
|
|
{$event->map( $map[0], $map[1] )|raw}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="reminder" template_data="$event, $reminder, $buttonClass=''" template_location="front" template_app="calendar"><![CDATA[<div data-controller='calendar.front.view.reminderButton' data-reminderID='{$event->id}'>
|
|
{template="reminderButton" app="calendar" group="view" params="$event, $reminder, $buttonClass"}
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="reminderButton" template_data="$event, $reminder=NULL, $buttonClass=''" template_location="front" template_app="calendar"><![CDATA[{{if member.member_id}}
|
|
{{if $reminder}}
|
|
<a class="ipsButton ipsButton--primary ipsButton--small {$buttonClass}" data-role="reminderButton" data-reminder="true" href="{url="app=calendar&module=calendar&controller=event&id={$event->id}&do=setReminder" csrf="true"}" title="{lang="event_edit_reminder"}" data-ipsTooltip data-ipsHover data-ipsHover-cache='false' data-ipsHover-onClick><i class='fa-solid fa-bell'></i> {lang="event_edit_reminder"} <i class='fa-solid fa-caret-down'></i></a>
|
|
{{else}}
|
|
<a class="ipsButton ipsButton--inherit ipsButton--small {$buttonClass}" data-role="reminderButton" data-reminder="false" href="{url="app=calendar&module=calendar&controller=event&id={$event->id}&do=setReminder" csrf="true"}" title="{lang="event_set_reminder_tip"}" data-ipsTooltip data-ipsHover data-ipsHover-cache='false' data-ipsHover-onClick><i class='fa-solid fa-bell'></i> {lang="event_set_reminder"}</a>
|
|
{{endif}}
|
|
{{endif}}]]></template>
|
|
<template template_group="view" template_name="reminderForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="calendar"><![CDATA[<form {{if \IPS\Request::i()->isAjax() }}data-controller='calendar.front.view.reminderForm'{{endif}} accept-charset='utf-8' class="ipsForm {$class} ipsForm--reminder" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm >
|
|
<input type="hidden" name="{$id}_submitted" value="1">
|
|
{{foreach $hiddenValues as $k => $v}}
|
|
<input type="hidden" name="{$k}" value="{$v}">
|
|
{{endforeach}}
|
|
{{if $uploadField}}
|
|
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
|
|
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
|
|
{{endif}}
|
|
<div class="i-padding_3">
|
|
<h2 class='ipsTitle ipsTitle--h3'>{expression="\IPS\Output::i()->title"}</h2>
|
|
<br><br>
|
|
<ul>
|
|
{{foreach $elements as $collection}}
|
|
{{foreach $collection as $input}}
|
|
{{if \is_string( $input )}}
|
|
{$input|raw}
|
|
<hr class='ipsHr'>
|
|
{{elseif $input instanceof \IPS\Helpers\Form\Checkbox}}
|
|
{$input->html($form)|raw}
|
|
{{else}}
|
|
{$input->rowHtml($form)|raw}
|
|
{{endif}}
|
|
{{endforeach}}
|
|
{{endforeach}}
|
|
</ul>
|
|
</div>
|
|
<div class="i-background_3 i-padding_3">
|
|
{$actionButtons[0]|raw} {{if isset( $actionButtons[1] )}}{$actionButtons[1]|raw}{{endif}}
|
|
</div>
|
|
</form>]]></template>
|
|
<template template_group="view" template_name="reviews" template_data="$event" template_location="front" template_app="calendar"><![CDATA[
|
|
<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$event->url()}' {{if $event->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$event->reviewFeedId}' id='reviews' data-follow-area-id="event-{$event->id}">
|
|
{{if $event->reviewForm()}}
|
|
{{if $event->locked()}}
|
|
<strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i> {lang="item_locked_can_review"}</strong>
|
|
{{endif}}
|
|
<div id='elEventReviewForm'>
|
|
{$event->reviewForm()|raw}
|
|
</div>
|
|
{{else}}
|
|
{{if $event->hasReviewed()}}
|
|
<!-- Already reviewed -->
|
|
{{elseif $event->locked()}}
|
|
{template="commentUnavailable" group="forms" location="front" app="core" params="'item_locked_cannot_review'"}
|
|
{{elseif \IPS\Member::loggedin()->restrict_post}}
|
|
{{if \IPS\Member::loggedIn()->restrict_post == -1}}
|
|
{template="reviewUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment'"}
|
|
{{else}}
|
|
{template="reviewUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment', \IPS\Member::loggedIn()->warnings(5,NULL,'rpa'), \IPS\Member::loggedIn()->restrict_post"}
|
|
{{endif}}
|
|
{{elseif \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
|
|
{template="reviewUnavailable" group="forms" location="front" app="core" params="'unacknowledged_warning_cannot_post', \IPS\Member::loggedIn()->warnings( 1, FALSE )"}
|
|
{{endif}}
|
|
{{endif}}
|
|
{{if \count( $event->reviews( NULL, NULL, NULL, 'desc', NULL, NULL, NULL, NULL, isset( \IPS\Request::i()->showDeleted ) ) )}}
|
|
<div class="ipsButtonBar ipsButtonBar--top">
|
|
{{if $event->reviewPageCount() > 1}}
|
|
<div class="ipsButtonBar__pagination">
|
|
{$event->reviewPagination( array( 'tab', 'sort' ) )|raw}
|
|
</div>
|
|
{{endif}}
|
|
<div class='ipsButtonBar__end'>
|
|
{template="commentMultimodHeader" app="core" group="global" params="$event, '#reviews', 'review'"}
|
|
<ul class='ipsDataFilters'>
|
|
<li data-action="tableFilter">
|
|
<a href="{$event->url()->setQueryString( array( 'tab' => 'reviews', 'sort' => 'helpful' ) )->setPage( 'page', 1 )}" class="ipsDataFilters__button {{if !isset( request.sort ) or request.sort != 'newest'}}ipsDataFilters__button--active{{endif}}" data-action="filterClick">{lang="most_helpful"}</a>
|
|
</li>
|
|
<li data-action="tableFilter">
|
|
<a href="{$event->url()->setQueryString( array( 'tab' => 'reviews','sort' => 'newest' ) )->setPage( 'page', 1 )}" class="ipsDataFilters__button {{if isset( request.sort ) and request.sort == 'newest'}}ipsDataFilters__button--active{{endif}}" data-action="filterClick">{lang="newest"}</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
|
|
<form action="{$event->url()->csrf()->setQueryString( 'do', 'multimodReview' )->setPage('page',\IPS\Request::i()->page)}" method="post" data-ipsPageAction data-role='moderationTools'>
|
|
{{$reviewCount=0; $timeLastRead = $event->timeLastRead(); $lined = FALSE;}}
|
|
{{foreach $event->reviews() as $review}}
|
|
{{if !$lined and $timeLastRead and $timeLastRead->getTimestamp() < $review->mapped('date')}}
|
|
{{if $lined = TRUE and $reviewCount}}
|
|
<hr class="ipsUnreadBar">
|
|
{{endif}}
|
|
{{endif}}
|
|
{{$reviewCount++;}}
|
|
{$review->html()|raw}
|
|
{{endforeach}}
|
|
{template="commentMultimod" app="core" group="global" params="$event, 'review'"}
|
|
</form>
|
|
</div>
|
|
{{if $event->reviewPageCount() > 1}}
|
|
<div class="ipsButtonBar ipsButtonBar--bottom">
|
|
<div class="ipsButtonBar__pagination">
|
|
{$event->reviewPagination( array( 'tab', 'sort' ) )|raw}
|
|
</div>
|
|
</div>
|
|
{{endif}}
|
|
{{elseif !$event->canReview()}}
|
|
<p class="ipsEmptyMessage" data-role="noReviews">{lang="no_reviews"}</p>
|
|
{{endif}}
|
|
</div>]]></template>
|
|
<template template_group="view" template_name="rsvpControls" template_data="$event, $attendees" template_location="front" template_app="calendar"><![CDATA[{{if \IPS\Member::loggedIn()->member_id }}
|
|
<div class="ipsWidget ipsWidget--rsvpControls">
|
|
{{if (!$event->hasPassed() OR !\IPS\Settings::i()->calendar_block_past_changes) AND $event->can('rsvp')}}
|
|
<h3 class="ipsWidget__header">{lang="rsvp"}</h3>
|
|
<div class="i-padding_2">
|
|
<button type="button" id="elChangeRSVP" popovertarget="elChangeRSVP_menu" class='ipsButton ipsButton--wide {{if isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}ipsButton--positive{{elseif isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] )}}ipsButton--negative{{elseif isset( $attendees[2][ \IPS\Member::loggedIn()->member_id ] )}}ipsButton--inherit{{else}}ipsButton--primary{{endif}}'>
|
|
<span>
|
|
{{if isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
<i class="fa-solid fa-thumbs-up i-margin-end_icon" aria-hidden="true"></i> {{if $event->hasPassed()}}{lang="rsvp_attended_past_event"}{{else}}{lang="rsvp_attend_event"}{{endif}}
|
|
{{elseif isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
<i class="fa-solid fa-thumbs-down i-margin-end_icon" aria-hidden="true"></i> {{if $event->hasPassed()}}{lang="rsvp_notattended_past_event"}{{else}}{lang="rsvp_notgoing_event"}{{endif}}
|
|
{{elseif isset( $attendees[2][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
<i class="fa-solid fa-circle-question i-margin-end_icon" aria-hidden="true"></i> {lang="rsvp_maybe_event"}
|
|
{{else}}
|
|
{lang="confirm_attendance"}
|
|
{{endif}}
|
|
</span>
|
|
<i class="fa-solid fa-caret-down"></i>
|
|
</button>
|
|
</div>
|
|
<i-dropdown popover id="elChangeRSVP_menu">
|
|
<div class="iDropdown">
|
|
<ul class="iDropdown__items">
|
|
<li>
|
|
<a href='{$event->url('rsvp')->setQueryString( 'action', 'yes' )->csrf()}' {{if $event->rsvp_limit > 0 AND \count($attendees[1]) >= $event->rsvp_limit AND !isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}data-disabled{{endif}} {{if isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}aria-selected="true"{{endif}}>
|
|
<i class="fa-solid fa-thumbs-up" aria-hidden="true"></i> {{if $event->hasPassed()}}{lang="rsvp_attended_past_event"}{{else}}{lang="rsvp_attend_event"}{{endif}}
|
|
{{if $event->rsvp_limit > 0 AND \count($attendees[1]) >= $event->rsvp_limit AND !isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
({lang="rsvp_limit_reached"})
|
|
{{endif}}
|
|
</a>
|
|
</li>
|
|
{{if $event->rsvp_limit == -1 AND !$event->hasPassed()}}
|
|
<li>
|
|
<a href='{$event->url('rsvp')->setQueryString( 'action', 'maybe' )->csrf()}' {{if isset( $attendees[2][ \IPS\Member::loggedIn()->member_id ] )}}aria-selected="true"{{endif}}><i class="fa-solid fa-circle-question" aria-hidden="true"></i> {lang="rsvp_maybe_event"}</a>
|
|
</li>
|
|
{{endif}}
|
|
<li>
|
|
<a href='{$event->url('rsvp')->setQueryString( 'action', 'no' )->csrf()}' {{if isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] )}}aria-selected="true"{{endif}}><i class="fa-solid fa-thumbs-down" aria-hidden="true"></i> {{if $event->hasPassed()}}{lang="rsvp_notattended_past_event"}{{else}}{lang="rsvp_notgoing_event"}{{endif}}</a>
|
|
</li>
|
|
{{if isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] ) OR isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] ) OR isset( $attendees[2][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
<li><hr></li>
|
|
<li>
|
|
<a href='{$event->url('rsvp')->setQueryString( 'action', 'leave' )->csrf()}'><i class="fa-solid fa-arrow-right-from-bracket" aria-hidden="true"></i>{lang="rsvp_leave_event"}</a>
|
|
</li>
|
|
{{endif}}
|
|
</ul>
|
|
</div>
|
|
</i-dropdown>
|
|
{{else}}
|
|
<div class="ipsFluid i-gap_lines i-font-weight_600 i-text-align_center">
|
|
<div class='i-padding_2 {{if isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}i-color_positive{{elseif isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] )}}i-color_negative{{else}}i-color_hard{{endif}}'>
|
|
{{if isset( $attendees[1][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
<i class='fa-solid fa-check-circle'></i> {{if $event->hasPassed()}}{lang="you_were_going"}{{else}}{lang="you_are_going"}{{endif}}
|
|
{{elseif isset( $attendees[0][ \IPS\Member::loggedIn()->member_id ] )}}
|
|
{{if $event->hasPassed()}}{lang="you_werent_going"}{{else}}{lang="you_arent_going"}{{endif}}
|
|
{{else}}
|
|
{lang="no_rsvp_past_event"}
|
|
{{endif}}
|
|
</div>
|
|
|
|
{{if $event->hasPassed() AND \IPS\Settings::i()->calendar_block_past_changes}}
|
|
<div class="i-padding_2">{lang="no_rsvp_past_event"}</div>
|
|
{{elseif $event->rsvp_limit > 0 AND \count($attendees[1]) >= $event->rsvp_limit}}
|
|
<div class="i-padding_2 i-color_warning">{lang="rsvp_limit_reached"}</div>
|
|
{{elseif $event->rsvp_limit > 0}}
|
|
<div class="i-padding_2">{lang="rsvp_limit_info" pluralize="\count($attendees[1])" sprintf="$event->rsvp_limit"}</div>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
{{endif}}]]></template>
|
|
<template template_group="view" template_name="view" template_data="$event, $commentsAndReviews, $attendees, $address=NULL, $reminder=NULL" template_location="front" template_app="calendar"><![CDATA[
|
|
{{if $club = $event->container()->club()}}
|
|
{{if settings.clubs and settings.clubs_header == 'full'}}
|
|
{template="header" app="core" group="clubs" params="$club, $event->container()"}
|
|
{{endif}}
|
|
<div id='elClubContainer'>
|
|
{{endif}}
|
|
<div class='ipsBlockSpacer'>
|
|
<header id="elEventHeader" class='ipsPageHeader ipsBox ipsBox--calendarEventHeader ipsPull' data-ips-hook='header'>{$event->coverPhoto()|raw}</header>
|
|
|
|
<section>
|
|
{{if $event->hidden() === 1 and $event->canUnhide()}}
|
|
<div class="ipsMessage ipsMessage--warning i-margin-top_3">
|
|
<p>{lang="event_pending_approval"}</p>
|
|
<ul class='ipsList ipsList--inline i-margin-top_3'>
|
|
<li><a href="{$event->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}" class="ipsButton ipsButton--positive ipsButton--small" title='{lang="approve_title_event"}'><i class="fa-solid fa-check"></i> {lang="approve"}</a></li>
|
|
{{if $event->canDelete()}}
|
|
<li><a href='{$event->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="calendar_delete_title"}' class='ipsButton ipsButton--negative ipsButton--small'><i class='fa-solid fa-xmark'></i> {lang="delete"}</a></li>
|
|
{{endif}}
|
|
</ul>
|
|
</div>
|
|
{{endif}}
|
|
|
|
{template="contentItemMessages" group="global" app="core" params="$event->getMessages(), $event"}
|
|
<div id="sidebarWrapper">
|
|
{{if $event->rsvp || $address || $event->map( 270, 270 ) || $event->online || $event->_livetopic_id }}
|
|
<div data-ips-hook="sidebarWrapper" class='ipsColumns'>
|
|
<div class='ipsColumns__primary'>
|
|
{{endif}}
|
|
<div class='ipsBox ipsBox--calendarEventMain ipsPull'>
|
|
<div class='i-padding_3'>
|
|
|
|
<div class="ipsTitle ipsTitle--h4" data-ips-hook='date'>
|
|
<time datetime='{expression="$event->_start_date->format( 'Y-m-d' )"}'>
|
|
{{if $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"} {{endif}}">
|
|
{$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->calendarDate()}{{if !$event->all_day}}, {$event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' )->localeTime( FALSE )} {{endif}}
|
|
</span>
|
|
{{else}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}} {expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"} {{endif}}">
|
|
{$event->lastOccurrence( 'startDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'startDate' )->localeTime( FALSE )} {{endif}}
|
|
</span>
|
|
{{endif}}
|
|
</time>
|
|
{{if $event->_end_date}}
|
|
<i class='fa-solid fa-arrow-right-long i-margin-start_icon i-margin-end_icon'></i>
|
|
<time datetime='{expression="$event->_end_date->format( 'Y-m-d' )"}'>
|
|
{{$sameDay = !( ($event->_start_date->mday != $event->_end_date->mday) or ($event->_start_date->mon != $event->_end_date->mon) or ($event->_start_date->year != $event->_end_date->year) );}}
|
|
{{if $endDate = $event->nextOccurrence( $event->nextOccurrence( \IPS\calendar\Date::getDate(), 'startDate' ) ?: \IPS\calendar\Date::getDate(), 'endDate' )}}
|
|
{{if !$sameDay}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$endDate->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}}, {{endif}}">
|
|
{$endDate->calendarDate()}{{if !$event->all_day}}, {{endif}}
|
|
</span>
|
|
{{endif}}
|
|
{{if !$event->all_day}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$endDate->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$endDate->localeTime( FALSE )}
|
|
</span>
|
|
{{endif}}
|
|
{{else}}
|
|
<span data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'endDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}} {expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}{{endif}}">
|
|
{$event->lastOccurrence( 'endDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
</span>
|
|
{{endif}}
|
|
</time>
|
|
{{endif}}
|
|
</div>
|
|
{{if $event->recurring}}
|
|
<p class='i-color_soft i-font-size_2 i-font-weight_500 i-margin-top_1'><i class='fa-solid fa-repeat'></i> {$event->_recurring_text}</p>
|
|
{{endif}}
|
|
|
|
<div class='ipsEntry__content js-ipsEntry__content i-margin-top_3'>
|
|
{template="richText" group="global" app="core" location="global" params="$event->content()"}
|
|
</div>
|
|
|
|
{{if $event->_album}}
|
|
<div class='i-background_2 i-padding_3 i-margin-top_3'>
|
|
<h3 class='ipsTitle ipsTitle--h4 i-margin-bottom_2'>{lang="event_images"}</h3>
|
|
{$event->_album|raw}
|
|
</div>
|
|
{{endif}}
|
|
|
|
{{if $event->editLine()}}
|
|
<div class='i-margin-top_3 i-color_soft i-font-size_-1 ipsEdited'>
|
|
{$event->editLine()|raw}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
<div class='ipsEntry__footer'>
|
|
<menu class='ipsEntry__controls' data-ips-hook='eventMainButtons'>
|
|
<li>
|
|
{$event->menu()|raw}
|
|
</li>
|
|
<li><a href='{$event->url('download')}' rel="noindex nofollow" title='{lang="download_ical_title"}'>{lang="download_ical"}</a></li>
|
|
{{if $event->venue() and $event->venue()->can( 'view' )}}
|
|
<li><a href="{$event->venue()->url()}">{lang="calendar_more_events_at_x" sprintf="$event->venue()->_title"}</a></li>
|
|
{{endif}}
|
|
{{if $event->canCopyEvent()}}
|
|
<li><a href='{url="app=calendar&module=calendar&controller=submit&do=copy&event_id={$event->id}"}' rel="noindex nofollow">{lang="add_similar_event"}</a></li>
|
|
{{endif}}
|
|
</menu>
|
|
{{if \IPS\IPS::classUsesTrait( $event, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
|
|
{template="reputation" app="core" group="global" params="$event"}
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
{{if $event->rsvp || $address || $event->map( 270, 270 ) || ( $event->online and $event->url and !$event->hasPassed() ) || $event->_livetopic_id}}
|
|
</div>
|
|
<aside class='ipsColumns__secondary i-basis_360'>
|
|
<div data-ips-hook="sidebar">
|
|
{template="eventSidebar" group="view" params="$event, $attendees, 'Mob', $address"}
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
</section>
|
|
|
|
<div class='ipsBox i-padding_2 ipsPull ipsResponsive_showPhone'>
|
|
<div class='ipsPageActions'>
|
|
{{if \count( $event->shareLinks() )}}
|
|
{template="shareButton" app="core" group="sharelinks" params="$event"}
|
|
{{endif}}
|
|
{{if \IPS\Application::appIsEnabled('cloud')}}
|
|
{template="spam" app="cloud" group="spam" params="$event"}
|
|
{{endif}}
|
|
{template="follow" app="core" group="global" params="'calendar', 'event', $event->id, $event->followersCount()"}
|
|
{{if $event->canRemind()}}
|
|
{template="reminder" app="calendar" group="view" params="$event, $reminder, 'ipsButton--wide'"}
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
|
|
{{if $commentsAndReviews}}
|
|
<br>
|
|
{{if $event->container()->allow_reviews && $event->container()->allow_comments}}
|
|
<a id="replies"></a>
|
|
<h2 class='ipsHide'>{lang="user_feedback"}</h2>
|
|
{{endif}}
|
|
<div class='ipsBox ipsBox--calendarCommentsReviews ipsPull'>
|
|
{$commentsAndReviews|raw}
|
|
</div>
|
|
{{endif}}
|
|
</div>
|
|
|
|
{{if $event->container()->club()}}
|
|
</div>
|
|
{{endif}}]]></template>
|
|
<template template_group="widgets" template_name="recentReviews" template_data="$reviews, $layout='table', $isCarousel=false" template_location="front" template_app="calendar"><![CDATA[<header class='ipsWidget__header'>
|
|
<h3>{lang="block_recentReviews"}</h3>
|
|
{{if $isCarousel}}
|
|
{{$carouselID = 'widget-recent-event-reviews_' . mt_rand();}}
|
|
{template="carouselNavigation" group="global" app="core" params="$carouselID"}
|
|
{{endif}}
|
|
</header>
|
|
<div class='ipsWidget__content'>
|
|
{{if !empty( $reviews ) }}
|
|
<i-data>
|
|
<ul class='ipsData ipsData--{$layout} {{if $isCarousel}}ipsData--carousel{{endif}} ipsData--widget-recent-event-reviews' {{if $isCarousel}}id='{$carouselID}' tabindex="0"{{endif}}>
|
|
{{foreach $reviews as $review}}
|
|
<li class='ipsData__item {$review->ui('css')}' {$review->ui('dataAttributes')}>
|
|
<a href="{$review->item()->url( "getPrefComment" )}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$review->item()->title}</span></a>
|
|
{{if \in_array( $layout, array("grid", "wallpaper", "featured"))}}
|
|
<div class="ipsData__image" aria-hidden="true">
|
|
{{if $image = $review->item()->primaryImage()}}
|
|
<img src="{$image->url}" alt="{$review->item()->title}" loading="lazy">
|
|
{{else}}
|
|
<i></i>
|
|
{{endif}}
|
|
</div>
|
|
{{else}}
|
|
<div class='ipsData__icon'>
|
|
{template="userPhoto" app="core" group="global" params="$review->author(), 'fluid'"}
|
|
</div>
|
|
{{endif}}
|
|
<div class='ipsData__content'>
|
|
<div class='ipsData__main'>
|
|
<h4 class='ipsData__title'>
|
|
<a href="{$review->item()->url( "getPrefComment" )}" title='{lang="view_this_event" sprintf="$review->item()->title"}'>{$review->item()->title}</a>
|
|
{template="rating" group="global" location="front" app="core" params="'small', $review->rating, \IPS\Settings::i()->reviews_rating_out_of"}
|
|
</h4>
|
|
<p class='ipsData__meta'>
|
|
{lang="byline_nodate" htmlsprintf="$review->author()->link()"}, <time datetime='{datetime="$review->mapped('date' )" norelative="true"}'>{datetime="$review->mapped('date')" norelative="true"}</time>
|
|
</p>
|
|
<p class='ipsData__desc'>{$review->truncated()|raw}</p>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</i-data>
|
|
{{else}}
|
|
<p class='ipsEmptyMessage'>{lang="no_recent_reviews"}</p>
|
|
{{endif}}
|
|
</div>]]></template>
|
|
<template template_group="widgets" template_name="upcomingEvents" template_data="$events, $today, $layout='table', $isCarousel=false" template_location="front" template_app="calendar"><![CDATA[<header class='ipsWidget__header'>
|
|
<h3>{lang="block_upcomingEvents"}</h3>
|
|
{{if $isCarousel}}
|
|
{{$carouselID = 'widget--upcoming-events_' . mt_rand();}}
|
|
{template="carouselNavigation" group="global" app="core" params="$carouselID"}
|
|
{{endif}}
|
|
</header>
|
|
<div class='ipsWidget__content'>
|
|
{{if !empty( $events ) }}
|
|
<i-data>
|
|
<ul class="ipsData ipsData--{$layout} {{if $isCarousel}}ipsData--carousel{{endif}} ipsData--upcoming-events" {{if $isCarousel}}id='{$carouselID}' tabindex="0"{{endif}}>
|
|
{{foreach $events as $event}}
|
|
<li class='ipsData__item {$event->ui('css')}' {$event->ui('dataAttributes')}>
|
|
<a href="{$event->url( "getPrefComment" )}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$event->title}</span></a>
|
|
{{if \in_array( $layout, array("grid", "wallpaper", "featured"))}}
|
|
<div class="ipsData__image" aria-hidden="true">
|
|
{{if $image = $event->primaryImage()}}
|
|
<img src="{$image->url}" alt="{$event->title}" loading="lazy">
|
|
{{else}}
|
|
<i></i>
|
|
{{endif}}
|
|
</div>
|
|
{{else}}
|
|
{{if $event->nextOccurrence( $today, 'startDate' )}}
|
|
<time datetime='{$event->nextOccurrence( $today, 'startDate' )->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month' data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( $today, 'startDate' )->format('c')}" data-format="%b">{$event->nextOccurrence( $today, 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date' data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( $today, 'startDate' )->format('c')}" data-format="%d">{$event->nextOccurrence( $today, 'startDate' )->mday}</span>
|
|
</time>
|
|
{{else}}
|
|
<time datetime='{$event->lastOccurrence( 'startDate' )->mysqlDatetime()}' class='ipsCalendarDate'>
|
|
<span class='ipsCalendarDate__month' data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="%b">{$event->lastOccurrence( 'startDate' )->monthNameShort}</span>
|
|
<span class='ipsCalendarDate__date' data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="%d">{$event->lastOccurrence( 'startDate' )->mday}</span>
|
|
</time>
|
|
{{endif}}
|
|
{{endif}}
|
|
<div class="ipsData__content">
|
|
<div class='ipsData__main'>
|
|
<h4 class='ipsData__title'>
|
|
<a href="{$event->url( "getPrefComment" )}" title='{lang="view_this_event" sprintf="$event->title"}'>{$event->title}</a>
|
|
</h4>
|
|
<div class='ipsData__desc'>
|
|
{$event->truncated()|raw}
|
|
</div>
|
|
<div class='ipsData__meta i-color_root i-margin-block_1'>
|
|
{{if $event->nextOccurrence( $today, 'startDate' )}}
|
|
<strong class="i-font-weight_600" data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( $today, 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}} {expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"} {{endif}}">{$event->nextOccurrence( $today, 'startDate' )->calendarDate()}{{if !$event->all_day}} {$event->nextOccurrence( $today, 'startDate' )->localeTime( FALSE )} {{endif}}</strong>
|
|
{{if $event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' ) }}
|
|
{{$sameDay = (bool) ( $event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' ) and ( $event->nextOccurrence( $today, 'startDate' ) and $event->nextOccurrence( $today, 'startDate' )->calendarDate() == $event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' )->calendarDate() ) );}}
|
|
<span class="i-color_soft">{lang="until"}</span>
|
|
{{if !$sameDay}}
|
|
<strong class="i-font-weight_600" data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}} {expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}{{endif}}">
|
|
{$event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' )->calendarDate()}
|
|
{{if !$event->all_day}} {$event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' )->localeTime( FALSE )}{{endif}}
|
|
</strong>
|
|
{{else}}
|
|
{{if !$event->all_day}}
|
|
<strong class="i-font-weight_600" data-controller="core.global.core.datetime" data-time="{$event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}">
|
|
{$event->nextOccurrence( $event->nextOccurrence( $today, 'startDate' ) ?: $today, 'endDate' )->localeTime( FALSE )}
|
|
</strong>
|
|
{{endif}}
|
|
{{endif}}
|
|
{{endif}}
|
|
{{else}}
|
|
<strong class="i-font-weight_600" data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'startDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}} {expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"} {{endif}}">{$event->lastOccurrence( 'startDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'startDate' )->localeTime( FALSE )} </strong>{{endif}}
|
|
{{if $event->lastOccurrence( 'endDate' ) }}
|
|
<span class="i-color_soft">{lang="until"}</span>
|
|
<strong class="i-font-weight_600" data-controller="core.global.core.datetime" data-time="{$event->lastOccurrence( 'endDate' )->format('c')}" data-format="{expression="\IPS\calendar\Date::calendarDateFormat()"}{{if !$event->all_day}} {expression="\IPS\calendar\Date::localeTimeFormat( FALSE )"}{{endif}}">{$event->lastOccurrence( 'endDate' )->calendarDate()}{{if !$event->all_day}} {$event->lastOccurrence( 'endDate' )->localeTime( FALSE )}{{endif}}</strong>
|
|
{{endif}}
|
|
{{endif}}
|
|
</div>
|
|
</div>
|
|
{{if $event->container()->allow_comments}}
|
|
<ul class="ipsData__stats">
|
|
<li>{lang="num_comments" pluralize="$event->comments"}</li>
|
|
</ul>
|
|
{{endif}}
|
|
</div>
|
|
</li>
|
|
{{endforeach}}
|
|
</ul>
|
|
</i-data>
|
|
{{else}}
|
|
<div class='ipsEmptyMessage'>{lang="no_upcoming_events"}</div>
|
|
{{endif}}
|
|
</div>]]></template>
|
|
<css css_location="front" css_app="calendar" css_attributes="" css_path="." css_name="calendar.css"><![CDATA[/*
|
|
----------------
|
|
- Calendar
|
|
----------------
|
|
*/
|
|
.cCalendar {
|
|
width: 100%;
|
|
table-layout: fixed;
|
|
}
|
|
|
|
@media (min-width: 767px){
|
|
.cCalendar{
|
|
width: calc(100% + 2px);
|
|
margin: -1px;
|
|
margin-top: 0;
|
|
}
|
|
}
|
|
|
|
.cCalendar th{
|
|
background: var(--i-background_4);
|
|
border: 1px solid var(--i-background_5);
|
|
padding: .8em;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.cCalendarIcon {
|
|
display: inline-block;
|
|
width: 18px;
|
|
height: 18px;
|
|
border-radius: 5px;
|
|
margin-inline-end: 5px;
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.cCalendar td {
|
|
width: 14.285%;
|
|
min-height: 100px;
|
|
border: 1px solid var(--i-background_4);
|
|
vertical-align: top;
|
|
padding: .5em;
|
|
}
|
|
|
|
.cCalendar td > div {
|
|
height: 100%;
|
|
min-height: 100px;
|
|
position: relative;
|
|
}
|
|
|
|
.cCalendar td.cCalendar_nonDate {
|
|
background: var(--i-background_2);
|
|
}
|
|
|
|
.cCalendar td.cCalendar_today {
|
|
background: var(--i-background_dark);
|
|
color: var(--i-color_background-dark-contrast);
|
|
}
|
|
|
|
.cCalendar_dayNumber {
|
|
color: inherit;
|
|
font-size: 1.1em;
|
|
font-weight: 600;
|
|
display: inline-block;
|
|
}
|
|
|
|
.cCalendar_miniAddEvent {
|
|
padding: .2em .4em;
|
|
background: var(--i-background_4);
|
|
color: inherit;
|
|
display: inline-block;
|
|
border-radius: 5px;
|
|
opacity: 0;
|
|
transition: 0.2s all ease-in-out;
|
|
margin-inline-start: .5em;
|
|
}
|
|
|
|
.cCalendar td:hover .cCalendar_miniAddEvent {
|
|
opacity: .5;
|
|
}
|
|
|
|
.cCalendar td .cCalendar_miniAddEvent:hover {
|
|
opacity: 1;
|
|
}
|
|
|
|
.cCalendar_today .cCalendar_miniAddEvent{
|
|
background: none;
|
|
}
|
|
|
|
|
|
/* EVENT STYLES */
|
|
.cEvents_event{
|
|
margin-bottom: 2px;
|
|
}
|
|
a.cEvents_event,
|
|
.cEvents_event a,
|
|
.cEvents_event.cEvents_empty span {
|
|
display: block;
|
|
line-height: 28px;
|
|
height: 28px; /* This value is needed since some elements use font-size: 0 */
|
|
font-size: var(--i-font-size_-1);
|
|
padding: 0 1em;
|
|
color: #fff;
|
|
border-radius: 20px;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
background: var(--i-background_dark);
|
|
}
|
|
|
|
a.cEvents_style_blank,
|
|
.cEvents_style_blank a,
|
|
.cCalendarIcon.cEvents_style_blank {
|
|
background-color: transparent;
|
|
border: 1px solid var(--i-background_5);
|
|
}
|
|
|
|
a.cEvents_event.cEvents_eventSmall,
|
|
.cEvents_event.cEvents_eventSmall a,
|
|
.cEvents_event.cEvents_eventSmall.cEvents_empty span {
|
|
font-size: var(--i-font-size_-2);
|
|
display: inline-block;
|
|
}
|
|
|
|
.cEvents_time {
|
|
font-size: max(10px, .7em);
|
|
text-transform: uppercase;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.cEvents_event.cEvents_empty span {
|
|
background: transparent;
|
|
}
|
|
|
|
/* Single event special styles */
|
|
.cEvents_single .cEvents_event a {
|
|
border-radius: 20px;
|
|
}
|
|
|
|
/* Ranged event special styles */
|
|
.cEvents_ranged .cEvents_event a {
|
|
border-radius: 0;
|
|
}
|
|
|
|
.cEvents_ranged .cEvents_event:not(.cEvents_first) a {
|
|
margin-inline-start: -7px;
|
|
padding-inline-start: 8px;
|
|
}
|
|
|
|
.cEvents_ranged .cEvents_event:not(.cEvents_last) a {
|
|
margin-inline-end: -8px;
|
|
}
|
|
|
|
.cEvents_ranged .cEvents_event.cEvents_first a {
|
|
border-start-start-radius: 20px;
|
|
border-end-start-radius: 20px;
|
|
}
|
|
|
|
.cEvents_ranged .cEvents_event.cEvents_last a {
|
|
border-start-end-radius: 20px;
|
|
border-end-end-radius: 20px;
|
|
}
|
|
|
|
/* Hide details in all but the first in each row */
|
|
tr td:not(:first-child):not(.cCalendar_firstDay) .cEvents_ranged .cEvents_event:not(.cEvents_first) a,
|
|
tr td:not(:first-child):not(.cCalendar_firstDay) .cEvents_ranged .cEvents_event:not(.cEvents_first) a span {
|
|
font-size: 0;
|
|
}
|
|
|
|
tr td:not(:first-child):not(.cCalendar_firstDay) .cEvents_ranged .cEvents_event:not(.cEvents_first) a img {
|
|
display: none;
|
|
}
|
|
|
|
/* EVENT VIEW */
|
|
.cEvents__sidebarOnlineLogo{
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
color: var(--i-color_soft);
|
|
}
|
|
|
|
.cEvents__sidebarOnlineLogo svg{
|
|
height: .8em;
|
|
width: auto;
|
|
margin: 0 .4em;
|
|
}
|
|
|
|
.cCalendarBlock_map {
|
|
text-align: center;
|
|
}
|
|
|
|
.cCalendar_shortInput {
|
|
width: auto;
|
|
}
|
|
|
|
/* Submit screen */
|
|
#eventDateSelection .ipsInput:where([type="date"], [type="time"]){
|
|
width: 100%;
|
|
}
|
|
#event_remind_me [type="number"]{
|
|
max-width: 60px;
|
|
}
|
|
|
|
.eventStreamDate .cCalendarEmbed_calendar {
|
|
background: var(--i-background_2);
|
|
}
|
|
|
|
.eventStreamDate .ipsCalendarDate {
|
|
width: 80px;
|
|
}
|
|
|
|
/*
|
|
----------------
|
|
- Events
|
|
----------------
|
|
*/
|
|
|
|
/* Featured events carousel */
|
|
.cEvents__overview-header{
|
|
display: grid;
|
|
gap: var(--i-sp_block);
|
|
}
|
|
|
|
@media (min-width: 767px){
|
|
.cEvents__overview-header:has(.cEvents__overview-featured){
|
|
grid-template-columns: 1fr max(340px, 30%);
|
|
}
|
|
}
|
|
|
|
.ipsData--events-featured{
|
|
--i-data--max: 1;
|
|
--i-data--gap: 0px;
|
|
--i-data--radius: 0 0 var(--i-box--bo-ra) var(--i-box--bo-ra);
|
|
--i-data--desc-truncate: 2;
|
|
--i-data--display-desc: initial;
|
|
}
|
|
|
|
.ipsData--events-featured .ipsData__content{
|
|
padding-inline-start: 6em;
|
|
}
|
|
|
|
.ipsData--events-featured .ipsCalendarDate{
|
|
width: 3.3em;
|
|
position: absolute;
|
|
inset-inline-start: 1.5em;
|
|
}
|
|
|
|
/* A hard-coded value is needed here since --i-color_root is overwritten with white in .ipsData--wallpaper */
|
|
[data-ips-scheme="light"] .ipsData--events-featured .ipsCalendarDate__date{
|
|
color: hsl(0 0% 30%);
|
|
}
|
|
|
|
|
|
/* Search */
|
|
.cEvents__search {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 1.8em 1em;
|
|
}
|
|
|
|
.cEvents__search > *{
|
|
flex: 1 1 100%;
|
|
}
|
|
|
|
.ipsEventSearch__searchLocation{
|
|
flex: 0 0 auto;
|
|
font-weight: 600;
|
|
font-size: .9em;
|
|
align-self: start;
|
|
}
|
|
|
|
.ipsEventSearch__searchLocation:hover{
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.cEvents__search__field--date {
|
|
flex-basis: 150px;
|
|
}
|
|
|
|
.cEvents__search__field--date input{
|
|
width: 100%;
|
|
}
|
|
|
|
.cEvents__search__label {
|
|
color: var(--i-color_hard);
|
|
display: block;
|
|
font-weight: 600;
|
|
margin-bottom: .5em;
|
|
}
|
|
|
|
.cEvents__search__searchWrap :is([type="text"], [type="search"]) {
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
@media (max-width: 767px) {
|
|
.ipsEventSearch__searchLocation span {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.ipsEventSearch .ipsField_loading {
|
|
background-image: url('"{resource="loaders/tiny_loading@2x.gif" app="core" location="front" inCss="true"}"') !important;
|
|
background-size: 14px 14px;
|
|
background-repeat: no-repeat;
|
|
background-position: right 5px center;
|
|
}
|
|
|
|
.cEvents__searchMap {
|
|
height: 350px;
|
|
background: var(--i-background_3);
|
|
}
|
|
|
|
.cEvents__searchMap--loading > * {
|
|
display: none;
|
|
}
|
|
|
|
/* Listing */
|
|
.cEvent__onlineLogo{
|
|
place-self: end;
|
|
margin: 5px;
|
|
background: var(--i-background_1);
|
|
padding: 8px 12px;
|
|
pointer-events: none;
|
|
border-radius: inherit;
|
|
}
|
|
|
|
.cEvent__onlineLogo svg{
|
|
display: block;
|
|
width: auto;
|
|
height: 12px;
|
|
}
|
|
|
|
/* Near me section */
|
|
.ipsEventsNearMe__map{
|
|
padding: 10px;
|
|
grid-column: span 2;
|
|
}
|
|
.ipsEventsNearMe__map #map{
|
|
min-height: 300px;
|
|
border-radius: var(--i-box--bo-ra);
|
|
}
|
|
|
|
@media (max-width: 860px){
|
|
.ipsEventsNearMe__map {
|
|
grid-column: 1 / -1;
|
|
}
|
|
}
|
|
|
|
.ipsEventsNearMe__map > .ipsMap {
|
|
height: 100%;
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.ipsEventList--nearMe {
|
|
grid-template-columns: 1fr;
|
|
grid-template-rows: repeat(2, 1fr);
|
|
}
|
|
|
|
.cEvents__skeleton--map {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* Month navigator */
|
|
.cEvents__monthNav {
|
|
display: flex;
|
|
background: var(--i-background_dark);
|
|
color: #fff;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.cEvents__monthNav__monthItem {
|
|
flex: 1 0 auto;
|
|
color: inherit;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
line-height: 1.4;
|
|
padding: 1.1em 0.8em;
|
|
}
|
|
|
|
.cEvents__monthNav__monthItem:hover {
|
|
background-image: linear-gradient(hsl(0 0% 100% / .1) 0% 100%);
|
|
color: #fff;
|
|
}
|
|
|
|
.cEvents__monthNav__monthItem--active{
|
|
background-color: var(--i-primary);
|
|
color: var(--i-primary-contrast);
|
|
}
|
|
|
|
.cEvents__monthNav__month {
|
|
font-size: 1.14em;
|
|
font-weight: 500;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.cEvents__monthNav__year {
|
|
font-size: .9em;
|
|
}
|
|
|
|
.cEvents__skeleton--map {
|
|
position: relative;
|
|
width: 100%;
|
|
min-height: 300px;
|
|
}
|
|
|
|
/* BOTH */
|
|
@media screen and (max-width: 979px) {
|
|
/* Calendar views */
|
|
.cCalendar th span,
|
|
.cCalendar_miniAddEvent {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* TABLETS */
|
|
@media screen and (min-width: 768px) and (max-width: 979px) {
|
|
.cCalendar th::after {
|
|
content: attr(data-short);
|
|
}
|
|
}
|
|
|
|
/* PHONES */
|
|
@media screen and (max-width: 767px) {
|
|
|
|
/* Calendar views */
|
|
.cCalendar td {
|
|
min-height: 40px;
|
|
padding: 0;
|
|
}
|
|
|
|
.cCalendar td > div {
|
|
padding-bottom: 0;
|
|
min-height: 0;
|
|
}
|
|
|
|
.cCalendar td.cCalendar_today {
|
|
background: transparent;
|
|
}
|
|
|
|
.cCalendar th::after {
|
|
content: attr(data-veryShort);
|
|
}
|
|
|
|
.cCalendar .cEvents {
|
|
display: none;
|
|
}
|
|
|
|
.cCalendar .cCalendar_dayNumber {
|
|
display: grid;
|
|
place-content: center;
|
|
height: 40px;
|
|
padding: 4px;
|
|
margin: 1px;
|
|
font-size: var(--i-font-size_-2);
|
|
}
|
|
|
|
.cCalendar .cCalendar_hasEvents .cCalendar_dayNumber {
|
|
border: 2px solid var(--i-background_5);
|
|
background: var(--i-background_2);
|
|
}
|
|
|
|
.cCalendar .cCalendar_hasEvents.cCalendar_today .cCalendar_dayNumber {
|
|
background: rgba(205, 56, 22, 0.19);
|
|
}
|
|
|
|
.cCalendar td.cCalendar_today .cCalendar_dayNumber {
|
|
background: var(--i-background_1);
|
|
border: 2px solid currentColor;
|
|
color: #cd3816;
|
|
}
|
|
|
|
}]]></css>
|
|
<css css_location="front" css_app="calendar" css_attributes="" css_path="." css_name="embed.css">.cCalendarEmbed_dates dt {
|
|
float: left;
|
|
width: 3.8em;
|
|
font-weight: 500;
|
|
color: var(--i-color_soft);
|
|
}
|
|
[dir="rtl"] .cCalendarEmbed_dates dt{
|
|
float: right;
|
|
}</css>
|
|
<css css_location="front" css_app="calendar" css_attributes="" css_path="." css_name="profile.css"><![CDATA[.cCalendarDate {
|
|
width: 80px;
|
|
display: block;
|
|
border: 1px solid var(--i-background_3);
|
|
background: var(--i-background_1);
|
|
padding: 8px 0;
|
|
border-radius: 3px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.cCalendarDate > span {
|
|
display: block;
|
|
text-align: center;
|
|
}
|
|
|
|
.cCalendarDate_month {
|
|
color: #a93848;
|
|
text-transform: uppercase;
|
|
font-size: var(--i-font-size_4);
|
|
line-height: 1;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.cCalendarDate_date {
|
|
font-size: var(--i-font-size_7);
|
|
line-height: 1;
|
|
font-weight: 300;
|
|
color: var(--i-color_soft);
|
|
}]]></css>
|
|
</theme>
|