caddy-git-server

Caddy module that provides a git server.

{{ define "page" }}
{{ $root := .Root }}
{{ $query := .Query }}
{{ $filename := .PageData.FileName }}
<div class="px-4 sm:px-6 lg:px-8">
  <div class="mt-6 flow-root">
    <div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
      <div class="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8">
        <div class="overflow-hidden shadow-sm ring-1 ring-black/5 sm:rounded-lg divide-y divide-gray-300">
            <div class="flex justify-between py-3.5 sm:px-2 bg-gray-50">
              <!-- <h1 class="py-3.5 px-4 sm:px-6 text-left text-sm font-semibold text-gray-900">File Browser</h1> -->
              <nav class="flex" aria-label="Breadcrumb">
                <ol role="list" class="flex items-center space-x-4">
                    <li>
                    <div>
                        <a href="/{{.Root}}/tree{{with $query}}?{{.}}{{end}}" class="ml-4 text-sm font-medium text-gray-500 hover:text-gray-700">
                        <span class="">{{ .Name }}</span>
                        </a>
                    </div>
                    </li>

                    {{ range (split (dir .PageData.FileName) "/") }}
                    {{ if ne . "."}}
                    <li>
                    <div class="flex items-center">
                        <svg class="size-5 shrink-0 text-gray-300" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
                        <path d="M5.555 17.776l8-16 .894.448-8 16-.894-.448z" />
                        </svg>
                        <a href="/{{$root}}/tree/{{index (split $filename .) 0 }}{{.}}{{with $query}}?{{.}}{{end}}" class="ml-4 text-sm font-medium text-gray-500 hover:text-gray-700">{{.}}</a>
                    </div>
                    </li>
                    {{ end }}
                    {{ end }}

                    <li>
                    <div class="flex items-center">
                        <svg class="size-5 shrink-0 text-gray-300" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
                        <path d="M5.555 17.776l8-16 .894.448-8 16-.894-.448z" />
                        </svg>
                        <p class="ml-4 text-sm font-medium text-gray-900 cursor-default" aria-current="page">{{ base .PageData.FileName }}</p>
                    </div>
                    </li>
                </ol>
              </nav>
              <div class="">
                <a href="/{{.Root}}/raw/{{.PageData.FileName}}{{with $query}}?{{.}}{{end}}" class="mr-4 text-sm font-medium text-gray-500 hover:text-gray-700">
                  View Raw
                </a>
              </div>
            </div>
            <div class="bg-white py-3.5 px-4 sm:px-6">
              {{ if (eq .PageData.FileType "image") }}
                <img src="{{string .PageData.Blob}}">
              {{ else if (eq .PageData.FileType "application") }}
                <a class="font-mono" href="{{string .PageData.Blob}}">View or download this file raw</a>
              {{ else if (eq .PageData.FileType "markdown") }}
                <link rel="stylesheet" href="/assets/markdown.css">
                <div class="markdown">
                {{ markdown .PageData.Blob }}
                </div>
              {{ else if (eq .PageData.FileType "pdf") }}
              <!-- 
              h-screen
              h-dvh
              h-lvh
              h-svh


               -->
                <div id="pdf-viewer" class="h-dvh"></div>

                <script type="module">
                  import EmbedPDF from 'https://cdn.jsdelivr.net/npm/@embedpdf/snippet@2/dist/embedpdf.js';
                
                  EmbedPDF.init({
                    type: 'container',
                    target: document.getElementById('pdf-viewer'),
                    src: '{{ string .PageData.Blob }}',
                    theme: { preference: 'light' }
                  });
                </script>
              {{ else if (eq .PageData.FileType "kicad") }}
                <script type="module" src="/assets/kicanvas.js"></script>
                <kicanvas-embed
                    src="{{ string .PageData.Blob }}{{with $query}}?{{.}}{{end}}"
                    controls="full"
                    controlslist="nodownload">
                </kicanvas-embed>
              {{ else if (eq .PageData.FileType "kicad_pro") }}
                <script type="module" src="/assets/kicanvas.js"></script>
                <kicanvas-embed
                  controls="full"
                  controlslist="nodownload">
                  <kicanvas-source src="{{ string .PageData.Blob }}sch{{with $query}}?{{.}}{{end}}"></kicanvas-source>
                  <kicanvas-source src="{{ string .PageData.Blob }}pcb{{with $query}}?{{.}}{{end}}"></kicanvas-source>
                </kicanvas-embed>
              {{ else }}
                <!-- <p class="text-sm font-mono whitespace-pre overflow-x-auto">{{string .PageData.Blob}}</p> -->
                <!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/default.min.css"> -->
                <link rel="stylesheet" href="/assets/highlight/default.min.css">
                <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js"></script> -->
                 <script src="/assets/highlight/highlight.min.js"></script>

                <!-- and it's easy to individually load additional languages -->
                <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/go.min.js"></script> -->

                <script>hljs.highlightAll();</script>
                 <div class="overflow-hidden">
                   <pre><code class="text-sm overflow-x-hidden">{{ string .PageData.Blob }}</code></pre>
                 </div>
              {{ end }}
            </div>
        </div>
      </div>
    </div>
  </div>
</div>


{{end}}