diff --git a/site/app/Talks/TalksList.php b/site/app/Talks/TalksList.php
new file mode 100644
index 000000000..5f3d3f78a
--- /dev/null
+++ b/site/app/Talks/TalksList.php
@@ -0,0 +1,20 @@
+ $talks
+ */
+ public function render(array $talks): void
+ {
+ $this->template->talks = $talks;
+ $this->template->render(__DIR__ . '/talksList.latte');
+ }
+
+}
diff --git a/site/app/Talks/TalksListFactory.php b/site/app/Talks/TalksListFactory.php
new file mode 100644
index 000000000..77325cc01
--- /dev/null
+++ b/site/app/Talks/TalksListFactory.php
@@ -0,0 +1,11 @@
+
+ {$talk->getTitle()}
+ {$talk->getDate()|localeDay}, {$talk->getEvent()}{if $talk->getDuration()} ({_messages.talks.durationshort|format:$talk->getDuration()}){/if}
+ {icon images}
+ {icon camera-video}
+
diff --git a/site/app/Www/Presenters/HomepagePresenter.php b/site/app/Www/Presenters/HomepagePresenter.php
index 9c1d4bc65..f8c116c77 100644
--- a/site/app/Www/Presenters/HomepagePresenter.php
+++ b/site/app/Www/Presenters/HomepagePresenter.php
@@ -8,6 +8,8 @@
use MichalSpacekCz\Articles\ArticleSummaryFactory;
use MichalSpacekCz\Interviews\Interviews;
use MichalSpacekCz\Talks\Talks;
+use MichalSpacekCz\Talks\TalksList;
+use MichalSpacekCz\Talks\TalksListFactory;
use MichalSpacekCz\Training\Company\CompanyTrainings;
use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesList;
use MichalSpacekCz\Training\DateList\UpcomingTrainingDatesListFactory;
@@ -24,6 +26,7 @@ public function __construct(
private readonly DiscontinuedTrainings $discontinuedTrainings,
private readonly UpcomingTrainingDatesListFactory $upcomingTrainingDatesListFactory,
private readonly ArticleSummaryFactory $articleSummaryFactory,
+ private readonly TalksListFactory $talksListFactory,
) {
parent::__construct();
}
@@ -53,4 +56,10 @@ protected function createComponentArticleSummary(): ArticleSummary
return $this->articleSummaryFactory->create();
}
+
+ protected function createComponentTalksList(string $name): TalksList
+ {
+ return $this->talksListFactory->create();
+ }
+
}
diff --git a/site/app/Www/Presenters/TalksPresenter.php b/site/app/Www/Presenters/TalksPresenter.php
index 5cad814ad..99085d469 100644
--- a/site/app/Www/Presenters/TalksPresenter.php
+++ b/site/app/Www/Presenters/TalksPresenter.php
@@ -9,6 +9,8 @@
use MichalSpacekCz\Talks\Exceptions\UnknownSlideException;
use MichalSpacekCz\Talks\Talks;
use MichalSpacekCz\Talks\TalkSlides;
+use MichalSpacekCz\Talks\TalksList;
+use MichalSpacekCz\Talks\TalksListFactory;
use MichalSpacekCz\Training\Dates\UpcomingTrainingDates;
use Nette\Application\BadRequestException;
use Nette\Application\UI\InvalidLinkException;
@@ -20,6 +22,7 @@ public function __construct(
private readonly Talks $talks,
private readonly TalkSlides $talkSlides,
private readonly UpcomingTrainingDates $upcomingTrainingDates,
+ private readonly TalksListFactory $talksListFactory,
) {
parent::__construct();
}
@@ -79,4 +82,10 @@ public function actionTalk(string $name, ?string $slide = null): void
$this->template->slidesPlatform = $talk->getSlidesHref() ? SlidesPlatform::tryFromUrl($talk->getSlidesHref())?->getName() : null;
}
+
+ protected function createComponentTalksList(string $name): TalksList
+ {
+ return $this->talksListFactory->create();
+ }
+
}
diff --git a/site/app/Www/Presenters/templates/Homepage/default.latte b/site/app/Www/Presenters/templates/Homepage/default.latte
index ef6302269..65c1cba9d 100644
--- a/site/app/Www/Presenters/templates/Homepage/default.latte
+++ b/site/app/Www/Presenters/templates/Homepage/default.latte
@@ -26,17 +26,13 @@
{_messages.label.upcomingtalks}
{if $upcomingTalks}
-
- {include "../Talks/common/itemTalk.latte", talk: $talk}
-
+ {control talksList $upcomingTalks}
{_messages.talks.atyourevent.upcoming|format:'mail@michalspacek.cz'}
{else}
{_messages.talks.atyourevent.noupcoming|format:'mail@michalspacek.cz'}
{/if}
{_messages.label.pasttalks}
-
- {include "../Talks/common/itemTalk.latte", talk: $talk}
-
+{control talksList $talks}
{_messages.label.alltalks}
{_messages.label.myinterviews}
diff --git a/site/app/Www/Presenters/templates/Talks/common/itemTalk.latte b/site/app/Www/Presenters/templates/Talks/common/itemTalk.latte
deleted file mode 100644
index 246bb7054..000000000
--- a/site/app/Www/Presenters/templates/Talks/common/itemTalk.latte
+++ /dev/null
@@ -1,4 +0,0 @@
-{$talk->getTitle()}
-{$talk->getDate()|localeDay}, {$talk->getEvent()}{if $talk->getDuration()} ({_messages.talks.durationshort|format:$talk->getDuration()}){/if}
-{icon images}
-{icon camera-video}
diff --git a/site/app/Www/Presenters/templates/Talks/default.latte b/site/app/Www/Presenters/templates/Talks/default.latte
index 48361f7b8..d72a77547 100644
--- a/site/app/Www/Presenters/templates/Talks/default.latte
+++ b/site/app/Www/Presenters/templates/Talks/default.latte
@@ -11,9 +11,7 @@
{_messages.label.upcomingtalks}
{if $upcomingTalks}
-
- {include "common/itemTalk.latte", talk: $talk}
-
+ {control talksList $upcomingTalks}
{_messages.talks.atyourevent.upcoming|format:'mail@michalspacek.cz'}
{else}
{_messages.talks.atyourevent.noupcoming|format:'mail@michalspacek.cz'}
@@ -24,9 +22,7 @@
{foreach $talks as $year => $items}
{$year}
-
- {include "common/itemTalk.latte", talk: $talk}
-
+ {control talksList $items}
{/foreach}
{_messages.talks.more|format:'https://www.slideshare.net/spaze/presentations', 'https://speakerdeck.com/u/spaze'}
{/define}
diff --git a/site/config/services.neon b/site/config/services.neon
index 9aaa8c44c..9ef49e79f 100644
--- a/site/config/services.neon
+++ b/site/config/services.neon
@@ -86,6 +86,7 @@ services:
- MichalSpacekCz\Talks\TalkInputsFactory(videoThumbnails: @talkVideoThumbnails)
- MichalSpacekCz\Talks\Talks
- MichalSpacekCz\Talks\TalkSlides
+ - MichalSpacekCz\Talks\TalksListFactory
- MichalSpacekCz\Templating\Filters
latte.templateFactory:
create: MichalSpacekCz\Templating\TemplateFactory()