chore(ui): improve hashbox (#8721)

Followup to https://codeberg.org/forgejo/forgejo/pulls/7822

* Fix signaturebox's background breaking out of hashbox and thus breaking it's rounded corners
* Fix a bug where an extra right margin was applied to signbox's avatar on pull request overview by unrelated rule
* Untangle hashbox's CSS from .label - it was not a good partnership between them. Some extra properties, some that we had to override
* Move CSS out of "repo.css" to a separate file - it's clearly not only related to repos

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8721
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
This commit is contained in:
0ko 2025-08-03 05:49:24 +02:00
commit 4392dee96d
10 changed files with 117 additions and 109 deletions

View file

@ -181,11 +181,11 @@
<span>{{ctx.Locale.Tr "repo.diff.parent"}}</span>
{{range .Parents}}
{{if $.PageIsWiki}}
<a class="ui primary sha label" href="{{$.RepoLink}}/wiki/commit/{{PathEscape .}}">
<a class="primary sha label" href="{{$.RepoLink}}/wiki/commit/{{PathEscape .}}">
<span class="shortsha">{{ShortSha .}}</span>
</a>
{{else}}
<a class="ui primary sha label" href="{{$.RepoLink}}/commit/{{PathEscape .}}">
<a class="primary sha label" href="{{$.RepoLink}}/commit/{{PathEscape .}}">
<span class="shortsha">{{ShortSha .}}</span>
</a>
{{end}}
@ -200,7 +200,7 @@
<span class="shortsha">{{ShortSha .CommitID}}</span>
</a>
{{else}}
<span class="ui primary sha label">
<span class="primary sha label">
<span class="shortsha">{{ShortSha .CommitID}}</span>
</span>
{{end}}

View file

@ -10,11 +10,11 @@
</div>
{{if .IsDiffCompare}}
<div class="commits-table-right tw-whitespace-nowrap">
<a href="{{$.CommitRepoLink}}/commit/{{.BeforeCommitID | PathEscape}}" class="ui primary sha label tw-mx-0">
<a href="{{$.CommitRepoLink}}/commit/{{.BeforeCommitID | PathEscape}}" class="primary sha label tw-mx-0">
<span class="shortsha">{{if not .BaseIsCommit}}{{if .BaseIsBranch}}{{svg "octicon-git-branch"}}{{else if .BaseIsTag}}{{svg "octicon-tag"}}{{end}}{{.BaseBranch}}{{else}}{{ShortSha .BaseBranch}}{{end}}</span>
</a>
...
<a href="{{$.CommitRepoLink}}/commit/{{.AfterCommitID | PathEscape}}" class="ui primary sha label tw-mx-0">
<a href="{{$.CommitRepoLink}}/commit/{{.AfterCommitID | PathEscape}}" class="primary sha label tw-mx-0">
<span class="shortsha">{{if not .HeadIsCommit}}{{if .HeadIsBranch}}{{svg "octicon-git-branch"}}{{else if .HeadIsTag}}{{svg "octicon-tag"}}{{end}}{{.HeadBranch}}{{else}}{{ShortSha .HeadBranch}}{{end}}</span>
</a>
</div>

View file

@ -11,7 +11,7 @@
<div class="repo-editor-header">
<div class="ui breadcrumb field {{if .Err_TreePath}}error{{end}}">
{{$shaurl := printf "%s/commit/%s" $.RepoLink (PathEscape .SHA)}}
{{$shalink := HTMLFormat `<a class="ui primary sha label" href="%s"><span class="shortsha">%s</span></a>` $shaurl (ShortSha .SHA)}}
{{$shalink := HTMLFormat `<a class="primary sha label" href="%s"><span class="shortsha">%s</span></a>` $shaurl (ShortSha .SHA)}}
{{if eq .CherryPickType "revert"}}
{{ctx.Locale.Tr "repo.editor.revert" $shalink}}
{{else}}

View file

@ -26,13 +26,13 @@
{{if .ParentHashes}}
{{ctx.Locale.Tr "repo.diff.parent"}}
{{range .ParentHashes}}
<a class="ui primary sha label" href="{{$.RepoLink}}/commit/{{.String}}">
<a class="primary sha label" href="{{$.RepoLink}}/commit/{{.String}}">
<span class="shortsha">{{ShortSha .String}}</span>
</a>
{{end}}
{{end}}
{{ctx.Locale.Tr "repo.diff.commit"}}
<a class="ui primary sha label" href="{{$.RepoLink}}/commit/{{.SHA}}">
<a class="primary sha label" href="{{$.RepoLink}}/commit/{{.SHA}}">
<span class="shortsha">{{ShortSha .SHA}}</span>
</a>
</td>

View file

@ -417,7 +417,7 @@
<label>{{ctx.Locale.Tr "repo.settings.admin_indexer_commit_sha"}}</label>
<span class="field">
{{if .CodeIndexerStatus}}
<a rel="nofollow" class="ui sha label" href="{{.RepoLink}}/commit/{{.CodeIndexerStatus.CommitSha}}">
<a rel="nofollow" class="sha label" href="{{.RepoLink}}/commit/{{.CodeIndexerStatus.CommitSha}}">
<span class="shortsha">{{ShortSha .CodeIndexerStatus.CommitSha}}</span>
</a>
{{else}}
@ -444,7 +444,7 @@
{{end}}
<span class="field">
{{if and .StatsIndexerStatus .StatsIndexerStatus.CommitSha}}
<a rel="nofollow" class="ui sha label" href="{{.RepoLink}}/commit/{{.StatsIndexerStatus.CommitSha}}">
<a rel="nofollow" class="sha label" href="{{.RepoLink}}/commit/{{.StatsIndexerStatus.CommitSha}}">
<span class="shortsha">{{ShortSha .StatsIndexerStatus.CommitSha}}</span>
</a>
{{else}}

View file

@ -26,7 +26,7 @@
{{else}}
<span class="text red">{{svg "octicon-alert"}}</span>
{{end}}
<a class="ui primary sha label toggle button show-panel" data-panel="#info-{{.ID}}">
<a class="primary sha label toggle button show-panel" data-panel="#info-{{.ID}}">
<span class="shortsha">{{.UUID}}</span>
</a>
</div>

View file

@ -1,4 +1,4 @@
{{$class := "ui sha label"}}
{{$class := "sha label"}}
{{if .signature}}
{{$class = (print $class " isSigned")}}
{{if .verification.Verified}}

View file

@ -30,6 +30,7 @@
@import "./modules/svg.css";
@import "./modules/flexcontainer.css";
@import "./modules/user-cards.css";
@import "./modules/hashbox.css";
@import "./shared/flex-list.css";
@import "./shared/milestone.css";

View file

@ -0,0 +1,104 @@
.sha.label {
display: inline-flex;
flex-shrink: 0;
gap: 0;
align-items: center;
margin: 0 6px; /* needs to go but looked into case-by-case */
padding: 0;
min-width: 0; /* from .ui.label, may be bad actually */
background: var(--color-label-bg);
color: var(--color-label-text);
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
white-space: nowrap;
font-family: var(--fonts-monospace);
font-size: 13px;
font-weight: var(--font-weight-normal);
line-height: 1;
}
.primary.sha.label {
border: none;
background: var(--color-primary);
color: var(--color-primary-contrast);
}
.sha.label .shortsha {
padding: 0.33rem 0.5rem;
}
.sha.label .signature {
color: var(--color-text);
background: var(--color-light);
padding: 0.25rem 0.33rem;
border-left: 1px solid var(--color-light-border);
border-top-right-radius: inherit;
border-bottom-right-radius: inherit;
}
.sha.label .signature-author {
display: flex;
gap: 0.25rem;
}
.sha.label .signature-author .avatar {
height: 16px;
width: 16px;
margin: 0 !important; /* In some areas selectors with .avatar are too broad */
}
.sha.label.isSigned.isWarning {
border: 1px solid var(--color-red-badge);
background: var(--color-red-badge-bg);
}
.sha.label.isSigned.isWarning .signature {
border-left: 1px solid var(--color-red-badge);
color: var(--color-red-badge);
}
.sha.label.isSigned.isWarning:hover {
background: var(--color-red-badge-hover-bg);
}
.sha.label.isSigned.isVerified {
border: 1px solid var(--color-green-badge);
background: var(--color-green-badge-bg);
}
.sha.label.isSigned.isVerified .signature {
border-left: 1px solid var(--color-green-badge);
color: var(--color-green-badge);
}
.sha.label.isSigned.isVerified:hover {
background: var(--color-green-badge-hover-bg);
}
.sha.label.isSigned.isVerifiedUntrusted {
border: 1px solid var(--color-yellow-badge);
background: var(--color-yellow-badge-bg);
}
.sha.label.isSigned.isVerifiedUntrusted .signature {
border-left: 1px solid var(--color-yellow-badge);
color: var(--color-yellow-badge);
}
.sha.label.isSigned.isVerifiedUntrusted:hover {
background: var(--color-yellow-badge-hover-bg);
}
.sha.label.isSigned.isVerifiedUnmatched {
border: 1px solid var(--color-orange-badge);
background: var(--color-orange-badge-bg);
}
.sha.label.isSigned.isVerifiedUnmatched .signature {
border-left: 1px solid var(--color-orange-badge);
color: var(--color-orange-badge);
}
.sha.label.isSigned.isVerifiedUnmatched:hover {
background: var(--color-orange-badge-hover-bg);
}

View file

@ -1238,103 +1238,6 @@ pdf-object {
background-color: var(--color-light) !important;
}
.ui .sha.label {
font-family: var(--fonts-monospace);
font-size: 13px;
font-weight: var(--font-weight-normal);
margin: 0 6px;
padding: 0;
gap: 0;
flex-shrink: 0;
}
.ui.ui .sha.label {
border: 1px solid var(--color-light-border);
}
.ui.primary.sha.label {
border: none !important;
background: var(--color-primary) !important;
}
.sha.label .shortsha {
padding: 0.33rem 0.5rem;
}
.sha.label .signature {
color: var(--color-text);
background: var(--color-light);
padding: 0.25rem 0.33rem;
border-left: 1px solid var(--color-light-border);
}
.sha.label .signature-author {
display: flex;
gap: 0.25rem;
}
.sha.label .signature-author .avatar {
height: 16px;
margin-bottom: 0;
width: 16px;
}
.sha.label.isSigned.isWarning {
border: 1px solid var(--color-red-badge);
background: var(--color-red-badge-bg);
}
.sha.label.isSigned.isWarning .signature {
border-left: 1px solid var(--color-red-badge);
color: var(--color-red-badge);
}
.sha.label.isSigned.isWarning:hover {
background: var(--color-red-badge-hover-bg) !important;
}
.sha.label.isSigned.isVerified {
border: 1px solid var(--color-green-badge);
background: var(--color-green-badge-bg);
}
.sha.label.isSigned.isVerified .signature {
border-left: 1px solid var(--color-green-badge);
color: var(--color-green-badge);
}
.sha.label.isSigned.isVerified:hover {
background: var(--color-green-badge-hover-bg) !important;
}
.sha.label.isSigned.isVerifiedUntrusted {
border: 1px solid var(--color-yellow-badge);
background: var(--color-yellow-badge-bg);
}
.sha.label.isSigned.isVerifiedUntrusted .signature {
border-left: 1px solid var(--color-yellow-badge);
color: var(--color-yellow-badge);
}
.sha.label.isSigned.isVerifiedUntrusted:hover {
background: var(--color-yellow-badge-hover-bg) !important;
}
.sha.label.isSigned.isVerifiedUnmatched {
border: 1px solid var(--color-orange-badge);
background: var(--color-orange-badge-bg);
}
.sha.label.isSigned.isVerifiedUnmatched .signature {
border-left: 1px solid var(--color-orange-badge);
color: var(--color-orange-badge);
}
.sha.label.isSigned.isVerifiedUnmatched:hover {
background: var(--color-orange-badge-hover-bg) !important;
}
.repository .data-table {
width: 100%;
}