From e8106abb8006f5e60e1f2d42621c64ae3d78e372 Mon Sep 17 00:00:00 2001 From: winter Date: Sun, 26 Jan 2025 16:24:10 +0000 Subject: infinite scroll --- routes/timelines.php | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) (limited to 'routes/timelines.php') diff --git a/routes/timelines.php b/routes/timelines.php index f70c0d6..8bd2873 100644 --- a/routes/timelines.php +++ b/routes/timelines.php @@ -1,30 +1,40 @@ mount('/feed/global', function (array $args) { - $items = (new GlobalTimeline())->getPage(); - render_template('timeline', ['kind' => 'global', 'items' => $items]); -}); - -Router::getInstance()->mount('/feed/local', function (array $args) { - $items = (new LocalTimeline())->getPage(); - render_template('timeline', ['kind' => 'local', 'items' => $items]); -}); - -Router::getInstance()->mount('/feed/home', function (array $args) { - $user = UserAccount::findByCurrentSession(); - if ($user == null) { - throw new TemporaryRedirect('/feed/global'); +Router::getInstance()->mount('/feed/:kind', function (array $args) { + /** @var \Digitigrade\Timeline\Timeline $provider */ + $provider = match ($args['kind']) { + 'global' => new GlobalTimeline(), + 'local' => new LocalTimeline(), + 'home' => new HomeTimeline(UserAccount::requireByCurrentSession()) + }; + $page = $_GET['page'] ?? 0; + $items = $provider->getPage($page); + if (isset($_GET['infinite'])) { + // infinite scroll update + if (count($items) > 0) { + foreach ($items as $item) { + $item->getReason()?->renderAsHtml(); + $item->getObject()->renderAsHtml(); + } + render_template('infinite_scroll_trigger', [ + 'kind' => $args['kind'], + 'isUpdate' => true, + 'nextPage' => $page + 1 + ]); + } else { + render_template('infinite_scroll_trigger', ['isEnd' => true]); + } + } else { + // regular timeline page + render_template('timeline', ['kind' => $args['kind'], 'items' => $items]); } - $items = (new HomeTimeline($user))->getPage(); - render_template('timeline', ['kind' => 'home', 'items' => $items]); }); Router::getInstance()->mount('/feed/home/partial', function (array $args) { -- cgit v1.3