Skip to content

Commit 41857b4

Browse files
committed
some improvements
1 parent f8567d0 commit 41857b4

File tree

7 files changed

+161
-95
lines changed

7 files changed

+161
-95
lines changed

templates/repo/diff/blob_excerpt.tmpl

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
</td>
1212
{{else}}
1313
{{$inlineDiff := $.section.GetComputedInlineDiffFor $line ctx.Locale}}
14-
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$.FileNameHash}}L{{$line.LeftIdx}}{{end}}"{{if $line.LeftIdx}} id="diff-{{$.FileNameHash}}L{{$line.LeftIdx}}"{{end}}></span></td>
14+
{{- $leftAnchor := Iif $line.LeftIdx (printf "diff-%sL%d" $.FileNameHash $line.LeftIdx) "" -}}
15+
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span{{if $leftAnchor}} id="{{$leftAnchor}}"{{end}}></span></td>
1516
<td class="lines-escape lines-escape-old">{{if and $line.LeftIdx $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button btn interact-bg" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff}}"></button>{{end}}</td>
1617
<td class="lines-type-marker lines-type-marker-old">{{if $line.LeftIdx}}<span class="tw-font-mono" data-type-marker=""></span>{{end}}</td>
1718
<td class="lines-code lines-code-old">
@@ -27,7 +28,8 @@
2728
<code class="code-inner"></code>
2829
{{- end -}}
2930
</td>
30-
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$.FileNameHash}}R{{$line.RightIdx}}{{end}}"{{if $line.RightIdx}} id="diff-{{$.FileNameHash}}R{{$line.RightIdx}}"{{end}}></span></td>
31+
{{- $rightAnchor := Iif $line.RightIdx (printf "diff-%sR%d" $.FileNameHash $line.RightIdx) "" -}}
32+
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span{{if $rightAnchor}} id="{{$rightAnchor}}"{{end}}></span></td>
3133
<td class="lines-escape lines-escape-new">{{if and $line.RightIdx $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button btn interact-bg" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff}}"></button>{{end}}</td>
3234
<td class="lines-type-marker lines-type-marker-new">{{if $line.RightIdx}}<span class="tw-font-mono" data-type-marker=""></span>{{end}}</td>
3335
<td class="lines-code lines-code-new">
@@ -59,16 +61,18 @@
5961
</tr>
6062
{{end}}
6163
{{end}}
62-
{{else}}
63-
{{range $k, $line := $.section.Lines}}
64-
<tr class="{{.GetHTMLDiffLineType}}-code nl-{{$k}} ol-{{$k}} line-expanded" data-line-type="{{.GetHTMLDiffLineType}}">
65-
{{if eq .GetType 4}}
66-
<td colspan="2" class="lines-num">{{$line.RenderBlobExcerptButtons $.FileNameHash $diffBlobExcerptData}}</td>
67-
{{else}}
68-
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$.FileNameHash}}L{{$line.LeftIdx}}{{end}}"{{if $line.LeftIdx}} id="diff-{{$.FileNameHash}}L{{$line.LeftIdx}}"{{end}}></span></td>
69-
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$.FileNameHash}}R{{$line.RightIdx}}{{end}}"{{if $line.RightIdx}} id="diff-{{$.FileNameHash}}R{{$line.RightIdx}}"{{end}}></span></td>
70-
{{end}}
71-
{{$inlineDiff := $.section.GetComputedInlineDiffFor $line ctx.Locale}}
64+
{{else}}
65+
{{range $k, $line := $.section.Lines}}
66+
<tr class="{{.GetHTMLDiffLineType}}-code nl-{{$k}} ol-{{$k}} line-expanded" data-line-type="{{.GetHTMLDiffLineType}}">
67+
{{if eq .GetType 4}}
68+
<td colspan="2" class="lines-num">{{$line.RenderBlobExcerptButtons $.FileNameHash $diffBlobExcerptData}}</td>
69+
{{else}}
70+
{{- $leftAnchor := Iif $line.LeftIdx (printf "diff-%sL%d" $.FileNameHash $line.LeftIdx) "" -}}
71+
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span{{if $leftAnchor}} id="{{$leftAnchor}}"{{end}}></span></td>
72+
{{- $rightAnchor := Iif $line.RightIdx (printf "diff-%sR%d" $.FileNameHash $line.RightIdx) "" -}}
73+
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span{{if $rightAnchor}} id="{{$rightAnchor}}"{{end}}></span></td>
74+
{{end}}
75+
{{$inlineDiff := $.section.GetComputedInlineDiffFor $line ctx.Locale}}
7276
<td class="lines-escape">{{if $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button btn interact-bg" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff}}"></button>{{end}}</td>
7377
<td class="lines-type-marker"><span class="tw-font-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span></td>
7478
<td class="lines-code{{if (not $line.RightIdx)}} lines-code-old{{end}}">

templates/repo/diff/section_split.tmpl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
{{$match := index $section.Lines $line.Match}}
2525
{{- $leftDiff := ""}}{{if $line.LeftIdx}}{{$leftDiff = $section.GetComputedInlineDiffFor $line ctx.Locale}}{{end}}
2626
{{- $rightDiff := ""}}{{if $match.RightIdx}}{{$rightDiff = $section.GetComputedInlineDiffFor $match ctx.Locale}}{{end}}
27-
<td class="lines-num lines-num-old del-code" data-line-num="{{$line.LeftIdx}}"><span rel="diff-{{$file.NameHash}}L{{$line.LeftIdx}}" id="diff-{{$file.NameHash}}L{{$line.LeftIdx}}"></span></td>
27+
{{- $leftAnchor := Iif $line.LeftIdx (printf "diff-%sL%d" $file.NameHash $line.LeftIdx) "" -}}
28+
<td class="lines-num lines-num-old del-code" data-line-num="{{$line.LeftIdx}}"><span{{if $leftAnchor}} id="{{$leftAnchor}}"{{end}}></span></td>
2829
<td class="lines-escape del-code lines-escape-old">{{if $line.LeftIdx}}{{if $leftDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button btn interact-bg" title="{{template "repo/diff/escape_title" dict "diff" $leftDiff}}"></button>{{end}}{{end}}</td>
2930
<td class="lines-type-marker lines-type-marker-old del-code"><span class="tw-font-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span></td>
3031
<td class="lines-code lines-code-old del-code">
@@ -39,7 +40,8 @@
3940
<code class="code-inner"></code>
4041
{{- end -}}
4142
</td>
42-
<td class="lines-num lines-num-new add-code" data-line-num="{{if $match.RightIdx}}{{$match.RightIdx}}{{end}}"><span rel="{{if $match.RightIdx}}diff-{{$file.NameHash}}R{{$match.RightIdx}}{{end}}"{{if $match.RightIdx}} id="diff-{{$file.NameHash}}R{{$match.RightIdx}}"{{end}}></span></td>
43+
{{- $matchRightAnchor := Iif $match.RightIdx (printf "diff-%sR%d" $file.NameHash $match.RightIdx) "" -}}
44+
<td class="lines-num lines-num-new add-code" data-line-num="{{if $match.RightIdx}}{{$match.RightIdx}}{{end}}"><span{{if $matchRightAnchor}} id="{{$matchRightAnchor}}"{{end}}></span></td>
4345
<td class="lines-escape add-code lines-escape-new">{{if $match.RightIdx}}{{if $rightDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button btn interact-bg" title="{{template "repo/diff/escape_title" dict "diff" $rightDiff}}"></button>{{end}}{{end}}</td>
4446
<td class="lines-type-marker lines-type-marker-new add-code">{{if $match.RightIdx}}<span class="tw-font-mono" data-type-marker="{{$match.GetLineTypeMarker}}"></span>{{end}}</td>
4547
<td class="lines-code lines-code-new add-code">
@@ -56,7 +58,8 @@
5658
</td>
5759
{{else}}
5860
{{$inlineDiff := $section.GetComputedInlineDiffFor $line ctx.Locale}}
59-
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$file.NameHash}}L{{$line.LeftIdx}}{{end}}"{{if $line.LeftIdx}} id="diff-{{$file.NameHash}}L{{$line.LeftIdx}}"{{end}}></span></td>
61+
{{- $leftAnchor := Iif $line.LeftIdx (printf "diff-%sL%d" $file.NameHash $line.LeftIdx) "" -}}
62+
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span{{if $leftAnchor}} id="{{$leftAnchor}}"{{end}}></span></td>
6063
<td class="lines-escape lines-escape-old">{{if $line.LeftIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button btn interact-bg" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff}}"></button>{{end}}{{end}}</td>
6164
<td class="lines-type-marker lines-type-marker-old">{{if $line.LeftIdx}}<span class="tw-font-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span>{{end}}</td>
6265
<td class="lines-code lines-code-old">
@@ -71,7 +74,8 @@
7174
<code class="code-inner"></code>
7275
{{- end -}}
7376
</td>
74-
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$file.NameHash}}R{{$line.RightIdx}}{{end}}"{{if $line.RightIdx}} id="diff-{{$file.NameHash}}R{{$line.RightIdx}}"{{end}}></span></td>
77+
{{- $rightAnchor := Iif $line.RightIdx (printf "diff-%sR%d" $file.NameHash $line.RightIdx) "" -}}
78+
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span{{if $rightAnchor}} id="{{$rightAnchor}}"{{end}}></span></td>
7579
<td class="lines-escape lines-escape-new">{{if $line.RightIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<button class="toggle-escape-button btn interact-bg" title="{{template "repo/diff/escape_title" dict "diff" $inlineDiff}}"></button>{{end}}{{end}}</td>
7680
<td class="lines-type-marker lines-type-marker-new">{{if $line.RightIdx}}<span class="tw-font-mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span>{{end}}</td>
7781
<td class="lines-code lines-code-new">

templates/repo/diff/section_unified.tmpl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
<td colspan="2" class="lines-num"></td>
2020
{{end}}
2121
{{else}}
22-
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$file.NameHash}}L{{$line.LeftIdx}}{{end}}"{{if $line.LeftIdx}} id="diff-{{$file.NameHash}}L{{$line.LeftIdx}}"{{end}}></span></td>
23-
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$file.NameHash}}R{{$line.RightIdx}}{{end}}"{{if $line.RightIdx}} id="diff-{{$file.NameHash}}R{{$line.RightIdx}}"{{end}}></span></td>
24-
{{end}}
22+
{{- $leftAnchor := Iif $line.LeftIdx (printf "diff-%sL%d" $file.NameHash $line.LeftIdx) "" -}}
23+
<td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span{{if $leftAnchor}} id="{{$leftAnchor}}"{{end}}></span></td>
24+
{{- $rightAnchor := Iif $line.RightIdx (printf "diff-%sR%d" $file.NameHash $line.RightIdx) "" -}}
25+
<td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span{{if $rightAnchor}} id="{{$rightAnchor}}"{{end}}></span></td>
26+
{{end}}
2527
{{$inlineDiff := $section.GetComputedInlineDiffFor $line ctx.Locale -}}
2628
<td class="lines-escape">
2729
{{- if $inlineDiff.EscapeStatus.Escaped -}}

web_src/js/features/file-fold.ts

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,60 @@
11
import {svg} from '../svg.ts';
22

3+
function parseTransitionValue(value: string): number {
4+
let max = 0;
5+
for (const current of value.split(',')) {
6+
const trimmed = current.trim();
7+
if (!trimmed) continue;
8+
const isMs = trimmed.endsWith('ms');
9+
const numericPortion = Number.parseFloat(trimmed.replace(/ms|s$/u, ''));
10+
if (Number.isNaN(numericPortion)) continue;
11+
const duration = numericPortion * (isMs ? 1 : 1000);
12+
max = Math.max(max, duration);
13+
}
14+
return max;
15+
}
16+
17+
function waitForTransitionEnd(element: Element): Promise<void> {
18+
if (!(element instanceof HTMLElement)) return Promise.resolve();
19+
const transitionTarget = element.querySelector<HTMLElement>('.diff-file-body') ?? element;
20+
const styles = window.getComputedStyle(transitionTarget);
21+
const transitionDuration = parseTransitionValue(styles.transitionDuration);
22+
const transitionDelay = parseTransitionValue(styles.transitionDelay);
23+
const total = transitionDuration + transitionDelay;
24+
if (total === 0) return Promise.resolve();
25+
26+
return new Promise((resolve) => {
27+
let resolved = false;
28+
function cleanup() {
29+
if (resolved) return;
30+
resolved = true;
31+
transitionTarget.removeEventListener('transitionend', onTransitionEnd);
32+
resolve();
33+
}
34+
function onTransitionEnd(event: TransitionEvent) {
35+
if (event.target !== transitionTarget) return;
36+
cleanup();
37+
}
38+
transitionTarget.addEventListener('transitionend', onTransitionEnd);
39+
window.setTimeout(cleanup, total + 50);
40+
});
41+
}
42+
343
// Hides the file if newFold is true, and shows it otherwise. The actual hiding is performed using CSS.
444
//
545
// The fold arrow is the icon displayed on the upper left of the file box, especially intended for components having the 'fold-file' class.
646
// The file content box is the box that should be hidden or shown, especially intended for components having the 'file-content' class.
747
//
8-
export function setFileFolding(fileContentBox: Element, foldArrow: HTMLElement, newFold: boolean) {
48+
export function setFileFolding(fileContentBox: Element, foldArrow: HTMLElement, newFold: boolean): Promise<void> {
949
foldArrow.innerHTML = svg(`octicon-chevron-${newFold ? 'right' : 'down'}`, 18);
1050
fileContentBox.setAttribute('data-folded', String(newFold));
1151
if (newFold && fileContentBox.getBoundingClientRect().top < 0) {
1252
fileContentBox.scrollIntoView();
1353
}
54+
return waitForTransitionEnd(fileContentBox);
1455
}
1556

1657
// Like `setFileFolding`, except that it automatically inverts the current file folding state.
17-
export function invertFileFolding(fileContentBox:HTMLElement, foldArrow: HTMLElement) {
18-
setFileFolding(fileContentBox, foldArrow, fileContentBox.getAttribute('data-folded') !== 'true');
58+
export function invertFileFolding(fileContentBox:HTMLElement, foldArrow: HTMLElement): Promise<void> {
59+
return setFileFolding(fileContentBox, foldArrow, fileContentBox.getAttribute('data-folded') !== 'true');
1960
}

web_src/js/features/repo-code.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,6 @@ import {createTippy} from '../modules/tippy.ts';
33
import {toAbsoluteUrl} from '../utils.ts';
44
import {addDelegatedEventListener} from '../utils/dom.ts';
55

6-
function changeHash(hash: string) {
7-
if (window.history.pushState) {
8-
window.history.pushState(null, null, hash);
9-
} else {
10-
window.location.hash = hash;
11-
}
12-
}
13-
146
// it selects the code lines defined by range: `L1-L3` (3 lines) or `L2` (singe line)
157
function selectRange(range: string): Element {
168
for (const el of document.querySelectorAll('.code-view tr.active')) el.classList.remove('active');
@@ -65,7 +57,7 @@ function selectRange(range: string): Element {
6557
for (let i = startLineNum - 1; i <= stopLineNum - 1 && i < elLineNums.length; i++) {
6658
elLineNums[i].closest('tr').classList.add('active');
6759
}
68-
changeHash(`#${range}`);
60+
window.history.replaceState(null, '', `#${range}`);
6961
updateIssueHref(range);
7062
updateViewGitBlameFragment(range);
7163
updateCopyPermalinkUrl(range);

0 commit comments

Comments
 (0)