1

Merge branch 'rebuild_nov_2022'

This commit is contained in:
Evan Pratten 2022-11-25 15:04:41 -05:00
commit f9b564d317
58 changed files with 572 additions and 758 deletions

View File

@ -14,11 +14,13 @@ render_emoji = true
external_links_target_blank = true external_links_target_blank = true
[extra] [extra]
# Website
domain_name = "ewpratten.com"
# Me
name = "Evan Pratten" name = "Evan Pratten"
profession = "Software Developer" profession = "Software Developer"
email = "contact@ewpratten.com"
twitter = "ewpratten"
github = "ewpratten"
qrz = "va3zza"
linkedin = "ewpratten"
profile_photo = "https://avatars.githubusercontent.com/u/21065412" profile_photo = "https://avatars.githubusercontent.com/u/21065412"
# Accounts
email = "evan@ewpratten.com"
github = "ewpratten"
linkedin = "ewpratten"

View File

@ -5,6 +5,7 @@ description: "I3wm makes everything 10x harder than it should be"
date: 2019-08-12 date: 2019-08-12
tags: notes languages tags: notes languages
aliases: [/blog/2019/08/12/setting-up-ja] aliases: [/blog/2019/08/12/setting-up-ja]
draft: true
--- ---
I am currently working with [Hiragana](https://en.wikipedia.org/wiki/Hiragana), [Katakana](https://en.wikipedia.org/wiki/Katakana), and, [Kanji](https://en.wikipedia.org/wiki/Kanji) in some projects, and needed a more reliable way to write than running some [romaji](https://en.wikipedia.org/wiki/Romanization_of_Japanese) through an online translator. So, this post will detail what I did to enable native inputs on my laptop. This guide is specifically for [i3wm](https://i3wm.org/), because it does not obey system settings for languages and inputs. I am currently working with [Hiragana](https://en.wikipedia.org/wiki/Hiragana), [Katakana](https://en.wikipedia.org/wiki/Katakana), and, [Kanji](https://en.wikipedia.org/wiki/Kanji) in some projects, and needed a more reliable way to write than running some [romaji](https://en.wikipedia.org/wiki/Romanization_of_Japanese) through an online translator. So, this post will detail what I did to enable native inputs on my laptop. This guide is specifically for [i3wm](https://i3wm.org/), because it does not obey system settings for languages and inputs.

View File

@ -9,7 +9,7 @@ redirect_from:
- /ef7b3166/ - /ef7b3166/
aliases: [/blog/2019/09/11/buildingimgfrombin] aliases: [/blog/2019/09/11/buildingimgfrombin]
extra: extra:
uses_twitter: true uses: [twitter]
--- ---
During a computer science class today, we were talking about embedding code and metadata in *jpg* and *bmp* files. @exvacuum was showing off a program he wrote that watched a directory for new image files, and would display them on a canvas. He then showed us a special image. In this image, he had injected some metadata into the last few pixels, which were not rendered, but told his program where to position the image on the canvas, and it's size. During a computer science class today, we were talking about embedding code and metadata in *jpg* and *bmp* files. @exvacuum was showing off a program he wrote that watched a directory for new image files, and would display them on a canvas. He then showed us a special image. In this image, he had injected some metadata into the last few pixels, which were not rendered, but told his program where to position the image on the canvas, and it's size.

View File

@ -9,7 +9,7 @@ redirect_from:
- /ebsdjtd9/ - /ebsdjtd9/
aliases: [/blog/2020/04/20/ludumdare46] aliases: [/blog/2020/04/20/ludumdare46]
extra: extra:
uses_twitter: true uses: [twitter]
--- ---
Over the past weekend I teamed up with @rsninja722, @wm-c, @exvacuum, @marshmarlow, and our friends Sally and Matt to participate in the [LudumDare46](https://ldjam.com/events/ludum-dare/46) game jam. This post will outline the game development process. Over the past weekend I teamed up with @rsninja722, @wm-c, @exvacuum, @marshmarlow, and our friends Sally and Matt to participate in the [LudumDare46](https://ldjam.com/events/ludum-dare/46) game jam. This post will outline the game development process.

View File

@ -6,7 +6,7 @@ tags = ["frc"]
aliases = ["/blog/2020/08/03/joystick-to-voltage"] aliases = ["/blog/2020/08/03/joystick-to-voltage"]
[extra] [extra]
uses_katex = true uses = ["katex"]
+++ +++
I am starting a new little series here called "Notes from FRC". The idea is that I am going to write about what I have learned over the past three years of working (almost daily) with robots, and hopefully someone in the future will find them useful. The production source code I based this post around is available [here](https://github.com/frc5024/lib5k/blob/cd8ad407146b514cf857c1d8ac82ac8f3067812b/common_drive/src/main/java/io/github/frc5024/common_drive/calculation/DifferentialDriveCalculation.java). I am starting a new little series here called "Notes from FRC". The idea is that I am going to write about what I have learned over the past three years of working (almost daily) with robots, and hopefully someone in the future will find them useful. The production source code I based this post around is available [here](https://github.com/frc5024/lib5k/blob/cd8ad407146b514cf857c1d8ac82ac8f3067812b/common_drive/src/main/java/io/github/frc5024/common_drive/calculation/DifferentialDriveCalculation.java).

View File

@ -9,7 +9,7 @@ extra:
This post is a continuation on my "Notes from FRC" series. This time, This post is a continuation on my "Notes from FRC" series. This time,
I cover an extremely simple, yet very effective way to get a I cover an extremely simple, yet very effective way to get a
tank-drive robot from A to B autonomously. tank-drive robot from A to B autonomously.
uses_katex: true uses: [katex]
aliases: [/blog/2020/08/13/drivetrain-navigation] aliases: [/blog/2020/08/13/drivetrain-navigation]
--- ---

View File

@ -6,7 +6,7 @@ date: 2021-12-03
tags: reference tags: reference
draft: false draft: false
extra: extra:
uses_katex: true uses: [katex]
excerpt: This post is an overview of Quaternions for Rust programmers, and anyone willing to learn. excerpt: This post is an overview of Quaternions for Rust programmers, and anyone willing to learn.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-01-06
tags: random tags: random
draft: false draft: false
extra: extra:
uses_katex: false
excerpt: My GitHub profile is a bit like an iceberg. At the time of writing, I have made nearly 8 and a half thousand commits to nearly a thousand repositories. This post covers the hidden failed projects. excerpt: My GitHub profile is a bit like an iceberg. At the time of writing, I have made nearly 8 and a half thousand commits to nearly a thousand repositories. This post covers the hidden failed projects.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-01-19
tags: random 3d-pipeline tags: random 3d-pipeline
draft: false draft: false
extra: extra:
uses_katex: false
excerpt: This post covers the process I went through to write a Neural-Network-assisted Blender plugin for converting monocular images into 3D textured meshes. excerpt: This post covers the process I went through to write a Neural-Network-assisted Blender plugin for converting monocular images into 3D textured meshes.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-02-14
tags: project pbx tags: project pbx
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-02-26
tags: project keyboard tags: project keyboard
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
--- ---

View File

@ -7,7 +7,7 @@ tags: reference
draft: false draft: false
extra: extra:
excerpt: This document is written for my PROG10082 classmates as a quick reference for some Java concepts that were skipped over in the course. excerpt: This document is written for my PROG10082 classmates as a quick reference for some Java concepts that were skipped over in the course.
uses_katex: false
hidden: true hidden: true
auto_center_images: true auto_center_images: true
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-04-06
tags: random tags: random
draft: false draft: false
extra: extra:
uses_katex: false
excerpt: A project review post covering my work on remote-control for the UDM-Pro cooling system excerpt: A project review post covering my work on remote-control for the UDM-Pro cooling system
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-04-11
tags: robotics tags: robotics
draft: true draft: true
extra: extra:
uses_katex: true uses: [katex]
excerpt: In this post, I take a look at a mathematical problem commonly encountered with relative rotation offset calculation in robotics. excerpt: In this post, I take a look at a mathematical problem commonly encountered with relative rotation offset calculation in robotics.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-05-10
tags: music tags: music
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: Release notification for Space & Time Vol. 1 excerpt: Release notification for Space & Time Vol. 1
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-05-18
tags: random tags: random
draft: false draft: false
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: This post covers how to keep your commit graph alive across multiple GIT instances by syncing your commit history to magic repos. excerpt: This post covers how to keep your commit graph alive across multiple GIT instances by syncing your commit history to magic repos.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-05-21
tags: radio random nanovna tags: radio random nanovna
draft: false draft: false
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: I went out in the field and tried out my brand new NanoVNA. excerpt: I went out in the field and tried out my brand new NanoVNA.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-06-08
tags: networking tags: networking
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: I used multiple layers of IP encapsulation to evade an upstream firewall in the name of IPv6. excerpt: I used multiple layers of IP encapsulation to evade an upstream firewall in the name of IPv6.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-06-13
tags: random tags: random
draft: false draft: false
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: A quick guide on launching Visual Paradigm on Fedora 36 excerpt: A quick guide on launching Visual Paradigm on Fedora 36
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-06-23
tags: random tags: random
draft: false draft: false
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: How to flash custom firmware to the Steam Controller, allowing it to connect to the Nintendo Switch excerpt: How to flash custom firmware to the Steam Controller, allowing it to connect to the Nintendo Switch
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-06-26
tags: random as398057 tags: random as398057
draft: false draft: false
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: This post covers some of the logistics behind rickrolling the internet with some clever routing tricks. excerpt: This post covers some of the logistics behind rickrolling the internet with some clever routing tricks.
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-07-02
tags: story tags: story
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: From 2016 to 2021, I dedicated most of my time to robotics and control systems programming. This is my journey excerpt: From 2016 to 2021, I dedicated most of my time to robotics and control systems programming. This is my journey
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-08-17
tags: networking tags: networking
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: I recently started AS398057, a low cost Autonomous System. This post talks about how its going excerpt: I recently started AS398057, a low cost Autonomous System. This post talks about how its going
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-09-09
tags: website tags: website
draft: false draft: false
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: A small update post about some website changes excerpt: A small update post about some website changes
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-10-02
tags: website network tags: website network
draft: false draft: false
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: A look at the usage of personal ASNs based on freely available data excerpt: A look at the usage of personal ASNs based on freely available data
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-10-17
tags: amprnet network tags: amprnet network
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: A tutorial for AMPRNet operators who are BGP announcing their first prefix to Vultr excerpt: A tutorial for AMPRNet operators who are BGP announcing their first prefix to Vultr
--- ---

View File

@ -6,7 +6,7 @@ date: 2022-10-17
tags: amprnet network tags: amprnet network
draft: true draft: true
extra: extra:
uses_katex: false
auto_center_images: true auto_center_images: true
excerpt: A tutorial for AMPRNet operators who are BGP announcing their first prefix to Vultr excerpt: A tutorial for AMPRNet operators who are BGP announcing their first prefix to Vultr
--- ---

View File

@ -2,7 +2,7 @@
title: Blog title: Blog
sort_by: date sort_by: date
extra: extra:
inject_blog_posts: true section_embed_mode: blog_posts
--- ---
## Blog posts ## Blog posts

View File

@ -3,7 +3,7 @@ title: Meme Appreciation Month
description: "Come chat with young hams, and join the meme madness!" description: "Come chat with young hams, and join the meme madness!"
aliases: [/yeet] aliases: [/yeet]
extra: extra:
uses_flags: true uses: [flags]
--- ---
***This event has passed. Page preserved for nostalgia.*** ***This event has passed. Page preserved for nostalgia.***

View File

@ -1,7 +1,7 @@
--- ---
title: IP Addressing Plan title: IP Addressing Plan
extra: extra:
uses_graphviz: true uses: [graphviz]
--- ---

View File

@ -2,7 +2,7 @@
title: "A10U8R: Signal Attenuator" title: "A10U8R: Signal Attenuator"
description: "A small, but helpful module for VCV Rack 2" description: "A small, but helpful module for VCV Rack 2"
extra: extra:
uses_katex: true uses: [katex]
--- ---
[![Download Plugin](https://img.shields.io/badge/-download-darkgreen)](https://github.com/Ewpratten/A10U8R/releases/latest) [![Download Plugin](https://img.shields.io/badge/-download-darkgreen)](https://github.com/Ewpratten/A10U8R/releases/latest)

View File

@ -0,0 +1,57 @@
.about-card {
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-around;
width: max-content;
max-width: 95vw;
margin-left: auto;
margin-right: auto;
margin-top: 2em;
margin-bottom: 2em;
.profile-photo-container {
max-width: 150px;
height: max-content;
margin: 0;
padding: 0;
& > img {
width: 100%;
}
}
.text-container {
margin-left: 1em;
height: max-content;
.intro-text {
margin-bottom: 1em;
h1,
p {
margin: 0;
line-height: 1em;
}
}
.quick-links {
height: max-content;
ul {
margin: 0;
padding: 0;
li {
list-style-type: none;
line-height: 1.25em;
margin: 0;
padding: 0;
}
padding: 0;
}
}
}
}

View File

@ -0,0 +1,3 @@
.footer {
text-align: center;
}

View File

@ -0,0 +1,11 @@
.zola-github-card {
border-radius: 5px;
padding-top: 5px;
padding-bottom: 1px;
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
transition: all 0.1s ease 0s;
&:hover {
box-shadow: rgba(0, 0, 0, 0.5) 0px 3px 15px;
}
}

View File

@ -0,0 +1,32 @@
.heading-card {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
width: max-content;
max-width: 95vw;
margin-left: auto;
margin-right: auto;
margin-top: 2em;
margin-bottom: 2em;
.profile-photo-container {
width: 50px;
img {
width: 100%;
}
}
.text-container {
margin-left: 1em;
height: max-content;
h1,
p {
margin: 0;
line-height: 1em;
}
}
}

View File

@ -0,0 +1,30 @@
.ewp-navbar {
margin-top: 1em;
margin-bottom: 1em;
hr {
margin: 0;
border-top: 2px solid;
}
.navbar-items {
width: max-content;
padding: 0;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: auto;
margin-right: auto;
& > li {
display: inline-block;
.dropdown-menu {
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
}
}
.separator {
content: "|";
}
}
}

View File

@ -0,0 +1,3 @@
#instagram-embed-0 {
margin: auto !important;
}

View File

@ -0,0 +1,4 @@
.markdown-body table {
margin: auto !important;
width: fit-content !important;
}

View File

@ -0,0 +1,4 @@
.mermaid {
width: fit-content;
margin: auto;
}

View File

@ -0,0 +1,4 @@
.tiktok-embed {
border: none !important;
margin: auto !important;
}

View File

@ -0,0 +1,9 @@
.yt-embed {
width: 100%;
height: 400px;
iframe {
width: 100%;
height: 100%;
}
}

View File

@ -1,142 +1,6 @@
h1, .page {
h2, & > .container {
h3, max-width: 800px;
h4,
h5,
h6 {
font-family: "Urbanist", sans-serif;
font-weight: bolder;
}
p,
li,
span {
font-family: "Rubik", sans-serif;
font-weight: normal;
}
a {
text-decoration: none;
&:visited {
color: blue;
}
&:hover {
color: blueviolet;
}
}
body {
// margin-bottom: 30px;
margin: 0;
}
.mobile-hidden {
@media only screen and (max-width: 650px) {
display: none;
}
}
.yt-embed {
width: 100%;
height: 400px;
iframe {
width: 100%;
height: 100%;
}
}
.container {
max-width: 700px;
margin: auto;
padding-left: 10px;
padding-right: 10px;
}
.profile-card {
margin-top: 30px;
margin-bottom: 30px;
margin-left: auto;
margin-right: auto;
.row {
width: max-content;
max-width: 95vw;
margin: auto;
overflow-wrap: normal;
.headshot-container {
display: inline-block;
max-width: 150px;
@media only screen and (max-width: 399px) {
display: block;
margin: auto;
text-align: center;
}
img {
width: 100%;
}
}
.text-container {
display: inline-block;
margin-left: 20px;
h1,
p {
margin: 0px;
a {
text-decoration: none;
}
}
}
}
}
.navigation-bar {
text-align: center;
p {
margin: 0px;
a {
text-decoration: none;
}
}
}
.blog-post-li {
margin: 0.25em;
}
.gray {
color: gray;
}
ul {
padding-left: 20px;
}
.events-list {
& > li {
color: gray;
}
& > ul {
& > li {
& > div {
display: table-row;
& > span {
display: table-cell;
&:first-of-type {
color: gray;
width: 30px;
text-align: center;
padding-right: 8px;
// Only Firefox supports this
// letter-spacing: -0.35em;
// text-transform: full-width;
}
}
}
}
} }
} }
@ -144,178 +8,3 @@ ul {
width: fit-content; width: fit-content;
margin: auto; margin: auto;
} }
.zola-github-card {
border-radius: 5px;
padding-top: 5px;
padding-bottom: 1px;
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
transition: all 0.1s ease 0s;
&:hover {
box-shadow: rgba(0, 0, 0, 0.5) 0px 3px 15px;
}
}
#instagram-embed-0 {
margin: auto !important;
}
.tiktok-embed {
border: none !important;
margin: auto !important;
}
.markdown-body table {
margin: auto !important;
width: fit-content !important;
}
.blog-post-listing-item {
color: black !important;
& > div {
border-left: solid rgb(201, 201, 201) 5px;
&:hover {
border-left: solid black 5px;
}
padding-left: 5px;
}
h4,
h1,
p {
padding: 0;
margin: 0;
}
h1 {
margin-bottom: 10px;
}
&:hover {
color: rgb(85, 85, 85) !important;
}
}
.pn-previous,
.pn-next {
border: 1px solid black;
border-radius: 5px;
padding: 5px;
color: black !important;
&:hover {
color: rgb(85, 85, 85) !important;
border: 1px solid rgb(85, 85, 85) !important;
}
}
#footer {
margin-top: 2em;
text-align:center;
}
.carded-section {
border: 1px solid black;
width: 100%;
& > .header {
background-color: aliceblue;
padding-left: 30px;
padding-right: 30px;
padding-top: 15px;
padding-bottom: 15px;
border-bottom: 1px solid rgb(201, 201, 201);
& > span {
font-size: 1.5em;
font-weight: bolder;
}
}
& > .content {
padding-left: 15px;
padding-right: 15px;
}
}
.portfolio-sellout {
margin-top: 15px;
background-color: #afa79e;
border-radius: 5px;
text-align: center;
// color: white;
padding-top: 5px;
padding-bottom: 5px;
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
// & > p > a {
// color: aqua;
// }
}
.hover-help {
&:hover {
cursor: help;
}
border-bottom: 1px double rgb(171, 167, 167);
}
.small {
font-size: 0.5em;
}
.hover-shadow {
&:hover {
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
}
}
#main-skills {
display: flex;
flex-wrap: wrap;
width: 100%;
justify-content: space-evenly;
@media screen and (max-width: 455px) {
justify-content: left;
}
ul {
margin:0;
}
}
.project {
border: 1px solid gray;
border-radius: 5px;
padding: 1em;
margin-bottom: 1em;
p {
margin-top:0.25em;
margin-bottom:0.25em;
}
h3 {
border-bottom: 1px solid lightgrey;
margin-top:0.25em;
margin-bottom:0.5em;
padding-bottom: 0.5em;
}
ul{
margin-bottom:0;
}
}
.homepage-showoff {
padding-left: 1em;
padding-right: 1em;
padding-top: 0.25em;
padding-bottom: 0.25em;
background-color: #e3e3e3;
color: black;
}
.home-list {
&>ul>li {
padding-top:0.5em;
}
}

