all repos

mugit @ d4f69f4

馃惍 git server that your cow will love
4 files changed, 83 insertions(+), 8 deletions(-)
ui: add line numbers to diffs
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2026-03-12 13:50:45 +0200
Authored at: 2026-03-11 21:36:15 +0200
Change ID: tzwvmypkpqsllkpslxrpwxukxorozyrt
Parent: 6309169
M internal/git/diff.go
路路路
        9
        9
         )

      
        10
        10
         

      
        11
        11
         type TextFragment struct {

      
        12
        
        -	Header string

      
        13
        
        -	Lines  []gitdiff.Line

      
        
        12
        +	Header      string

      
        
        13
        +	Lines       []gitdiff.Line

      
        
        14
        +	OldPosition int64

      
        
        15
        +	NewPosition int64

      
        14
        16
         }

      
        15
        17
         

      
        16
        18
         type Diff struct {

      路路路
        70
        72
         

      
        71
        73
         		for _, tf := range d.TextFragments {

      
        72
        74
         			diff.TextFragments = append(diff.TextFragments, TextFragment{

      
        73
        
        -				Header: tf.Header(),

      
        74
        
        -				Lines:  tf.Lines,

      
        
        75
        +				Header:      tf.Header(),

      
        
        76
        +				Lines:       tf.Lines,

      
        
        77
        +				OldPosition: tf.OldPosition,

      
        
        78
        +				NewPosition: tf.NewPosition,

      
        75
        79
         			})

      
        76
        80
         			for _, l := range tf.Lines {

      
        77
        81
         				switch l.Op {

      
M internal/handlers/handlers.go
路路路
        73
        73
         

      
        74
        74
         var templateFuncs = template.FuncMap{

      
        75
        75
         	"inc":             func(n int) int { return n + 1 },

      
        
        76
        +	"inc64":           func(n int64) int64 { return n + 1 },

      
        76
        77
         	"humanizeRelTime": func(t time.Time) string { return humanize.Time(t) },

      
        77
        78
         	"humanizeTime":    func(t time.Time) string { return t.Format("2006-01-02 15:04:05 MST") },

      
        78
        79
         	"urlencode":       func(s string) string { return url.PathEscape(s) },

      
M web/static/style.css
路路路
        309
        309
           background: var(--light-gray);

      
        310
        310
         }

      
        311
        311
         

      
        
        312
        +.diff pre {

      
        
        313
        +  padding: 0;

      
        
        314
        +  margin: 0;

      
        
        315
        +}

      
        
        316
        +

      
        
        317
        +.diff-line {

      
        
        318
        +  display: flex;

      
        
        319
        +}

      
        
        320
        +

      
        
        321
        +.diff-line .line-number {

      
        
        322
        +  flex-shrink: 0;

      
        
        323
        +  user-select: none;

      
        
        324
        +  -webkit-user-select: none;

      
        
        325
        +  text-align: right;

      
        
        326
        +  color: var(--gray);

      
        
        327
        +  border-right: 1px solid var(--light-gray);

      
        
        328
        +  padding: 0 0.5rem;

      
        
        329
        +  min-width: 3rem;

      
        
        330
        +}

      
        
        331
        +

      
        
        332
        +.diff-line .line-number a {

      
        
        333
        +  display: inline;

      
        
        334
        +  padding: 0;

      
        
        335
        +}

      
        
        336
        +

      
        
        337
        +.diff-line > span:last-child {

      
        
        338
        +  flex-grow: 1;

      
        
        339
        +  padding: 0 0.5rem;

      
        
        340
        +}

      
        
        341
        +

      
        
        342
        +.diff-line:target {

      
        
        343
        +  background: rgba(0, 0, 0, 0.05);

      
        
        344
        +}

      
        
        345
        +

      
        
        346
        +@media (prefers-color-scheme: dark) {

      
        
        347
        +  .diff-line:target {

      
        
        348
        +    background: rgba(255, 255, 255, 0.05);

      
        
        349
        +  }

      
        
        350
        +}

      
        
        351
        +

      
        312
        352
         .diff-stat { padding: 1rem 0 1rem 0; }

      
        313
        353
         .diff-add { color: var(--diff-add); }

      
        314
        354
         .diff-del { color: var(--diff-del); }

      
        315
        355
         .diff-mod { color: var(--cyan); }

      
        316
        356
         .diff-noop { color: var(--gray); }

      
        
        357
        +.diff-separator {

      
        
        358
        +  justify-content: center;

      
        
        359
        +  background: var(--medium-gray);

      
        
        360
        +}

      
        317
        361
         

      
        318
        362
         .jump { margin-top: 0.5rem; }

      
        319
        363
         .jump-table { margin-top: 0.25rem; }

      
M web/templates/repo_commit.html
路路路
        106
        106
                     {{ else }}

      
        107
        107
                     <pre>

      
        108
        108
                       {{- range .TextFragments -}}

      
        109
        
        -              <p>{{- .Header -}}</p>

      
        
        109
        +              <span class="diff-line diff-noop diff-separator">路路路</span>

      
        
        110
        +              {{- $o := .OldPosition -}}

      
        
        111
        +              {{- $n := .NewPosition -}}

      
        110
        112
                       {{- range .Lines -}}

      
        111
        
        -              {{- if eq .Op.String "+" -}}<span class="diff-add">{{ .String }}</span>

      
        112
        
        -              {{- else if eq .Op.String "-" -}}<span class="diff-del">{{ .String }}</span>

      
        113
        
        -              {{- else -}}<span class="diff-noop">{{ .String }}</span>

      
        
        113
        +              {{- $op := .Op.String -}}

      
        
        114
        +

      
        
        115
        +              {{- if eq $op "+" -}}

      
        
        116
        +              <span class="diff-line diff-add" id="{{ $path }}-N{{ $n }}">

      
        
        117
        +                <span class="line-number"></span>

      
        
        118
        +                <a class="line-number" href="#{{ $path }}-N{{ $n }}">{{ $n }}</a>

      
        
        119
        +                <span>{{ .String }}</span>

      
        
        120
        +              </span>

      
        
        121
        +              {{- $n = inc64 $n -}}

      
        
        122
        +

      
        
        123
        +              {{- else if eq $op "-" -}}

      
        
        124
        +              <span class="diff-line diff-del" id="{{ $path }}-O{{ $o }}">

      
        
        125
        +                <a class="line-number" href="#{{ $path }}-O{{ $o }}">{{ $o }}</a>

      
        
        126
        +                <span class="line-number"></span>

      
        
        127
        +                <span>{{ .String }}</span>

      
        
        128
        +              </span>

      
        
        129
        +              {{- $o = inc64 $o -}}

      
        
        130
        +

      
        
        131
        +              {{- else -}}

      
        
        132
        +              <span class="diff-line diff-noop" id="{{ $path }}-L{{ $o }}">

      
        
        133
        +                <a class="line-number" href="#{{ $path }}-L{{ $o }}">{{ $o }}</a>

      
        
        134
        +                <a class="line-number" href="#{{ $path }}-L{{ $o }}">{{ $n }}</a>

      
        
        135
        +                <span>{{ .String }}</span>

      
        
        136
        +              </span>

      
        
        137
        +              {{- $o = inc64 $o -}}

      
        
        138
        +              {{- $n = inc64 $n -}}

      
        114
        139
                       {{- end -}}

      
        
        140
        +

      
        115
        141
                       {{- end -}}

      
        116
        142
                       {{- end -}}

      
        117
        143
                     </pre>