diff options
author | Marius Peter <marius.peter@tutanota.com> | 2025-06-09 18:09:55 +0200 |
---|---|---|
committer | Marius Peter <marius.peter@tutanota.com> | 2025-06-09 18:09:55 +0200 |
commit | afe686e6bab1d4b6a85b1f5c610f57fcf1a72d74 (patch) | |
tree | dd86520bff4d24522a750c8dfee04a1b59ec728f | |
parent | ef89b655e942603605d0d94837ba2407f86352bf (diff) |
Implement blob display.
-rw-r--r-- | lib/static/styles.css | 50 | ||||
-rw-r--r-- | lib/views.ml | 16 |
2 files changed, 61 insertions, 5 deletions
diff --git a/lib/static/styles.css b/lib/static/styles.css index f72a473..ad38179 100644 --- a/lib/static/styles.css +++ b/lib/static/styles.css @@ -71,12 +71,56 @@ div#main a:hover { } h1 { - position: sticky; - top: 0; - background: inherit; + /* position: sticky; */ + /* top: 0; */ + /* background: inherit; */ padding: 0.5em 0; } .commit-hash { font-family: monospace; } + +#blob { + display: grid; + column-gap: 1.5em; + grid-template-columns: 3em auto; + font-family: monospace; +} + +#blob a.line-anchor { + color: grey; + text-decoration: none; + text-align: right; +} + +#blob a.line-anchor:target { + color: white; + background-color: grey; +} + +#blob a.line-anchor:hover { + color: skyblue; + background-color: inherit; + text-decoration: none; +} + +#blob span.line { + white-space: preserve-spaces; +} + +footer { + margin-top: 1em; + text-align: center; +} + +@media (max-width: 400px) { + body { + padding: 0; + } + + #blob { + column-gap: 1em; + grid-template-columns: max-content auto; + } +} diff --git a/lib/views.ml b/lib/views.ml index e1056b7..029e311 100644 --- a/lib/views.ml +++ b/lib/views.ml @@ -199,10 +199,22 @@ module Repo = struct content; } - let blob repo blob = + let file repo blob = let title = Printf.sprintf "%s" repo in + let to_numbered_line number line = + let n = number + 1 in + HTML. + [ + a [ id "%d" n; class_ "line-anchor"; href "#%d" n ] [ txt "%d" n ]; + span [ class_ "line" ] [ txt "\t%s\n" line ]; + ] + in + let formatted_blob = + String.split_on_char '\n' blob.content + |> List.mapi to_numbered_line |> List.flatten + in let content = - HTML.[ h3 [] [ txt "Blob" ]; p [] [ txt "%s" blob.content ] ] + HTML.[ h3 [] [ txt "File" ]; div [ id "blob" ] formatted_blob ] in Page.render ~page_title:(page_title repo) { |