~jan0sch/smederee

Showing details for patch f2d8f59e480f913aea16b99dd94531e2be4388d4.
2023-02-15 (Wed), 7:03 PM - Jens Grassel - f2d8f59e480f913aea16b99dd94531e2be4388d4

VCS: Show linkable line numbers in the source file browser.

Summary of changes
3 files modified with 55 lines added and 8 lines removed
  • modules/hub/src/main/resources/assets/css/main.css with 34 added and 0 removed lines
  • modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala with 3 added and 3 removed lines
  • modules/hub/src/main/twirl/de/smederee/hub/views/showRepositoryFiles.scala.html with 18 added and 5 removed lines
diff -rN -u old-smederee/modules/hub/src/main/resources/assets/css/main.css new-smederee/modules/hub/src/main/resources/assets/css/main.css
--- old-smederee/modules/hub/src/main/resources/assets/css/main.css	2025-03-01 08:29:39.071502633 +0000
+++ new-smederee/modules/hub/src/main/resources/assets/css/main.css	2025-03-01 08:29:39.075502630 +0000
@@ -374,6 +374,40 @@
   padding: 0;
 }
 
+code.code-line {
+  white-space: pre-wrap;
+  word-break: break-all;
+  word-wrap: break-word;
+}
+
+tbody.repository-file-content {
+  color: var(--nord1);
+  background: var(--nord4) none repeat scroll 0% 0%;
+}
+
+td.code-line {
+  padding: 0.1em 1em;
+}
+
+td.code-line-number {
+  padding: 0.1em 0.25em;
+  text-align: right;
+}
+
+td.code-line-number a {
+  cursor: pointer;
+  text-decoration: none;
+}
+
+td.code-line-number a:hover {
+  cursor: pointer;
+  background: var(--nord6);
+}
+
+tr.code-line {
+  vertical-align: top;
+}
+
 .left-floated {
   float: left;
 }
diff -rN -u old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala
--- old-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala	2025-03-01 08:29:39.071502633 +0000
+++ new-smederee/modules/hub/src/main/scala/de/smederee/hub/VcsRepositoryRoutes.scala	2025-03-01 08:29:39.075502630 +0000
@@ -451,12 +451,12 @@
         case false =>
           if (actionBaseUri.path.toString.toLowerCase(java.util.Locale.ROOT).endsWith(".md"))
             Sync[F].delay(
-              MarkdownRenderer.renderRepositoryMarkdownFile(None)(content.mkString("\n")).some
+              List(MarkdownRenderer.renderRepositoryMarkdownFile(None)(content.mkString("\n")))
             )
           else
-            Sync[F].delay(content.mkString("\n").some)
+            Sync[F].delay(content.toList)
         case true =>
-          Sync[F].pure(None)
+          Sync[F].pure(List.empty)
       }
       resp <-
         repo match {
diff -rN -u old-smederee/modules/hub/src/main/twirl/de/smederee/hub/views/showRepositoryFiles.scala.html new-smederee/modules/hub/src/main/twirl/de/smederee/hub/views/showRepositoryFiles.scala.html
--- old-smederee/modules/hub/src/main/twirl/de/smederee/hub/views/showRepositoryFiles.scala.html	2025-03-01 08:29:39.071502633 +0000
+++ new-smederee/modules/hub/src/main/twirl/de/smederee/hub/views/showRepositoryFiles.scala.html	2025-03-01 08:29:39.075502630 +0000
@@ -5,7 +5,7 @@
   goBackUri: Option[Uri] = None,
   title: Option[String] = None,
   user: Option[Account]
-)(fileContent: Option[String],
+)(fileContent: List[String],
   listing: IndexedSeq[(os.RelPath, os.StatInfo)],
   repositoryBaseUri: Uri,
   vcsRepository: VcsRepository
@@ -61,12 +61,25 @@
             @for(link <- goBackUri) {
               <a href="@link">@icon(baseUri)("chevron-up")</a>&nbsp;<a href="@link">..</a>
             }
-            @for(content <- fileContent) {
-              @if(actionBaseUri.path.toString.toLowerCase(java.util.Locale.ROOT).endsWith(".md")) {
+            @if(actionBaseUri.path.toString.toLowerCase(java.util.Locale.ROOT).endsWith(".md")) {
+              @for(content <- fileContent) {
                 @Html(content)
-              } else {
-                <pre class="repository-file-content"><code>@content</code></pre>
               }
+            } else {
+              <table class="pure-table">
+                <tbody class="repository-file-content">
+                @for(tuple <- fileContent.zipWithIndex) {
+                  @defining(tuple._1) { content =>
+                    @defining(tuple._2) { lineNumber =>
+                      <tr class="code-line">
+                        <td class="code-line-number" id="L@lineNumber"><a href="#L@lineNumber">@lineNumber</a></td>
+                        <td class="code-line"><code class="code-line">@content</code></td>
+                      </tr>
+                  }
+                }
+              }
+                </tbody>
+              </table>
             }
           }
         </div>