cdn/pages.templ

106 lines
4.0 KiB
Plaintext

package main
import "io/fs"
import "strings"
import "github.com/dustin/go-humanize"
var siteName = "FollieCDN"
templ pageTemplate(path string) {
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>{ siteName }</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
if path != "" {
<meta name="description" content={ siteName + " | /" + path }/>
} else {
<meta name="description" content={ siteName }/>
}
<link rel="icon" type="image/x-icon" href="/favicon.ico"/>
<link rel="canonical" href={ "https://cdn.folliehiyuki.com/" + path }/>
<link rel="stylesheet" href="/styles/normalize.css" integrity="sha256-Atknw9eu6T9FV6v//wFp8skKdJ5JcAqANQ1bPykR4go=" crossorigin="anonymous"/>
<link rel="stylesheet" href="/styles/self.css" integrity="sha256-T3aZjYlhGVVQtRtuoRVDQryPntqVvabgIMEiW9z+Nww=" crossorigin="anonymous"/>
<link rel="stylesheet" href="/fonts/iosevka/iosevka-aile.css" integrity="sha256-20HRMpRlRW2+dk9R7asoOl5/z8Xyc2BbjeLZsButUww=" crossorigin="anonymous"/>
<link rel="stylesheet" href="/fonts/font-awesome/solid.css" integrity="sha256-xuw8YIIudFiLKxnOSDufxt0N2CFAJQXsK2lnTUPbofE=" crossorigin="anonymous"/>
<link rel="preload" href="/fonts/iosevka/iosevka-aile-bold.woff2" as="font" type="font/woff2" integrity="sha256-DuGKe2X6v5c7zEUTPac4E0YsDAgVwnQIjGvlFnpjf9k=" crossorigin="anonymous"/>
<link rel="preload" href="/fonts/iosevka/iosevka-aile-bolditalic.woff2" as="font" type="font/woff2" integrity="sha256-bUL/H2s3kec8IKscAruHp8INfSltr0lxJqtbrGPkOyc=" crossorigin="anonymous"/>
<link rel="preload" href="/fonts/iosevka/iosevka-aile-italic.woff2" as="font" type="font/woff2" integrity="sha256-5FhfAR7p4YDsdyaqORi+i8aoykqOd1xVvV230JbNfto=" crossorigin="anonymous"/>
<link rel="preload" href="/fonts/iosevka/iosevka-aile-regular.woff2" as="font" type="font/woff2" integrity="sha256-3uZFySN5a/MXFQxgc3ueGKX2BJOso6kQDLZE2q3zQpY=" crossorigin="anonymous"/>
</head>
<body>
<main>
{ children... }
</main>
</body>
</html>
}
templ indexPage() {
@pageTemplate("") {
<h1>folliehiyuki's personal web assets</h1>
<p>
Hi! Welcome to my <em>"Content Delivery Network"</em> <s>freeloading</s> running on Cloudflare. The files served here are used to power my websites, including my
<a href="https://www.folliehiyuki.com" target="_blank" rel="author noopener external">personal blog</a> and
<a href="https://docs.folliehiyuki.com" target="_blank" rel="noopener external">handbook</a>. The source code is available to see on
<a href="https://gitlab.com/folliehiyuki/cdn" target="_blank" rel="noreferrer nofollow external">GitLab</a>.
</p>
<h2>Packages</h2>
<p>
<span class="fa-solid">&#xf031</span> <a href="/fonts/">fonts</a> - Various 3rd-party fonts I use everywhere
<br/>
<span class="fa-solid">&#xf53f</span> <a href="/styles/">styles</a> - Some minimal, opinionated CSS settings
<br/>
</p>
}
}
templ listingPage(path string, entries []fs.DirEntry) {
@pageTemplate(path) {
<h1>Directory listing</h1>
<h2>
<a href="/" class="fa-solid">&#xf015</a>
@splitPathIntoLinks(strings.Split(path, "/"))
</h2>
<div>
<!-- List everything except index.html files -->
for _, entry := range entries {
if entry.Name() != "index.html" {
<div class="entryRow">
<div>
<span class="fa-solid">
if entry.IsDir() {
&#xf07b
} else {
&#xf15c&nbsp;
}
</span>
<a href={ templ.URL("./" + entry.Name()) }>
if entry.IsDir() {
{ entry.Name() + "/" }
} else {
{ entry.Name() }
}
</a>
</div>
<div>
{ func(e fs.DirEntry) string {
info, _ := e.Info()
return humanize.Bytes(uint64(info.Size()))
}(entry) }
</div>
</div>
}
}
</div>
}
}
templ splitPathIntoLinks(pathArr []string) {
for index, elem := range pathArr {
{ " " }<span class="fa-solid">&#xf054</span>{ " " }
<a href={ templ.URL("/" + strings.Join(pathArr[:(index+1)], "/")) }>{ elem }</a>
}
}