| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- /** @var string $content */
- /** @var string $title */
- /** @var \App\Domain\User|null $currentUser */
- /** @var string $csrfToken */
- use function App\Http\e;
- $currentUser = $currentUser ?? null;
- $csrfToken = $csrfToken ?? '';
- ?>
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title><?= e($title ?? 'Sprint Planner') ?></title>
- <link rel="stylesheet" href="/assets/css/app.css">
- <link rel="stylesheet"
- href="https://code.jquery.com/ui/1.13.3/themes/base/jquery-ui.css">
- <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
- <script src="https://code.jquery.com/ui/1.13.3/jquery-ui.min.js"></script>
- <script src="/assets/js/app.js" defer></script>
- </head>
- <body class="bg-slate-50 text-slate-900 antialiased">
- <header class="border-b bg-white">
- <div class="max-w-7xl mx-auto px-4 py-3 flex items-center gap-4">
- <a href="/" class="font-semibold tracking-tight">Sprint Planner</a>
- <nav class="ml-auto flex items-center gap-4 text-sm">
- <?php if ($currentUser !== null): ?>
- <a href="/" class="text-slate-600 hover:text-slate-900 hover:underline">Sprints</a>
- <?php if ($currentUser->isAdmin): ?>
- <a href="/sprints/new" class="text-slate-600 hover:text-slate-900 hover:underline">New sprint</a>
- <?php endif; ?>
- <span class="text-slate-400">·</span>
- <span class="text-slate-600">
- <?= e($currentUser->displayName) ?>
- <?php if ($currentUser->isAdmin): ?>
- <span class="ml-1 inline-block px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider bg-amber-100 text-amber-800 rounded">admin</span>
- <?php endif; ?>
- </span>
- <div class="relative">
- <button type="button"
- data-menu-trigger
- aria-expanded="false"
- aria-haspopup="true"
- aria-controls="app-menu"
- aria-label="Open menu"
- class="p-2 rounded-md hover:bg-slate-100 focus:outline-none focus:ring-2 focus:ring-slate-400">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20" aria-hidden="true" class="block stroke-current" fill="none" stroke-width="2" stroke-linecap="round">
- <line x1="3" y1="5" x2="17" y2="5"></line>
- <line x1="3" y1="10" x2="17" y2="10"></line>
- <line x1="3" y1="15" x2="17" y2="15"></line>
- </svg>
- </button>
- <div id="app-menu"
- data-menu
- role="menu"
- hidden
- class="absolute right-0 mt-2 min-w-[12rem] rounded-md border border-slate-200 bg-white shadow-lg py-1 z-10">
- <?php if ($currentUser->isAdmin): ?>
- <a href="/workers" role="menuitem"
- class="block px-3 py-2 text-sm text-slate-700 hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-slate-400">Workers</a>
- <a href="/users" role="menuitem"
- class="block px-3 py-2 text-sm text-slate-700 hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-slate-400">Users</a>
- <a href="/audit" role="menuitem"
- class="block px-3 py-2 text-sm text-slate-700 hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-slate-400">Audit log</a>
- <hr class="my-1 border-slate-200">
- <?php endif; ?>
- <form method="post" action="/auth/logout">
- <input type="hidden" name="_csrf" value="<?= e($csrfToken) ?>">
- <button type="submit" role="menuitem"
- class="block w-full text-left px-3 py-2 text-sm text-slate-700 hover:bg-slate-50 font-[inherit] focus:outline-none focus:ring-2 focus:ring-slate-400">
- Sign out
- </button>
- </form>
- </div>
- </div>
- <?php else: ?>
- <a href="/auth/login"
- class="text-blue-700 hover:underline">Sign in</a>
- <?php endif; ?>
- </nav>
- </div>
- </header>
- <main class="max-w-7xl mx-auto px-4 py-6">
- <?= $content ?>
- </main>
- </body>
- </html>
|