diff options
-rw-r--r-- | options/locale/locale_en-US.ini | 2 | ||||
-rw-r--r-- | templates/repo/commit_page.tmpl | 2 | ||||
-rw-r--r-- | templates/repo/commit_statuses.tmpl | 12 | ||||
-rw-r--r-- | templates/repo/commits_list.tmpl | 2 | ||||
-rw-r--r-- | templates/repo/commits_list_small.tmpl | 2 | ||||
-rw-r--r-- | templates/repo/issue/view_content/pull.tmpl | 9 | ||||
-rw-r--r-- | templates/repo/pulls/status.tmpl | 67 | ||||
-rw-r--r-- | templates/repo/view_list.tmpl | 2 | ||||
-rw-r--r-- | templates/shared/issuelist.tmpl | 2 | ||||
-rw-r--r-- | web_src/css/modules/tippy.css | 57 | ||||
-rw-r--r-- | web_src/css/repo.css | 38 | ||||
-rw-r--r-- | web_src/js/features/repo-commit.js | 1 | ||||
-rw-r--r-- | web_src/js/features/repo-issue-pr-status.js | 12 | ||||
-rw-r--r-- | web_src/js/features/repo-legacy.js | 2 | ||||
-rw-r--r-- | web_src/js/modules/tippy.js | 2 |
15 files changed, 132 insertions, 80 deletions
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 8c40bbc01d..a7a7a4f4c5 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1786,6 +1786,8 @@ pulls.status_checks_failure = Some checks failed pulls.status_checks_error = Some checks reported errors pulls.status_checks_requested = Required pulls.status_checks_details = Details +pulls.status_checks_hide_all = Hide all checks +pulls.status_checks_show_all = Show all checks pulls.update_branch = Update branch by merge pulls.update_branch_rebase = Update branch by rebase pulls.update_branch_success = Branch update was successful diff --git a/templates/repo/commit_page.tmpl b/templates/repo/commit_page.tmpl index c0dfc6e0ad..efdbb23e00 100644 --- a/templates/repo/commit_page.tmpl +++ b/templates/repo/commit_page.tmpl @@ -19,7 +19,7 @@ {{end}} <div class="ui top attached header clearing segment gt-relative commit-header {{$class}}"> <div class="gt-df gt-mb-4 gt-fw"> - <h3 class="gt-mb-0 gt-f1"><span class="commit-summary" title="{{.Commit.Summary}}">{{RenderCommitMessage $.Context .Commit.Message $.RepoLink ($.Repository.ComposeMetas ctx)}}</span>{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses "root" $}}</h3> + <h3 class="gt-mb-0 gt-f1"><span class="commit-summary" title="{{.Commit.Summary}}">{{RenderCommitMessage $.Context .Commit.Message $.RepoLink ($.Repository.ComposeMetas ctx)}}</span>{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses}}</h3> {{if not $.PageIsWiki}} <div> <a class="ui primary tiny button" href="{{.SourcePath}}"> diff --git a/templates/repo/commit_statuses.tmpl b/templates/repo/commit_statuses.tmpl index 0006dcb4a7..ec2be6c38d 100644 --- a/templates/repo/commit_statuses.tmpl +++ b/templates/repo/commit_statuses.tmpl @@ -8,15 +8,7 @@ {{template "repo/commit_status" .Status}} </span> {{end}} - <div class="tippy-target ui relaxed list divided"> - {{range .Statuses}} - <div class="ui item singular-status gt-df"> - {{template "repo/commit_status" .}} - <span class="ui gt-ml-3 gt-f1">{{.Context}} <span class="text grey">{{.Description}}</span></span> - {{if .TargetURL}} - <a class="gt-ml-3" href="{{.TargetURL}}" target="_blank" rel="noopener noreferrer">{{ctx.Locale.Tr "repo.pulls.status_checks_details"}}</a> - {{end}} - </div> - {{end}} + <div class="tippy-target"> + {{template "repo/pulls/status" (dict "CommitStatuses" .Statuses "CommitStatus" .Status)}} </div> {{end}} diff --git a/templates/repo/commits_list.tmpl b/templates/repo/commits_list.tmpl index cdb893f51f..77f1684245 100644 --- a/templates/repo/commits_list.tmpl +++ b/templates/repo/commits_list.tmpl @@ -66,7 +66,7 @@ {{if IsMultilineCommitMessage .Message}} <button class="ui button js-toggle-commit-body ellipsis-button" aria-expanded="false">...</button> {{end}} - {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $}} + {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}} {{if IsMultilineCommitMessage .Message}} <pre class="commit-body gt-hidden">{{RenderCommitBody $.Context .Message $commitRepoLink ($.Repository.ComposeMetas ctx)}}</pre> {{end}} diff --git a/templates/repo/commits_list_small.tmpl b/templates/repo/commits_list_small.tmpl index 5b715a71d4..63eb5945bc 100644 --- a/templates/repo/commits_list_small.tmpl +++ b/templates/repo/commits_list_small.tmpl @@ -14,7 +14,7 @@ {{$commitLink:= printf "%s/commit/%s" $.comment.Issue.PullRequest.BaseRepo.Link (PathEscape .ID.String)}} <span class="shabox gt-df gt-ac gt-float-right"> - {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses "root" $.root}} + {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}} {{$class := "ui sha label"}} {{if .Signature}} {{$class = (print $class " isSigned")}} diff --git a/templates/repo/issue/view_content/pull.tmpl b/templates/repo/issue/view_content/pull.tmpl index e06404376c..2b5776ea03 100644 --- a/templates/repo/issue/view_content/pull.tmpl +++ b/templates/repo/issue/view_content/pull.tmpl @@ -20,7 +20,14 @@ {{- else if .Issue.PullRequest.CanAutoMerge}}green {{- else}}red{{end}}">{{svg "octicon-git-merge" 40}}</div> <div class="content"> - {{template "repo/pulls/status" .}} + <div class="ui attached segment fitted"> + {{template "repo/pulls/status" (dict + "CommitStatus" .LatestCommitStatus + "CommitStatuses" .LatestCommitStatuses + "ShowHideChecks" true + "is_context_required" .is_context_required + )}} + </div> {{$showGeneralMergeForm := false}} <div class="ui attached merge-section segment {{if not $.LatestCommitStatus}}no-header{{end}} flex-items-block"> {{if .Issue.PullRequest.HasMerged}} diff --git a/templates/repo/pulls/status.tmpl b/templates/repo/pulls/status.tmpl index 476b89a425..ae508b8fa4 100644 --- a/templates/repo/pulls/status.tmpl +++ b/templates/repo/pulls/status.tmpl @@ -1,27 +1,43 @@ -{{if $.LatestCommitStatus}} - {{if not $.Issue.PullRequest.HasMerged}} - <div class="ui top attached header"> - {{if eq .LatestCommitStatus.State "pending"}} - {{ctx.Locale.Tr "repo.pulls.status_checking"}} - {{else if eq .LatestCommitStatus.State "success"}} - {{ctx.Locale.Tr "repo.pulls.status_checks_success"}} - {{else if eq .LatestCommitStatus.State "warning"}} - {{ctx.Locale.Tr "repo.pulls.status_checks_warning"}} - {{else if eq .LatestCommitStatus.State "failure"}} - {{ctx.Locale.Tr "repo.pulls.status_checks_failure"}} - {{else if eq .LatestCommitStatus.State "error"}} - {{ctx.Locale.Tr "repo.pulls.status_checks_error"}} - {{else}} - {{ctx.Locale.Tr "repo.pulls.status_checking"}} - {{end}} - </div> - {{end}} +{{/* +Template Attributes: +* CommitStatus: summary of all commit status state +* CommitStatuses: all commit status elements +* ShowHideChecks: whether use a button to show/hide the checks +* is_context_required: Used in pull request commit status check table +*/}} + +{{if .CommitStatus}} +<div class="commit-status-panel"> + <div class="ui top attached header commit-status-header"> + {{if eq .CommitStatus.State "pending"}} + {{ctx.Locale.Tr "repo.pulls.status_checking"}} + {{else if eq .CommitStatus.State "success"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_success"}} + {{else if eq .CommitStatus.State "warning"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_warning"}} + {{else if eq .CommitStatus.State "failure"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_failure"}} + {{else if eq .CommitStatus.State "error"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_error"}} + {{else}} + {{ctx.Locale.Tr "repo.pulls.status_checking"}} + {{end}} - {{range $.LatestCommitStatuses}} - <div class="ui attached segment pr-status"> - {{template "repo/commit_status" .}} - <div class="status-context"> - <span>{{.Context}} <span class="text grey">{{.Description}}</span></span> + {{if .ShowHideChecks}} + <div class="ui right"> + <button class="commit-status-hide-checks btn interact-fg" + data-show-all="{{ctx.Locale.Tr "repo.pulls.status_checks_show_all"}}" + data-hide-all="{{ctx.Locale.Tr "repo.pulls.status_checks_hide_all"}}"> + {{ctx.Locale.Tr "repo.pulls.status_checks_hide_all"}}</button> + </div> + {{end}} + </div> + + <div class="commit-status-list"> + {{range .CommitStatuses}} + <div class="commit-status-item"> + {{template "repo/commit_status" .}} + <div class="status-context gt-ellipsis">{{.Context}} <span class="text light-2">{{.Description}}</span></div> <div class="ui status-details"> {{if $.is_context_required}} {{if (call $.is_context_required .Context)}}<div class="ui label">{{ctx.Locale.Tr "repo.pulls.status_checks_requested"}}</div>{{end}} @@ -29,6 +45,7 @@ <span>{{if .TargetURL}}<a href="{{.TargetURL}}">{{ctx.Locale.Tr "repo.pulls.status_checks_details"}}</a>{{end}}</span> </div> </div> - </div> - {{end}} + {{end}} + </div> +</div> {{end}} diff --git a/templates/repo/view_list.tmpl b/templates/repo/view_list.tmpl index 7e60f27291..836c633ced 100644 --- a/templates/repo/view_list.tmpl +++ b/templates/repo/view_list.tmpl @@ -24,7 +24,7 @@ {{template "repo/shabox_badge" dict "root" $ "verification" .LatestCommitVerification}} {{end}} </a> - {{template "repo/commit_statuses" dict "Status" .LatestCommitStatus "Statuses" .LatestCommitStatuses "root" $}} + {{template "repo/commit_statuses" dict "Status" .LatestCommitStatus "Statuses" .LatestCommitStatuses}} {{$commitLink:= printf "%s/commit/%s" .RepoLink (PathEscape .LatestCommit.ID.String)}} <span class="grey commit-summary" title="{{.LatestCommit.Summary}}"><span class="message-wrapper">{{RenderCommitMessageLinkSubject $.Context .LatestCommit.Message $.RepoLink $commitLink ($.Repository.ComposeMetas ctx)}}</span> {{if IsMultilineCommitMessage .LatestCommit.Message}} diff --git a/templates/shared/issuelist.tmpl b/templates/shared/issuelist.tmpl index 4214a03dcb..e0d2e102e5 100644 --- a/templates/shared/issuelist.tmpl +++ b/templates/shared/issuelist.tmpl @@ -16,7 +16,7 @@ <a class="gt-no-underline issue-title" href="{{if .Link}}{{.Link}}{{else}}{{$.Link}}/{{.Index}}{{end}}">{{RenderEmoji $.Context .Title | RenderCodeBlock}}</a> {{if .IsPull}} {{if (index $.CommitStatuses .PullRequest.ID)}} - {{template "repo/commit_statuses" dict "Status" (index $.CommitLastStatus .PullRequest.ID) "Statuses" (index $.CommitStatuses .PullRequest.ID) "root" $}} + {{template "repo/commit_statuses" dict "Status" (index $.CommitLastStatus .PullRequest.ID) "Statuses" (index $.CommitStatuses .PullRequest.ID)}} {{end}} {{end}} <span class="labels-list gt-ml-2"> diff --git a/web_src/css/modules/tippy.css b/web_src/css/modules/tippy.css index fe32597280..45feab7574 100644 --- a/web_src/css/modules/tippy.css +++ b/web_src/css/modules/tippy.css @@ -6,7 +6,7 @@ } [data-tippy-root] { - max-width: calc(100vw - 10px); + max-width: calc(100vw - 32px); } .tippy-box { @@ -18,37 +18,59 @@ font-size: 1rem; } +.tippy-content { + position: relative; + padding: 1rem; /* if you need different padding, use different data-theme */ + z-index: 1; +} + +/* tooltip theme for text tooltips */ + .tippy-box[data-theme="tooltip"] { background-color: var(--color-tooltip-bg); color: var(--color-tooltip-text); border: none; } +.tippy-box[data-theme="tooltip"] .tippy-content { + padding: 0.5rem 1rem; +} + +.tippy-box[data-theme="tooltip"] .tippy-svg-arrow-inner, +.tippy-box[data-theme="tooltip"] .tippy-svg-arrow-outer { + fill: var(--color-tooltip-bg); +} + +/* menu theme for .ui.menu */ + .tippy-box[data-theme="menu"] { background-color: var(--color-menu); color: var(--color-text); } -.tippy-box[data-theme="form-fetch-error"] { - border-color: var(--color-error-border); - background-color: var(--color-error-bg); - color: var(--color-error-text); +.tippy-box[data-theme="menu"] .tippy-content { + padding: 0; } -.tippy-content { - position: relative; - padding: 1rem; - z-index: 1; +.tippy-box[data-theme="menu"] .tippy-svg-arrow-inner { + fill: var(--color-menu); } -.tippy-box[data-theme="tooltip"] .tippy-content { - padding: 0.5rem 1rem; -} +/* box-with-header theme to look like .ui.attached.segment. can contain .ui.attached.header */ -.tippy-box[data-theme="menu"] .tippy-content { +.tippy-box[data-theme="box-with-header"] .tippy-content { + background: var(--color-box-body); padding: 0; } +.tippy-box[data-theme="box-with-header"][data-placement^="top"] .tippy-svg-arrow-inner { + fill: var(--color-box-body); +} + +.tippy-box[data-theme="box-with-header"][data-placement^="bottom"] .tippy-svg-arrow-inner { + fill: var(--color-box-header); +} + .tippy-box[data-placement^="top"] > .tippy-svg-arrow { bottom: 0; } @@ -107,12 +129,3 @@ .tippy-svg-arrow-inner { fill: var(--color-body); } - -.tippy-box[data-theme="tooltip"] .tippy-svg-arrow-inner, -.tippy-box[data-theme="tooltip"] .tippy-svg-arrow-outer { - fill: var(--color-tooltip-bg); -} - -.tippy-box[data-theme="menu"] .tippy-svg-arrow-inner { - fill: var(--color-menu); -} diff --git a/web_src/css/repo.css b/web_src/css/repo.css index b17917c246..e4995d4229 100644 --- a/web_src/css/repo.css +++ b/web_src/css/repo.css @@ -3074,43 +3074,49 @@ tbody.commit-list { } } -.pr-status { - padding: 0 !important; /* To clear fomantic's padding on .ui.segment elements */ - display: flex; - align-items: center; +.commit-status-header { + border: none !important; /* reset the default ".ui.attached.header" styles, to use the outer border */ + margin: 0 !important; } -.pr-status .commit-status { - margin: 1em; - flex-shrink: 0; +.commit-status-list { + max-height: 195px; /* fit exactly 4 items */ + overflow-x: hidden; + transition: max-height .2s; } -.pr-status .status-context { +.commit-status-item { + padding: 14px 10px !important; display: flex; - justify-content: space-between; - width: 100%; + gap: 8px; + align-items: center; + border-top: 1px solid var(--color-secondary); +} + +.commit-status-item .commit-status { + flex-shrink: 0; } -.pr-status .status-context > span { - padding: 1em 0; +.commit-status-item .status-context { + color: var(--color-text); + flex: 1; } -.pr-status .status-details { +.commit-status-item .status-details { display: flex; - padding-right: 0.5em; align-items: center; justify-content: flex-end; } @media (max-width: 767.98px) { - .pr-status .status-details { + .commit-status-item .status-details { flex-direction: column; align-items: flex-end; justify-content: center; } } -.pr-status .status-details > span { +.commit-status-item .status-details > span { padding-right: 0.5em; /* To match the alignment with the "required" label */ } diff --git a/web_src/js/features/repo-commit.js b/web_src/js/features/repo-commit.js index 7240bf398a..76b34d2077 100644 --- a/web_src/js/features/repo-commit.js +++ b/web_src/js/features/repo-commit.js @@ -66,6 +66,7 @@ export function initCommitStatuses() { placement: top ? 'top-start' : 'bottom-start', interactive: true, role: 'dialog', + theme: 'box-with-header', }); }); } diff --git a/web_src/js/features/repo-issue-pr-status.js b/web_src/js/features/repo-issue-pr-status.js new file mode 100644 index 0000000000..3010615706 --- /dev/null +++ b/web_src/js/features/repo-issue-pr-status.js @@ -0,0 +1,12 @@ +export function initRepoPullRequestCommitStatus() { + for (const btn of document.querySelectorAll('.commit-status-hide-checks')) { + const panel = btn.closest('.commit-status-panel'); + const list = panel.querySelector('.commit-status-list'); + btn.addEventListener('click', () => { + list.style.maxHeight = list.style.maxHeight ? '' : '0px'; // toggle + list.style.overflow = 'hidden'; // hide scrollbar when hiding + btn.textContent = btn.getAttribute(list.style.maxHeight ? 'data-show-all' : 'data-hide-all'); + }); + list.addEventListener('animationend', () => list.style.overflow = ''); + } +} diff --git a/web_src/js/features/repo-legacy.js b/web_src/js/features/repo-legacy.js index 0aacc6ee85..8b3b7b5c12 100644 --- a/web_src/js/features/repo-legacy.js +++ b/web_src/js/features/repo-legacy.js @@ -20,6 +20,7 @@ import {initCommentContent, initMarkupContent} from '../markup/content.js'; import {initCompReactionSelector} from './comp/ReactionSelector.js'; import {initRepoSettingBranches} from './repo-settings.js'; import {initRepoPullRequestMergeForm} from './repo-issue-pr-form.js'; +import {initRepoPullRequestCommitStatus} from './repo-issue-pr-status.js'; import {hideElem, showElem} from '../utils/dom.js'; import {getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.js'; import {attachRefIssueContextPopup} from './contextpopup.js'; @@ -546,6 +547,7 @@ export function initRepository() { initCompReactionSelector($(document)); initRepoPullRequestMergeForm(); + initRepoPullRequestCommitStatus(); } // Pull request diff --git a/web_src/js/modules/tippy.js b/web_src/js/modules/tippy.js index ec7ee2141f..d27908962f 100644 --- a/web_src/js/modules/tippy.js +++ b/web_src/js/modules/tippy.js @@ -34,7 +34,7 @@ export function createTippy(target, opts = {}) { }, arrow: `<svg width="16" height="7"><path d="m0 7 8-7 8 7Z" class="tippy-svg-arrow-outer"/><path d="m0 8 8-7 8 7Z" class="tippy-svg-arrow-inner"/></svg>`, role: 'menu', // HTML role attribute, only tooltips should use "tooltip" - theme: other.role || 'menu', // CSS theme, we support either "tooltip" or "menu" + theme: other.role || 'menu', // CSS theme, either "tooltip", "menu" or "box-with-header" plugins: [followCursor], ...other, }); |