Skip to content

Commit

Permalink
misc text + titlepage
Browse files Browse the repository at this point in the history
  • Loading branch information
vanekm committed Jul 4, 2024
1 parent 3d60b39 commit e47ee6e
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 72 deletions.
8 changes: 4 additions & 4 deletions app/Modules/Fykos/Core/templates/@layout.latte
Original file line number Diff line number Diff line change
Expand Up @@ -138,14 +138,14 @@
<div class="panel footer">
<div class="inner-container row">
<div class="col-md-6">
{* <img class="logo" src="{$basePath}/images/logo.svg" alt="DSEF" />*}
<div class="logo" style="font-size: 1cm; font-weight: bold">FYKOS<small>.cz</small></div>
<img class="logo" src="{$basePath}/images/logo.svg" alt="FYKOS" />
{* <div class="logo" style="font-size: 1cm; font-weight: bold">FYKOS<small>{switch $language->value}{case cs}.cz{default}.org{/switch}</small></div> *}
<p>
{switch $language->value}
{case cs}FYKOS je skupina pořádající vzdělávací soutěže pro středoškoláky ve fyzice s&nbsp;37letou tradicí.
{case cs}FYKOS je skupina pořádající vzdělávací akce pro středoškoláky ve fyzice s&nbsp;37letou tradicí.
FYKOS je tvořen převážně studenty
<a href="https://www.mff.cuni.cz/">Matematicko-fyzikální fakulty Univerzity Karlovy</a>.
{default}FYKOS is a group organizing educational physics competitions for high school students with a 37-year tradition.
{default}FYKOS is a group organizing educational physics events for high school students with a 37-year tradition.
FYKOS is mainly composed of students from the
<a href="https://www.mff.cuni.cz/">Faculty of Mathematics and Physics, Charles University</a>.
{/switch}
Expand Down
49 changes: 31 additions & 18 deletions app/Modules/Fykos/DefaultModule/DefaultPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,39 @@ class DefaultPresenter extends BasePresenter
{
public function renderDefault(): void
{
$this->template->newsList = $this->loadNews();

$this->loadEventData();

// Sort events by date
usort($this->template->events, function ($a, $b) {
$dateA = strtotime($a['date']);
$dateB = strtotime($b['date']);
return $dateA - $dateB;
});

// Find the closest event
$this->template->countdownEventsIndices = $this->findCountdownEventIndices($this->template->events);

$this->template->numOfEvents = [
'cs' => count($this->template->events),
'en' => count(array_filter($this->template->events, function ($event) {
return $event['show-in-en'];
}))
];
$currentDate = strtotime(date('Y-m-d'));
// year_stage is enum of values: 'before', 'during', 'after'
$this->template->year_stage = null;
if ($currentDate < strtotime($this->template->timelineBegin)) {
$this->template->year_stage = 'before';
} elseif ($currentDate > strtotime($this->template->timelineEnd)) {
$this->template->year_stage = 'after';
} else {
$this->template->year_stage = 'during';
}

$this->template->newsList = $this->loadNews();
if ($this->template->year_stage === 'during') {
// Sort events by date
usort($this->template->events, function ($a, $b) {
$dateA = strtotime($a['date']);
$dateB = strtotime($b['date']);
return $dateA - $dateB;
});

// Find the closest event
$this->template->countdownEventsIndices = $this->findCountdownEventIndices($this->template->events);

$this->template->numOfEvents = [
'cs' => count($this->template->events),
'en' => count(array_filter($this->template->events, function ($event) {
return $event['show-in-en'];
}))
];
}
}

public function loadNews(): array
Expand Down Expand Up @@ -141,7 +154,7 @@ public function loadEventData(): void
'show-in-en' => true
]
];
$this->template->timelineBegin = date('Y-m-d', strtotime('2023-10-01'));
$this->template->timelineBegin = date('Y-m-d', strtotime('2023-09-01'));
$this->template->timelineEnd = date('Y-m-d', strtotime('2024-05-31'));
}

