aboutsummaryrefslogtreecommitdiffhomepage
path: root/routes
diff options
context:
space:
mode:
authorwinter2025-01-26 16:24:10 +0000
committerwinter2025-01-26 16:24:10 +0000
commite8106abb8006f5e60e1f2d42621c64ae3d78e372 (patch)
tree04bb030cdba4043794eb7136b5ca24fd8e81886d /routes
parent890dad24d6c095c41e6358b2a6cb61f1b6c2f6ad (diff)
infinite scroll
Diffstat (limited to 'routes')
-rw-r--r--routes/timelines.php44
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) {