main 5041353

build_context_menu.go RawHistoryFolder

1package usecase
2
3import (
4	"context"
5
6	"github.com/bnema/dumber/internal/application/port"
7)
8
9// BuildContextMenuUseCase normalizes context menu items from menu state.
10type BuildContextMenuUseCase struct{}
11
12var _ port.ContextMenuBuilder = (*BuildContextMenuUseCase)(nil)
13
14// NewBuildContextMenuUseCase creates a new BuildContextMenuUseCase.
15func NewBuildContextMenuUseCase() *BuildContextMenuUseCase {
16	return &BuildContextMenuUseCase{}
17}
18
19// Build returns normalized menu items for the supplied context.
20func (*BuildContextMenuUseCase) Build(_ context.Context, menuContext port.MenuContext) []port.MenuItem {
21	if menuContext.IsEditable {
22		return nil
23	}
24
25	items := make([]port.MenuItem, 0, 9)
26
27	if menuContext.CanGoBack {
28		items = append(items, port.MenuItem{Action: port.MenuActionBack, Label: "Back"})
29	}
30	if menuContext.CanGoForward {
31		items = append(items, port.MenuItem{Action: port.MenuActionForward, Label: "Forward"})
32	}
33
34	items = append(items, port.MenuItem{Action: port.MenuActionReload, Label: "Reload"})
35
36	if menuContext.LinkURI != "" {
37		items = append(items,
38			port.MenuItem{Action: port.MenuActionOpenLinkNewTab, Label: "Open Link in New Tab"},
39			port.MenuItem{Action: port.MenuActionCopyLink, Label: "Copy Link"},
40		)
41	}
42
43	if menuContext.ImageURI != "" {
44		items = append(items,
45			port.MenuItem{Action: port.MenuActionCopyImage, Label: "Copy Image"},
46			port.MenuItem{Action: port.MenuActionSaveImage, Label: "Save Image"},
47		)
48	}
49
50	if menuContext.HasSelection {
51		items = append(items, port.MenuItem{Action: port.MenuActionCopySelection, Label: "Copy Selection"})
52	}
53
54	items = append(items, port.MenuItem{Action: port.MenuActionInspectElement, Label: "Inspect Element"})
55
56	return items
57}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close