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