Skip to content

Commit c968fee

Browse files
committed
introduce template helper, octicon tweaks, js refactor
1 parent 472a12e commit c968fee

File tree

9 files changed

+98
-56
lines changed

9 files changed

+98
-56
lines changed

modules/templates/helper.go

+34-12
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"regexp"
1919
"runtime"
2020
"strings"
21+
"strconv"
2122
texttmpl "text/template"
2223
"time"
2324
"unicode"
@@ -92,18 +93,19 @@ func NewFuncMap() []template.FuncMap {
9293
"CustomEmojis": func() map[string]string {
9394
return setting.UI.CustomEmojisMap
9495
},
95-
"Safe": Safe,
96-
"SafeJS": SafeJS,
97-
"JSEscape": JSEscape,
98-
"Str2html": Str2html,
99-
"TimeSince": timeutil.TimeSince,
100-
"TimeSinceUnix": timeutil.TimeSinceUnix,
101-
"RawTimeSince": timeutil.RawTimeSince,
102-
"FileSize": base.FileSize,
103-
"PrettyNumber": base.PrettyNumber,
104-
"Subtract": base.Subtract,
105-
"EntryIcon": base.EntryIcon,
106-
"MigrationIcon": MigrationIcon,
96+
"Safe": Safe,
97+
"SafeJS": SafeJS,
98+
"JSEscape": JSEscape,
99+
"Str2html": Str2html,
100+
"TimeSince": timeutil.TimeSince,
101+
"TimeSinceUnix": timeutil.TimeSinceUnix,
102+
"RawTimeSince": timeutil.RawTimeSince,
103+
"FileSize": base.FileSize,
104+
"PrettyNumber": base.PrettyNumber,
105+
"JsPrettyNumber": JsPrettyNumber,
106+
"Subtract": base.Subtract,
107+
"EntryIcon": base.EntryIcon,
108+
"MigrationIcon": MigrationIcon,
107109
"Add": func(a ...int) int {
108110
sum := 0
109111
for _, val := range a {
@@ -972,3 +974,23 @@ func mirrorRemoteAddress(m models.RemoteMirrorer) remoteAddress {
972974

973975
return a
974976
}
977+
978+
// JsPrettyNumber renders a number using english decimal separators, e.g. 1,200
979+
// subsequent Js will replace the number with locale-specific separators
980+
func JsPrettyNumber(i interface{}) template.HTML {
981+
var num int64
982+
switch v := i.(type) {
983+
case int:
984+
num = int64(v)
985+
case int8:
986+
num = int64(v)
987+
case int16:
988+
num = int64(v)
989+
case int32:
990+
num = int64(v)
991+
case int64:
992+
num = v
993+
}
994+
995+
return template.HTML(`<span class="js-pretty-number" data-value="` + strconv.FormatInt(num, 10) + `">` + base.PrettyNumber(num) + `</span>`)
996+
}

templates/repo/issue/milestones.tmpl

+7-5
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
<div class="ui compact tiny menu">
1919
<a class="item{{if not .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/milestones?state=open&q={{$.Keyword}}">
2020
{{svg "octicon-milestone" 16 "mr-3"}}
21-
<span class="js-format-pretty-number" data-original="{{.OpenCount}}">{{PrettyNumber .OpenCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
21+
{{JsPrettyNumber .OpenCount}}&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
2222
</a>
2323
<a class="item{{if .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/milestones?state=closed&q={{$.Keyword}}">
24-
{{svg "octicon-milestone" 16 "mr-3"}}
25-
<span class="js-format-pretty-number" data-original="{{.ClosedCount}}">{{PrettyNumber .ClosedCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
24+
{{svg "octicon-check" 16 "mr-3"}}
25+
{{JsPrettyNumber .ClosedCount}}&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
2626
</a>
2727
</div>
2828
</div>
@@ -80,8 +80,10 @@
8080
{{end}}
8181
{{end}}
8282
<span class="issue-stats">
83-
{{svg "octicon-issue-opened"}} <span class="js-format-pretty-number" data-original="{{.NumOpenIssues}}">{{PrettyNumber .NumOpenIssues}}</span>&nbsp;{{$.i18n.Tr "repo.issues.open_title"}}
84-
{{svg "octicon-issue-closed"}} <span class="js-format-pretty-number" data-original="{{.NumClosedIssues}}">{{PrettyNumber .NumClosedIssues}}</span>&nbsp;{{$.i18n.Tr "repo.issues.closed_title"}}
83+
{{svg "octicon-issue-opened" 16 "mr-3"}}
84+
{{JsPrettyNumber .NumOpenIssues}}&nbsp;{{$.i18n.Tr "repo.issues.open_title"}}
85+
{{svg "octicon-check" 16 "mr-3"}}
86+
{{JsPrettyNumber .NumClosedIssues}}&nbsp;{{$.i18n.Tr "repo.issues.closed_title"}}
8587
{{if .TotalTrackedTime}}{{svg "octicon-clock"}} {{.TotalTrackedTime|Sec2Time}}{{end}}
8688
{{if .UpdatedUnix}}{{svg "octicon-clock"}} {{$.i18n.Tr "repo.milestones.update_ago" (.TimeSinceUpdate|Sec2Time)}}{{end}}
8789
</span>

templates/repo/issue/openclose.tmpl

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
<div class="ui compact tiny menu">
22
<a class="{{if not .IsShowClosed}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state=open&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&assignee={{.AssigneeID}}">
3-
{{svg "octicon-issue-opened" 16 "mr-3"}}
4-
<span class="js-format-pretty-number" data-original="{{.IssueStats.OpenCount}}">{{PrettyNumber .IssueStats.OpenCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
3+
{{if .PageIsPullList}}
4+
{{svg "octicon-git-pull-request" 16 "mr-3"}}
5+
{{else}}
6+
{{svg "octicon-issue-opened" 16 "mr-3"}}
7+
{{end}}
8+
{{JsPrettyNumber .IssueStats.OpenCount}}&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
59
</a>
610
<a class="{{if .IsShowClosed}}active{{end}} item" href="{{$.Link}}?q={{$.Keyword}}&type={{.ViewType}}&sort={{$.SortType}}&state=closed&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&assignee={{.AssigneeID}}">
7-
{{svg "octicon-issue-closed" 16 "mr-3"}}
8-
<span class="js-format-pretty-number" data-original="{{.IssueStats.ClosedCount}}">{{PrettyNumber .IssueStats.ClosedCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
9-
</span>
11+
{{svg "octicon-check" 16 "mr-3"}}
12+
{{JsPrettyNumber .IssueStats.ClosedCount}}&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
13+
</a>
1014
</div>

templates/repo/projects/list.tmpl

+8-8
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
{{template "base/alert" .}}
1515
<div class="ui compact tiny menu">
1616
<a class="item{{if not .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/projects?state=open">
17-
{{svg "octicon-project" 16 "mr-2"}}
18-
<span class="js-format-pretty-number" data-original="{{.OpenCount}}">{{PrettyNumber .OpenCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
17+
{{svg "octicon-project" 16 "mr-3"}}
18+
{{JsPrettyNumber .OpenCount}}&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
1919
</a>
2020
<a class="item{{if .IsShowClosed}} active{{end}}" href="{{.RepoLink}}/projects?state=closed">
21-
{{svg "octicon-check" 16 "mr-2"}}
22-
<span class="js-format-pretty-number" data-original="{{.ClosedCount}}">{{PrettyNumber .ClosedCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
21+
{{svg "octicon-check" 16 "mr-3"}}
22+
{{JsPrettyNumber .ClosedCount}}&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
2323
</a>
2424
</div>
2525

@@ -47,10 +47,10 @@
4747
{{svg "octicon-clock"}} {{$.i18n.Tr "repo.milestones.closed" $closedDate|Str2html}}
4848
{{end}}
4949
<span class="issue-stats">
50-
{{svg "octicon-issue-opened"}}
51-
<span class="js-format-pretty-number" data-original="{{.NumOpenIssues}}">{{PrettyNumber .NumOpenIssues}}</span>&nbsp;{{$.i18n.Tr "repo.issues.open_title"}}
52-
{{svg "octicon-issue-closed"}}
53-
<span class="js-format-pretty-number" data-original="{{.NumOpenIssues}}">{{PrettyNumber .NumClosedIssues}}</span>&nbsp;{{$.i18n.Tr "repo.issues.closed_title"}}
50+
{{svg "octicon-issue-opened" 16 "mr-3"}}
51+
{{JsPrettyNumber .NumOpenIssues}}&nbsp;{{$.i18n.Tr "repo.issues.open_title"}}
52+
{{svg "octicon-check" 16 "mr-3"}}
53+
{{JsPrettyNumber .NumClosedIssues}}&nbsp;{{$.i18n.Tr "repo.issues.closed_title"}}
5454
</span>
5555
</div>
5656
{{if and (or $.CanWriteIssues $.CanWritePulls) (not $.Repository.IsArchived)}}

templates/user/dashboard/issues.tmpl

+8-4
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,16 @@
6060
<div class="column">
6161
<div class="ui compact tiny menu">
6262
<a class="item{{if not .IsShowClosed}} active{{end}}" href="{{.Link}}?type={{$.ViewType}}&repos=[{{range $.RepoIDs}}{{.}}%2C{{end}}]&sort={{$.SortType}}&state=open&q={{$.Keyword}}">
63-
{{svg "octicon-issue-opened" 16 "mr-3"}}
64-
<span class="js-format-pretty-number" data-original="{{.ShownIssueStats.OpenCount}}">{{PrettyNumber .ShownIssueStats.OpenCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
63+
{{if .PageIsPulls}}
64+
{{svg "octicon-git-pull-request" 16 "mr-3"}}
65+
{{else}}
66+
{{svg "octicon-issue-opened" 16 "mr-3"}}
67+
{{end}}
68+
{{JsPrettyNumber .ShownIssueStats.OpenCount}}&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
6569
</a>
6670
<a class="item{{if .IsShowClosed}} active{{end}}" href="{{.Link}}?type={{$.ViewType}}&repos=[{{range $.RepoIDs}}{{.}}%2C{{end}}]&sort={{$.SortType}}&state=closed&q={{$.Keyword}}">
67-
{{svg "octicon-issue-closed" 16 "mr-3"}}
68-
<span class="js-format-pretty-number" data-original="{{.ShownIssueStats.ClosedCount}}">{{PrettyNumber .ShownIssueStats.ClosedCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
71+
{{svg "octicon-check" 16 "mr-3"}}
72+
{{JsPrettyNumber .ShownIssueStats.ClosedCount}}&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
6973
</a>
7074
</div>
7175
</div>

templates/user/dashboard/milestones.tmpl

+11-7
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@
3838
<div class="column">
3939
<div class="ui compact tiny menu">
4040
<a class="item{{if not .IsShowClosed}} active{{end}}" href="{{.Link}}?repos=[{{range $.RepoIDs}}{{.}}%2C{{end}}]&sort={{$.SortType}}&state=open&q={{$.Keyword}}">
41-
{{svg "octicon-issue-opened" 16 "mr-3"}}
42-
<span class="js-format-pretty-number" data-original="{{.MilestoneStats.OpenCount}}">{{PrettyNumber .MilestoneStats.OpenCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
41+
{{svg "octicon-milestone" 16 "mr-3"}}
42+
{{JsPrettyNumber .MilestoneStats.OpenCount}}&nbsp;{{.i18n.Tr "repo.issues.open_title"}}
4343
</a>
4444
<a class="item{{if .IsShowClosed}} active{{end}}" href="{{.Link}}?repos=[{{range $.RepoIDs}}{{.}}%2C{{end}}]&sort={{$.SortType}}&state=closed&q={{$.Keyword}}">
45-
{{svg "octicon-issue-closed" 16 "mr-3"}}
46-
<span class="js-format-pretty-number" data-original="{{.MilestoneStats.ClosedCount}}">{{PrettyNumber .MilestoneStats.ClosedCount}}</span>&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
45+
{{svg "octicon-check" 16 "mr-3"}}
46+
{{JsPrettyNumber .MilestoneStats.ClosedCount}}&nbsp;{{.i18n.Tr "repo.issues.closed_title"}}
4747
</a>
4848
</div>
4949
</div>
@@ -100,9 +100,13 @@
100100
{{end}}
101101
{{end}}
102102
<span class="issue-stats">
103-
{{svg "octicon-issue-opened"}} <span class="js-format-pretty-number" data-original="{{.NumOpenIssues}}">{{PrettyNumber .NumOpenIssues}}</span>&nbsp;{{$.i18n.Tr "repo.issues.open_title"}}
104-
{{svg "octicon-issue-closed"}} <span class="js-format-pretty-number" data-original="{{.NumClosedIssues}}">{{PrettyNumber .NumClosedIssues}}</span>&nbsp;{{$.i18n.Tr "repo.issues.closed_title"}}
105-
{{if .TotalTrackedTime}}{{svg "octicon-clock"}} {{.TotalTrackedTime|Sec2Time}}{{end}}
103+
{{svg "octicon-issue-opened" 16 "mr-3"}}
104+
{{JsPrettyNumber .NumOpenIssues}}&nbsp;{{$.i18n.Tr "repo.issues.open_title"}}
105+
{{svg "octicon-check" 16 "mr-3"}}
106+
{{JsPrettyNumber .NumClosedIssues}}&nbsp;{{$.i18n.Tr "repo.issues.closed_title"}}
107+
{{if .TotalTrackedTime}}
108+
{{svg "octicon-clock"}} {{.TotalTrackedTime|Sec2Time}}
109+
{{end}}
106110
</span>
107111
</div>
108112
{{if and (or $.CanWriteIssues $.CanWritePulls) (not $.Repository.IsArchived)}}

web_src/js/features/common-global.js

+1-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {mqBinarySearch, prettyNumber} from '../utils.js';
1+
import {mqBinarySearch} from '../utils.js';
22
import createDropzone from './dropzone.js';
33
import {initCompColorPicker} from './comp/ColorPicker.js';
44

@@ -318,15 +318,3 @@ export function initGlobalButtons() {
318318
});
319319
});
320320
}
321-
322-
export function initGlobalFormattingReplacement() {
323-
const lang = document.documentElement.lang;
324-
325-
for (const el of document.querySelectorAll('.js-format-pretty-number')) {
326-
const num = Number(el.getAttribute('data-original'));
327-
const formatted = prettyNumber(num, lang);
328-
if (formatted && formatted !== el.textContent) {
329-
el.textContent = formatted;
330-
}
331-
}
332-
}

web_src/js/features/formatting.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import {prettyNumber} from '../utils.js';
2+
3+
const {lang} = document.documentElement;
4+
5+
export function initFormattingReplacements() {
6+
// replace english formatted numbers with locale-specific separators
7+
for (const el of document.getElementsByClassName('js-pretty-number')) {
8+
const num = Number(el.getAttribute('data-value'));
9+
console.log(num);
10+
const formatted = prettyNumber(num, lang);
11+
if (formatted && formatted !== el.textContent) {
12+
el.textContent = formatted;
13+
}
14+
}
15+
}

web_src/js/index.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import {
4444
initGlobalCommon,
4545
initGlobalDropzone,
4646
initGlobalEnterQuickSubmit,
47-
initGlobalFormattingReplacement,
4847
initGlobalFormDirtyLeaveConfirm,
4948
initGlobalLinkActions,
5049
initHeadNavbarContentToggle,
@@ -75,6 +74,11 @@ import {initRepoBranchButton} from './features/repo-branch.js';
7574
import {initCommonOrganization} from './features/common-organization.js';
7675
import {initRepoWikiForm} from './features/repo-wiki.js';
7776
import {initRepoCommentForm, initRepository} from './features/repo-legacy.js';
77+
import {initFormattingReplacements} from './features/formatting.js';
78+
79+
// Run time-critical code as soon as possible. This is safe to do because this
80+
// script appears at the end of <body> and rendered HTML is accessible at that point.
81+
initFormattingReplacements();
7882

7983
// Silence fomantic's error logging when tabs are used without a target content element
8084
$.fn.tab.settings.silent = true;
@@ -86,7 +90,6 @@ $(document).ready(() => {
8690

8791
initGlobalButtonClickOnEnter();
8892
initGlobalButtons();
89-
initGlobalFormattingReplacement();
9093
initGlobalCopyToClipboardListener();
9194
initGlobalDropzone();
9295
initGlobalEnterQuickSubmit();

0 commit comments

Comments
 (0)