old work pushed
This commit is contained in:
parent
dad292e2fd
commit
e27fbc792d
2
LICENSE
2
LICENSE
|
@ -21,4 +21,4 @@ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <https://unlicense.org>
|
||||
For more information, please refer to <https://unlicense.org>
|
|
@ -1,2 +1,4 @@
|
|||
# hugo-theme-readable
|
||||
Hugo theme built using readable.css from Freedom to Write
|
||||
|
||||
https://codeberg.org/Freedom-to-Write/readable.css
|
|
@ -0,0 +1,2 @@
|
|||
+++
|
||||
+++
|
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{{- partial "head.html" . -}}
|
||||
<body>
|
||||
<header>
|
||||
{{- partial "header.html" . -}}
|
||||
</header>
|
||||
|
||||
<nav>
|
||||
{{ range .Site.Menus.main -}}
|
||||
<span>
|
||||
<a href="{{ .URL | absLangURL }}">{{ .Name }}</a>
|
||||
</span>
|
||||
{{- end }}
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
{{- block "main" . }}{{- end }}
|
||||
</main>
|
||||
|
||||
|
||||
<footer>
|
||||
{{- partial "footer.html" . -}}
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,9 @@
|
|||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ range .Pages.ByPublishDate.Reverse }}
|
||||
<p>
|
||||
<h3><a class="title" href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
|
||||
{{ partial "metadata.html" . }}
|
||||
</p>
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,6 @@
|
|||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ partial "metadata.html" . }}
|
||||
<!-- <br><br> -->
|
||||
{{ .Content }}
|
||||
{{ end }}
|
|
@ -0,0 +1,5 @@
|
|||
{{ define "main" }}
|
||||
{{ partial "metadata.html" . }}
|
||||
<!-- <br><br> -->
|
||||
{{ .Content }}
|
||||
{{ end }}
|
|
@ -0,0 +1,3 @@
|
|||
<p><a href="/policies/privacy/">Privacy Policy</a> | <a href="/policies/cookies/">Cookie Policy</a> | <a href="/policies/terms/">Terms of Use</a></p> <!-- We like putting links in a paragraph separated by pipe ("|") characters -->
|
||||
<p>© 2023 {{ $.Site.Params.author }}</p> <!-- While not legally required, it's nice to put copyright and/or license info here. Also, it looks nice to break up the links with a line of text -->
|
||||
<a href={{ $.Site.Params.Mastodon }} rel="me" target="blank">Mastodon</a> | <a href="/contact/">Contact Me</a></p> <!-- This is the kind of thing people look for in footers: contact info and legal info. Make sure you include both! -->
|
|
@ -0,0 +1,8 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- This ensures your site looks right on mobile devices -->
|
||||
<link rel="stylesheet" type="text/css" href="/css/readable.css?v=1.0.0">
|
||||
{{ $title := print .Site.Title " | " .Title }}
|
||||
{{ if .IsHome }}{{ $title = .Site.Title }}{{ end }}
|
||||
<title>{{ $title }}</title>
|
||||
</head>
|
|
@ -0,0 +1,2 @@
|
|||
<h1>{{ $.Site.Title }}</h1>
|
||||
<p>{{ $.Site.Params.subtitle }}</p>
|
|
@ -0,0 +1,13 @@
|
|||
{{ $dateTime := .PublishDate.Format "2006-01-02" }}
|
||||
{{ $dateFormat := .Site.Params.dateFormat | default "Jan 2, 2006" }}
|
||||
<i data-feather="calendar"></i>
|
||||
{{ if .PublishDate }}
|
||||
<time datetime="{{ $dateTime }}">{{ .PublishDate.Format $dateFormat }}</time>
|
||||
{{ end }}
|
||||
{{ with .Params.tags }}
|
||||
<i data-feather="tag"></i>
|
||||
{{ range . }}
|
||||
{{ $href := print (absURL "tags/") (urlize .) }}
|
||||
<a class="btn btn-sm btn-outline-dark tag-btn" href="{{ $href }}">{{ . }}</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,245 @@
|
|||
/* readable.css 1.0.0 */
|
||||
|
||||
/* Code from Benjamin Hollon (benjaminhollon@fosstodon.org) */
|
||||
|
||||
#typewriter::after {
|
||||
content: '_';
|
||||
width: 0;
|
||||
display: inline-block;
|
||||
animation: cursor-blink 1s infinite;
|
||||
}
|
||||
|
||||
/* Font family support */
|
||||
html, html[data-font-family="serif"] {
|
||||
--font-family: serif;
|
||||
}
|
||||
html[data-font-family="sans-serif"] {
|
||||
--font-family: sans-serif;
|
||||
}
|
||||
html[data-font-family="monospace"] {
|
||||
--font-family: monospace;
|
||||
}
|
||||
|
||||
/* Color scheme support */
|
||||
html, html[data-theme="light"] {
|
||||
--background-color: snow;
|
||||
--color: #000;
|
||||
}
|
||||
|
||||
html[data-theme="dark"] {
|
||||
--background-color: #222830;
|
||||
--color: #fff;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html {
|
||||
--background-color: #222830;
|
||||
--color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
/* Generic styles */
|
||||
:root {
|
||||
--column-width: 67ch;
|
||||
--form-width: 50ch;
|
||||
--line-width: 0.125rem;
|
||||
--line-height: 1.5;
|
||||
|
||||
--one-line: calc(var(--line-height) * 1rem);
|
||||
--half-line: calc(var(--one-line) * 0.5);
|
||||
|
||||
font-family: var(--font-family);
|
||||
|
||||
background-color: var(--background-color);
|
||||
color: var(--color);
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: red;
|
||||
}
|
||||
|
||||
header, footer, h1, h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer:not(.exclude) {
|
||||
border-top: var(--line-width) solid;
|
||||
}
|
||||
|
||||
summary {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
blockquote:not(.exclude) {
|
||||
padding-left: var(--one-line);
|
||||
border-left: var(--line-width) solid;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
padding-left: calc(var(--line-height) * 2rem);
|
||||
}
|
||||
|
||||
:is(body, article, main, figure) > img:not(.exclude) {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
figure:not(.exclude) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
figure:not(.exclude) > * ~ figcaption {
|
||||
margin-top: 0;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
article > aside:not(.exclude) {
|
||||
border: var(--line-width) solid;
|
||||
padding: 0 var(--one-line);
|
||||
border-radius: var(--half-line);
|
||||
}
|
||||
|
||||
pre {
|
||||
max-width: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
hr {
|
||||
color: inherit;
|
||||
border: 0;
|
||||
border-top: var(--line-width) solid;
|
||||
}
|
||||
|
||||
/* Vertical Rhythm */
|
||||
p, ul, ol, figcaption, nav, td, th, label {
|
||||
line-height: var(--line-height);
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, hr, footer, header, nav, figure, figcaption, ul, ol, :is(body, article, main) > img:not(.exclude), table, article > aside, article > aside {
|
||||
margin: var(--one-line) 0;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
|
||||
header h1 {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
h1, h2 {
|
||||
line-height: calc(var(--line-height) * 2rem);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
|
||||
h3, h4, h5, h6 {
|
||||
line-height: var(--one-line);
|
||||
padding-top: calc(var(--line-height) * 0.75rem);
|
||||
margin-bottom: calc(var(--line-height) * 0.25rem);
|
||||
}
|
||||
|
||||
:is(h3, h4, h5, h6) ~ * {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* Navbar */
|
||||
|
||||
body > nav:first-of-type:not(.exclude) { /* This styling only affects the first nav element that is the direct child of the body */
|
||||
text-align: center;
|
||||
border-width: var(--line-width) 0;
|
||||
border-style: solid;
|
||||
line-height: var(--line-height);
|
||||
padding: calc((var(--line-height) * 0.5rem) - var(--line-width)); /* Put half a line's height on both top and bottom, then remove the width of the border */
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
}
|
||||
|
||||
body > nav:first-of-type:not(.exclude) > * {
|
||||
flex-grow: 1;
|
||||
margin: 0 var(--half-line);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
body > nav:first-of-type:not(.exclude) a {
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
body > nav:first-of-type:not(.exclude) a::after {
|
||||
content: '';
|
||||
width: 0;
|
||||
height: var(--line-width);
|
||||
display: block;
|
||||
background: var(--color);
|
||||
transition: 150ms;
|
||||
}
|
||||
|
||||
body > nav:first-of-type:not(.exclude) a:is(:hover, :focus)::after {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Column */
|
||||
body {
|
||||
margin: 0 auto;
|
||||
width: min(95%, var(--column-width));
|
||||
}
|
||||
|
||||
/* Justification (default off; use data-justify="on" on <html> to enable) */
|
||||
/* 67ch (var(--column-width) / 95% (column max-width) === 70.526315789ch */
|
||||
@media (min-width: 70.5ch) {
|
||||
[data-justify="on"] body {
|
||||
text-align: justify;
|
||||
text-justify: inter-character;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table:not(.exclude) {
|
||||
display: block;
|
||||
width: 100%;
|
||||
overflow: auto;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table:not(.exclude) :is(td, th) {
|
||||
padding: calc(var(--line-height) * 0.25rem);
|
||||
border: var(--line-width) solid;
|
||||
}
|
||||
|
||||
table:not(.exclude) td {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
/* Forms */
|
||||
form {
|
||||
max-width: var(--form-width)
|
||||
}
|
||||
|
||||
form:not(.exclude) :is(label:not(input:is([type="checkbox"], [type="radio"]) ~ label), input:not([type="checkbox"], [type="radio"]), textarea, select) {
|
||||
display: block;
|
||||
margin: var(--half-line) 0;
|
||||
}
|
||||
|
||||
form:not(.exclude) :is(input:not([type="checkbox"], [type="radio"]), textarea, select) {
|
||||
box-sizing: border-box;
|
||||
padding: var(--half-line);
|
||||
background: transparent;
|
||||
border: var(--line-width) solid;
|
||||
color: inherit;
|
||||
font: inherit;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
form:not(.exclude) label:not(input:is([type="checkbox"], [type="radio"]) ~ label) {
|
||||
font-weight: bold;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
// Code from Benjamin Hollon (benjaminhollon@fosstodon.org)
|
||||
|
||||
const addCharDelay = 75;
|
||||
const removeCharDelay = 45;
|
||||
const wordDelay = 1500;
|
||||
|
||||
const typewriterElement = document.getElementById('typewriter');
|
||||
const typewriterPrompts = [
|
||||
'Amateur Radio Operator',
|
||||
'Electrical Engineering Student',
|
||||
'Film Enjoyer'
|
||||
];
|
||||
let currentTypewriterIndex = 0;
|
||||
|
||||
function typeNextPrompt() {
|
||||
function typeChar(char) {
|
||||
if (char !== '~') typewriterElement.innerText += char;
|
||||
}
|
||||
function removeChar() {
|
||||
typewriterElement.innerText = typewriterElement.innerText.slice(0, -1);
|
||||
}
|
||||
|
||||
const word = typewriterPrompts[currentTypewriterIndex];
|
||||
let delaySoFar = 0;
|
||||
// Type it
|
||||
for (const char of word) {
|
||||
setTimeout(typeChar.bind(this, char), delaySoFar);
|
||||
delaySoFar += addCharDelay;
|
||||
}
|
||||
|
||||
delaySoFar += wordDelay;
|
||||
|
||||
for (const char of word.split('').reverse()) {
|
||||
setTimeout(removeChar, delaySoFar);
|
||||
delaySoFar += removeCharDelay;
|
||||
}
|
||||
|
||||
currentTypewriterIndex = (currentTypewriterIndex + 1) % typewriterPrompts.length;
|
||||
setTimeout(typeNextPrompt, delaySoFar);
|
||||
}
|
||||
|
||||
setTimeout(typeNextPrompt, wordDelay / 2);
|
|
@ -0,0 +1,15 @@
|
|||
# theme.toml template for a Hugo theme
|
||||
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
|
||||
|
||||
name = "Readable"
|
||||
license = "Unlicense"
|
||||
licenselink = "https://github.com/cjtheham/hugo-theme-readable/blob/main/LICENSE"
|
||||
description = "A theme using Freedom to Write's Readable.css"
|
||||
homepage = "https://github.com/cjtheham/hugo-theme-readable"
|
||||
tags = []
|
||||
features = []
|
||||
min_version = "0.41.0"
|
||||
|
||||
[author]
|
||||
name = "RogueFoam"
|
||||
homepage = ""
|
Loading…
Reference in New Issue