mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-11-14 00:07:00 +01:00
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>
91 lines
6.9 KiB
HTML
91 lines
6.9 KiB
HTML
<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> / <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 — 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' && repo?.status != 'error' && !rateLimitResetAt" :class="{'paper-progress-ready': repo?.status == 'ready'}" :aria-valuenow="(progress)">
|
||
<div class="paper-progress-bar" :style=""width: " + (progress) + "%;""></div>
|
||
<div class="paper-progress-label">
|
||
<span v-text="fmt?.title(repo?.status)"></span><span v-if="repo?.statusMessage"> · <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 == 'error' && !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 — try again.</li>
|
||
</ul>
|
||
<div class="paper-error-actions">
|
||
<a class="btn btn-primary" :href="safeUrl("/anonymize/" + (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 == 'ready'">
|
||
<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("/r/" + (repoId) + "/")">
|
||
<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' && 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("/w/" + (repoId) + "/")">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("/anonymize/" + (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>
|