Remove page numbering from navigation and page links
This commit is contained in:
@@ -13,13 +13,13 @@ export const CONFIG_GROUPS: ConfigGroup[] = [
|
|||||||
{ href: '/admin/qbittorrent', label: 'qBittorrent', description: 'Download progress and recovery', symbol: 'QB', service: 'qBittorrent' },
|
{ href: '/admin/qbittorrent', label: 'qBittorrent', description: 'Download progress and recovery', symbol: 'QB', service: 'qBittorrent' },
|
||||||
]},
|
]},
|
||||||
{ title: 'Preferences & access', description: 'Set the experience for your users and how issues are followed up.', items: [
|
{ title: 'Preferences & access', description: 'Set the experience for your users and how issues are followed up.', items: [
|
||||||
{ href: '/admin/site', label: 'Site & sign-in', description: 'Announcements and login options', symbol: '01' },
|
{ href: '/admin/site', label: 'Site & sign-in', description: 'Announcements and login options' },
|
||||||
{ href: '/admin/notifications', label: 'Email & notifications', description: 'Invites, password resets and repair updates', symbol: '02' },
|
{ href: '/admin/notifications', label: 'Email & notifications', description: 'Invites, password resets and repair updates' },
|
||||||
{ href: '/admin/issue-workflow', label: 'Issue follow-up', description: 'Confirmation emails and automatic closure', symbol: '03' },
|
{ href: '/admin/issue-workflow', label: 'Issue follow-up', description: 'Confirmation emails and automatic closure' },
|
||||||
{ href: '/admin/requests', label: 'Request updates', description: 'Refresh schedule and history retention', symbol: '04' },
|
{ href: '/admin/requests', label: 'Request updates', description: 'Refresh schedule and history retention' },
|
||||||
{ href: '/users', label: 'Users', description: 'Accounts, email addresses and permissions', symbol: '05' },
|
{ href: '/users', label: 'Users', description: 'Accounts, email addresses and permissions' },
|
||||||
{ href: '/admin/identities', label: 'User identities', description: 'Review and confirm IDs across your media services', symbol: 'ID' },
|
{ href: '/admin/identities', label: 'User identities', description: 'Review and confirm IDs across your media services', symbol: 'ID' },
|
||||||
{ href: '/admin/invites', label: 'Invite policy & access', description: 'Defaults, profiles and issued invites', symbol: '06' },
|
{ href: '/admin/invites', label: 'Invite policy & access', description: 'Defaults, profiles and issued invites' },
|
||||||
]},
|
]},
|
||||||
{ title: 'Advanced tools', description: 'Hosting and troubleshooting.', advanced: true, items: [
|
{ title: 'Advanced tools', description: 'Hosting and troubleshooting.', advanced: true, items: [
|
||||||
{ href: '/admin/general', label: 'Hosting & proxy', description: 'Public addresses and deployment options' },
|
{ href: '/admin/general', label: 'Hosting & proxy', description: 'Public addresses and deployment options' },
|
||||||
|
|||||||
@@ -1704,7 +1704,7 @@ export default function AdminInviteManagementPage() {
|
|||||||
</div>
|
</div>
|
||||||
{inviteEditingId == null ? (
|
{inviteEditingId == null ? (
|
||||||
<div className="invite-created-card">
|
<div className="invite-created-card">
|
||||||
<span className="eyebrow">Option 04 · Invites</span>
|
<span className="eyebrow">Invites</span>
|
||||||
<h3>Create invites from the client workspace</h3>
|
<h3>Create invites from the client workspace</h3>
|
||||||
<p>The guided invite flow now lives in the main navigation where users can create and manage their own invitations.</p>
|
<p>The guided invite flow now lives in the main navigation where users can create and manage their own invitations.</p>
|
||||||
<button type="button" onClick={() => router.push('/profile/invites')}>Open client invite workspace</button>
|
<button type="button" onClick={() => router.push('/profile/invites')}>Open client invite workspace</button>
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ export default function AdminLandingPage() {
|
|||||||
const service = services.find((entry) => entry.name.toLowerCase() === item.service?.toLowerCase())
|
const service = services.find((entry) => entry.name.toLowerCase() === item.service?.toLowerCase())
|
||||||
return (
|
return (
|
||||||
<a href={item.href} key={item.href} className="config-directory-link">
|
<a href={item.href} key={item.href} className="config-directory-link">
|
||||||
<span className="config-link-icon" aria-hidden="true">{item.symbol}</span>
|
{item.symbol && <span className="config-link-icon" aria-hidden="true">{item.symbol}</span>}
|
||||||
<span className="config-link-copy"><strong>{item.label}</strong><small>{item.description}</small></span>
|
<span className="config-link-copy"><strong>{item.label}</strong><small>{item.description}</small></span>
|
||||||
{item.service && <span className={`config-connection-badge is-${service?.status ?? 'unknown'}`}>{serviceStatusLabel(service?.status)}</span>}
|
{item.service && <span className={`config-connection-badge is-${service?.status ?? 'unknown'}`}>{serviceStatusLabel(service?.status)}</span>}
|
||||||
<span className="config-link-arrow" aria-hidden="true">→</span>
|
<span className="config-link-arrow" aria-hidden="true">→</span>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ export default function HowItWorksPage() {
|
|||||||
<nav aria-label="Quick links"><a href="/welcome">Welcome page</a><a href="/">My Requests</a><a href="/profile">My profile</a></nav>
|
<nav aria-label="Quick links"><a href="/welcome">Welcome page</a><a href="/">My Requests</a><a href="/profile">My profile</a></nav>
|
||||||
<details open><summary>Request a movie or TV show</summary>
|
<details open><summary>Request a movie or TV show</summary>
|
||||||
<ol>
|
<ol>
|
||||||
<li><strong>Choose Movie or TV show.</strong><p>Open <a href="/new-requests">02 New Requests</a> and pick what you’re looking for.</p></li>
|
<li><strong>Choose Movie or TV show.</strong><p>Open <a href="/new-requests">New Requests</a> and pick what you’re looking for.</p></li>
|
||||||
<li><strong>Search and choose the right title.</strong><p>For TV, choose the seasons you want. If it’s already requested, open that request to see its progress.</p></li>
|
<li><strong>Search and choose the right title.</strong><p>For TV, choose the seasons you want. If it’s already requested, open that request to see its progress.</p></li>
|
||||||
<li><strong>Check your choices and send it.</strong><p>Choose from the quality options shown. These come from the library’s settings.</p></li>
|
<li><strong>Check your choices and send it.</strong><p>Choose from the quality options shown. These come from the library’s settings.</p></li>
|
||||||
<li><strong>Follow it in My Requests.</strong><p>We’ll show what’s happening and any next step you can take. Some titles need approval or may not have a suitable download yet.</p></li>
|
<li><strong>Follow it in My Requests.</strong><p>We’ll show what’s happening and any next step you can take. Some titles need approval or may not have a suitable download yet.</p></li>
|
||||||
@@ -34,7 +34,7 @@ export default function HowItWorksPage() {
|
|||||||
</details>
|
</details>
|
||||||
<details><summary>Report a problem and follow the fix</summary>
|
<details><summary>Report a problem and follow the fix</summary>
|
||||||
<ol>
|
<ol>
|
||||||
<li><strong>Open <a href="/portal/issues">03 Issues</a>.</strong><p>Choose what’s wrong: missing content, broken picture, wrong download, audio, subtitles, or playback.</p></li>
|
<li><strong>Open <a href="/portal/issues">Issues</a>.</strong><p>Choose what’s wrong: missing content, broken picture, wrong download, audio, subtitles, or playback.</p></li>
|
||||||
<li><strong>Choose the affected content.</strong><p>Find the movie or show. For TV, select the affected seasons or episodes; you can choose more than one.</p></li>
|
<li><strong>Choose the affected content.</strong><p>Find the movie or show. For TV, select the affected seasons or episodes; you can choose more than one.</p></li>
|
||||||
<li><strong>Read “What will happen”, then submit.</strong><p>It tells you whether the selected files will be replaced, missing content searched for, subtitles checked, or playback investigated.</p></li>
|
<li><strong>Read “What will happen”, then submit.</strong><p>It tells you whether the selected files will be replaced, missing content searched for, subtitles checked, or playback investigated.</p></li>
|
||||||
<li><strong>Follow the issue’s progress.</strong><p>Open your reported issue to see the work recorded and where the fix is up to.</p></li>
|
<li><strong>Follow the issue’s progress.</strong><p>Open your reported issue to see the work recorded and where the fix is up to.</p></li>
|
||||||
@@ -44,13 +44,13 @@ export default function HowItWorksPage() {
|
|||||||
</details>
|
</details>
|
||||||
<details><summary>Invite someone</summary>
|
<details><summary>Invite someone</summary>
|
||||||
<ol>
|
<ol>
|
||||||
<li><strong>Open <a href="/profile/invites">04 Invites</a>.</strong><p>If invites are enabled for your account, give your invite a name you’ll recognise.</p></li>
|
<li><strong>Open <a href="/profile/invites">Invites</a>.</strong><p>If invites are enabled for your account, give your invite a name you’ll recognise.</p></li>
|
||||||
<li><strong>Add a welcome note, or skip it.</strong><p>A custom invite code is optional too.</p></li>
|
<li><strong>Add a welcome note, or skip it.</strong><p>A custom invite code is optional too.</p></li>
|
||||||
<li><strong>Choose how to share it.</strong><p>Copy the link yourself, or enter an email address to send it directly.</p></li>
|
<li><strong>Choose how to share it.</strong><p>Copy the link yourself, or enter an email address to send it directly.</p></li>
|
||||||
<li><strong>Manage it later.</strong><p>You can return to your invites to check them or disable a link. Your account’s invite limits apply automatically.</p></li>
|
<li><strong>Manage it later.</strong><p>You can return to your invites to check them or disable a link. Your account’s invite limits apply automatically.</p></li>
|
||||||
</ol>
|
</ol>
|
||||||
</details>
|
</details>
|
||||||
<details><summary>Update your account</summary><p>Open the account menu and choose <a href="/profile">My profile</a> to update your contact email, view your activity, or use the password options available for your account.</p><p>Looking for your downloads instead? <a href="/">01 My Requests</a> is your starting point.</p></details>
|
<details><summary>Update your account</summary><p>Open the account menu and choose <a href="/profile">My profile</a> to update your contact email, view your activity, or use the password options available for your account.</p><p>Looking for your downloads instead? <a href="/">My Requests</a> is your starting point.</p></details>
|
||||||
<footer>Ready? <a href="/welcome">Choose where to go next →</a></footer>
|
<footer>Ready? <a href="/welcome">Choose where to go next →</a></footer>
|
||||||
</main>
|
</main>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,11 +242,6 @@ a {
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-actions a span {
|
|
||||||
color: var(--ops-cyan);
|
|
||||||
font-size: 0.68rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header-actions a:hover,
|
.header-actions a:hover,
|
||||||
.header-actions a.is-active {
|
.header-actions a.is-active {
|
||||||
border-color: rgba(126, 215, 255, 0.22);
|
border-color: rgba(126, 215, 255, 0.22);
|
||||||
@@ -2861,14 +2856,12 @@ textarea {
|
|||||||
font-family: "JetBrains Mono", Consolas, monospace;
|
font-family: "JetBrains Mono", Consolas, monospace;
|
||||||
font-size: 0.76rem;
|
font-size: 0.76rem;
|
||||||
}
|
}
|
||||||
.header-actions a span { color: var(--ops-faint); font-size: 0.68rem; }
|
|
||||||
.header-actions a:hover,
|
.header-actions a:hover,
|
||||||
.header-actions a.is-active {
|
.header-actions a.is-active {
|
||||||
border-color: var(--ops-primary-2);
|
border-color: var(--ops-primary-2);
|
||||||
background: transparent;
|
background: transparent;
|
||||||
color: var(--ops-primary-2);
|
color: var(--ops-primary-2);
|
||||||
}
|
}
|
||||||
.header-actions a.is-active span { color: var(--ops-primary-2); }
|
|
||||||
.user-view-toggle {
|
.user-view-toggle {
|
||||||
min-height: 32px;
|
min-height: 32px;
|
||||||
border-color: var(--ops-line);
|
border-color: var(--ops-line);
|
||||||
|
|||||||
@@ -108,11 +108,10 @@ export default function HeaderActions() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<nav className="header-actions" aria-label="Primary">
|
<nav className="header-actions" aria-label="Primary">
|
||||||
{items.map((item, index) => {
|
{items.map((item) => {
|
||||||
const active = item.match(pathname)
|
const active = item.match(pathname)
|
||||||
return (
|
return (
|
||||||
<a key={item.href} href={item.href} className={active ? 'is-active' : undefined}>
|
<a key={item.href} href={item.href} className={active ? 'is-active' : undefined}>
|
||||||
<span aria-hidden="true">{String(index + 1).padStart(2, '0')}</span>
|
|
||||||
{item.label}
|
{item.label}
|
||||||
</a>
|
</a>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ export default function WelcomePage() {
|
|||||||
}, [])
|
}, [])
|
||||||
return <main className="welcome-page">
|
return <main className="welcome-page">
|
||||||
<header><span className="welcome-kicker">GrizzlyFlix + Magent</span><h1>Make yourself at home.</h1><p>Something to watch, or something to sort out?</p></header>
|
<header><span className="welcome-kicker">GrizzlyFlix + Magent</span><h1>Make yourself at home.</h1><p>Something to watch, or something to sort out?</p></header>
|
||||||
{error ? <div role="alert"><p>{error}</p><button onClick={() => window.location.reload()}>Try again</button> <a href="/login">Back to sign in</a></div> : !ready ? <p role="status">Getting things ready…</p> : <div className="welcome-choices">
|
{error ? <div role="alert"><p>{error}</p><button type="button" onClick={() => window.location.reload()}>Try again</button> <a href="/login">Back to sign in</a></div> : !ready ? <p role="status">Getting things ready…</p> : <div className="welcome-choices">
|
||||||
{url ? <a className="welcome-choice" href={url}><span className="welcome-icon" aria-hidden="true">▷</span><h2>Go to GrizzlyFlix</h2><p>Find your next favourite. Watch movies and TV shows.</p><strong>Let’s watch <span aria-hidden="true">→</span></strong></a> : <section className="welcome-choice"><span className="welcome-icon" aria-hidden="true">▷</span><h2>Go to GrizzlyFlix</h2><p>The watch link hasn’t been set up yet. Please ask an admin to add the public playback URL.</p></section>}
|
{url ? <a className="welcome-choice" href={url}><span className="welcome-icon" aria-hidden="true">▷</span><h2>Go to GrizzlyFlix</h2><p>Find your next favourite. Watch movies and TV shows.</p><strong>Let’s watch <span aria-hidden="true">→</span></strong></a> : <section className="welcome-choice"><span className="welcome-icon" aria-hidden="true">▷</span><h2>Go to GrizzlyFlix</h2><p>The watch link hasn’t been set up yet. Please ask an admin to add the public playback URL.</p></section>}
|
||||||
<a className="welcome-choice" href="/"><span className="welcome-icon" aria-hidden="true">☷</span><h2>Manage your account</h2><p>Track requests, report a problem, or update your profile.</p><strong>Open 01 My Requests <span aria-hidden="true">→</span></strong></a>
|
<a className="welcome-choice" href="/"><span className="welcome-icon" aria-hidden="true">☷</span><h2>Manage your account</h2><p>Track requests, report a problem, or update your profile.</p><strong>Open My Requests <span aria-hidden="true">→</span></strong></a>
|
||||||
</div>}
|
</div>}
|
||||||
<footer>First time here? <a href="/how-it-works">Here’s how it works</a>.</footer>
|
<footer>First time here? <a href="/how-it-works">Here’s how it works</a>.</footer>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
Reference in New Issue
Block a user