View File

@ -1,51 +0,0 @@
.project-mosaic {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
width: 100%;
@media (min-width: 437px) {
.project-small {
max-width: 175px !important;
}
}
.conform-height {
height: unset !important;
}
.project {
border: 1px solid #ccc;
border-radius: 5px;
padding: 1rem;
margin-bottom: 1rem;
max-width: 300px;
height: max-content;
img {
margin-bottom: 0.5em;
border-bottom: 1px solid #ccc;
padding-bottom: 0.75em;
width: 100%;
}
h3 {
margin: 0;
margin-bottom: 0.25em;
}
p {
margin-top: 0;
color: rgb(84, 84, 84);
}
span {
display: inline-block;
border-top: 1px solid #ccc;
font-size: 2em;
width: 100%;
padding-top: 0.25em;
text-align: center;
}
}
}

View File

@ -0,0 +1,53 @@
@import url("https://fonts.googleapis.com/css2?family=Roboto&family=Urbanist:wght@700&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,400;0,700;1,400;1,700&display=swap");
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Urbanist", sans-serif;
font-weight: bolder;
}
p,
li,
span {
font-family: "Rubik", sans-serif;
font-weight: normal;
}
a {
text-decoration: none;
color: blue;
&:visited {
color: blue;
}
&:hover {
color: blueviolet;
}
}
body {
margin: 0;
}
.gray {
color: gray;
}
.hover-help {
&:hover {
cursor: help;
}
border-bottom: 1px double rgb(171, 167, 167);
}
.page #content {
img {
display: block;
margin-left: auto;
margin-right: auto;
}
}

