forked from
tangled.org/core
Monorepo for Tangled
1{{ define "layouts/base" }}
2 <!doctype html>
3 <html lang="en" class="dark:bg-gray-900">
4 <head>
5 <meta charset="UTF-8" />
6 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
7 <meta name="description" content="The next-generation social coding platform."/>
8 <meta name="htmx-config" content='{"includeIndicatorStyles": false}'>
9
10 <!-- Open Graph defaults -->
11 <meta property="og:site_name" content="Tangled" />
12 <meta property="og:type" content="website" />
13 <meta property="og:locale" content="en_US" />
14
15
16 <!-- Keywords -->
17 <meta name="keywords" content="git, code collaboration, AT Protocol, open source, version control, social coding, code hosting" />
18
19 <!-- Author and copyright -->
20 <meta name="author" content="Tangled" />
21 <meta name="robots" content="index, follow" />
22
23 <script defer src="/static/htmx.min.js"></script>
24 <script defer src="/static/htmx-ext-ws.min.js"></script>
25 <script defer src="/static/actor-typeahead.js" type="module"></script>
26
27 <link rel="icon" href="/static/logos/dolly.ico" sizes="48x48"/>
28 <link rel="icon" href="/static/logos/dolly.svg" sizes="any" type="image/svg+xml"/>
29 <link rel="apple-touch-icon" href="/static/logos/dolly.png"/>
30
31 <!-- preconnect to image cdn -->
32 <link rel="preconnect" href="https://avatar.tangled.sh" />
33 <link rel="preconnect" href="https://camo.tangled.sh" />
34
35 <!-- pwa manifest -->
36 <link rel="manifest" href="/pwa-manifest.json" />
37
38 <!-- preload main font -->
39 <link rel="preload" href="/static/fonts/InterVariable.woff2" as="font" type="font/woff2" crossorigin />
40
41 <link rel="stylesheet" href="/static/tw.css?{{ cssContentHash }}" type="text/css" />
42
43 <script>
44 document.addEventListener('DOMContentLoaded', () => {
45 const nodes = document.querySelectorAll('pre.mermaid');
46 if (!nodes.length) return;
47 const script = document.createElement('script');
48 script.src = '/static/mermaid.min.js';
49 script.onload = async () => {
50 mermaid.initialize({
51 startOnLoad: true,
52 theme: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'default',
53 });
54 await mermaid.run({ nodes });
55 };
56 document.head.appendChild(script);
57 });
58 </script>
59 <title>{{ block "title" . }}{{ end }}</title>
60 {{ block "extrameta" . }}{{ end }}
61 </head>
62 <body class="min-h-screen flex flex-col gap-4 bg-slate-100 dark:bg-gray-900 dark:text-white transition-colors duration-200 {{ block "bodyClasses" . }} {{ end }}">
63 {{ block "topbarLayout" . }}
64 <header class="w-full col-span-full md:col-span-1 md:col-start-2 drop-shadow-sm dark:text-white bg-white dark:bg-gray-800" style="z-index: 20;">
65
66 {{ if .LoggedInUser }}
67 <div id="upgrade-banner"
68 hx-get="/upgradeBanner"
69 hx-trigger="load"
70 hx-swap="innerHTML">
71 </div>
72 {{ end }}
73 {{ template "layouts/fragments/topbar" . }}
74 </header>
75 {{ end }}
76
77 {{ block "mainLayout" . }}
78 <div class="flex-grow">
79 <div class="max-w-screen-lg mx-auto flex flex-col gap-4">
80 {{ block "contentLayout" . }}
81 <main>
82 {{ block "content" . }}{{ end }}
83 </main>
84 {{ end }}
85
86 {{ block "contentAfterLayout" . }}
87 <main>
88 {{ block "contentAfter" . }}{{ end }}
89 </main>
90 {{ end }}
91 </div>
92 </div>
93 {{ end }}
94
95 {{ block "footerLayout" . }}
96 <footer class="mt-12">
97 {{ template "layouts/fragments/footer" . }}
98 </footer>
99 {{ end }}
100 </body>
101 </html>
102{{ end }}