Monorepo for Tangled
at master 102 lines 4.3 kB view raw
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 }}