aboutsummaryrefslogtreecommitdiffhomepage
path: root/routes/timelines.php
diff options
context:
space:
mode:
Diffstat (limited to 'routes/timelines.php')
-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) {