Files
Thomas DurieuxandClaude Opus 5.5 c044b83541 feat(ui): one consistent design across author, reviewer and admin screens
The UI was uneven: the home page looked finished, but app pages used three
different display typefaces, the anonymize flow changed frame between steps,
and the dashboard, explorer and admin screens each had their own controls,
status colours and edge-case handling.

Make every screen follow one system: shared page header, grid, buttons,
filters and status colours; a repository picker and step trail on anonymize;
a "What reviewers will see" preview of the actual reviewer page; consistent
file headers and viewers for every file type; truthful admin charts and
tables. Fold the accumulated override blocks back into style.css (22%
smaller, no visual change).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 02:22:45 +00:00

91 lines
6.9 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="repository-task status-page">
<header class="page-head" :class="{ 'task-ready': repo?.status === 'ready' }">
<div class="paper-crumbs"><a href="/dashboard">My work</a> &nbsp;/&nbsp; <span class="here">Review link</span></div>
<div class="page-head-main"><div>
<h1>{{ repo?.status === 'ready' ? 'Your review link is ready' : 'Prepare your anonymous review link' }}</h1>
<p class="task-lede">{{ repo?.status === 'ready' ? 'Share this link with reviewers in your submission.' : 'Your settings are saved. Track preparation before sharing the link.' }}</p>
</div>
</div>
<ol class="task-trail flow-trail" aria-label="Repository progress"><li>1. Repository</li><li>2. Review and hosting</li><li aria-current="step">3. Review link</li></ol>
</header>
<div class="task-columns">
<section class="task-preparation" aria-label="Repository preparation">
<p v-if="error" class="text-danger" role="alert">Unable to load repository status. <button type="button" class="task-text-button" @click="getStatus()">Try again</button></p>
<p class="paper-section-copy" v-if="repo?.status !== 'ready'">
The repository will take a few minutes to get ready, depending on its
size. Visit the <a href="/faq">FAQ</a> for more information.
</p>
<div class="paper-ratelimit-card" role="status" v-if="rateLimitResetAt">
<div class="paper-ratelimit-head">
<svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-hourglass"></use></svg>
<div>
<div class="paper-error-eyebrow">Temporarily paused</div>
<div class="paper-error-title">GitHub API rate limit reached</div>
</div>
</div>
<p class="paper-error-msg">Anonymization will resume automatically in <strong>{{ rateLimitCountdown }}</strong>. No action needed &mdash; the job is queued and will continue where it left off.</p>
</div>
<div class="paper-progress" role="progressbar" aria-valuemin="0" aria-valuemax="100" v-if="repo?.status !== 'ready' &amp;&amp; repo?.status != &#x27;error&#x27; &amp;&amp; !rateLimitResetAt" :class="{&#x27;paper-progress-ready&#x27;: repo?.status == &#x27;ready&#x27;}" :aria-valuenow="(progress)">
<div class="paper-progress-bar" :style="&quot;width: &quot; + (progress) + &quot;%;&quot;"></div>
<div class="paper-progress-label">
<span v-text="fmt?.title(repo?.status)"></span><span v-if="repo?.statusMessage">&nbsp;&middot;&nbsp;<span v-text="repo?.statusMessage"></span></span>
<span class="paper-progress-pct">{{ progress || 0 }}%</span>
</div>
</div>
<div class="paper-error-card" role="alert" v-if="repo?.status == &#x27;error&#x27; &amp;&amp; !rateLimitResetAt">
<div class="paper-error-head">
<svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-warning"></use></svg>
<div>
<div class="paper-error-eyebrow">Anonymization failed</div>
<div class="paper-error-title">Something went wrong while preparing this repository.</div>
</div>
</div>
<p class="paper-error-msg" v-if="repo?.statusMessage">{{ fmt?.translate('ERRORS.' + repo?.statusMessage) }}</p>
<p class="paper-error-msg" v-if="!repo?.statusMessage">No additional details were reported. The most common causes are private repositories, missing branches, and rate limits.</p>
<p v-if="repo?.statusMessage === 'quota_exceeded'"><a :href="safeUrl('/anonymize/' + repoId)">Review this repository’s hosting</a>, then retry preparation.</p>
<ul class="paper-error-hints">
<li>Make sure the source URL points to a repository or pull request you can access.</li>
<li>Check that the chosen branch and commit still exist on GitHub.</li>
<li>If you just signed in, the access token may need a moment to propagate &mdash; try again.</li>
</ul>
<div class="paper-error-actions">
<a class="btn btn-primary" :href="safeUrl(&quot;/anonymize/&quot; + (repoId))"><svg class="ui-icon mr-1" aria-hidden="true"><use href="#ui-icon-edit"></use></svg> Edit anonymization</a>
<a class="btn" href="/faq"><svg class="ui-icon mr-1" aria-hidden="true"><use href="#ui-icon-help"></use></svg> Read the FAQ</a>
<a class="btn" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener"><svg class="ui-icon mr-1" aria-hidden="true"><use href="#ui-icon-bug"></use></svg> Report a bug in Anonymous GitHub</a>
</div>
</div>
<div class="share-link" v-if="repo?.status == &#x27;ready&#x27;">
<div class="share-link-label" id="share-url-label">Review link</div>
<div class="share-link-row">
<code id="share-url" class="share-link-url" tabindex="0" role="textbox" aria-readonly="true" aria-labelledby="share-url-label" @focus="selectShareUrl($event)">{{ shareUrl }}</code>
<div class="share-link-buttons">
<button type="button" class="btn btn-primary share-copy" @click="copyShareUrl()">
<svg class="ui-icon" aria-hidden="true"><use :href="copied ? '#ui-icon-check' : '#project-icon-copy'"></use></svg>
<span aria-live="polite" v-text="copied ? 'Copied' : 'Copy link'"></span>
</button>
<a class="btn share-open" target="_self" :href="safeUrl(&quot;/r/&quot; + (repoId) + &quot;/&quot;)">
<svg class="ui-icon" aria-hidden="true"><use href="#project-icon-eye"></use></svg> Open repository
</a>
</div>
</div>
<p class="share-link-note">{{ repo?.options?.expirationMode !== 'never' &amp;&amp; repo?.options?.expirationDate ? 'Expires ' + fmt.date(repo.options.expirationDate) : 'Never expires' }}<span aria-hidden="true"> · </span>Reviewers don’t need an account<template v-if="repo?.options?.page"><span aria-hidden="true"> · </span><a target="_self" :href="safeUrl(&quot;/w/&quot; + (repoId) + &quot;/&quot;)">Open GitHub page</a></template></p>
<div class="share-link-next">
<h2>Need to change something?</h2>
<p>Edit the redacted terms or the expiry at any time. The link stays the same.</p>
<p class="share-link-next-actions"><a :href="safeUrl(&quot;/anonymize/&quot; + (repoId))">Edit anonymization</a><span aria-hidden="true">·</span><a href="/dashboard">Go to My work</a></p>
</div>
</div>
</section>
<aside class="task-summary" aria-label="Repository summary">
<dl><dt>Source</dt><dd class="task-source" v-if="repo?.source?.fullName" :title="'https://github.com/' + repo.source.fullName">github.com/<wbr>{{ repo.source.fullName.split('/')[0] }}/<wbr>{{ repo.source.fullName.split('/').slice(1).join('/') }}</dd><dd v-else>Loading…</dd><dt>Lifetime</dt><dd>{{ repo?.options?.expirationMode === 'never' ? 'Never expire while subscribed' : repo?.options?.expirationDate ? 'Until ' + fmt.date(repo.options.expirationDate) : 'Loading…' }}</dd><dt>Review access</dt><dd>Anonymous and free</dd></dl>
</aside>
</div>
</div>