1{{ define "title" }}{{ .String.Filename }} · by {{ didOrHandle .Owner.DID.String .Owner.Handle.String }}{{ end }}
2
3{{ define "extrameta" }}
4 {{ $ownerId := didOrHandle .Owner.DID.String .Owner.Handle.String }}
5 <meta property="og:title" content="{{ .String.Filename }} · by {{ $ownerId }}" />
6 <meta property="og:type" content="object" />
7 <meta property="og:url" content="https://tangled.sh/strings/{{ $ownerId }}/{{ .String.Rkey }}" />
8 <meta property="og:description" content="{{ .String.Description }}" />
9{{ end }}
10
11{{ define "topbar" }}
12 {{ template "layouts/topbar" $ }}
13{{ end }}
14
15{{ define "content" }}
16{{ $ownerId := didOrHandle .Owner.DID.String .Owner.Handle.String }}
17 <section id="string-header" class="mb-4 py-2 px-6 dark:text-white">
18 <div class="text-lg flex items-center justify-between">
19 <div>
20 <a href="/strings/{{ $ownerId }}">{{ $ownerId }}</a>
21 <span class="select-none">/</span>
22 <a href="/strings/{{ $ownerId }}/{{ .String.Rkey }}" class="font-bold">{{ .String.Filename }}</a>
23 </div>
24 {{ if and .LoggedInUser (eq .LoggedInUser.Did .String.Did) }}
25 <div class="flex gap-2 text-base">
26 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group"
27 hx-boost="true"
28 href="/strings/{{ .String.Did }}/{{ .String.Rkey }}/edit">
29 {{ i "pencil" "size-4" }}
30 <span class="hidden md:inline">edit</span>
31 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
32 </a>
33 <button
34 class="btn text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 gap-2 group p-2"
35 title="Delete string"
36 hx-delete="/strings/{{ .String.Did }}/{{ .String.Rkey }}/"
37 hx-swap="none"
38 hx-confirm="Are you sure you want to delete the gist `{{ .String.Filename }}`?"
39 >
40 {{ i "trash-2" "size-4" }}
41 <span class="hidden md:inline">delete</span>
42 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
43 </button>
44 </div>
45 {{ end }}
46 </div>
47 <span>
48 {{ with .String.Description }}
49 {{ . }}
50 {{ end }}
51 </span>
52 </section>
53 <section class="bg-white dark:bg-gray-800 px-6 py-4 rounded relative w-full dark:text-white">
54 <div class="flex justify-between items-center text-gray-500 dark:text-gray-400 text-sm md:text-base pb-2 mb-3 text-base border-b border-gray-200 dark:border-gray-700">
55 <span>
56 {{ .String.Filename }}
57 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span>
58 <span>
59 {{ with .String.Edited }}
60 edited {{ template "repo/fragments/shortTimeAgo" . }}
61 {{ else }}
62 {{ template "repo/fragments/shortTimeAgo" .String.Created }}
63 {{ end }}
64 </span>
65 </span>
66 <div>
67 <span>{{ .Stats.LineCount }} lines</span>
68 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span>
69 <span>{{ byteFmt .Stats.ByteCount }}</span>
70 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span>
71 <a href="/strings/{{ $ownerId }}/{{ .String.Rkey }}/raw">view raw</a>
72 {{ if .RenderToggle }}
73 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span>
74 <a href="?code={{ .ShowRendered }}" hx-boost="true">
75 view {{ if .ShowRendered }}code{{ else }}rendered{{ end }}
76 </a>
77 {{ end }}
78 </div>
79 </div>
80 <div class="overflow-auto relative">
81 {{ if .ShowRendered }}
82 <div id="blob-contents" class="prose dark:prose-invert">{{ .RenderedContents }}</div>
83 {{ else }}
84 <div id="blob-contents" class="whitespace-pre peer-target:bg-yellow-200 dark:peer-target:bg-yellow-900">{{ .String.Contents | escapeHtml }}</div>
85 {{ end }}
86 </div>
87 </section>
88{{ end }}