Skip to content

Commit 91a65dc

Browse files
authored
Merge branch 'main' into make-context-a-context
2 parents 84614ac + 518ed50 commit 91a65dc

File tree

7 files changed

+50
-88
lines changed

7 files changed

+50
-88
lines changed

options/locale/locale_zh-TW.ini

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,6 +1314,10 @@ pulls.manually_merged_as=此合併請求已被手動合併為 <a rel="nofollow"
13141314
pulls.is_closed=合併請求已被關閉。
13151315
pulls.has_merged=合併請求已合併。
13161316
pulls.title_wip_desc=`<a href="#">標題用 <strong>%s</strong> 開頭</a>以避免意外地合併此合併請求。`
1317+
pulls.cannot_merge_work_in_progress=此合併請求被標記為還在進行中(WIP)。
1318+
pulls.still_in_progress=還在進行中嗎?
1319+
pulls.add_prefix=加入 <strong>%s</strong> 前綴
1320+
pulls.remove_prefix=移除 <strong>%s</strong> 前綴
13171321
pulls.data_broken=此合併請求已損毀,因為遺失 Fork 資訊。
13181322
pulls.files_conflicted=此合併請求有變更和目標分支衝突。
13191323
pulls.is_checking=正在進行合併衝突檢查,請稍後再試。
@@ -1547,6 +1551,7 @@ settings.email_notifications.disable=關閉郵件通知
15471551
settings.email_notifications.submit=套用郵件偏好設定
15481552
settings.site=網站
15491553
settings.update_settings=更新設定
1554+
settings.branches.update_default_branch=更新預設分支
15501555
settings.advanced_settings=進階設定
15511556
settings.wiki_desc=啟用儲存庫 Wiki
15521557
settings.use_internal_wiki=使用內建 Wiki
@@ -1973,6 +1978,10 @@ branch.restore=還原分支「%s」
19731978
branch.download=下載分支 '%s'
19741979
branch.included_desc=此分支是預設分支的一部分
19751980
branch.included=包含
1981+
branch.create_new_branch=從下列分支建立分支:
1982+
branch.confirm_create_branch=建立分支
1983+
branch.new_branch=建立新分支
1984+
branch.new_branch_from=從「%s」建立新分支
19761985

19771986
tag.create_tag=建立標籤 <strong>%s</strong>
19781987
tag.create_success=已建立標籤「%s」。

package-lock.json

Lines changed: 0 additions & 67 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
"@claviska/jquery-minicolors": "2.3.5",
1010
"@primer/octicons": "13.0.0",
1111
"add-asset-webpack-plugin": "2.0.1",
12-
"clipboard": "2.0.8",
1312
"codemirror": "5.61.0",
1413
"css-loader": "5.2.4",
1514
"dropzone": "5.9.2",

routers/repo/editor.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ func editFile(ctx *context.Context, isNewFile bool) {
106106
ctx.NotFound("blob.Data", err)
107107
return
108108
}
109+
109110
defer dataRc.Close()
110111

111112
ctx.Data["FileSize"] = blob.Size()
@@ -122,6 +123,10 @@ func editFile(ctx *context.Context, isNewFile bool) {
122123
}
123124

124125
d, _ := ioutil.ReadAll(dataRc)
126+
if err := dataRc.Close(); err != nil {
127+
log.Error("Error whilst closing blob data: %v", err)
128+
}
129+
125130
buf = append(buf, d...)
126131
if content, err := charset.ToUTF8WithErr(buf); err != nil {
127132
log.Error("ToUTF8WithErr: %v", err)

templates/repo/clone_buttons.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<input id="repo-clone-url" value="{{if $.PageIsWiki}}{{$.WikiCloneLink.SSH}}{{else}}{{$.CloneLink.SSH}}{{end}}" readonly>
1515
{{end}}
1616
{{if or (not $.DisableHTTP) (and (not $.DisableSSH) (or $.IsSigned $.ExposeAnonSSH))}}
17-
<button class="ui basic icon button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
17+
<button class="ui basic icon button poping up" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
1818
{{svg "octicon-clippy"}}
1919
</button>
2020
{{end}}

templates/repo/issue/view_content/context_menu.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
{{ else }}
1111
{{ $referenceUrl = Printf "%s%s/pulls/%d/files#%s" AppUrl .ctx.Repository.FullName .ctx.Issue.Index .item.HashTag }}
1212
{{ end }}
13-
<div class="item context clipboard" data-clipboard-text="{{$referenceUrl}}">{{.ctx.i18n.Tr "repo.issues.context.copy_link"}}</div>
13+
<div class="item context" data-clipboard-text="{{$referenceUrl}}">{{.ctx.i18n.Tr "repo.issues.context.copy_link"}}</div>
1414
<div class="item context quote-reply {{if .diff}}quote-reply-diff{{end}}" data-target="{{.item.ID}}">{{.ctx.i18n.Tr "repo.issues.context.quote_reply"}}</div>
1515
{{if not .ctx.UnitIssuesGlobalDisabled}}
1616
<div class="item context reference-issue" data-target="{{.item.ID}}" data-modal="#reference-issue-modal" data-poster="{{.item.Poster.GetDisplayName}}" data-reference="{{$referenceUrl}}">{{.ctx.i18n.Tr "repo.issues.context.reference_issue"}}</div>

web_src/js/features/clipboard.js

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,38 @@
1-
export default async function initClipboard() {
2-
const els = document.querySelectorAll('.clipboard');
3-
if (!els || !els.length) return;
1+
const selector = '[data-clipboard-target], [data-clipboard-text]';
42

5-
const {default: ClipboardJS} = await import(/* webpackChunkName: "clipboard" */'clipboard');
3+
// TODO: replace these with toast-style notifications
4+
function onSuccess(btn) {
5+
if (!btn.dataset.content) return;
6+
$(btn).popup('destroy');
7+
btn.dataset.content = btn.dataset.success;
8+
$(btn).popup('show');
9+
btn.dataset.content = btn.dataset.original;
10+
}
11+
function onError(btn) {
12+
if (!btn.dataset.content) return;
13+
$(btn).popup('destroy');
14+
btn.dataset.content = btn.dataset.error;
15+
$(btn).popup('show');
16+
btn.dataset.content = btn.dataset.original;
17+
}
618

7-
const clipboard = new ClipboardJS(els);
8-
clipboard.on('success', (e) => {
9-
e.clearSelection();
10-
$(e.trigger).popup('destroy');
11-
e.trigger.dataset.content = e.trigger.dataset.success;
12-
$(e.trigger).popup('show');
13-
e.trigger.dataset.content = e.trigger.dataset.original;
14-
});
19+
export default async function initClipboard() {
20+
for (const btn of document.querySelectorAll(selector) || []) {
21+
btn.addEventListener('click', async () => {
22+
let text;
23+
if (btn.dataset.clipboardText) {
24+
text = btn.dataset.clipboardText;
25+
} else if (btn.dataset.clipboardTarget) {
26+
text = document.querySelector(btn.dataset.clipboardTarget)?.value;
27+
}
28+
if (!text) return;
1529

16-
clipboard.on('error', (e) => {
17-
$(e.trigger).popup('destroy');
18-
e.trigger.dataset.content = e.trigger.dataset.error;
19-
$(e.trigger).popup('show');
20-
e.trigger.dataset.content = e.trigger.dataset.original;
21-
});
30+
try {
31+
await navigator.clipboard.writeText(text);
32+
onSuccess(btn);
33+
} catch {
34+
onError(btn);
35+
}
36+
});
37+
}
2238
}

0 commit comments

Comments
 (0)