detached f163db7

refactor(usecase): accept configurable default zoom levels

commit
f163db7109425243548d84c0c83079bead680a1a
author
brice · · 2025-12-15 19:03 UTC
committer
brice · · 2025-12-15 20:48 UTC
parent
9134c7b
signature
unsigned
2 files · +24 -6
M internal/application/usecase/manage_zoom.go +16 -5
@@ -14,18 +14,29 @@ import (
1414
1515 // ManageZoomUseCase handles per-domain zoom level operations.
1616 type ManageZoomUseCase struct {
17- zoomRepo repository.ZoomRepository
17+ zoomRepo repository.ZoomRepository
18+ defaultZoom float64
1819 }
1920
2021 // NewManageZoomUseCase creates a new zoom management use case.
21-func NewManageZoomUseCase(zoomRepo repository.ZoomRepository) *ManageZoomUseCase {
22+// defaultZoom is the zoom level to use when resetting (typically from config).
23+func NewManageZoomUseCase(zoomRepo repository.ZoomRepository, defaultZoom float64) *ManageZoomUseCase {
24+ if defaultZoom <= 0 {
25+ defaultZoom = entity.ZoomDefault
26+ }
2227 return &ManageZoomUseCase{
23- zoomRepo: zoomRepo,
28+ zoomRepo: zoomRepo,
29+ defaultZoom: defaultZoom,
2430 }
2531 }
2632
33+// DefaultZoom returns the configured default zoom level.
34+func (uc *ManageZoomUseCase) DefaultZoom() float64 {
35+ return uc.defaultZoom
36+}
37+
2738 // GetZoom retrieves the zoom level for a domain.
28-// Returns the default zoom level if none is set.
39+// Returns the configured default zoom level if none is set.
2940 func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entity.ZoomLevel, error) {
3041 log := logging.FromContext(ctx)
3142 log.Debug().Str("domain", domain).Msg("getting zoom level")
@@ -36,7 +47,7 @@ func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entit
3647 }
3748
3849 if zoom == nil {
39- zoom = entity.NewZoomLevel(domain, entity.ZoomDefault)
50+ zoom = entity.NewZoomLevel(domain, uc.defaultZoom)
4051 log.Debug().Str("domain", domain).Float64("zoom", zoom.ZoomFactor).Msg("using default zoom")
4152 }
4253
@@ -14,18 +14,29 @@ import (
14 14
15 // ManageZoomUseCase handles per-domain zoom level operations.15 // ManageZoomUseCase handles per-domain zoom level operations.
16 type ManageZoomUseCase struct {16 type ManageZoomUseCase struct {
17- zoomRepo repository.ZoomRepository17+ zoomRepo repository.ZoomRepository
18+ defaultZoom float64
18 }19 }
19 20
20 // NewManageZoomUseCase creates a new zoom management use case.21 // NewManageZoomUseCase creates a new zoom management use case.
21-func NewManageZoomUseCase(zoomRepo repository.ZoomRepository) *ManageZoomUseCase {22+// defaultZoom is the zoom level to use when resetting (typically from config).
23+func NewManageZoomUseCase(zoomRepo repository.ZoomRepository, defaultZoom float64) *ManageZoomUseCase {
24+ if defaultZoom <= 0 {
25+ defaultZoom = entity.ZoomDefault
26+ }
22 return &ManageZoomUseCase{27 return &ManageZoomUseCase{
23- zoomRepo: zoomRepo,28+ zoomRepo: zoomRepo,
29+ defaultZoom: defaultZoom,
24 }30 }
25 }31 }
26 32
33+// DefaultZoom returns the configured default zoom level.
34+func (uc *ManageZoomUseCase) DefaultZoom() float64 {
35+ return uc.defaultZoom
36+}
37+
27 // GetZoom retrieves the zoom level for a domain.38 // GetZoom retrieves the zoom level for a domain.
28-// Returns the default zoom level if none is set.39+// Returns the configured default zoom level if none is set.
29 func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entity.ZoomLevel, error) {40 func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entity.ZoomLevel, error) {
30 log := logging.FromContext(ctx)41 log := logging.FromContext(ctx)
31 log.Debug().Str("domain", domain).Msg("getting zoom level")42 log.Debug().Str("domain", domain).Msg("getting zoom level")
@@ -36,7 +47,7 @@ func (uc *ManageZoomUseCase) GetZoom(ctx context.Context, domain string) (*entit
36 }47 }
37 48
38 if zoom == nil {49 if zoom == nil {
39- zoom = entity.NewZoomLevel(domain, entity.ZoomDefault)50+ zoom = entity.NewZoomLevel(domain, uc.defaultZoom)
40 log.Debug().Str("domain", domain).Float64("zoom", zoom.ZoomFactor).Msg("using default zoom")51 log.Debug().Str("domain", domain).Float64("zoom", zoom.ZoomFactor).Msg("using default zoom")
41 }52 }
42 53
M internal/application/usecase/navigate.go +8 -1
@@ -14,16 +14,23 @@ import (
1414 type NavigateUseCase struct {
1515 historyRepo repository.HistoryRepository
1616 zoomRepo repository.ZoomRepository
17+ defaultZoom float64
1718 }
1819
1920 // NewNavigateUseCase creates a new navigation use case.
21+// defaultZoom is the zoom level to use when no per-domain zoom is saved (typically from config).
2022 func NewNavigateUseCase(
2123 historyRepo repository.HistoryRepository,
2224 zoomRepo repository.ZoomRepository,
25+ defaultZoom float64,
2326 ) *NavigateUseCase {
27+ if defaultZoom <= 0 {
28+ defaultZoom = entity.ZoomDefault
29+ }
2430 return &NavigateUseCase{
2531 historyRepo: historyRepo,
2632 zoomRepo: zoomRepo,
33+ defaultZoom: defaultZoom,
2734 }
2835 }
2936
@@ -55,7 +62,7 @@ func (uc *NavigateUseCase) Execute(ctx context.Context, input NavigateInput) (*N
5562 }
5663
5764 // Load and apply zoom level before navigation (for DOM zoom mode)
58- var zoomFactor float64 = entity.ZoomDefault
65+ zoomFactor := uc.defaultZoom
5966 if domain != "" {
6067 zoom, err := uc.zoomRepo.Get(ctx, domain)
6168 if err != nil {
@@ -14,16 +14,23 @@ import (
14 type NavigateUseCase struct {14 type NavigateUseCase struct {
15 historyRepo repository.HistoryRepository15 historyRepo repository.HistoryRepository
16 zoomRepo repository.ZoomRepository16 zoomRepo repository.ZoomRepository
17+ defaultZoom float64
17 }18 }
18 19
19 // NewNavigateUseCase creates a new navigation use case.20 // NewNavigateUseCase creates a new navigation use case.
21+// defaultZoom is the zoom level to use when no per-domain zoom is saved (typically from config).
20 func NewNavigateUseCase(22 func NewNavigateUseCase(
21 historyRepo repository.HistoryRepository,23 historyRepo repository.HistoryRepository,
22 zoomRepo repository.ZoomRepository,24 zoomRepo repository.ZoomRepository,
25+ defaultZoom float64,
23 ) *NavigateUseCase {26 ) *NavigateUseCase {
27+ if defaultZoom <= 0 {
28+ defaultZoom = entity.ZoomDefault
29+ }
24 return &NavigateUseCase{30 return &NavigateUseCase{
25 historyRepo: historyRepo,31 historyRepo: historyRepo,
26 zoomRepo: zoomRepo,32 zoomRepo: zoomRepo,
33+ defaultZoom: defaultZoom,
27 }34 }
28 }35 }
29 36
@@ -55,7 +62,7 @@ func (uc *NavigateUseCase) Execute(ctx context.Context, input NavigateInput) (*N
55 }62 }
56 63
57 // Load and apply zoom level before navigation (for DOM zoom mode)64 // Load and apply zoom level before navigation (for DOM zoom mode)
58- var zoomFactor float64 = entity.ZoomDefault65+ zoomFactor := uc.defaultZoom
59 if domain != "" {66 if domain != "" {
60 zoom, err := uc.zoomRepo.Get(ctx, domain)67 zoom, err := uc.zoomRepo.Get(ctx, domain)
61 if err != nil {68 if err != nil {

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