mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-22 12:54:53 -05:00
ui: add copy path button to file view (#6079)
Port ofd11f8d24b0
. Followup to187e10d8c9
. * removed `aria-label` in the diff template * changed `Copy to clipboard` to `Copy path` * left `copy_generic` for now, but it's unused * ported the addition of this button to the file view template Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6079 Reviewed-by: Otto <otto@codeberg.org> Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
parent
af640ac4d4
commit
4fbdd1fc8c
4 changed files with 36 additions and 1 deletions
|
@ -107,6 +107,7 @@ copy = Copy
|
||||||
copy_generic = Copy to clipboard
|
copy_generic = Copy to clipboard
|
||||||
copy_url = Copy URL
|
copy_url = Copy URL
|
||||||
copy_hash = Copy hash
|
copy_hash = Copy hash
|
||||||
|
copy_path = Copy path
|
||||||
copy_content = Copy content
|
copy_content = Copy content
|
||||||
copy_branch = Copy branch name
|
copy_branch = Copy branch name
|
||||||
copy_success = Copied!
|
copy_success = Copied!
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
</div>
|
</div>
|
||||||
<span class="file tw-flex tw-items-center tw-font-mono tw-flex-1"><a class="muted file-link" title="{{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}}" href="#diff-{{$file.NameHash}}">{{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}}</a>
|
<span class="file tw-flex tw-items-center tw-font-mono tw-flex-1"><a class="muted file-link" title="{{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}}" href="#diff-{{$file.NameHash}}">{{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}}</a>
|
||||||
{{if .IsLFSFile}} ({{ctx.Locale.Tr "repo.stored_lfs"}}){{end}}
|
{{if .IsLFSFile}} ({{ctx.Locale.Tr "repo.stored_lfs"}}){{end}}
|
||||||
<button class="btn interact-fg tw-p-2" data-clipboard-text="{{$file.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_generic"}}" aria-label="{{ctx.Locale.Tr "copy_generic"}}">{{svg "octicon-copy" 14}}</button>
|
<button class="btn interact-fg tw-p-2" data-clipboard-text="{{$file.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_path"}}">{{svg "octicon-copy" 14}}</button>
|
||||||
{{if $file.IsGenerated}}
|
{{if $file.IsGenerated}}
|
||||||
<span class="ui label">{{ctx.Locale.Tr "repo.diff.generated"}}</span>
|
<span class="ui label">{{ctx.Locale.Tr "repo.diff.generated"}}</span>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
@ -113,6 +113,7 @@
|
||||||
<span class="breadcrumb-divider">/</span>
|
<span class="breadcrumb-divider">/</span>
|
||||||
{{- if eq $i $l -}}
|
{{- if eq $i $l -}}
|
||||||
<span class="active section" title="{{$v}}">{{$v}}</span>
|
<span class="active section" title="{{$v}}">{{$v}}</span>
|
||||||
|
<button class="btn interact-fg tw-p-2" data-clipboard-text="{{$.TreePath}}" data-tooltip-content="{{ctx.Locale.Tr "copy_path"}}">{{svg "octicon-copy" 14}}</button>
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{$p := index $.Paths $i}}<span class="section"><a href="{{$.BranchLink}}/{{PathEscapeSegments $p}}" title="{{$v}}">{{$v}}</a></span>
|
{{$p := index $.Paths $i}}<span class="section"><a href="{{$.BranchLink}}/{{PathEscapeSegments $p}}" title="{{$v}}">{{$v}}</a></span>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
33
tests/e2e/clipboard-copy.test.e2e.ts
Normal file
33
tests/e2e/clipboard-copy.test.e2e.ts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
// @watch start
|
||||||
|
// templates/repo/home.tmpl
|
||||||
|
// templates/repo/diff/box.tmpl
|
||||||
|
// web_src/js/features/clipboard.js
|
||||||
|
// @watch end
|
||||||
|
|
||||||
|
import {expect} from '@playwright/test';
|
||||||
|
import {test} from './utils_e2e.ts';
|
||||||
|
|
||||||
|
test.use({
|
||||||
|
permissions: ['clipboard-write'],
|
||||||
|
});
|
||||||
|
|
||||||
|
test('copy src file path to clipboard', async ({page}) => {
|
||||||
|
const response = await page.goto('/user2/repo1/src/branch/master/README.md');
|
||||||
|
expect(response?.status()).toBe(200);
|
||||||
|
|
||||||
|
await page.click('[data-clipboard-text]');
|
||||||
|
const clipboardText = await page.evaluate(() => navigator.clipboard.readText());
|
||||||
|
expect(clipboardText).toContain('README.md');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('copy diff file path to clipboard', async ({page}) => {
|
||||||
|
const response = await page.goto('/user2/repo1/src/commit/65f1bf27bc3bf70f64657658635e66094edbcb4d/README.md');
|
||||||
|
expect(response?.status()).toBe(200);
|
||||||
|
|
||||||
|
await page.click('[data-clipboard-text]');
|
||||||
|
const clipboardText = await page.evaluate(() => navigator.clipboard.readText());
|
||||||
|
expect(clipboardText).toContain('README.md');
|
||||||
|
});
|
Loading…
Reference in a new issue