Expand Down
107 changes: 60 additions & 47 deletions app/Modules/Fykos/DefaultModule/templates/Default/default.latte
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,14 @@
</div>
<div class="center-content-horizontally-md content-down mt-3 mt-md-0">
<div class="header-image-dates">
{if $countdownEventsIndices['upcoming'][$lang] == $numOfEvents[$lang]}
{if $year_stage == 'after' or $year_stage == 'before'}
<h2 class="next-event-heading">
{switch $language->value}
{case 'cs'}Nový ročník FYKOSu přichází již brzy! Užívejte prázdniny!
{default}New year of FYKOS is coming soon! Enjoy your holidays!
{/switch}
</h2>
{else}
{elseif $year_stage == 'during'}
{if $countdownEventsIndices['previous'][$lang] !== null}
<h4 class="minor-event-heading">{$events[$countdownEventsIndices['previous'][$lang]]['heading'][$lang]} | {$events[$countdownEventsIndices['previous'][$lang]]['date'] |date:'j. n. Y'}</h4>
{/if}
Expand Down Expand Up @@ -139,8 +139,10 @@
</h1>
<p>
{switch $language->value}
{case 'cs'}FYKOS organizuje každý rok asi desítku vzdělávacích akcí pro středoškoláky. Zde najdete ty hlavní.
{default}FYKOS organizes about ten educational events for high school students every year. Here you can find the main ones.
{case 'cs'}FYKOS organizuje každý rok asi desítku vzdělávacích akcí pro středoškoláky. Zde najdete ty hlavní
{if $year_stage == 'during'}.{elseif $year_stage == 'before'} akce nadcházejícího ročníku.{elseif $year_stage == 'after'} akce minulého ročníku.{/if}
{default}FYKOS organizes about ten educational events for high school students every year. Here you can find the main ones
{if $year_stage == 'during'}.{elseif $year_stage == 'before'} of the upcoming school year.{elseif $year_stage == 'after'} of the past school year.{/if}
{/switch}
</p>
<a class="btn btn-primary" n:href=":Events:Default:default">
Expand Down Expand Up @@ -478,7 +480,7 @@
{switch $language->value}
{case 'cs'}Zadání vám přijde poštou nebo ho najdete přímo tady na webu.
Nemusíte vyřešit všechny úlohy, každý pokus se počítá.
{default}The assignment will be sent to you by mail or you can find it directly here on the website.
{default}You can find the directly here on the website.
You don't have to solve all the problems, every attempt counts.
{/switch}
</p>
Expand Down Expand Up @@ -599,48 +601,52 @@
</section>
</div>

