106 lines
4.0 KiB
Plaintext
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"></span> <a href="/fonts/">fonts</a> - Various 3rd-party fonts I use everywhere
|
|
<br/>
|
|
<span class="fa-solid"></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"></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() {
|
|

|
|
} else {
|
|

|
|
}
|
|
</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"></span>{ " " }
|
|
<a href={ templ.URL("/" + strings.Join(pathArr[:(index+1)], "/")) }>{ elem }</a>
|
|
}
|
|
}
|