From 3084a5f54ef55289b9275664eac724e177f9c75b Mon Sep 17 00:00:00 2001 From: lutinglt Date: Sat, 29 Nov 2025 18:09:27 +0800 Subject: [PATCH] Synchronized repository commit page layout and styles --- CHANGELOG.md | 1 + gitea/templates/repo/commit_sign_badge.tmpl | 81 +++++++++++++ gitea/templates/repo/commits_list.tmpl | 89 ++++++++++++++ package.json | 2 +- styles/templates/repo/commit_sign_badge.ts | 16 +++ styles/templates/repo/commits_list.ts | 121 ++++++++++++++++++++ styles/templates/repo/index.ts | 2 + templates/repo/commit_sign_badge.tmpl | 81 +++++++++++++ templates/repo/commits_list.tmpl | 82 +++++++++++++ 9 files changed, 474 insertions(+), 1 deletion(-) create mode 100644 gitea/templates/repo/commit_sign_badge.tmpl create mode 100644 gitea/templates/repo/commits_list.tmpl create mode 100644 styles/templates/repo/commit_sign_badge.ts create mode 100644 styles/templates/repo/commits_list.ts create mode 100644 templates/repo/commit_sign_badge.tmpl create mode 100644 templates/repo/commits_list.tmpl diff --git a/CHANGELOG.md b/CHANGELOG.md index db276ca..7d33b24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ##### Template File +- Synchronized repository commit page layout and styles - Synchronized repository code list page layout and styles - Synchronized repository add file button menu styles diff --git a/gitea/templates/repo/commit_sign_badge.tmpl b/gitea/templates/repo/commit_sign_badge.tmpl new file mode 100644 index 0000000..f63e4ec --- /dev/null +++ b/gitea/templates/repo/commit_sign_badge.tmpl @@ -0,0 +1,81 @@ +{{/* Template attributes: +* Commit +* CommitBaseLink +* CommitSignVerification +If you'd like to modify this template, you could test it on the devtest page. +ATTENTION: this template could be re-rendered many times (on the graph and commit list page), +so this template should be kept as small as possible, DO NOT put large components like modal/dialog into it. +*/}} +{{- $commit := $.Commit -}} +{{- $commitBaseLink := $.CommitBaseLink -}} +{{- $verification := $.CommitSignVerification -}}{{- /* asymkey.CommitVerification */ -}} + +{{- $extraClass := "" -}} +{{- $verified := false -}} +{{- $signingUser := NIL -}} +{{- $signingEmail := "" -}} +{{- $msgReasonPrefix := "" -}} +{{- $msgReason := "" -}} +{{- $msgSigningKey := "" -}} + +{{- if $verification -}} + {{- $signingUser = $verification.SigningUser -}} + {{- $signingEmail = $verification.SigningEmail -}} + {{- $extraClass = print $extraClass " commit-is-signed" -}} + {{- if $verification.Verified -}} + {{- /* reason is "{name} / {key-id}" */ -}} + {{- $msgReason = $verification.Reason -}} + {{- $verified = true -}} + {{- if eq $verification.TrustStatus "trusted" -}} + {{- $extraClass = print $extraClass " sign-trusted" -}} + {{- else if eq $verification.TrustStatus "untrusted" -}} + {{- $extraClass = print $extraClass " sign-untrusted" -}} + {{- $msgReasonPrefix = ctx.Locale.Tr "repo.commits.signed_by_untrusted_user" -}} + {{- else -}} + {{- $extraClass = print $extraClass " sign-unmatched" -}} + {{- $msgReasonPrefix = ctx.Locale.Tr "repo.commits.signed_by_untrusted_user_unmatched" -}} + {{- end -}} + {{- else -}} + {{- if $verification.Warning -}} + {{- $extraClass = print $extraClass " sign-warning" -}} + {{- else -}} + {{- $extraClass = "" -}}{{/* the commit is not signed */}} + {{- end -}} + {{- $msgReason = ctx.Locale.Tr $verification.Reason -}}{{- /* dirty part: it is the translation key ..... */ -}} + {{- end -}} + + {{- if $msgReasonPrefix -}} + {{- $msgReason = print $msgReasonPrefix ": " $msgReason -}} + {{- end -}} + + {{- if $verification.SigningSSHKey -}} + {{- $msgSigningKey = print (ctx.Locale.Tr "repo.commits.ssh_key_fingerprint") ": " $verification.SigningSSHKey.Fingerprint -}} + {{- else if $verification.SigningKey -}}{{- /* asymkey.GPGKey */ -}} + {{- $msgSigningKey = print (ctx.Locale.Tr "repo.commits.gpg_key_id") ": " $verification.SigningKey.PaddedKeyID -}} + {{- end -}} +{{- end -}} + +{{- if $commit -}} + + {{- ShortSha $commit.ID.String -}} +{{- end -}} +{{- if or (not $commit) $extraClass}}{{/* only show the lock icon if there is no commit info (icon only) or the commit is really signed */}} + + {{- if $verified -}} + {{- if and $signingUser $signingUser.ID -}} + {{svg "gitea-lock"}} + {{ctx.AvatarUtils.Avatar $signingUser 16}} + {{- else -}} + {{svg "gitea-lock-cog"}} + {{ctx.AvatarUtils.AvatarByEmail $signingEmail "" 16}} + {{- end -}} + {{- else -}} + {{svg "gitea-unlock"}} + {{- end -}} + +{{- end -}} +{{- if $commit -}} + +{{- end -}} + +{{- /* This template should be kept as small as possible, DO NOT put large components like modal/dialog into it. */ -}} diff --git a/gitea/templates/repo/commits_list.tmpl b/gitea/templates/repo/commits_list.tmpl new file mode 100644 index 0000000..959f2a9 --- /dev/null +++ b/gitea/templates/repo/commits_list.tmpl @@ -0,0 +1,89 @@ +
+ + + + + + + + + + + + {{$commitRepoLink := $.RepoLink}}{{if $.CommitRepoLink}}{{$commitRepoLink = $.CommitRepoLink}}{{end}} + {{range .Commits}} + + + + + {{if .Committer}} + + {{else}} + + {{end}} + + + {{end}} + +
{{ctx.Locale.Tr "repo.commits.author"}}{{StringUtils.ToUpper $.Repository.ObjectFormatName}}{{ctx.Locale.Tr "repo.commits.message"}}{{ctx.Locale.Tr "repo.commits.date"}}
+
+ {{$userName := .Author.Name}} + {{if .User}} + {{if and .User.FullName DefaultShowFullName}} + {{$userName = .User.FullName}} + {{end}} + {{ctx.AvatarUtils.Avatar .User 28 "tw-mr-2"}}{{$userName}} + {{else}} + {{ctx.AvatarUtils.AvatarByEmail .Author.Email .Author.Name 28 "tw-mr-2"}} + {{$userName}} + {{end}} +
+
+ {{$commitBaseLink := ""}} + {{if $.PageIsWiki}} + {{$commitBaseLink = printf "%s/wiki/commit" $commitRepoLink}} + {{else if $.PageIsPullCommits}} + {{$commitBaseLink = printf "%s/pulls/%d/commits" $commitRepoLink $.Issue.Index}} + {{else if $.Reponame}} + {{$commitBaseLink = printf "%s/commit" $commitRepoLink}} + {{end}} + {{template "repo/commit_sign_badge" dict "Commit" . "CommitBaseLink" $commitBaseLink "CommitSignVerification" .Verification}} + + + {{if $.PageIsWiki}} + {{.Summary | ctx.RenderUtils.RenderEmoji}} + {{else}} + {{$commitLink:= printf "%s/commit/%s" $commitRepoLink (PathEscape .ID.String)}} + {{ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink $.Repository}} + {{end}} + + {{if IsMultilineCommitMessage .Message}} + + {{end}} + {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}} + {{if IsMultilineCommitMessage .Message}} +
{{ctx.RenderUtils.RenderCommitBody .Message $.Repository}}
+ {{end}} + {{if $.CommitsTagsMap}} + {{range (index $.CommitsTagsMap .ID.String)}} + {{- template "repo/tag/name" dict "AdditionalClasses" "tw-py-0" "RepoLink" $.Repository.Link "TagName" .TagName "IsRelease" (not .IsTag) -}} + {{end}} + {{end}} +
{{DateUtils.TimeSince .Committer.When}}{{DateUtils.TimeSince .Author.When}} + + {{/* at the moment, wiki doesn't support these "view" links like "view at history point" */}} + {{if not $.PageIsWiki}} + {{/* view single file diff */}} + {{if $.FileTreePath}} + {{svg "octicon-file-diff"}} + {{end}} + + {{/* view at history point */}} + {{$viewCommitLink := printf "%s/src/commit/%s" $commitRepoLink (PathEscape .ID.String)}} + {{if $.FileTreePath}}{{$viewCommitLink = printf "%s/%s" $viewCommitLink (PathEscapeSegments $.FileTreePath)}}{{end}} + {{svg "octicon-file-code"}} + {{end}} +
+
diff --git a/package.json b/package.json index 1740bb6..bbca793 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitea-github-theme", - "version": "1.25.3.rc", + "version": "1.25.3", "type": "module", "scripts": { "dev": "vite build --mode dev", diff --git a/styles/templates/repo/commit_sign_badge.ts b/styles/templates/repo/commit_sign_badge.ts new file mode 100644 index 0000000..9754c02 --- /dev/null +++ b/styles/templates/repo/commit_sign_badge.ts @@ -0,0 +1,16 @@ +import { css, themeVars, otherThemeVars } from "src/types/vars"; + +export const commitSignBadge = css` + .github-theme-sha { + border-radius: ${otherThemeVars.border.radius}; + font-weight: 500; + padding: 0px 8px; + height: 26px; + display: flex; + align-items: center; + justify-content: center; + &:hover { + background-color: ${themeVars.color.hover.self}; + } + } +`; diff --git a/styles/templates/repo/commits_list.ts b/styles/templates/repo/commits_list.ts new file mode 100644 index 0000000..38568be --- /dev/null +++ b/styles/templates/repo/commits_list.ts @@ -0,0 +1,121 @@ +import { css, themeVars } from "src/types/vars"; + +const primary = "primary" as const; +const secondary = "secondary" as const; +const metadata = "metadata" as const; +const actions = "actions" as const; + +export const commitsList = css` + ul.github-theme-templates-commits-list { + margin: 0; + padding: 0; + list-style: none; + li.github-theme-commit { + border-bottom: 1px solid ${themeVars.color.secondary.self}; + padding: 8px 16px; + display: grid; + grid-template-areas: "${primary} ${metadata} ${actions}" "${secondary} ${metadata} ${actions}"; + grid-template-rows: repeat(2, auto); + grid-template-columns: minmax(30%, 1fr) minmax(0, max-content) min-content; + &:last-child { + border-bottom: none; + } + &:hover { + background-color: ${themeVars.color.hover.opaque}; + } + .message { + grid-area: ${primary}; + .commit-summary { + font-size: 16px; + font-weight: 500; + white-space: pre-wrap; + } + .ellipsis-button { + padding: unset; + height: 1.5rem; + min-width: 1.75rem; + background: unset; + border: unset; + vertical-align: bottom; + &:hover { + background: ${themeVars.color.hover.self}; + } + } + .commit-body { + font-size: 12px; + font-weight: 400; + color: ${themeVars.color.text.light.num1}; + margin: 8px 0; + } + } + .metadata { + grid-area: ${secondary}; + font-size: 12px; + color: ${themeVars.color.text.light.num1}; + display: flex; + align-items: center; + flex-direction: row; + gap: 4px; + img.ui.avatar { + border-radius: 9999px; + margin-right: 4px; + } + .ui.label svg { + min-width: 12px; + min-height: 12px; + width: 12px; + height: 12px; + } + } + .extra { + grid-area: ${metadata}; + display: flex; + align-items: center; + flex-direction: row; + flex-wrap: wrap; + column-gap: 8px; + .github-theme-tag { + border-width: 1.5px; + border-radius: 9999px; + height: 25px; + } + .commit-id-short { + gap: 8px; + padding: unset; + margin: unset; + height: 28px; + margin: 0 4px; + &.commit-is-signed { + &:hover { + background-color: unset !important; + } + span.ui.label.commit-sign-badge.commit-is-signed { + margin: unset; + } + } + } + } + .actions { + grid-area: ${actions}; + display: flex; + align-items: center; + flex-direction: row; + gap: 4px; + color: ${themeVars.color.text.light.num1}; + .github-theme-action { + justify-content: center; + height: 28px; + width: 28px; + } + } + } + } + @media (max-width: 767.98px) { + ul.github-theme-templates-commits-list { + li.github-theme-commit { + grid-template-areas: "${primary} ${primary}" "${metadata} ${actions}" "${secondary} ${actions}"; + grid-template-rows: repeat(3, auto); + } + } + } +`; diff --git a/styles/templates/repo/index.ts b/styles/templates/repo/index.ts index 0a45a23..69d8994 100644 --- a/styles/templates/repo/index.ts +++ b/styles/templates/repo/index.ts @@ -1,2 +1,4 @@ +import "./commit_sign_badge"; +import "./commits_list"; import "./view_content"; import "./view_list"; diff --git a/templates/repo/commit_sign_badge.tmpl b/templates/repo/commit_sign_badge.tmpl new file mode 100644 index 0000000..98e35bf --- /dev/null +++ b/templates/repo/commit_sign_badge.tmpl @@ -0,0 +1,81 @@ +{{/* Template attributes: +* Commit +* CommitBaseLink +* CommitSignVerification +If you'd like to modify this template, you could test it on the devtest page. +ATTENTION: this template could be re-rendered many times (on the graph and commit list page), +so this template should be kept as small as possible, DO NOT put large components like modal/dialog into it. +*/}} +{{- $commit := $.Commit -}} +{{- $commitBaseLink := $.CommitBaseLink -}} +{{- $verification := $.CommitSignVerification -}}{{- /* asymkey.CommitVerification */ -}} + +{{- $extraClass := "" -}} +{{- $verified := false -}} +{{- $signingUser := NIL -}} +{{- $signingEmail := "" -}} +{{- $msgReasonPrefix := "" -}} +{{- $msgReason := "" -}} +{{- $msgSigningKey := "" -}} + +{{- if $verification -}} + {{- $signingUser = $verification.SigningUser -}} + {{- $signingEmail = $verification.SigningEmail -}} + {{- $extraClass = print $extraClass " commit-is-signed" -}} + {{- if $verification.Verified -}} + {{- /* reason is "{name} / {key-id}" */ -}} + {{- $msgReason = $verification.Reason -}} + {{- $verified = true -}} + {{- if eq $verification.TrustStatus "trusted" -}} + {{- $extraClass = print $extraClass " sign-trusted" -}} + {{- else if eq $verification.TrustStatus "untrusted" -}} + {{- $extraClass = print $extraClass " sign-untrusted" -}} + {{- $msgReasonPrefix = ctx.Locale.Tr "repo.commits.signed_by_untrusted_user" -}} + {{- else -}} + {{- $extraClass = print $extraClass " sign-unmatched" -}} + {{- $msgReasonPrefix = ctx.Locale.Tr "repo.commits.signed_by_untrusted_user_unmatched" -}} + {{- end -}} + {{- else -}} + {{- if $verification.Warning -}} + {{- $extraClass = print $extraClass " sign-warning" -}} + {{- else -}} + {{- $extraClass = "" -}}{{/* the commit is not signed */}} + {{- end -}} + {{- $msgReason = ctx.Locale.Tr $verification.Reason -}}{{- /* dirty part: it is the translation key ..... */ -}} + {{- end -}} + + {{- if $msgReasonPrefix -}} + {{- $msgReason = print $msgReasonPrefix ": " $msgReason -}} + {{- end -}} + + {{- if $verification.SigningSSHKey -}} + {{- $msgSigningKey = print (ctx.Locale.Tr "repo.commits.ssh_key_fingerprint") ": " $verification.SigningSSHKey.Fingerprint -}} + {{- else if $verification.SigningKey -}}{{- /* asymkey.GPGKey */ -}} + {{- $msgSigningKey = print (ctx.Locale.Tr "repo.commits.gpg_key_id") ": " $verification.SigningKey.PaddedKeyID -}} + {{- end -}} +{{- end -}} + +{{- if $commit -}} + +{{- end -}} +{{- if or (not $commit) $extraClass}}{{/* only show the lock icon if there is no commit info (icon only) or the commit is really signed */}} + + {{- if $verified -}} + {{- if and $signingUser $signingUser.ID -}} + {{svg "gitea-lock"}} + {{ctx.AvatarUtils.Avatar $signingUser 16}} + {{- else -}} + {{svg "gitea-lock-cog"}} + {{ctx.AvatarUtils.AvatarByEmail $signingEmail "" 16}} + {{- end -}} + {{- else -}} + {{svg "gitea-unlock"}} + {{- end -}} + +{{- end -}} +{{- if $commit -}} + {{- ShortSha $commit.ID.String -}} + +{{- end -}} + +{{- /* This template should be kept as small as possible, DO NOT put large components like modal/dialog into it. */ -}} diff --git a/templates/repo/commits_list.tmpl b/templates/repo/commits_list.tmpl new file mode 100644 index 0000000..8821bf0 --- /dev/null +++ b/templates/repo/commits_list.tmpl @@ -0,0 +1,82 @@ +
+ +