Skip to content

Commit 623a2d4

Browse files
authored
Refactor issue page info (#32445)
Fix a longstanding TODO since 2021 (#14826) / 2018 (#2531)
1 parent 028e612 commit 623a2d4

File tree

8 files changed

+36
-27
lines changed

8 files changed

+36
-27
lines changed

routers/web/repo/issue.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1443,11 +1443,11 @@ func ViewIssue(ctx *context.Context) {
14431443
}
14441444

14451445
if issue.IsPull && !ctx.Repo.CanRead(unit.TypeIssues) {
1446-
ctx.Data["IssueType"] = "pulls"
1446+
ctx.Data["IssueDependencySearchType"] = "pulls"
14471447
} else if !issue.IsPull && !ctx.Repo.CanRead(unit.TypePullRequests) {
1448-
ctx.Data["IssueType"] = "issues"
1448+
ctx.Data["IssueDependencySearchType"] = "issues"
14491449
} else {
1450-
ctx.Data["IssueType"] = "all"
1450+
ctx.Data["IssueDependencySearchType"] = "all"
14511451
}
14521452

14531453
ctx.Data["IsProjectsEnabled"] = ctx.Repo.CanRead(unit.TypeProjects)

templates/repo/issue/view_content.tmpl

-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
<div class="issue-content">
2-
<!-- I know, there is probably a better way to do this (moved from sidebar.tmpl, original author: 6543 @ 2021-02-28) -->
3-
<!-- Agree, there should be a better way, eg: introduce window.config.pageData (original author: wxiaoguang @ 2021-09-05) -->
4-
<input type="hidden" id="repolink" value="{{$.RepoRelPath}}">
5-
<input type="hidden" id="repoId" value="{{.Repository.ID}}">
6-
<input type="hidden" id="issueIndex" value="{{.Issue.Index}}">
7-
<input type="hidden" id="type" value="{{.IssueType}}">
8-
92
{{$createdStr:= DateUtils.TimeSince .Issue.CreatedUnix}}
103
<div class="issue-content-left comment-list prevent-before-timeline">
114
<div class="ui timeline">

templates/repo/issue/view_title.tmpl

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
{{template "base/alert" .}}
44
</div>
55
{{end}}
6+
<div class="tw-hidden" id="issue-page-info"
7+
data-issue-index="{{$.Issue.Index}}"
8+
data-issue-dependency-search-type="{{$.IssueDependencySearchType}}"
9+
data-issue-repo-link="{{$.RepoLink}}"
10+
data-issue-repo-id="{{$.Repository.ID}}"
11+
></div>
612
<div class="issue-title-header">
713
{{$canEditIssueTitle := and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}}
814
<div class="issue-title" id="issue-title-display">

templates/repo/pulls/files.tmpl

-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
{{template "base/head" .}}
2-
3-
<input type="hidden" id="repolink" value="{{$.RepoRelPath}}">
4-
<input type="hidden" id="issueIndex" value="{{.Issue.Index}}">
5-
62
<div role="main" aria-label="{{.Title}}" class="page-content repository view issue pull files diff">
73
{{template "repo/header" .}}
84
<div class="ui container fluid padded">

web_src/js/features/repo-issue-content.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import {svg} from '../svg.ts';
33
import {showErrorToast} from '../modules/toast.ts';
44
import {GET, POST} from '../modules/fetch.ts';
55
import {showElem} from '../utils/dom.ts';
6+
import {parseIssuePageInfo} from '../utils.ts';
67

7-
const {appSubUrl} = window.config;
88
let i18nTextEdited;
99
let i18nTextOptions;
1010
let i18nTextDeleteFromHistory;
@@ -121,15 +121,14 @@ function showContentHistoryMenu(issueBaseUrl, $item, commentId) {
121121
}
122122

123123
export async function initRepoIssueContentHistory() {
124-
const issueIndex = $('#issueIndex').val();
125-
if (!issueIndex) return;
124+
const issuePageInfo = parseIssuePageInfo();
125+
if (!issuePageInfo.issueNumber) return;
126126

127127
const $itemIssue = $('.repository.issue .timeline-item.comment.first'); // issue(PR) main content
128128
const $comments = $('.repository.issue .comment-list .comment'); // includes: issue(PR) comments, review comments, code comments
129129
if (!$itemIssue.length && !$comments.length) return;
130130

131-
const repoLink = $('#repolink').val();
132-
const issueBaseUrl = `${appSubUrl}/${repoLink}/issues/${issueIndex}`;
131+
const issueBaseUrl = `${issuePageInfo.repoLink}/issues/${issuePageInfo.issueNumber}`;
133132

134133
try {
135134
const response = await GET(`${issueBaseUrl}/content-history/overview`);

web_src/js/features/repo-issue.ts

+4-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {createTippy, showTemporaryTooltip} from '../modules/tippy.ts';
44
import {hideElem, showElem, toggleElem} from '../utils/dom.ts';
55
import {setFileFolding} from './file-fold.ts';
66
import {ComboMarkdownEditor, getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.ts';
7-
import {toAbsoluteUrl} from '../utils.ts';
7+
import {parseIssuePageInfo, toAbsoluteUrl} from '../utils.ts';
88
import {GET, POST} from '../modules/fetch.ts';
99
import {showErrorToast} from '../modules/toast.ts';
1010
import {initRepoIssueSidebar} from './repo-issue-sidebar.ts';
@@ -57,13 +57,11 @@ function excludeLabel(item) {
5757
}
5858

5959
export function initRepoIssueSidebarList() {
60-
const repolink = $('#repolink').val();
61-
const repoId = $('#repoId').val();
60+
const issuePageInfo = parseIssuePageInfo();
6261
const crossRepoSearch = $('#crossRepoSearch').val();
63-
const tp = $('#type').val();
64-
let issueSearchUrl = `${appSubUrl}/${repolink}/issues/search?q={query}&type=${tp}`;
62+
let issueSearchUrl = `${issuePageInfo.repoLink}/issues/search?q={query}&type=${issuePageInfo.issueDependencySearchType}`;
6563
if (crossRepoSearch === 'true') {
66-
issueSearchUrl = `${appSubUrl}/issues/search?q={query}&priority_repo_id=${repoId}&type=${tp}`;
64+
issueSearchUrl = `${appSubUrl}/issues/search?q={query}&priority_repo_id=${issuePageInfo.repoId}&type=${issuePageInfo.issueDependencySearchType}`;
6765
}
6866
$('#new-dependency-drop-list')
6967
.dropdown({

web_src/js/types.ts

+7
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ export type IssuePathInfo = {
3737
indexString?: string,
3838
}
3939

40+
export type IssuePageInfo = {
41+
repoLink: string,
42+
repoId: number,
43+
issueNumber: number,
44+
issueDependencySearchType: string,
45+
}
46+
4047
export type Issue = {
4148
id: number;
4249
number: number;

web_src/js/utils.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {encode, decode} from 'uint8-to-base64';
2-
import type {IssuePathInfo} from './types.ts';
1+
import {decode, encode} from 'uint8-to-base64';
2+
import type {IssuePageInfo, IssuePathInfo} from './types.ts';
33

44
// transform /path/to/file.ext to file.ext
55
export function basename(path: string): string {
@@ -43,6 +43,16 @@ export function parseIssueNewHref(href: string): IssuePathInfo {
4343
return {ownerName, repoName, pathType, indexString};
4444
}
4545

46+
export function parseIssuePageInfo(): IssuePageInfo {
47+
const el = document.querySelector('#issue-page-info');
48+
return {
49+
issueNumber: parseInt(el?.getAttribute('data-issue-index')),
50+
issueDependencySearchType: el?.getAttribute('data-issue-dependency-search-type') || '',
51+
repoId: parseInt(el?.getAttribute('data-issue-repo-id')),
52+
repoLink: el?.getAttribute('data-issue-repo-link') || '',
53+
};
54+
}
55+
4656
// parse a URL, either relative '/path' or absolute 'https://localhost/path'
4757
export function parseUrl(str: string): URL {
4858
return new URL(str, str.startsWith('http') ? undefined : window.location.origin);

0 commit comments

Comments
 (0)