15
sass/styles/utils.scss Normal file
View File

@ -0,0 +1,15 @@
.mobile-hidden {
@media only screen and (max-width: 650px) {
display: none;
}
}
.small {
font-size: 0.5em;
}
.hover-shadow {
&:hover {
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
}
}

View File

@ -1,165 +1,96 @@
{# Allow extenders to pass through variables #}
{% block variable_wormhole %}
{% set title = "NO TITLE SET" %}
{% set description = "" %}
{% set is_article = false %}
{% set feature_flags = [] %}
{% set redirect_target = "" %}
{% endblock variable_wormhole %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
{% block head %} {# Page metadata #}
<!-- Google Tag Manager -->
<script>(function (w, d, s, l, i) {
w[l] = w[l] || []; w[l].push({
'gtm.start':
new Date().getTime(), event: 'gtm.js'
}); var f = d.getElementsByTagName(s)[0],
j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-KFJ95RP');</script>
<!-- End Google Tag Manager -->
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" type="image/jpg" href="{{config.extra.profile_photo}}" /> <link rel="shortcut icon" type="image/jpg" href="{{config.extra.profile_photo}}" />
{% if current_url %} {% include "components/metadata/advertise-rss.html" %}
<link rel="canonical" href="{{current_url}}" /> {% include "components/metadata/opengraph.html" %}
{# Redirect support #}
{% if redirect_target != "" %}
<meta http-equiv="refresh" content="0; url={{redirect_target}}" />
{% endif %} {% endif %}
<link rel="alternate" type="application/rss+xml" title="RSS" href="{{get_url(path=" rss.xml", {# Page title #}
trailing_slash=false)}}"> <title>{{title}} | {{config.title}}</title>
<link rel="webmention" href="https://webmention.io/ewpratten.com/webmention" />
<link rel="pingback" href="https://webmention.io/ewpratten.com/xmlrpc" />
<title>{% block title %}{% endblock title %} | {{config.extra.name}}</title>
{# Preconnects for external resources #}
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&family=Urbanist:wght@700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,400;0,700;1,400;1,700&display=swap"
rel="stylesheet">
<link rel="preconnect" href="https://maxst.icons8.com"> <link rel="preconnect" href="https://maxst.icons8.com">
{# External styles #}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
<link rel="stylesheet" <link rel="stylesheet"
href="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/css/line-awesome.min.css"> href="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/css/line-awesome.min.css">
<link rel="stylesheet" href="/styles/layout.css">
<link rel="stylesheet" href="/styles/project_mosaic.css">
<link rel="stylesheet" <link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/4.0.0/github-markdown.min.css" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/4.0.0/github-markdown.min.css"
integrity="sha512-Oy18vBnbSJkXTndr2n6lDMO5NN31UljR8e/ICzVPrGpSud4Gkckb8yUpqhKuUNoE+o9gAb4O/rAxxw1ojyUVzg==" integrity="sha512-Oy18vBnbSJkXTndr2n6lDMO5NN31UljR8e/ICzVPrGpSud4Gkckb8yUpqhKuUNoE+o9gAb4O/rAxxw1ojyUVzg=="
crossorigin="anonymous" referrerpolicy="no-referrer" /> crossorigin="anonymous" referrerpolicy="no-referrer" />
{# Site-wide styles #}
<link rel="stylesheet" href="/styles/fixes/instagram.css">
<link rel="stylesheet" href="/styles/fixes/markdown.css">
<link rel="stylesheet" href="/styles/fixes/mermaid.css">
<link rel="stylesheet" href="/styles/fixes/tiktok.css">
<link rel="stylesheet" href="/styles/fixes/youtube.css">
<link rel="stylesheet" href="/styles/typography.css">
<link rel="stylesheet" href="/styles/utils.css">
<link rel="stylesheet" href="/styles/layout.css">
<link rel="stylesheet" href="/styles/components/github-card.css">
<meta name="twitter:card" content="summary" /> {# Component styles #}
<meta name="og:site" content="ewpratten.com" /> {% block component_styles %}
<meta name="og:image" content="{{config.extra.profile_photo}}" /> {% endblock component_styles %}
<meta name="twitter:creator" content="@ewpratten">
<meta name="og:site_name" content="Evan Pratten (VA3ZZA)" />
{% endblock head %} {# Enable features #}
{% include "components/metadata/page-features.html" %}
</head> </head>
<body> <body>
<div class="container">
<div class="profile-card"> {# The whole page #}
{% block profile %} <div class="page">
<div class="row">
<div class="headshot-container"> {# Allow pages to override the content before the navbar #}
<img src="{{config.extra.profile_photo}}" alt="Headshot"> {% block page_start %}{% endblock page_start %}
</div>
<div class="text-container"> {# Navbar #}
<h1>{{config.extra.name}}</h1> <div class="container">
<p> {% include "components/navbar.html" %}
{{config.extra.profession}}
<br><br>
<a href="mailto:{{config.extra.email}}" rel="me"><i class="las la-envelope"></i>
{{config.extra.email}}</a><br>
<a href="https://github.com/{{config.extra.github}}" rel="me"><i class="lab la-github"></i>
{{config.extra.github}}</a><br>
<a href="https://www.linkedin.com/in/{{config.extra.linkedin}}" rel="me"><i
class="lab la-linkedin"></i>
{{config.extra.linkedin}}</a><br>
<a href="https://qrz.com/db/{{config.extra.qrz}}" rel="me"><i
class="las la-broadcast-tower"></i>
{{config.extra.qrz}}</a>
</p>
</div>
</div>
{% endblock profile %}
</div>
<div class="navigation-bar">
<hr>
<p>
<a href="/">Home</a> |
<a href="/blog">Blog</a> |
{# <a href="/blog">Rabbit Hole</a> | #}
{# <a href="/work">My Work</a> | #}
{# <a href="/network">Network</a> | #}
<a href="/contact">Contact</a>
{# <a href="/hobbies">Hobbies</a> #}
{# <a href="/whois">WHOIS</a> #}
{# <a href="/rfc">RFC</a> #}
</p>
<hr>
</div>
<div class="page-content">
{% block content %}
{% endblock content %}
</div> </div>
<div id="footer"> {# Actual content #}
<p class="gray">-- EOF --</p> <div id="content" class="container">
<p> <article class="markdown-body">
<em> {% block content %}{% endblock content %}
<a href="https://github.com/ewpratten/va3zza.com"><i class="lab la-github"></i></a> </article>
<a href="https://status.ewpratten.com"><i class="las la-info-circle"></i></a>
<a href="/rss.xml"><i class="las la-rss"></i></a><br>
Thanks for reading :)<br>
Site design & content by: <a href="/info">Evan Pratten</a><br>
Consider <a href="/donate" target="_blank">supporting my work</a> if you like what you see<br>
</em>
</p>
</div> </div>
{# Footer #}
{% include "components/footer.html" %}
</div> </div>
<!-- Global site tag (gtag.js) - Google Analytics --> {# External scripts #}
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5912H4H03P"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
<script> integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
window.dataLayer = window.dataLayer || []; crossorigin="anonymous"></script>
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-5912H4H03P'); {% include "components/metadata/analytics.html" %}
</script>
<script>
if (window.performance && performance.getEntriesByType) { // avoid error in Safari 10, IE9- and other old browsers
let navTiming = performance.getEntriesByType('navigation')
if (navTiming.length > 0) { // still not supported as of Safari 14...
let serverTiming = navTiming[0].serverTiming
if (serverTiming && serverTiming.length > 0) {
for (let i = 0; i < serverTiming.length; i++) {
if (serverTiming[i].name == 'source') {
if (serverTiming[i].description == 'net44') {
document.getElementById('ampr-notice').style.display = 'block';
}
}
}
}
}
}
</script>
{# URL Rewriter for retrylife.ca #}
<script>
if (window.location.hostname == 'retrylife.ca') {
window.location.href = window.location.href.replace('retrylife.ca', 'ewpratten.com');
}
</script>
{# Meta magic for mastodon verification #}
<a rel="me" href="https://social.ewpratten.com/@evan" style="display:none;"></a>
</body> </body>
</html> </html>

View File

@ -0,0 +1,46 @@
{% block component_styles %}
{{ super() }}
<link rel="stylesheet" href="/styles/components/about-card.css">
{% endblock component_styles %}
<div class="about-card">
<div class="profile-photo-container">
<img src="{{config.extra.profile_photo}}" alt="Profile Photo">
</div>
<div class="text-container">
<div class="intro-text">
<h1>{{config.extra.name}}</h1>
<p>{{config.extra.profession}}</p>
</div>
<div class="quick-links">
<ul>
<li>
<a href="mailto:{{config.extra.email}}" rel="me">
<i class="las la-envelope"></i>
{{config.extra.email}}
</a>
</li>
<li>
<a href="https://github.com/{{config.extra.github}}" rel="me">
<i class="lab la-github"></i>
{{config.extra.github}}
</a>
</li>
<li>
<a href="https://linkedin.com/in/{{config.extra.linkedin}}" rel="me">
<i class="lab la-linkedin"></i>
{{config.extra.linkedin}}
</a>
</li>
<li>
<a href="/contact">
...&nbsp;&nbsp;more
</a>
</li>
</ul>
</div>
</div>
</div>
{# Mastodon requires this to exist somewhere, so why not here #}
<a rel="me" href="https://social.ewpratten.com/@evan" style="display:none;"></a>

View File

@ -0,0 +1,13 @@
{% block component_styles %}
{{ super() }}
<link rel="stylesheet" href="/styles/components/footer.css">
{% endblock component_styles %}
<div class="footer">
<br>
<span class="gray">-- EOF --</span>
<p>
Site design & content by: <a href="/contact">Evan Pratten</a><br>
Consider <a href="/donate" target="_blank">supporting my work</a> if you like what you see<br>
</p>
</div>

View File

@ -0,0 +1,14 @@
{% block component_styles %}
{{ super() }}
<link rel="stylesheet" href="/styles/components/heading-card.css">
{% endblock component_styles %}
<div class="heading-card">
<div class="profile-photo-container">
<img src="{{config.extra.profile_photo}}" alt="Profile Photo">
</div>
<div class="text-container">
<h1>{{config.extra.name}}</h1>
<p>{{config.extra.profession}}</p>
</div>
</div>

View File

@ -0,0 +1,5 @@
{% if current_url %}
<link rel="canonical" href="{{current_url}}" />
{% endif %}
<link rel="alternate" type="application/rss+xml" title="RSS" href="{{get_url(path=config.feed_filename, trailing_slash=false)}}">

View File

@ -0,0 +1,9 @@
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5912H4H03P"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-5912H4H03P');
</script>

View File

@ -0,0 +1,21 @@
{# Site info #}
<meta name="twitter:card" content="summary" />
<meta name="og:site" content="{{config.extra.domain_name}}" />
<meta name="og:site_name" content="{{config.title}}" />
{# Page image #}
<meta name="og:image"
content="{% block opengraph_image_url %}{{config.extra.profile_photo}}{% endblock opengraph_image_url %}" />
{# Page description #}
<meta property="og:description" content="{{description}}" />
<meta property="description" content="{{description}}" />
<meta name="description" content="{{description}}">
{# Page title #}
<meta property="og:title" content="{{title}} - {{config.title}}" />
{# Article-specifics #}
{% if is_article %}
<meta property="og:type" content="article" />
{% endif %}

View File

@ -0,0 +1,28 @@
{% for feature in feature_flags %}
{# KATEX #}
{% if feature == "katex" %}
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML' async></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']], displayMath: [ ['$$','$$'], ['\[','\]'] ]}});
</script>
{% endif %}
{# Flags #}
{% if feature == "flags" %}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.4.3/css/flag-icons.min.css"
integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
{% endif %}
{# Twitter embed #}
{% if feature == "twitter" %}
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
{% endif %}
{# Mermaid #}
{% if feature == "mermaid" or feature == "graphviz" %}
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
{% endif %}
{% endfor %}

View File

@ -0,0 +1,27 @@
{% block component_styles %}
{{ super() }}
<link rel="stylesheet" href="/styles/components/navbar.css">
{% endblock component_styles %}
<div class="ewp-navbar">
<hr>
<ul class="navbar-items">
<li><a href="/">Home</a></li>
<li class="separator">|</li>
<li><a href="/blog">Blog</a></li>
<li class="separator">|</li>
{# <li class="dropdown-center">
<a href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
More
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li>
<li class="separator">|</li> #}
<li><a href="/contact">Contact</a></li>
</ul>
<hr>
</div>

View File

@ -1,44 +1,41 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block title %}
{{section.title}}
{% endblock title %}
{# Additional metadata for Google #}
{% block head %} {% block head %}
{{ super() }} {{ super() }}
<meta property="og:description" content="{{config.description}}" />
<meta property="description" content="{{config.description}}" />
<meta name="description" content="{{config.description}}">
<meta name="og:title" content="Evan Pratten (VA3ZZA)" />
<script type="application/ld+json"> <script type="application/ld+json">
{% set person_ld = load_data(path="static/person.jsonld")%} {% set person_ld = load_data(path="static/person.jsonld")%}
{% if person_ld %}{{person_ld | safe}}{% endif %} {% if person_ld %}{{person_ld | safe}}{% endif %}
</script> </script>
<script type="application/ld+json"> <script type="application/ld+json">
{# Import our template file #} {# Import our template file #}
{% set template = load_data(path="jsonld_templates/website.jsonld") %} {% set template = load_data(path="jsonld_templates/website.jsonld") %}
{# Now we can fill in any additional data #} {# Now we can fill in any additional data #}
{{ template | {{ template |
replace(from="{{url}}", to=config.base_url) | replace(from="{{url}}", to=config.base_url) |
replace(from="{{title}}", to=section.title) | replace(from="{{title}}", to=section.title) |
replace(from="{{description}}", to=config.description) | replace(from="{{description}}", to=config.description) |
replace(from="{{avatar}}", to=config.extra.profile_photo) | replace(from="{{avatar}}", to=config.extra.profile_photo) |
safe safe
}} }}
</script> </script>
{# Handle flags #}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.4.3/css/flag-icons.min.css"
integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
{% endblock head %} {% endblock head %}
{# Pass data through to the base template #}
{% block variable_wormhole %}
{{ super() }}
{% set title = section.title %}
{% set description = config.description %}
{% if section.extra.uses %}
{% set feature_flags = section.extra.uses %}
{% endif %}
{% endblock variable_wormhole %}
{# Page content #}
{% block page_start %}
{% include "components/about-card.html" %}
{% endblock page_start %}
{% block content %} {% block content %}
{# <br> {{ section.content | safe }}
<article class="markdown-body"> #}
{{section.content | safe}}
{# </article> #}
{% endblock content %} {% endblock content %}

View File

@ -1,58 +1,10 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block title %}
{{page.title}}
{% endblock title %}
{# Additional metadata for Google #}
{% block head %} {% block head %}
{# <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/4.0.0/github-markdown.min.css"
integrity="sha512-Oy18vBnbSJkXTndr2n6lDMO5NN31UljR8e/ICzVPrGpSud4Gkckb8yUpqhKuUNoE+o9gAb4O/rAxxw1ojyUVzg=="
crossorigin="anonymous" referrerpolicy="no-referrer" /> #}
{{ super() }} {{ super() }}
{# Disable crawling if requested #} {% if page.description and page.date %}
{% if page.extra.no_crawl %}
<meta name="robots" content="noindex, nofollow">
{% endif %}
{% if page.extra.uses_katex %}
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML' async></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']], displayMath: [ ['$$','$$'], ['\[','\]'] ]}});
</script>
{% endif %}
<meta property="og:title" content="{{page.title}} - Evan Pratten" />
<meta property="og:type" content="article" />
{% if page.description %}
<meta property="og:description" content="{{page.description}}" />
<meta property="description" content="{{page.description}}" />
{% else %}
<meta property="og:description" content="{{config.description}}" />
<meta property="description" content="{{config.description}}" />
{% endif %}
<meta property="article:published_time" content="{{page.date}}T00:00:00" />
{# Handle auto-centering request #}
{% if page.extra.auto_center_images %}
<style>
img {
display: block;
margin-left: auto;
margin-right: auto;
}
</style>
{% endif %}
{# Handle flags #}
{% if page.extra.uses_flags %}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.4.3/css/flag-icons.min.css"
integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
{% endif %}
{# Handle loading JSONLD #}
{% if page.extra.is_rfc or page.description and page.date %}
<script type="application/ld+json"> <script type="application/ld+json">
{# Import our template file #} {# Import our template file #}
{% set template = load_data(path="jsonld_templates/blog_post.jsonld") %} {% set template = load_data(path="jsonld_templates/blog_post.jsonld") %}
@ -66,53 +18,30 @@ MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']], displayMat
}} }}
</script> </script>
{% endif %} {% endif %}
{# Handle redirects if needed #}
{% if page.extra.redir_to %}
<meta http-equiv="refresh" content="0; url={{page.extra.redir_to}}" />
{% endif %}
{% endblock head %} {% endblock head %}
{% block profile %} {# Pass data through to the base template #}
<div class="row"> {% block variable_wormhole %}
<div class="headshot-container"> {{ super() }}
<img src="{{config.extra.profile_photo}}" alt="Headshot" style="height:50px;width:auto;"> {% set title = page.title %}
</div> {% set description = page.description %}
<div class="text-container"> {% set is_article = true %}
<h1>{{config.extra.name}}</h1> {% if page.extra.uses %}
<p> {% set feature_flags = page.extra.uses %}
{{config.extra.profession}} {% endif %}
</p> {% if page.extra.redir_to %}
</div> {% set redirect_target = page.extra.redir_to %}
</div> {% endif %}
{% endblock profile %} {% endblock variable_wormhole %}
{# Page content #}
{% block page_start %}
{% include "components/heading-card.html" %}
{% endblock page_start %}
{% block content %} {% block content %}
<h1 style="margin-bottom:0;padding-bottom:0;">{{page.title}}</h1>
<em>{{page.description}}</em>
<br><br> <br><br>
<article class="markdown-body">
{% if page.description %}
<h1 style="border:none;margin-bottom:0;padding-bottom:0">{{page.title}}</h1>
<h3 style="margin-top:0;color:gray;padding-bottom:.3em;border-bottom:1px solid #eaecef;">
<em>
<span style="color:rgb(186, 186, 186)">/*</span>
{{page.description}}
<span style="color:rgb(186, 186, 186)">*/</span>
</em>
</h3>
{% else %}
<h1>{{page.title}}</h1>
{% endif %}
<div style="text-align: justify;">
{{page.content | safe}}
</div>
</article> {{ page.content | safe }}
{% if page.extra.uses_twitter %}
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
{% endif %}
{% if page.extra.uses_graphviz %}
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
{% endif %}
{% endblock content %} {% endblock content %}

View File

@ -1,113 +1,49 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block title %}
{{section.title}}
{% endblock title %}
{% block head %} {# Pass data through to the base template #}
{% block variable_wormhole %}
{{ super() }} {{ super() }}
{% set title = section.title %}
{# Disable crawling if requested #} {% set description = section.description %}
{% if section.extra.no_crawl %} {% if section.extra.uses %}
<meta name="robots" content="noindex, nofollow"> {% set feature_flags = section.extra.uses %}
{% endif %} {% endif %}
{% endblock variable_wormhole %}
<meta property="og:title" content="{{section.title}} - Evan Pratten" /> {# Page content #}
{% if section.description %} {% block page_start %}
<meta property="og:description" content="{{section.description}}" /> {% include "components/heading-card.html" %}
<meta property="description" content="{{section.description}}" /> {% endblock page_start %}
{% else %}
<meta property="og:description" content="{{config.description}}" />
<meta property="description" content="{{config.description}}" />
{% endif %}
{# Handle listing blog posts nicely in search #}
{% if section.extra.inject_blog_posts %}
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"ItemList",
"itemListElement":[
{% for page in section.pages %}
{% if not page.extra.hidden %}
{
"@type":"ListItem",
"position": "{{loop.index}}",
"item": {
"@type": "Article",
"headline": "{{page.title}}",
"url":"https://ewpratten.com{{page.path | safe}}",
"author": [{
"@type": "Person",
"name": "Evan Pratten",
"url": "https://ewpratten.com"
}]
}
} {% if not loop.last %},{% endif %}
{% endif %}
{% endfor %}
]
}
</script>
{% endif %}
{% endblock head %}
{% block content %} {% block content %}
{% if section.extra.enable_gh_markdown %} {{ section.content | safe }}
<article class="markdown-body">
{% endif %}
{{section.content | safe}}
{% if section.extra.enable_gh_markdown %}
</article>
{% endif %}
{# Blog posts #} {# Handle various embed modes #}
{% if section.extra.inject_blog_posts %} {% if section.extra.section_embed_mode %}
<ul style="margin:0">
<div>
{# Posts shall be broken down by year #}
{% set title_year = "3000" %}
{% for page in section.pages %}
{% if not page.extra.hidden %}
{% set page_year = page.date | date(format="%Y")%}
{% if page_year != title_year %}
{% set_global title_year = page_year %}
</ul>
<h2>{{title_year}}</h2>
<ul>
{% endif %}
<li class="blog-post-li"><span style="color:{% if page.draft %}red{% else %}gray{% endif %};">{{page.date}}:</span> <a
href="{{page.path}}">{{page.title}}</a>
</li>
{% endif %}
{% endfor %}
</ul>
<br><br>
{% endif %}
{# RFCs #} {% if section.extra.section_embed_mode == "blog_posts" %}
{% if section.extra.inject_rfcs %} {# <ul style="margin:0"> #}
<div>
{# Posts shall be broken down by year #}
{% set title_year = "3000" %}
{% for page in section.pages %}
{% if not page.extra.hidden %}
{% set page_year = page.date | date(format="%Y")%}
{% if page_year != title_year %}
{% set_global title_year = page_year %}
</ul>
<h2>{{title_year}}</h2>
<ul> <ul>
{% for page in section.pages %} {% endif %}
{% if not page.extra.hidden %}
<li class="blog-post-li"><a href="{{page.path}}">{{page.title}}</a> <span style="color:gray;">({{page.date}})</span> <li class="blog-post-li"><span style="color:{% if page.draft %}red{% else %}gray{% endif %};">{{page.date}}:</span>
<a href="{{page.path}}">{{page.title}}</a>
</li> </li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</ul> </ul>
</div>
{% endif %} {% endif %}
{# Notes #}
{% if section.extra.inject_notes %}
<ul>
{% for page in section.pages %}
{% if not page.extra.hidden %}
<li class="blog-post-li"><a href="{{page.path}}">{{page.title}}</a>
</li>
{% endif %}
{% endfor %}
</ul>
{% endif %} {% endif %}
{% endblock content %} {% endblock content %}

View File

@ -1,8 +0,0 @@
<div class="carded-section">
<div class="header">
<span>{{title}}</span>
</div>
<div class="content">
{{body | safe}}
</div>
</div>