aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--options/locale/locale_en-US.ini2
-rw-r--r--templates/repo/commit_page.tmpl2
-rw-r--r--templates/repo/commit_statuses.tmpl12
-rw-r--r--templates/repo/commits_list.tmpl2
-rw-r--r--templates/repo/commits_list_small.tmpl2
-rw-r--r--templates/repo/issue/view_content/pull.tmpl9
-rw-r--r--templates/repo/pulls/status.tmpl67
-rw-r--r--templates/repo/view_list.tmpl2
-rw-r--r--templates/shared/issuelist.tmpl2
-rw-r--r--web_src/css/modules/tippy.css57
-rw-r--r--web_src/css/repo.css38
-rw-r--r--web_src/js/features/repo-commit.js1
-rw-r--r--web_src/js/features/repo-issue-pr-status.js12
-rw-r--r--web_src/js/features/repo-legacy.js2
-rw-r--r--web_src/js/modules/tippy.js2
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,
});