{* Countdown for the very top of the page *}
<script>
function countdownTimer(countDownDate, elementId) {
// Update the countdown every 1 second
var countdown = setInterval(function () {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the countdown date
var distance = countDownDate - now;
{if $year_stage == "during"}
{* Countdown for the very top of the page *}
<script>
function countdownTimer(countDownDate, elementId) {
// Update the countdown every 1 second
var countdown = setInterval(function () {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the countdown date
var distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Display the countdown in the element with the specified id
document.getElementById(elementId).innerHTML = ("0" + days).slice(-2) + ":" + ("0" + hours).slice(-2) + ":"
+ ("0" + minutes).slice(-2) + ":" + ("0" + seconds).slice(-2);
// If the countdown is finished, display a message
if (distance < 0) {
clearInterval(countdown);
document.getElementById(elementId).innerHTML = "";
}
}, 1000);
}
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Set the date we're counting down to
{if $countdownEventsIndices['upcoming'][$lang] < $numOfEvents[$lang]}
var countDownDatePrimary = new Date({$events[$countdownEventsIndices['upcoming'][$lang]]['date']});
{/if}
{if !is_null($countdownEventsIndices['next'][$lang]) && $countdownEventsIndices['next'][$lang] < $numOfEvents[$lang]}
var countDownDateSecondary = new Date({$events[$countdownEventsIndices['next'][$lang]]['date']});
{/if}
// Display the countdown in the element with the specified id
document.getElementById(elementId).innerHTML = ("0" + days).slice(-2) + ":" + ("0" + hours).slice(-2) + ":"
+ ("0" + minutes).slice(-2) + ":" + ("0" + seconds).slice(-2);
// Call the countdownTimer function with the specified date and element id
countdownTimer(countDownDatePrimary, 'countdown-primary');
countdownTimer(countDownDateSecondary, 'countdown-secondary');
</script>
{/if}
// If the countdown is finished, display a message
if (distance < 0) {
clearInterval(countdown);
document.getElementById(elementId).innerHTML = "";
}
}, 1000);
}
// Set the date we're counting down to
{if $countdownEventsIndices['upcoming'][$lang] < $numOfEvents[$lang]}
var countDownDatePrimary = new Date({$events[$countdownEventsIndices['upcoming'][$lang]]['date']});
{/if}
{if !is_null($countdownEventsIndices['next'][$lang]) && $countdownEventsIndices['next'][$lang] < $numOfEvents[$lang]}
var countDownDateSecondary = new Date({$events[$countdownEventsIndices['next'][$lang]]['date']});
{/if}
// Call the countdownTimer function with the specified date and element id
countdownTimer(countDownDatePrimary, 'countdown-primary');
countdownTimer(countDownDateSecondary, 'countdown-secondary');
</script>
{* Timeline data *}
<div class="dummy-timeline-begin d-none"><p>{$timelineBegin|noescape}</p></div>
Expand All @@ -660,6 +666,11 @@
const timelineBegin = new Date(timelineBeginElement.innerText.trim());
const timelineEnd = new Date(timelineEndElement.innerText.trim());
function yearStageIsDuring() {
return new Date() >= timelineBegin && new Date() <= timelineEnd;
}
// Init the timeline and set logos around it
function calculatePositionPercentages(dates, timelineId) {
const startDate = timelineBegin;
Expand Down Expand Up @@ -767,9 +778,11 @@
positions_series.forEach((position, index) => {
positionLogo(position, 'logo-series', `series-${index + 1}`, timelineId, images_series[index]);
});
position_today.forEach((position, index) => {
positionLogo(position, 'today-block', 'today-block', timelineId);
});
if (yearStageIsDuring()) {
position_today.forEach((position, index) => {
positionLogo(position, 'today-block', 'today-block', timelineId);
});
}
};
const observer = new IntersectionObserver(entries => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<p>
Organizátoři FYKOSu pořádají dvakrát do roka, na jaře a na podzim, tradiční soustředění. Tato devítidenní
akce
je určena pro zhruba 40 nejlepších řešitelů FYKOSu (část vybereme z každé kategorie podle pořadí, část podle
je určena pro alespoň 30 nejlepších řešitelů FYKOSu (část vybereme z každé kategorie podle pořadí, část podle
celkového bodového zisku) a probíhá v nějakém krásném koutu naší vlasti. Sami se níže můžete podívat, kam
jsme v minulosti zavítali. Účastníci soustředění prožijí několik dní plných zajímavých přednášek z fyziky a
matematiky. A aby intelektuální zátěž v režii studentů, organizátorů FYKOSu, nebyla příliš vysoká, odpočinou
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,7 @@
<h2>Soustředění</h2>
<p>
Dvakrát do roka, na jaře a na podzim, pořádáme tradiční soustředění. Tato týdenní akce je určena pro
zhruba
40 nejlepších řešitelů korespondenčního semináře a probíhá v nějakém krásném koutu naší vlasti.
alespoň 30 nejlepších řešitelů korespondenčního semináře a probíhá v nějakém krásném koutu naší vlasti.
Účastníci
soustředění prožijí týden plný zajímavých přednášek nejen z fyziky, matematiky a informatiky. Aby
intelektuální zátěž v režii studentů a organizátorů nebyla příliš vysoká, odpočinou si všichni při
Expand Down

0 comments on commit e47ee6e

Please sign in to comment.