import kgva site
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
{{ define "bodyclass" }}page-404{{ end }}
|
||||
{{ define "main" }}
|
||||
<div class="tui">
|
||||
<p class="tui__cmd"><span class="tui__sym">$</span> cd <span class="err404">.</span></p>
|
||||
<p class="tui__total">cd: no such file or directory: <span class="err404">.</span></p>
|
||||
<p>error 404 — nothing lives here.</p>
|
||||
<p><a href="{{ "/" | relURL }}">cd ~</a></p>
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var p = (location.pathname || "/").replace(/\/$/, "") || "/";
|
||||
var n = document.querySelectorAll(".err404");
|
||||
for (var i = 0; i < n.length; i++) n[i].textContent = p;
|
||||
})();
|
||||
</script>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,27 @@
|
||||
{{ define "bodyclass" }}page-about{{ end }}
|
||||
{{ define "main" }}
|
||||
{{ $cv := .Site.GetPage "/cv" }}
|
||||
<div class="tui tui--files filebrowser">
|
||||
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
|
||||
<p class="tui__cmd tui__total">total {{ if $cv }}2{{ else }}1{{ end }}</p>
|
||||
<ul class="tui__ls">
|
||||
<li><a href="{{ "/" | relURL }}" data-name="..">
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
|
||||
</a></li>
|
||||
<li><a data-name="info.md" data-text="info.md" class="is-selected">
|
||||
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">info.md</span>
|
||||
</a></li>
|
||||
{{ if $cv }}
|
||||
<li><a data-name="cv.md" data-text="cv.md">
|
||||
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">cv.md</span>
|
||||
</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
|
||||
<figure class="tui__preview">
|
||||
<div class="tui__text" data-text="info.md">{{ .Content }}</div>
|
||||
{{ if $cv }}<div class="tui__text" data-text="cv.md" hidden>{{ $cv.Content }}</div>{{ end }}
|
||||
<figcaption class="tui__status">info.md</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,20 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ .Site.Language.Lang | default "en" }}" dir="ltr">
|
||||
{{ partial "head.html" . }}
|
||||
<body class="{{ block "bodyclass" . }}{{ end }}">
|
||||
<div id="boot" aria-hidden="true"><pre class="boot__log"></pre></div>
|
||||
<a href="#main-content" class="skip-link">Skip to content</a>
|
||||
{{ partial "header.html" . }}
|
||||
<main id="main-content" role="main">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
{{ partial "footer.html" . }}
|
||||
|
||||
<script src="{{ "js/cursor.js" | relURL }}" defer></script>
|
||||
<script src="{{ "js/shell.js" | relURL }}" defer></script>
|
||||
<script src="{{ "js/filebrowser.js" | relURL }}" defer></script>
|
||||
<script src="{{ "js/nav.js" | relURL }}" defer></script>
|
||||
<script src="{{ "js/boot.js" | relURL }}" defer></script>
|
||||
<script>document.addEventListener('contextmenu',function(e){e.preventDefault();});</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,30 @@
|
||||
{{ define "bodyclass" }}page-legal{{ end }}
|
||||
{{ define "main" }}
|
||||
{{ $files := slice
|
||||
(.Site.GetPage "/legal/responsible")
|
||||
(.Site.GetPage "/legal/disclaimer")
|
||||
(.Site.GetPage "/legal/privacy")
|
||||
(.Site.GetPage "/legal/licences") }}
|
||||
{{ $names := slice "responsible.md" "disclaimer.md" "privacy.md" "licences.md" }}
|
||||
<div class="tui tui--files filebrowser">
|
||||
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
|
||||
<p class="tui__cmd tui__total">total {{ len $files }}</p>
|
||||
<ul class="tui__ls">
|
||||
<li><a href="{{ "/" | relURL }}" data-name="..">
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
|
||||
</a></li>
|
||||
{{ range $i, $p := $files }}{{ if $p }}
|
||||
<li><a data-name="{{ index $names $i }}" data-text="{{ index $names $i }}"{{ if eq $i 0 }} class="is-selected"{{ end }}>
|
||||
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">{{ index $names $i }}</span>
|
||||
</a></li>
|
||||
{{ end }}{{ end }}
|
||||
</ul>
|
||||
|
||||
<figure class="tui__preview">
|
||||
{{ range $i, $p := $files }}{{ if $p }}
|
||||
<div class="tui__text" data-text="{{ index $names $i }}"{{ if ne $i 0 }} hidden{{ end }}>{{ $p.Content }}</div>
|
||||
{{ end }}{{ end }}
|
||||
<figcaption class="tui__status">responsible.md</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,7 @@
|
||||
{{ define "main" }}
|
||||
{{ if .Params.toc }}
|
||||
<nav class="toc"><strong>TABLE OF CONTENTS</strong><div class="toc-content">{{ .TableOfContents }}</div></nav>
|
||||
{{ end }}
|
||||
{{ .Content }}
|
||||
<div class="terminal-nav"><div class="back-nav"><a href="{{ "/" | relURL }}" class="back-link">../</a></div></div>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,18 @@
|
||||
{{ define "bodyclass" }}page-portfolio{{ end }}
|
||||
{{ define "main" }}
|
||||
{{ $up := "/" }}{{ if eq .Kind "term" }}{{ $up = "/portfolio/" }}{{ end }}
|
||||
<div class="tui tui--files filebrowser">
|
||||
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
|
||||
<p class="tui__cmd tui__total">total {{ len .Pages }}</p>
|
||||
<ul class="tui__ls">
|
||||
<li><a href="{{ $up | relURL }}" data-name="..">
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
|
||||
</a></li>
|
||||
{{ range .Pages }}
|
||||
<li><a href="{{ .RelPermalink }}" data-name="{{ .LinkTitle }}">
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">{{ .LinkTitle }}/</span>
|
||||
</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,8 @@
|
||||
{{ define "bodyclass" }}home{{ end }}
|
||||
{{ define "main" }}
|
||||
{{ with .Params.heroImage }}
|
||||
<figure class="hero__img">
|
||||
<img src="{{ . | relURL }}" alt="" width="1200" height="1504" fetchpriority="high">
|
||||
</figure>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
@@ -0,0 +1,5 @@
|
||||
<footer role="contentinfo">
|
||||
<p>© {{ now.Year }} karimgabrielevarano.xyz</p>
|
||||
<p><a href="{{ "/colophon/" | relURL }}" data-name="colophon">colophon</a> · <a href="{{ "/legal-notice/" | relURL }}" data-name="legal-notice">legal notice</a></p>
|
||||
<a href="{{ "/cv/" | relURL }}" data-name="cv" hidden>cv</a>
|
||||
</footer>
|
||||
@@ -0,0 +1,60 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta name="theme-color" content="#111111">
|
||||
<script>try{if(localStorage.getItem('kgv_theme')==='dark')document.documentElement.classList.add('dark');}catch(e){}</script>
|
||||
<script>try{if(!sessionStorage.getItem('kgv_booted')){document.documentElement.classList.add('booting');setTimeout(function(){document.documentElement.classList.remove('booting');},3000);}}catch(e){}</script>
|
||||
|
||||
{{ $isHome := .IsHome }}
|
||||
{{ $desc := .Site.Params.description }}{{ with .Description }}{{ $desc = . }}{{ end }}
|
||||
<title>{{ if $isHome }}{{ .Site.Title }} — {{ .Site.Params.description }}{{ else }}{{ .Title }} — {{ .Site.Title }}{{ end }}</title>
|
||||
<meta name="description" content="{{ $desc }}">
|
||||
<meta name="author" content="{{ .Site.Params.author }}">
|
||||
<link rel="canonical" href="{{ .Permalink }}">
|
||||
|
||||
{{/* social card image: project thumbnail, else home hero, else site default */}}
|
||||
{{ $ogimg := .Site.Params.ogImage }}
|
||||
{{ with .Params.heroImage }}{{ $ogimg = . }}{{ end }}
|
||||
{{ with .Params.thumbnail }}{{ $ogimg = . }}{{ end }}
|
||||
{{ $ogabs := "" }}{{ with $ogimg }}{{ $ogabs = . | absURL }}{{ end }}
|
||||
|
||||
<meta property="og:site_name" content="{{ .Site.Title }}">
|
||||
<meta property="og:title" content="{{ if $isHome }}{{ .Site.Title }}{{ else }}{{ .Title }}{{ end }}">
|
||||
<meta property="og:description" content="{{ $desc }}">
|
||||
<meta property="og:type" content="{{ if eq .Section "portfolio" }}article{{ else }}website{{ end }}">
|
||||
<meta property="og:url" content="{{ .Permalink }}">
|
||||
<meta property="og:locale" content="{{ .Site.Language.Lang | default "en" }}">
|
||||
{{ with $ogabs }}<meta property="og:image" content="{{ . }}">{{ end }}
|
||||
|
||||
<meta name="twitter:card" content="{{ if $ogabs }}summary_large_image{{ else }}summary{{ end }}">
|
||||
<meta name="twitter:title" content="{{ if $isHome }}{{ .Site.Title }}{{ else }}{{ .Title }}{{ end }}">
|
||||
<meta name="twitter:description" content="{{ $desc }}">
|
||||
{{ with $ogabs }}<meta name="twitter:image" content="{{ . }}">{{ end }}
|
||||
|
||||
<link rel="preload" as="font" type="font/woff2" href="{{ "fonts/iosevka-curly-slab-400.woff2" | relURL }}" crossorigin>
|
||||
|
||||
{{ $site := resources.Get "css/site.css" }}
|
||||
{{ $custom := resources.Get "css/custom.css" }}
|
||||
{{ $css := slice $site $custom | resources.Concat "css/bundle.css" | minify | fingerprint }}
|
||||
<link rel="stylesheet" href="{{ $css.RelPermalink }}">
|
||||
|
||||
<link rel="icon" href="{{ "favicon.svg" | relURL }}" type="image/svg+xml">
|
||||
<link rel="icon" href="{{ "favicon-32.png" | relURL }}" sizes="32x32" type="image/png">
|
||||
<link rel="apple-touch-icon" href="{{ "apple-touch-icon.png" | relURL }}">
|
||||
<link rel="mask-icon" href="{{ "favicon.svg" | relURL }}" color="#111111">
|
||||
|
||||
{{ if $isHome }}
|
||||
<script type="application/ld+json">
|
||||
{{ ( dict
|
||||
"@context" "https://schema.org"
|
||||
"@type" "Person"
|
||||
"name" .Site.Params.author
|
||||
"url" .Site.BaseURL
|
||||
"email" .Site.Params.email
|
||||
"jobTitle" "Architect"
|
||||
"address" ( dict "@type" "PostalAddress" "addressLocality" "Lucerne" "addressCountry" "CH" )
|
||||
) | jsonify | safeJS }}
|
||||
</script>
|
||||
{{ end }}
|
||||
</head>
|
||||
@@ -0,0 +1,21 @@
|
||||
<header role="banner">
|
||||
<div class="topbar" data-home="{{ "/" | relURL }}" data-info="{{ .Site.Params.description }}" data-email="{{ .Site.Params.email }}">
|
||||
<div class="prompt" aria-label="shell">
|
||||
<a class="prompt__seg prompt__user" href="{{ "/" | relURL }}">{{ .Site.Params.shellUser }}@{{ .Site.Params.shellHost }}</a><span class="prompt__path">:~{{ if not .IsHome }}{{ $rel := strings.TrimSuffix "/" .RelPermalink }}{{ $parts := after 1 (split $rel "/") }}{{ $last := sub (len $parts) 1 }}{{ $acc := "" }}{{ range $i, $seg := $parts }}{{ $acc = printf "%s/%s" $acc $seg }}{{ $disp := $seg }}{{ if and $.Params.dotfile (eq $i $last) }}{{ $disp = printf ".%s" $seg }}{{ end }}/<a class="prompt__seg" href="{{ (printf "%s/" $acc) | relURL }}">{{ $disp }}</a>{{ end }}{{ end }}$</span><span class="prompt__input" contenteditable="true" role="textbox" aria-label="type a command, then press enter" spellcheck="false"></span><span class="caret">_</span>
|
||||
</div>
|
||||
<p class="prompt__out" aria-live="polite"></p>
|
||||
<nav class="menu tui tui--files" aria-label="Main menu">
|
||||
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
|
||||
<ul class="tui__ls">
|
||||
{{ range .Site.Menus.main }}<li><a href="{{ .URL | relURL }}" data-name="{{ .Name | lower }}">
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">{{ .Name | lower }}/</span>
|
||||
</a></li>{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
{{ if eq .Section "portfolio" }}
|
||||
<nav class="routes" hidden aria-hidden="true">
|
||||
{{ range (where .Site.RegularPages "Section" "portfolio") }}<a href="{{ .RelPermalink }}" data-name="{{ .Slug }}"></a>{{ end }}
|
||||
</nav>
|
||||
{{ end }}
|
||||
</div>
|
||||
</header>
|
||||
@@ -0,0 +1,27 @@
|
||||
{{ define "bodyclass" }}page-portfolio{{ end }}
|
||||
{{ define "main" }}
|
||||
{{ $sorted := sort .Pages "Date" "desc" }}
|
||||
{{ $first := index $sorted 0 }}
|
||||
<div class="tui filebrowser">
|
||||
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
|
||||
<p class="tui__cmd tui__total">total {{ len $sorted }}</p>
|
||||
<ul class="tui__ls">
|
||||
<li><a href="{{ "/" | relURL }}" data-name="..">
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__date"></span><span class="tui__name">..</span>
|
||||
</a></li>
|
||||
{{ range $i, $p := $sorted }}
|
||||
<li><a href="{{ $p.RelPermalink }}"
|
||||
data-img="{{ with $p.Params.thumbnail }}{{ . | relURL }}{{ end }}"
|
||||
data-name="{{ $p.Slug }}"
|
||||
{{ if eq $i 0 }}class="is-selected"{{ end }}>
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__date">{{ $p.Date.Format "2006" }}</span><span class="tui__name">{{ $p.Slug }}/</span>
|
||||
</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
|
||||
<figure class="tui__preview">
|
||||
<img src="{{ $first.Params.thumbnail | relURL }}" alt="{{ $first.Slug }}">
|
||||
<figcaption class="tui__status">{{ $first.Slug }}/ {{ $first.Date.Format "2006" }}</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,63 @@
|
||||
{{ define "bodyclass" }}page-portfolio{{ end }}
|
||||
{{ define "main" }}
|
||||
{{ $hasText := ne (.RawContent | strings.TrimSpace) "" }}
|
||||
{{ $images := .Params.images }}
|
||||
|
||||
{{ with .Params.vimeo }}
|
||||
<div style="padding:56.25% 0 0;position:relative">
|
||||
<iframe src="https://player.vimeo.com/video/{{ . }}?badge=0&autopause=0&player_id=0&app_id=58479"
|
||||
loading="lazy" frameborder="0"
|
||||
allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share"
|
||||
referrerpolicy="strict-origin-when-cross-origin"
|
||||
style="position:absolute;top:0;left:0;width:100%;height:100%"
|
||||
title="{{ $.Title }}"></iframe>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ if or $images $hasText }}
|
||||
<div class="tui tui--files filebrowser">
|
||||
<p class="tui__cmd"><span class="tui__sym">$</span> ls</p>
|
||||
{{ $total := len $images }}{{ if $hasText }}{{ $total = add $total 1 }}{{ end }}
|
||||
<p class="tui__cmd tui__total">total {{ $total }}</p>
|
||||
<ul class="tui__ls">
|
||||
<li><a href="{{ "/portfolio/" | relURL }}" data-name="..">
|
||||
<span class="tui__perm">drwxr-xr-x</span><span class="tui__name">..</span>
|
||||
</a></li>
|
||||
{{ if $hasText }}
|
||||
<li><a data-name="info.md" data-text="info.md" class="is-selected">
|
||||
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">info.md</span>
|
||||
</a></li>
|
||||
{{ end }}
|
||||
{{ range $i, $im := $images }}
|
||||
<li><a data-img="{{ $im.src | relURL }}" data-name="{{ $im.name }}"{{ if and (not $hasText) (eq $i 0) }} class="is-selected"{{ end }}>
|
||||
<span class="tui__perm">-rw-r--r--</span><span class="tui__name">{{ $im.name }}</span>
|
||||
</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
|
||||
<figure class="tui__preview">
|
||||
{{ if $hasText }}<div class="tui__text" data-text="info.md">{{ .Content }}</div>{{ end }}
|
||||
<img{{ if $hasText }} hidden{{ end }} src="{{ with $images }}{{ (index . 0).src | relURL }}{{ end }}" alt="{{ .Title }}">
|
||||
<figcaption class="tui__status">{{ if $hasText }}info.md{{ else if $images }}{{ (index $images 0).name }}{{ end }}</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ with .Params.studies }}
|
||||
{{ $segs := after 2 (split . "/") }}
|
||||
{{ $taxos := slice "schools" "degrees" "semesters" }}
|
||||
{{ $last := sub (len $segs) 1 }}
|
||||
<p class="proj-path">/studies/{{ range $i, $seg := $segs }}{{ if $i }}/{{ end }}{{ $terms := $.GetTerms (index $taxos $i) }}{{ if $terms }}{{ $t := index $terms 0 }}<a class="proj-path__seg{{ if eq $i $last }} proj-path__seg--last{{ end }}" href="{{ $t.RelPermalink }}">{{ $seg }}</a>{{ else }}{{ $seg }}{{ end }}{{ end }}</p>
|
||||
{{ end }}
|
||||
|
||||
<div class="time"><time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006" }} </time></div>
|
||||
|
||||
{{ $list := sort (where .Site.RegularPages "Section" "portfolio") "Date" "desc" }}
|
||||
{{ $idx := -1 }}
|
||||
{{ range $i, $p := $list }}{{ if eq $p.RelPermalink $.RelPermalink }}{{ $idx = $i }}{{ end }}{{ end }}
|
||||
<nav class="proj-nav" aria-label="Project navigation">
|
||||
{{ $older := add $idx 1 }}{{ $newer := sub $idx 1 }}
|
||||
{{ if lt $older (len $list) }}<a href="{{ (index $list $older).RelPermalink }}" rel="prev" aria-label="older project">←</a>{{ end }}
|
||||
{{ if ge $newer 0 }}<a href="{{ (index $list $newer).RelPermalink }}" rel="next" aria-label="newer project">→</a>{{ end }}
|
||||
</nav>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,5 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /admin/
|
||||
|
||||
Sitemap: {{ "sitemap.xml" | absURL }}
|
||||
Reference in New Issue
Block a user