first commit
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
{{- $u := urls.Parse .Destination -}}
|
||||
{{- $href := .Destination -}}
|
||||
{{- if and (not $u.IsAbs) (strings.HasPrefix .Destination "/") -}}
|
||||
{{- $href = relURL (strings.TrimPrefix "/" .Destination) -}}
|
||||
{{- end -}}
|
||||
<a href="{{ $href | safeURL }}"{{ with .Title }} title="{{ . }}"{{ end }}{{ if $u.IsAbs }} rel="noopener"{{ end }}>{{ .Text }}</a>
|
||||
{{- /* chomp */ -}}
|
||||
@@ -0,0 +1,25 @@
|
||||
{{/* Application directory grouped by category. Context: dict with "headingLevel". */}}
|
||||
{{ $apps := (site.GetPage "/apps").Pages }}
|
||||
{{ $h := .headingLevel | default 2 }}
|
||||
<div class="directory">
|
||||
{{ range site.Params.appGroups }}
|
||||
{{ $group := .name }}
|
||||
{{ $inGroup := where $apps "Params.category" $group }}
|
||||
{{ with $inGroup }}
|
||||
<section class="dir-group" id="{{ $group | anchorize }}">
|
||||
<header class="dir-group-head">
|
||||
<h{{ $h }}>{{ $group }}</h{{ $h }}>
|
||||
</header>
|
||||
<ul class="dir-list">
|
||||
{{ range .ByTitle }}
|
||||
<li class="dir-row">
|
||||
<a class="dir-name" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
||||
<span class="dir-desc">{{ .Params.tagline }}</span>
|
||||
{{ with .Params.replaces }}<span class="dir-replaces"><span class="visually-hidden">Use instead of </span>{{ range $i, $n := first 3 . }}{{ if $i }}<span class="sep">, </span>{{ end }}<s>{{ $n }}</s>{{ end }}</span>{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
@@ -0,0 +1,6 @@
|
||||
<footer class="site-footer">
|
||||
<div class="site-footer-inner">
|
||||
<p>Documentation for applications hosted by <a href="{{ site.Params.companyURL }}">{{ site.Params.company }}</a> on Federated Core. Each application runs on your own virtual machine.</p>
|
||||
<p>Application names and trademarks belong to their respective projects. Links to upstream documentation open the project's own website.</p>
|
||||
</div>
|
||||
</footer>
|
||||
@@ -0,0 +1,23 @@
|
||||
<header class="masthead">
|
||||
<div class="masthead-inner">
|
||||
<button class="nav-toggle" type="button" aria-controls="sidebar" aria-expanded="false">
|
||||
<span class="nav-toggle-bars" aria-hidden="true"></span><span class="visually-hidden">Menu</span>
|
||||
</button>
|
||||
<a class="brand" href="{{ "/" | relURL }}">
|
||||
{{ partial "mark.html" . }}
|
||||
<span class="brand-text">Federated Computer <span class="brand-sub">Docs</span></span>
|
||||
</a>
|
||||
<nav class="topnav" aria-label="Primary">
|
||||
{{ $current := . }}
|
||||
{{ range site.Menus.main }}
|
||||
<a href="{{ .URL }}"{{ if or ($current.IsMenuCurrent "main" .) ($current.HasMenuCurrent "main" .) (and .Page ($current.IsDescendant .Page)) }} aria-current="true"{{ end }}>{{ .Name }}</a>
|
||||
{{ end }}
|
||||
</nav>
|
||||
<div class="search" role="search">
|
||||
<label class="visually-hidden" for="search-input">Search the documentation</label>
|
||||
<input id="search-input" type="search" placeholder="Search apps and guides" autocomplete="off" spellcheck="false" aria-controls="search-results" aria-expanded="false">
|
||||
<kbd class="search-key" aria-hidden="true">/</kbd>
|
||||
<ol id="search-results" class="search-results" hidden></ol>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
@@ -0,0 +1 @@
|
||||
<img class="mark" src="{{ "clifford.svg" | relURL }}" width="32" height="28" alt="">
|
||||
@@ -0,0 +1,15 @@
|
||||
{{ $pages := slice }}
|
||||
{{ if eq .Section "apps" }}
|
||||
{{ $pages = (site.GetPage "/apps").Pages.ByTitle }}
|
||||
{{ else }}
|
||||
{{ with .CurrentSection }}{{ $pages = .Pages.ByWeight }}{{ end }}
|
||||
{{ end }}
|
||||
{{ if and $pages (not .IsSection) }}
|
||||
{{ $prev := $pages.Prev . }}
|
||||
{{ $next := $pages.Next . }}
|
||||
{{/* Pages.Next/Prev are reversed relative to reading order */}}
|
||||
<nav class="pager" aria-label="Previous and next">
|
||||
{{ with $next }}<a class="pager-prev" href="{{ .RelPermalink }}"><span>Previous</span>{{ .LinkTitle }}</a>{{ end }}
|
||||
{{ with $prev }}<a class="pager-next" href="{{ .RelPermalink }}"><span>Next</span>{{ .LinkTitle }}</a>{{ end }}
|
||||
</nav>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,6 @@
|
||||
{{/* Renders the list of proprietary services an app can replace, struck through. */}}
|
||||
{{ with .Params.replaces }}
|
||||
<span class="replaces">
|
||||
{{ range $i, $name := . }}{{ if $i }}<span class="sep">, </span>{{ end }}<s>{{ $name }}</s>{{ end }}
|
||||
</span>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,31 @@
|
||||
{{ $current := . }}
|
||||
<nav id="sidebar" class="sidebar" aria-label="Documentation">
|
||||
{{ with site.GetPage "/getting-started" }}
|
||||
<div class="side-group">
|
||||
<a class="side-heading{{ if eq $current . }} is-current{{ end }}" href="{{ .RelPermalink }}"{{ if eq $current . }} aria-current="page"{{ end }}>{{ .Title }}</a>
|
||||
<ul>
|
||||
{{ range .Pages.ByWeight }}
|
||||
<li><a href="{{ .RelPermalink }}"{{ if eq $current . }} aria-current="page"{{ end }}>{{ .LinkTitle }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ with site.GetPage "/apps" }}
|
||||
{{ $apps := .Pages }}
|
||||
<div class="side-group">
|
||||
<a class="side-heading{{ if eq $current . }} is-current{{ end }}" href="{{ .RelPermalink }}"{{ if eq $current . }} aria-current="page"{{ end }}>Applications</a>
|
||||
{{ range site.Params.appGroups }}
|
||||
{{ $group := .name }}
|
||||
{{ $inGroup := where $apps "Params.category" $group }}
|
||||
{{ with $inGroup }}
|
||||
<p class="side-sub">{{ $group }}</p>
|
||||
<ul>
|
||||
{{ range .ByTitle }}
|
||||
<li><a href="{{ .RelPermalink }}"{{ if eq $current . }} aria-current="page"{{ end }}>{{ .LinkTitle }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</nav>
|
||||
@@ -0,0 +1,5 @@
|
||||
<aside class="callout callout-enterprise" role="note">
|
||||
<p class="callout-title">{{ .Get "title" | default "Enterprise plans only" }}</p>
|
||||
{{ .Inner | .Page.RenderString (dict "display" "block") }}
|
||||
<p class="callout-foot">Command-line access is available only when Federated Core was installed with the Enterprise option. <a href="{{ "getting-started/command-line-access/" | relURL }}">What this means</a></p>
|
||||
</aside>
|
||||
@@ -0,0 +1,4 @@
|
||||
<aside class="callout callout-note" role="note">
|
||||
<p class="callout-title">{{ .Get "title" | default "Note" }}</p>
|
||||
{{ .Inner | .Page.RenderString (dict "display" "block") }}
|
||||
</aside>
|
||||
@@ -0,0 +1 @@
|
||||
{{- /* Editorial marker. Renders nothing. Usage: {{< review "what to check" >}}. Find all with: grep -rn '< review' content/ */ -}}
|
||||
@@ -0,0 +1,15 @@
|
||||
{{- /* Usage: {{< screenshot src="app/name.png" alt="…" caption="…" >}}. Images live in assets/screenshots/. Add demo="true" for screenshots taken on an upstream public demo rather than a Federated Core server. */ -}}
|
||||
{{- $src := .Get "src" -}}
|
||||
{{- with resources.Get (printf "screenshots/%s" $src) -}}
|
||||
{{- $img := . -}}
|
||||
{{- if gt .Width 1280 }}{{ $img = .Resize "1280x webp q82" }}{{ else }}{{ $img = .Process "webp q82" }}{{ end -}}
|
||||
<figure class="screenshot">
|
||||
<a href="{{ .RelPermalink }}"><img src="{{ $img.RelPermalink }}" width="{{ $img.Width }}" height="{{ $img.Height }}" alt="{{ $.Get "alt" }}" loading="lazy" decoding="async"></a>
|
||||
<figcaption>
|
||||
{{- with $.Get "caption" }}{{ . | $.Page.RenderString }}{{ end -}}
|
||||
{{- if eq ($.Get "demo") "true" }} <span class="screenshot-src">Shown on the public demo. Your server may look slightly different.</span>{{ end -}}
|
||||
</figcaption>
|
||||
</figure>
|
||||
{{- else -}}
|
||||
{{- errorf "screenshot: assets/screenshots/%s not found (%s)" $src $.Position -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,4 @@
|
||||
<aside class="callout callout-superpanel" role="note">
|
||||
<p class="callout-title">{{ .Get "title" | default "In Superpanel" }}</p>
|
||||
{{ .Inner | .Page.RenderString (dict "display" "block") }}
|
||||
</aside>
|
||||
@@ -0,0 +1,4 @@
|
||||
<aside class="callout callout-warning" role="note">
|
||||
<p class="callout-title">{{ .Get "title" | default "Be careful" }}</p>
|
||||
{{ .Inner | .Page.RenderString (dict "display" "block") }}
|
||||
</aside>
|
||||
@@ -0,0 +1,28 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ site.Language.Locale | default "en" }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ .Title }} | {{ site.Title }}{{ end }}</title>
|
||||
<meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ with .Summary }}{{ . | plainify | truncate 160 }}{{ else }}{{ site.Params.description }}{{ end }}{{ end }}">
|
||||
<link rel="preload" href="{{ "fonts/public-sans-latin-wght-normal.woff2" | relURL }}" as="font" type="font/woff2" crossorigin>
|
||||
{{ with resources.Get "css/main.css" | minify | fingerprint }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}">
|
||||
{{ end }}
|
||||
<link rel="icon" href="{{ "clifford.svg" | relURL }}" type="image/svg+xml">
|
||||
</head>
|
||||
<body class="{{ if .IsHome }}is-home{{ else }}is-doc{{ end }}">
|
||||
<a class="skip" href="#main">Skip to content</a>
|
||||
{{ partial "header.html" . }}
|
||||
<div class="frame">
|
||||
{{ if not .IsHome }}{{ partial "sidebar.html" . }}{{ end }}
|
||||
<main id="main" tabindex="-1">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
</div>
|
||||
{{ partial "footer.html" . }}
|
||||
{{ with resources.Get "js/site.js" | js.Build (dict "minify" true) | fingerprint }}
|
||||
<script src="{{ .RelPermalink }}" defer data-index="{{ "index.json" | relURL }}"></script>
|
||||
{{ end }}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,30 @@
|
||||
{{ define "main" }}
|
||||
<section class="hero">
|
||||
<div class="hero-text">
|
||||
<h1>Your apps, your server, and how to use them.</h1>
|
||||
<p class="hero-lede">Federated Computer runs a private copy of each application below on a virtual machine dedicated to you. These guides cover what each one does, which paid services it can stand in for, and how to get your work done in it.</p>
|
||||
<p class="hero-links">
|
||||
<a class="btn" href="{{ "getting-started/" | relURL }}">Start with the basics</a>
|
||||
<a class="btn btn-quiet" href="{{ "getting-started/superpanel/" | relURL }}">Manage things in Superpanel</a>
|
||||
</p>
|
||||
</div>
|
||||
<figure class="swap" aria-label="Examples of services you can replace">
|
||||
<ol class="swap-list">
|
||||
<li><s>Google Drive</s><span class="swap-arrow" aria-hidden="true"></span><a href="{{ "apps/nextcloud/" | relURL }}">Nextcloud</a></li>
|
||||
<li><s>Slack</s><span class="swap-arrow" aria-hidden="true"></span><a href="{{ "apps/element/" | relURL }}">Element</a></li>
|
||||
<li><s>Zoom</s><span class="swap-arrow" aria-hidden="true"></span><a href="{{ "apps/jitsi/" | relURL }}">Jitsi</a></li>
|
||||
<li><s>1Password</s><span class="swap-arrow" aria-hidden="true"></span><a href="{{ "apps/vaultwarden/" | relURL }}">Vaultwarden</a></li>
|
||||
<li><s>Calendly</s><span class="swap-arrow" aria-hidden="true"></span><a href="{{ "apps/calcom/" | relURL }}">Cal.com</a></li>
|
||||
<li><s>DocuSign</s><span class="swap-arrow" aria-hidden="true"></span><a href="{{ "apps/docuseal/" | relURL }}">DocuSeal</a></li>
|
||||
</ol>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<section class="home-section" aria-labelledby="all-apps">
|
||||
<div class="home-section-head">
|
||||
<h2 id="all-apps">All applications</h2>
|
||||
<p>Grouped by what you would use them for. The struck-through names are the paid services each one can replace.</p>
|
||||
</div>
|
||||
{{ partial "directory.html" (dict "headingLevel" 3) }}
|
||||
</section>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,13 @@
|
||||
{{- $items := slice -}}
|
||||
{{- range site.RegularPages -}}
|
||||
{{- $items = $items | append (dict
|
||||
"title" .Title
|
||||
"url" .RelPermalink
|
||||
"section" (cond (eq .Section "apps") (.Params.category | default "Applications") "Getting started")
|
||||
"tagline" (.Params.tagline | default "")
|
||||
"replaces" (delimit (.Params.replaces | default slice) ", ")
|
||||
"headings" (delimit (findRE `(?m)^#{2,3} .+$` .RawContent) " " | replaceRE `#+ ` "")
|
||||
"body" (.Plain | truncate 1200)
|
||||
) -}}
|
||||
{{- end -}}
|
||||
{{- $items | jsonify -}}
|
||||
@@ -0,0 +1,23 @@
|
||||
{{ define "main" }}
|
||||
<div class="doc-wrap">
|
||||
<article class="doc">
|
||||
<header class="doc-head">
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ with .Params.tagline }}<p class="doc-lede">{{ . }}</p>{{ end }}
|
||||
</header>
|
||||
<div class="prose">{{ .Content }}</div>
|
||||
{{ if eq .Section "apps" }}
|
||||
{{ partial "directory.html" (dict "headingLevel" 2) }}
|
||||
{{ else }}
|
||||
<ol class="guide-list">
|
||||
{{ range .Pages.ByWeight }}
|
||||
<li>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
{{ with .Params.tagline }}<p>{{ . }}</p>{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ol>
|
||||
{{ end }}
|
||||
</article>
|
||||
</div>
|
||||
{{ end }}
|
||||
@@ -0,0 +1,45 @@
|
||||
{{ define "main" }}
|
||||
<div class="doc-wrap">
|
||||
<article class="doc">
|
||||
<header class="doc-head">
|
||||
{{ with .Params.category }}<p class="doc-kicker"><a href="{{ "apps/" | relURL }}#{{ . | anchorize }}">{{ . }}</a></p>{{ end }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ with .Params.tagline }}<p class="doc-lede">{{ . }}</p>{{ end }}
|
||||
{{ if or .Params.replaces .Params.website }}
|
||||
<dl class="factsheet">
|
||||
{{ with .Params.replaces }}
|
||||
<div><dt>Use instead of</dt><dd>{{ partial "replaces.html" $ }}</dd></div>
|
||||
{{ end }}
|
||||
{{ with .Params.address }}
|
||||
<div><dt>Typical address</dt><dd><code>{{ . }}</code></dd></div>
|
||||
{{ end }}
|
||||
{{ with .Params.website }}
|
||||
<div><dt>Project website</dt><dd><a href="{{ . }}">{{ . | strings.TrimPrefix "https://" | strings.TrimSuffix "/" }}</a></dd></div>
|
||||
{{ end }}
|
||||
{{ with .Params.upstreamDocs }}
|
||||
<div><dt>Official docs</dt><dd><a href="{{ . }}">{{ . | strings.TrimPrefix "https://" | strings.TrimSuffix "/" }}</a></dd></div>
|
||||
{{ end }}
|
||||
</dl>
|
||||
{{ end }}
|
||||
</header>
|
||||
<div class="prose">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
{{ with .Params.links }}
|
||||
<section class="further" aria-labelledby="further-reading">
|
||||
<h2 id="further-reading">Further reading</h2>
|
||||
<ul>
|
||||
{{ range . }}<li><a href="{{ .url }}">{{ .name }}</a></li>{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ partial "pager.html" . }}
|
||||
</article>
|
||||
{{ if and (ge (len .TableOfContents) 80) (ne .Params.toc false) }}
|
||||
<aside class="toc" aria-label="On this page">
|
||||
<p class="toc-title">On this page</p>
|
||||
{{ .TableOfContents }}
|
||||
</aside>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
Reference in New Issue
Block a user