Skip to content

Commit

Permalink
fix(revisions): render rows in sections
Browse files Browse the repository at this point in the history
This is to prevent highlight style from bleeding into before and after
sections of each row
  • Loading branch information
idursun committed Mar 7, 2025
1 parent 9a8be38 commit 142e07e
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 17 deletions.
33 changes: 19 additions & 14 deletions internal/ui/graph/default_row_renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,43 +11,48 @@ import (
)

type DefaultRowRenderer struct {
section RowSection
Palette common.Palette
HighlightBackground lipgloss.AdaptiveColor
IsHighlighted bool
Op operations.Operation
}

func (s DefaultRowRenderer) RenderNormal(text string) string {
func (s *DefaultRowRenderer) BeginSection(section RowSection) {
s.section = section
}

func (s *DefaultRowRenderer) RenderNormal(text string) string {
normal := s.Palette.Normal
if s.IsHighlighted {
normal = normal.Background(s.HighlightBackground)
}
return normal.Render(text)
}

func (s DefaultRowRenderer) RenderConnection(connectionType jj.ConnectionType) string {
func (s *DefaultRowRenderer) RenderConnection(connectionType jj.ConnectionType) string {
normal := s.Palette.Normal
if s.IsHighlighted {
if s.IsHighlighted && s.section == RowSectionRevision {
normal = normal.Background(s.HighlightBackground)
}
return normal.Render(string(connectionType))
}

func (s DefaultRowRenderer) RenderBefore(*jj.Commit) string {
func (s *DefaultRowRenderer) RenderBefore(*jj.Commit) string {
if s.IsHighlighted && s.Op.RenderPosition() == operations.RenderPositionBefore {
return s.Op.Render()
}
return ""
}

func (s DefaultRowRenderer) RenderAfter(*jj.Commit) string {
func (s *DefaultRowRenderer) RenderAfter(*jj.Commit) string {
if s.IsHighlighted && s.Op.RenderPosition() == operations.RenderPositionAfter {
return s.Op.Render()
}
return ""
}

func (s DefaultRowRenderer) RenderGlyph(connection jj.ConnectionType, commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderGlyph(connection jj.ConnectionType, commit *jj.Commit) string {
var style lipgloss.Style
switch connection {
case jj.GLYPH_IMMUTABLE:
Expand All @@ -67,11 +72,11 @@ func (s DefaultRowRenderer) RenderGlyph(connection jj.ConnectionType, commit *jj
return style.Render(string(connection) + opMarker)
}

func (s DefaultRowRenderer) RenderTermination(connection jj.ConnectionType) string {
func (s *DefaultRowRenderer) RenderTermination(connection jj.ConnectionType) string {
return s.Palette.Elided.Render(string(connection))
}

func (s DefaultRowRenderer) RenderChangeId(commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderChangeId(commit *jj.Commit) string {
normalStyle := s.Palette.Normal
changeIdStyle := s.Palette.ChangeId
restStyle := s.Palette.Rest
Expand All @@ -89,7 +94,7 @@ func (s DefaultRowRenderer) RenderChangeId(commit *jj.Commit) string {
return changeId
}

func (s DefaultRowRenderer) RenderCommitId(commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderCommitId(commit *jj.Commit) string {
if commit.IsRoot() {
return ""
}
Expand All @@ -102,7 +107,7 @@ func (s DefaultRowRenderer) RenderCommitId(commit *jj.Commit) string {
return commitIdStyle.Render("", commit.CommitIdShort) + restStyle.Render(commit.CommitId[len(commit.ChangeIdShort):])
}

func (s DefaultRowRenderer) RenderAuthor(commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderAuthor(commit *jj.Commit) string {
placeholderStyle := s.Palette.EmptyPlaceholder
authorStyle := s.Palette.Author
if s.IsHighlighted {
Expand All @@ -115,7 +120,7 @@ func (s DefaultRowRenderer) RenderAuthor(commit *jj.Commit) string {
return authorStyle.Render("", commit.Author)
}

func (s DefaultRowRenderer) RenderDate(commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderDate(commit *jj.Commit) string {
if commit.IsRoot() {
return ""
}
Expand All @@ -126,7 +131,7 @@ func (s DefaultRowRenderer) RenderDate(commit *jj.Commit) string {
return timestamp.Render("", commit.Timestamp)
}

func (s DefaultRowRenderer) RenderBookmarks(commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderBookmarks(commit *jj.Commit) string {
bookmarksStyle := s.Palette.Bookmarks
if s.IsHighlighted {
bookmarksStyle = bookmarksStyle.Background(s.HighlightBackground)
Expand All @@ -145,7 +150,7 @@ func (s DefaultRowRenderer) RenderBookmarks(commit *jj.Commit) string {
return w.String()
}

func (s DefaultRowRenderer) RenderMarkers(commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderMarkers(commit *jj.Commit) string {
conflictStyle := s.Palette.Conflict
if s.IsHighlighted {
conflictStyle = conflictStyle.Background(s.HighlightBackground)
Expand All @@ -156,7 +161,7 @@ func (s DefaultRowRenderer) RenderMarkers(commit *jj.Commit) string {
return ""
}

func (s DefaultRowRenderer) RenderDescription(commit *jj.Commit) string {
func (s *DefaultRowRenderer) RenderDescription(commit *jj.Commit) string {
emptyPlaceholderStyle := s.Palette.EmptyPlaceholder
placeholderStyle := s.Palette.Placeholder
normalStyle := s.Palette.Normal
Expand Down
4 changes: 3 additions & 1 deletion internal/ui/graph/graph_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ func (w *GraphWriter) RenderRow(row jj.GraphRow, renderer RowRenderer) {
w.row = row
w.renderer = renderer
w.connections = extendConnections(w.connections)
renderer.BeginSection(RowSectionBefore)
// will render by extending the previous connections
written, _ := w.Write([]byte(renderer.RenderBefore(row.Commit)))
if written > 0 {
Expand All @@ -90,6 +91,7 @@ func (w *GraphWriter) RenderRow(row jj.GraphRow, renderer RowRenderer) {
w.connections = row.Connections[0]
lw := strings.Builder{}
prefix := len(w.connections)*2 + 1
renderer.BeginSection(RowSectionRevision)
fmt.Fprint(&lw, renderer.RenderChangeId(row.Commit))
fmt.Fprint(&lw, renderer.RenderAuthor(row.Commit))
fmt.Fprint(&lw, renderer.RenderDate(row.Commit))
Expand All @@ -109,7 +111,6 @@ func (w *GraphWriter) RenderRow(row jj.GraphRow, renderer RowRenderer) {
if row.Commit.IsRoot() {
return
}

lastLineConnection := extendConnections(row.Connections[0])
if len(row.Connections) > 1 && !slices.Contains(row.Connections[1], jj.TERMINATION) {
w.connectionPos = 1
Expand All @@ -136,6 +137,7 @@ func (w *GraphWriter) RenderRow(row jj.GraphRow, renderer RowRenderer) {
}
}

renderer.BeginSection(RowSectionAfter)
w.connections = extendConnections(lastLineConnection)
written, _ = w.Write([]byte(renderer.RenderAfter(row.Commit)))
if written > 0 {
Expand Down
9 changes: 9 additions & 0 deletions internal/ui/graph/row_renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,16 @@ package graph

import "github.com/idursun/jjui/internal/jj"

type RowSection int

const (
RowSectionRevision RowSection = iota
RowSectionBefore
RowSectionAfter
)

type RowRenderer interface {
BeginSection(section RowSection)
RenderBefore(commit *jj.Commit) string
RenderAfter(commit *jj.Commit) string
RenderGlyph(connection jj.ConnectionType, commit *jj.Commit) string
Expand Down
2 changes: 1 addition & 1 deletion internal/ui/operations/evolog/evolog_operation.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ func (o Operation) Render() string {
selectedLineStart := -1
selectedLineEnd := -1
for i, row := range o.rows {
nodeRenderer := graph.DefaultRowRenderer{
nodeRenderer := &graph.DefaultRowRenderer{
Palette: common.DefaultPalette,
Op: &operations.Noop{},
IsHighlighted: i == o.cursor,
Expand Down
2 changes: 1 addition & 1 deletion internal/ui/revisions/revisions.go
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ func (m *Model) View() string {
Dark: config.Current.UI.HighlightDark,
}
for i, row := range m.rows {
nodeRenderer := graph.DefaultRowRenderer{
nodeRenderer := &graph.DefaultRowRenderer{
Palette: common.DefaultPalette,
HighlightBackground: highlightColor,
Op: m.op,
Expand Down
2 changes: 2 additions & 0 deletions test/parse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ type TestRenderer struct {
highlighted bool
}

func (t TestRenderer) BeginSection(graph.RowSection) {}

func (t TestRenderer) RenderNormal(text string) string {
return text
}
Expand Down

0 comments on commit 142e07e

Please sign in to comment.