diff --git a/new.php b/new.php
index b7cbf2c..adaf314 100644
--- a/new.php
+++ b/new.php
@@ -55,6 +55,21 @@ function orphan_videos($config){
$videos = glob($config['videos_dir'].'/*.{mp4,webm,mov,m4v}', GLOB_BRACE) ?: [];
return array_values(array_filter($videos, fn($v)=>empty($referenced[basename($v)])));
}
+function paginate($items, $page, $perPage = 10){
+ $total = count($items);
+ $pages = max(1, (int)ceil($total / $perPage));
+ $page = max(1, min((int)$page, $pages));
+ return [$page, $pages, array_slice($items, ($page - 1) * $perPage, $perPage), $total];
+}
+function page_links($tab, $page, $pages){
+ if ($pages <= 1) return '';
+ $html = '
';
+ for ($i = 1; $i <= $pages; $i++) {
+ $class = $i === $page ? 'active' : '';
+ $html .= '
'.$i.'';
+ }
+ return $html . '
';
+}
function save_uploads($field, $dest, $allowed){
if (empty($_FILES[$field])) return [];
$files = $_FILES[$field]; $saved = [];
@@ -132,6 +147,9 @@ try {
$dirs = input_dirs($config['uploads_dir']);
$orphanVideos = orphan_videos($config);
$tab = $_GET['tab'] ?? (isset($_GET['edit']) ? 'edit' : 'new');
+$page = max(1, (int)($_GET['page'] ?? 1));
+[$editPage, $editPages, $dirsPage, $dirsTotal] = paginate($dirs, $tab === 'edit' ? $page : 1);
+[$videoPage, $videoPages, $orphanVideosPage, $orphanVideosTotal] = paginate($orphanVideos, $tab === 'videos' ? $page : 1);
$editName = $_GET['edit'] ?? '';
$editDir = null; $editData = ['title'=>'','date'=>'','place'=>'','description'=>'','captions'=>[]]; $editFiles = [];
if ($editName !== '') { try { $editDir = safe_input_dir($config['uploads_dir'], $editName); $editData = read_data($editDir); $editFiles = list_files($editDir); } catch (Throwable $e) { $err = $e->getMessage(); } }
@@ -140,8 +158,8 @@ if ($editName !== '') { try { $editDir = safe_input_dir($config['uploads_dir'],