diff options
Diffstat (limited to 'routes/timelines.php')
| -rw-r--r-- | routes/timelines.php | 44 |
1 files changed, 27 insertions, 17 deletions
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 @@ <?php use Digitigrade\HttpResponseStatus\BadRequest; -use Digitigrade\HttpResponseStatus\TemporaryRedirect; use Digitigrade\Model\UserAccount; use Digitigrade\Router; use Digitigrade\Timeline\GlobalTimeline; use Digitigrade\Timeline\HomeTimeline; use Digitigrade\Timeline\LocalTimeline; -Router::getInstance()->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) { |
