Compare commits

...

3 Commits

Author SHA1 Message Date
Ben Goldsworthy 920db1a5ce update theme 2023-08-07 18:23:46 -04:00
Ben Goldsworthy ee87009471 various updates 2023-06-30 21:16:59 -06:00
Ben Goldsworthy 4955708f0e ignore third-party dependencies (for now) 2023-06-30 21:16:47 -06:00
62 changed files with 1666 additions and 5925 deletions

4
.gitignore vendored
View File

@ -13,3 +13,7 @@ hugo.linux
# Temporary lock file while building
/.hugo_build.lock
# TEMP - until I figure out licensing
/js/
/css/openlayers.css
/css/leaflet.css

View File

@ -1,6 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

View File

@ -1,20 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
subtitle:
date: {{ .Date }}
draft: true
url:
featured_image:
resources:
- name:
alt:
src:
params:
attr: Warner Bros. Pictures
categories:
areas:
tags:
---

View File

@ -1,12 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
url:
featured_image:
subtitle:
categories:
areas:
tags:
---

363
css/.sanitize.css Normal file
View File

@ -0,0 +1,363 @@
/* Document
* ========================================================================== */
/**
* 1. Add border box sizing in all browsers (opinionated).
* 2. Backgrounds do not repeat by default (opinionated).
*/
*,
::before,
::after {
box-sizing: border-box; /* 1 */
background-repeat: no-repeat; /* 2 */
}
/**
* 1. Add text decoration inheritance in all browsers (opinionated).
* 2. Add vertical alignment inheritance in all browsers (opinionated).
*/
::before,
::after {
text-decoration: inherit; /* 1 */
vertical-align: inherit; /* 2 */
}
/**
* 1. Use the default cursor in all browsers (opinionated).
* 2. Change the line height in all browsers (opinionated).
* 3. Breaks words to prevent overflow in all browsers (opinionated).
* 4. Use a 4-space tab width in all browsers (opinionated).
* 5. Remove the grey highlight on links in iOS (opinionated).
* 6. Prevent adjustments of font size after orientation changes in iOS.
*/
:where(:root) {
cursor: default; /* 1 */
line-height: 1.5; /* 2 */
overflow-wrap: break-word; /* 3 */
-moz-tab-size: 4; /* 4 */
tab-size: 4; /* 4 */
-webkit-tap-highlight-color: transparent; /* 5 */
-webkit-text-size-adjust: 100%; /* 6 */
}
/* Sections
* ========================================================================== */
/**
* Remove the margin in all browsers (opinionated).
*/
:where(body) {
margin: 0;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Edge, Firefox, and Safari.
*/
:where(h1) {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
* ========================================================================== */
/**
* Remove the margin on nested lists in Chrome, Edge, and Safari.
*/
:where(dl, ol, ul) :where(dl, ol, ul) {
margin: 0;
}
/**
* 1. Correct the inheritance of border color in Firefox.
* 2. Add the correct box sizing in Firefox.
*/
:where(hr) {
color: inherit; /* 1 */
height: 0; /* 2 */
}
/**
* Remove the list style on navigation lists in all browsers (opinionated).
*/
:where(nav) :where(ol, ul) {
list-style-type: none;
padding: 0;
}
/**
* Prevent VoiceOver from ignoring list semantics in Safari (opinionated).
*/
:where(nav li)::before {
content: "\200B";
float: left;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
* 3. Prevent overflow of the container in all browsers (opinionated).
*/
:where(pre) {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
overflow: auto; /* 3 */
}
/* Text-level semantics
* ========================================================================== */
/**
* Add the correct text decoration in Safari.
*/
:where(abbr[title]) {
text-decoration: underline;
text-decoration: underline dotted;
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
:where(b, strong) {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
:where(code, kbd, samp) {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
:where(small) {
font-size: 80%;
}
/* Embedded content
* ========================================================================== */
/*
* Change the alignment on media elements in all browsers (opinionated).
*/
:where(audio, canvas, iframe, img, svg, video) {
vertical-align: middle;
}
/**
* Remove the border on iframes in all browsers (opinionated).
*/
:where(iframe) {
border-style: none;
}
/**
* Change the fill color to match the text color in all browsers (opinionated).
*/
:where(svg:not([fill])) {
fill: currentColor;
}
/* Tabular data
* ========================================================================== */
/**
* 1. Collapse border spacing in all browsers (opinionated).
* 2. Correct table border color inheritance in all Chrome, Edge, and Safari.
* 3. Remove text indentation from table contents in Chrome, Edge, and Safari.
*/
:where(table) {
border-collapse: collapse; /* 1 */
border-color: inherit; /* 2 */
text-indent: 0; /* 3 */
}
/* Forms
* ========================================================================== */
/**
* Remove the margin on controls in Safari.
*/
:where(button, input, select) {
margin: 0;
}
/**
* Correct the inability to style buttons in iOS and Safari.
*/
:where(button, [type="button" i], [type="reset" i], [type="submit" i]) {
-webkit-appearance: button;
}
/**
* Change the inconsistent appearance in all browsers (opinionated).
*/
:where(fieldset) {
border: 1px solid #a0a0a0;
}
/**
* Add the correct vertical alignment in Chrome, Edge, and Firefox.
*/
:where(progress) {
vertical-align: baseline;
}
/**
* 1. Remove the margin in Firefox and Safari.
* 3. Change the resize direction in all browsers (opinionated).
*/
:where(textarea) {
margin: 0; /* 1 */
resize: vertical; /* 3 */
}
/**
* 1. Correct the odd appearance in Chrome, Edge, and Safari.
* 2. Correct the outline style in Safari.
*/
:where([type="search" i]) {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/**
* Correct the text style of placeholders in Chrome, Edge, and Safari.
*/
::-webkit-input-placeholder {
color: inherit;
opacity: 0.54;
}
/**
* Remove the inner padding in Chrome, Edge, and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style upload buttons in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
* ========================================================================== */
/*
* Add the correct styles in Safari.
*/
:where(dialog) {
background-color: white;
border: solid;
color: black;
height: -moz-fit-content;
height: fit-content;
left: 0;
margin: auto;
padding: 1em;
position: absolute;
right: 0;
width: -moz-fit-content;
width: fit-content;
}
:where(dialog:not([open])) {
display: none;
}
/*
* Add the correct display in Safari.
*/
:where(details > summary:first-of-type) {
display: list-item;
}
/* Accessibility
* ========================================================================== */
/**
* Change the cursor on busy elements in all browsers (opinionated).
*/
:where([aria-busy="true" i]) {
cursor: progress;
}
/*
* Change the cursor on control elements in all browsers (opinionated).
*/
:where([aria-controls]) {
cursor: pointer;
}
/*
* Change the cursor on disabled, not-editable, or otherwise
* inoperable elements in all browsers (opinionated).
*/
:where([aria-disabled="true" i], [disabled]) {
cursor: not-allowed;
}
/*
* Change the display on visually hidden accessible elements
* in all browsers (opinionated).
*/
:where([aria-hidden="false" i][hidden]) {
display: initial;
}
:where([aria-hidden="false" i][hidden]:not(:focus)) {
clip: rect(0, 0, 0, 0);
position: absolute;
}

View File

@ -1,840 +0,0 @@
@charset "UTF-8";
@font-face {
font-family: "Input Mono";
src: url(/fonts/InputMono-Regular.ttf); }
html {
font-size: 16px;
color: #020202;
background-color: #fffff0;
font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; }
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: normal;
margin: 0; }
a {
text-decoration-skip-ink: auto;
color: #020202;
text-decoration: underline;
opacity: 0.8; }
a:hover {
text-decoration: none;
opacity: 1; }
.sic::after {
content: " [sic]";
font-style: italic; }
.latex {
display: inline !important; }
pre {
padding-left: 1em;
border-left: 2px outset #020202;
display: inline-block;
max-width: 85%; }
pre {
overflow: hidden; }
@media only screen and (min-width: 1024px) {
pre {
margin: 1em 2em; } }
q.guillemets {
quotes: "«" "»" "«" "»"; }
q,
blockquote {
quotes: "" "" "“" "”"; }
q::before {
content: open-quote; }
q::after {
content: close-quote; }
cite,
cite.book,
cite.film,
cite.tv-show,
cite.comic,
cite.book,
cite.podcast,
cite.album,
cite.report {
font-style: italic; }
cite.book--bible {
font-style: inherit; }
cite.legislation,
cite.smallcite,
cite.comic-strip,
cite.short-story,
cite.article,
cite.episode,
cite.video,
cite.chapter,
cite.software,
cite.campaign,
cite.song,
cite.speech,
cite.course,
cite.presentation {
font-style: normal; }
cite.smallcite::before,
cite.article::before,
cite.comic-strip::before,
cite.short-story::before,
cite.episode::before,
cite.video::before,
cite.chapter::before,
cite.song::before,
cite.poem::before,
cite.campaign::before,
cite.speech::before,
cite.course::before,
cite.presentation::before {
content: "“"; }
cite.smallcite::after,
cite.article::after,
cite.comic-strip::after,
cite.short-story::after,
cite.episode::after,
cite.video::after,
cite.chapter::after,
cite.song::after,
cite.poem::after,
cite.campaign::after,
cite.speech::after,
cite.course::after,
cite.presentation::after {
content: "”"; }
cite.article--shortcite::before,
cite.article--shortcite::after {
content: none; }
code,
samp,
var,
pre {
font-family: "Input Mono", "Lucida Console", Monaco, monospace;
font-size: 1em; }
pre .nocode {
font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif;
font-size: 1em;
padding: 1px 3px;
border-radius: 6px;
border: dashed 1px black; }
code,
samp,
var {
background-color: #d1d1d1;
border-radius: 5px;
padding: 2px; }
pre {
max-width: 50vw;
overflow: scroll; }
h1 code,
.post-title code,
pre code,
h1 samp,
.post-title samp,
pre samp,
h1 var,
.post-title var,
pre var {
background-color: transparent;
padding: 0; }
.heading code,
.subheading code {
background-color: transparent; }
pre.prettyprint ol {
padding-left: 3.5em; }
pre.prettyprint li {
background: none !important; }
samp {
display: block;
width: 80ch;
margin: 1em 4em;
border-left: 2px solid #ccc;
color: #333; }
kbd {
padding: 0.1em 0.6em;
border: 1px solid #ccc;
font-size: 11px;
font-family: Arial, Helvetica, sans-serif;
background-color: #f7f7f7;
color: #333;
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset;
border-radius: 3px;
display: inline-block;
margin: 0 0.1em;
text-shadow: 0 1px 0 white;
line-height: 1.4;
white-space: nowrap; }
.pre-nominals,
.post-nominals {
font-size: 0.6em;
font-variant: small-caps; }
.site-container {
display: grid;
grid-template-columns: 2.5% 1fr 2.5%;
grid-template-rows: auto 1fr 2.5%;
grid-template-areas: "header header header" "page-container page-container page-container" "footer footer footer";
min-height: calc(100vh - 4em);
border-top: 0; }
@media only screen and (min-width: 1248px) {
.site-container {
margin-bottom: 2em;
grid-template-areas: "header header header" ". page-container ." "footer footer footer";
border: 2px solid black;
margin-left: 2em;
margin-right: 2em; } }
.site-container--homepage {
align-items: center;
grid-template-rows: auto 2.5%;
grid-template-areas: "page-container page-container page-container" "footer footer footer";
margin-top: 2em;
margin-bottom: 2em; }
@media only screen and (min-width: 1248px) {
.site-container--homepage {
border: 2px solid black;
margin-left: 2em;
margin-right: 2em;
grid-template-areas: ". page-container ." "footer footer footer"; } }
.site-container--list, .site-container--section {
align-items: center; }
.site-header {
display: grid;
grid-area: header;
grid-gap: 0;
grid-template-columns: 1fr;
grid-template-rows: auto auto auto auto;
grid-template-areas: "header-title" "header-tagline" "header-icons" "header-nav";
position: sticky;
top: 0;
left: 0;
width: 100%;
text-align: center;
z-index: 1; }
.site-header__title, .site-header__tagline, .site-header__icons, .site-header__nav {
background-color: #fffff0;
margin: 0; }
.site-header__title, .site-header__tagline, .site-header__icons {
padding: 5px 0; }
.site-header__title {
font-weight: normal;
grid-area: header-title; }
.site-header__tagline {
grid-area: header-tagline; }
.site-header__icons {
grid-area: header-icons;
border-bottom: 2px solid #020202;
margin-bottom: 0; }
.site-header__nav {
grid-area: header-nav;
margin: auto;
width: 100%; }
@media only screen and (min-width: 1248px) {
.site-header__nav {
width: 60%; } }
.site-header__nav ul {
margin-top: 0;
margin-bottom: 0; }
.site-header__nav li {
width: calc(100% / 3);
display: block;
float: left;
border-bottom: 2px solid black;
border-left: 1px solid black;
border-right: 1px solid black;
padding: 0.4em;
background-color: inherit; }
.site-header__nav a:first-child li {
border-left: 2px solid black; }
.site-header__nav a:last-child li {
border-right: 2px solid black; }
.site-header__nav li:hover {
background-color: #ffffd0; }
.site-header__nav li a {
width: 100%;
height: 100%;
display: block; }
.site-footer {
grid-area: footer;
display: block;
width: 99%;
/* Overflows right of viewport otherwise */
position: fixed;
bottom: 0; }
.site-footer p {
width: fit-content;
margin: auto;
background: #fffff0;
border: 2px solid black;
padding: 0.4em;
border-bottom: none;
font-size: 0.6em; }
@media only screen and (min-width: 1248px) {
.site-footer p {
font-size: 1em; } }
.site-content {
grid-area: page-container;
margin-left: 1em;
margin-right: 1em; }
@media only screen and (min-width: 1248px) {
.site-content {
margin: 2em; } }
.feed-icon {
display: inline-block;
height: 0.6em;
width: 0.6em;
margin-bottom: 0.2em; }
.link--tile {
text-decoration: none;
box-sizing: border-box;
border: 2px solid transparent; }
.link--tile:hover {
border-color: #020202; }
.item-tile {
display: grid;
min-height: 180px;
grid-template-columns: 5% auto 5%;
grid-template-rows: 2.5% auto 2.5%;
grid-template-areas: ". . ." ". tile-details ." ". . .";
background-size: cover;
background-repeat: no-repeat;
background-position: center; }
.item-tile.lazy {
background-image: none !important; }
.item-tile--heading {
font-size: 3em; }
.item-tile--heading .item-tile__header {
opacity: 1; }
.item-tile--ohwhatohjeez {
border: 2px solid #ff8900; }
.item-tile--oldphaloskepsis {
border: 2px solid #003d52; }
.item-tile--omphaloskepsis {
border: 2px solid #fffff0; }
.item-tile__header {
text-align: center;
background-color: #020202;
opacity: 0.8;
display: grid;
grid-area: tile-details;
grid-template-columns: 5px auto 5px;
grid-template-rows: 0 auto auto auto;
grid-template-areas: ". . ." ". banner ." ". tile-title ." ". tile-subtitle ."; }
.item-tile__banner {
padding: 0.5em 1em 0;
grid-area: banner;
width: auto;
margin-left: auto;
margin-right: auto;
border-radius: 0 0 10px 10px;
text-align: center;
text-decoration: none !important;
line-height: 0.5em;
background-color: #ebebeb; }
.item-tile__title, .item-tile__subtitle {
color: #fffff0;
margin: 0;
font-weight: normal; }
.item-tile__title {
font-size: 1.4em;
grid-area: tile-title;
align-self: center; }
.item-tile__title--long {
font-size: 1em; }
.item-tile__subtitle {
font-size: 0.8em;
grid-area: tile-subtitle;
align-self: start; }
/* TODO: Not currently used */
@media screen and (max-width: 480px) {
.table-scroller {
overflow-x: auto;
width: 320px; } }
table {
border: 1px solid #020202;
margin: auto; }
table td {
padding: 0.5em 1em;
border: 1px solid #020202; }
.site-content--homepage {
text-align: center; }
.site-content--homepage .page-title {
font-size: 2.5em;
margin-bottom: 1em; }
@media only screen and (min-width: 1248px) {
.site-content--homepage .page-title {
font-size: 4em; } }
.site-content--homepage .page-title span {
display: block !important;
font-size: 0.3em; }
.site-content--section,
.site-content--list {
display: grid;
grid-gap: 10px;
grid-template-columns: 0.2fr 1fr 0.2fr;
grid-template-rows: auto auto 60px;
justify-items: center;
align-items: center;
grid-template-areas: "list-page-header list-page-header list-page-header" "list-page-grid list-page-grid list-page-grid" "list-page-footer list-page-footer list-page-footer";
margin-top: 5em; }
@media only screen and (min-width: 1248px) {
.site-content--section,
.site-content--list {
grid-template-areas: ". list-page-header ." "list-page-grid list-page-grid list-page-grid" ". list-page-footer ."; } }
.site-content--section .site-content__header,
.site-content--list .site-content__header {
grid-area: list-page-header;
text-align: center; }
.site-content--section .site-content__header .page-header__minor-links,
.site-content--list .site-content__header .page-header__minor-links {
text-align: center;
margin: auto;
overflow: auto; }
.site-content--section .site-content__header .page-header__minor-links ul,
.site-content--list .site-content__header .page-header__minor-links ul {
list-style: none; }
.site-content--section .site-content__header .page-header__minor-links ul li,
.site-content--list .site-content__header .page-header__minor-links ul li {
float: left;
margin: 0 1em; }
.site-content--section .site-content__header .page-header__minor-links ul li *,
.site-content--list .site-content__header .page-header__minor-links ul li * {
display: inline-block; }
.site-content--section .site-content__header .page-header__minor-links .minor-links__categories,
.site-content--list .site-content__header .page-header__minor-links .minor-links__categories {
width: 100%;
display: block;
font-size: 0.8em !important;
overflow: auto; }
@media only screen and (min-width: 1248px) {
.site-content--section .site-content__header .page-header__minor-links .minor-links__categories,
.site-content--list .site-content__header .page-header__minor-links .minor-links__categories {
font-size: 1em !important; } }
.site-content--section .site-content__header .page-header__minor-links .minor-links__years,
.site-content--list .site-content__header .page-header__minor-links .minor-links__years {
width: 100%;
display: block;
margin: auto;
width: fit-content; }
.site-content--section .site-content__body,
.site-content--list .site-content__body {
width: 100%;
display: grid;
justify-items: stretch;
align-items: stretch;
grid-gap: 10px;
grid-area: list-page-grid;
grid-template-columns: 1fr;
grid-template-rows: repeat(8, 1fr);
justify-items: stretch;
align-items: stretch; }
@media only screen and (min-width: 640px) {
.site-content--section .site-content__body,
.site-content--list .site-content__body {
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(4, 1fr); } }
@media only screen and (min-width: 1248px) {
.site-content--section .site-content__body,
.site-content--list .site-content__body {
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(2, 1fr); } }
.site-content--section .site-content__body--list,
.site-content--list .site-content__body--list {
grid-template-columns: 1fr auto 1fr;
grid-template-rows: auto;
grid-template-areas: ". sections-list ."; }
.site-content--section .site-content__body--chart,
.site-content--list .site-content__body--chart {
grid-template-columns: 1em 100% 1fr;
grid-template-rows: 100%;
grid-template-areas: ". section-chart ."; }
.site-content--section .site-content__footer,
.site-content--list .site-content__footer {
grid-area: list-page-footer; }
.site-content--single {
display: grid;
column-gap: 2em;
grid-template-columns: 0.4fr 0.6fr;
grid-template-rows: auto auto auto; }
.site-content--single .site-content__header, .site-content--single .site-content__footer {
display: grid;
grid-column-start: 1;
grid-column-end: 3;
background-color: #fffff0;
filter: brightness(80%); }
@media only screen and (min-width: 1248px) {
.site-content--single .site-content__header, .site-content--single .site-content__footer {
border: 2px solid #020202;
grid-column-end: 2;
padding: 2em; } }
.site-content--single .site-content__header {
grid-row-start: 1;
grid-row-end: 2;
overflow: auto;
border-bottom: 2px solid #020202;
margin-bottom: 2em; }
.site-content--single .site-content__header .article-header {
text-align: center;
background-color: #020202;
opacity: 0.8;
color: #fffff0;
display: grid;
grid-area: post-header-details;
grid-template-columns: 1fr;
padding: 20px;
grid-template-rows: 1fr auto auto 1fr;
justify-items: center;
align-items: center;
grid-template-areas: "." "post-title" "post-subtitle" "."; }
.site-content--single .site-content__header .article-header__series {
margin: 0 auto 1em;
font-size: 1.2em; }
.site-content--single .site-content__header .article-header__featured-image {
display: grid;
grid-template-columns: 15% 1fr 15%;
grid-template-rows: 20% 1fr 20%;
grid-template-areas: ". . ." ". post-header-details ." ". . .";
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
height: 40vh;
min-height: 380px;
width: 100%;
border: 2px solid #020202; }
.site-content--single .site-content__header .article-header__featured-image .attr {
background-color: #020202;
font-size: 0.7em;
color: #fffff0;
width: fit-content;
position: fixed;
padding: 0.2em 0.5em;
opacity: 0.8;
margin: 0 auto; }
.site-content--single .site-content__header .article-header__featured-image .attr a {
color: #fffff0; }
.site-content--single .site-content__header .article-header__title, .site-content--single .site-content__header .article-header__subtitle {
border-bottom: 2px inset #020202;
margin-top: 0.5em;
margin-bottom: 0.5em;
line-height: 1.2em;
border-bottom: 2px inset #020202;
margin-top: 0.5em;
margin-bottom: 0.5em;
line-height: 1.2em; }
.site-content--single .site-content__header .article-header__title-wrapper {
display: grid;
grid-area: post-header-details;
background-color: #020202;
opacity: 0.8;
text-align: center;
grid-template-columns: 1fr;
padding: 20px;
grid-template-rows: 1fr auto auto 1fr;
justify-items: center;
align-items: center;
grid-template-areas: "." "post-title" "post-subtitle" "."; }
.site-content--single .site-content__header .article-header__title-wrapper--no-title {
visibility: hidden; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__title, .site-content--single .site-content__header .article-header__title-wrapper .article-header__subtitle {
color: #fffff0; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__title {
grid-area: post-title;
font-weight: bold; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__title--long {
font-size: 1.5em; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__subtitle {
grid-area: post-subtitle; }
.site-content--single .site-content__header .article-header__word-count, .site-content--single .site-content__header .article-header__publish-date, .site-content--single .site-content__header .article-header__modified-date {
font-size: 1.2em;
margin: 0.2rem auto; }
.site-content--single .site-content__header .article-header__word-count {
margin-top: 1rem; }
.site-content--single .site-content__header .article-header__notes, .site-content--single .site-content__header .article-header__warnings {
width: 90%;
margin: 1.6em auto;
display: block;
padding-right: 1em; }
.site-content--single .site-content__header .article-header__notes ul, .site-content--single .site-content__header .article-header__warnings ul {
list-style: circle; }
.site-content--single .site-content__header .article-header__notes ul li, .site-content--single .site-content__header .article-header__warnings ul li {
margin: 0.5em 0; }
.site-content--single .site-content__header .article-header__notes {
background-color: #fffff0;
filter: brightness(70%);
border: 1px solid gray; }
.site-content--single .site-content__header .article-header__warnings {
border: 4px solid darkred;
background-color: #fc3a3a;
color: #fffff0;
font-weight: 500; }
.site-content--single .site-content__header .article-header__warnings ul {
list-style: disc; }
.site-content--single .site-content__header .article-header__table-of-contents ul {
list-style-type: arabic;
padding-left: 2em; }
.site-content--single .site-content__body {
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 2;
grid-row-end: 3;
/* Temporary until I've fixed all the figures */
overflow-x: clip;
/* TODO: remove once replaced in content with figures */ }
@media only screen and (min-width: 1248px) {
.site-content--single .site-content__body {
grid-row-start: 1;
grid-row-end: 4;
grid-column-start: 2; } }
.site-content--single .site-content__body .heading {
text-align: center;
font-size: 2em;
font-weight: bold; }
.site-content--single .site-content__body .heading::before,
.site-content--single .site-content__body .heading::after {
content: " ~ "; }
.site-content--single .site-content__body .subheading {
font-size: 1.6em;
border-bottom: 2px inset #020202;
margin-top: 0.5em;
margin-bottom: 0.5em;
line-height: 1.2em;
text-align: center; }
.site-content--single .site-content__body .subheading__subtitle {
font-size: 1em;
border-bottom: 1px dashed #020202;
margin-top: 0;
margin-bottom: 1em;
padding-bottom: 0.5em;
line-height: 1em;
text-align: center;
font-weight: bold;
width: fit-content;
margin: auto;
padding: 0 3em 0.4em; }
.site-content--single .site-content__body blockquote {
padding-left: 1em;
border-left: 2px outset #020202;
display: inline-block;
max-width: 85%; }
.site-content--single .site-content__body blockquote footer {
text-align: right;
font-style: normal;
display: inline-block;
margin-left: 5em; }
.site-content--single .site-content__body blockquote footer::before {
content: "—"; }
.site-content--single .site-content__body blockquote:first-child {
font-size: 1.2em;
text-align: center;
display: block;
margin: 0 auto;
border-left: 0;
padding-left: 0;
width: 100%;
padding-top: 1em;
padding-bottom: 1.2em;
border-top: 2px outset #020202;
border-bottom: 2px inset #020202; }
.site-content--single .site-content__body blockquote p:first-child {
margin-top: 0; }
.site-content--single .site-content__body blockquote p:last-of-type {
margin-bottom: 0.5em; }
.site-content--single .site-content__body blockquote.script {
display: grid;
grid-template-columns: auto 1fr 0.2fr;
padding-bottom: 0.4em;
text-align: left; }
.site-content--single .site-content__body blockquote.script > p::before, .site-content--single .site-content__body blockquote.script > p::after {
content: none !important; }
.site-content--single .site-content__body blockquote.script > .script-line__character {
grid-column: 1;
margin: 0.5em 2em 0.5em 0.5em;
font-style: italic; }
.site-content--single .site-content__body blockquote.script > .script-line__text {
grid-column-start: 2;
grid-column-end: 4;
margin: 0.5em; }
.site-content--single .site-content__body blockquote.script footer {
grid-column-start: 1;
grid-column-end: 3; }
@media only screen and (min-width: 1024px) {
.site-content--single .site-content__body blockquote {
margin: 1em 2em; } }
.site-content--single .site-content__body img,
.site-content--single .site-content__body video {
max-width: 100%;
height: auto;
width: auto;
max-height: 50vh;
margin: auto;
display: block; }
.site-content--single .site-content__body .figure {
margin: 16px auto;
width: fit-content; }
.site-content--single .site-content__body .figure__image {
display: block;
width: auto;
max-width: 100%;
margin: auto;
height: auto;
max-height: 50vh; }
.site-content--single .site-content__body .figure__caption {
height: auto;
margin: auto; }
.site-content--single .site-content__body .figure__caption--no-height {
height: 0; }
.site-content--single .site-content__body .figure__caption .figcaption__caption {
font-size: 0.9em;
font-style: italic;
text-align: center; }
.site-content--single .site-content__body .figure__caption .figcaption__attr {
background-color: #020202;
font-size: 0.7em;
color: #fffff0;
width: fit-content;
top: -2em;
position: relative;
padding: 0.2em 0.5em;
opacity: 0.8;
margin: 0 auto; }
.site-content--single .site-content__body .figure__caption .figcaption__attr + .figcaption__caption {
margin-top: -0.5em; }
.site-content--single .site-content__footer {
grid-row-start: 3;
grid-row-end: 4;
border-top: 2px solid #020202; }
@media only screen and (min-width: 1248px) {
.site-content--single .site-content__footer {
margin-bottom: 2em;
grid-row-start: 2;
grid-row-end: 3; } }
.site-content--single .site-content__footer h2 {
margin: 1rem 0; }
.site-content--single .site-content__footer ul {
margin: 0; }
.site-content--single .site-content__footer #mapdiv {
border: 2px solid #020202; }
.organisations-table {
grid-column-start: 1;
grid-column-end: 5; }
#organisation-body .index {
display: grid;
grid-gap: 6px 5px;
grid-area: items;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: 1fr;
justify-items: stretch;
align-items: stretch;
grid-template-areas: "item1 item2 item3 item4"; }
#organisation-body .index .item:nth-child(1) {
grid-area: item1; }
#organisation-body .index .item:nth-child(2) {
grid-area: item2; }
#organisation-body .index .item:nth-child(3) {
grid-area: item3; }
#organisation-body .index .item:nth-child(4) {
grid-area: item4; }
#organisation-body details {
cursor: pointer;
opacity: 0.7;
border: 2px solid #020202; }
#organisation-body details:hover, #organisation-body details:focus {
opacity: 1; }
#organisation-body summary::marker {
font-size: 2em;
padding-left: 2em; }
#organisation-body summary .subheading {
display: inline;
width: 95%;
padding-bottom: 2em; }
#organisation-body summary .index {
border-top: 2px solid #020202; }
#hierarchy ul {
list-style: none;
padding-left: 1em; }
#hierarchy ul .hierarchy-item:before {
content: '\21B3';
margin: 0 0.4em; }
#hierarchy ul .hierarchy-item--current {
font-weight: bold; }
#hierarchy ul .hierarchy-item--child:before {
content: '\2192'; }
.timeline__legend span {
margin: 0 1em; }
.timeline__legend span * {
display: inline-block; }
.timeline__legend span .colour-square {
width: 1em;
height: 1em;
border-radius: 2.5px;
border: 1px solid #020202; }
.timeline__legend span .colour-square--current {
background-color: #bbbbb0; }
.timeline__legend span .colour-square--past {
background-color: #fffff0; }
.site-content__body--chart #timeline, .site-content__body--chart #map {
width: 100%;
max-width: 100%;
grid-area: section-chart; }
.site-content__body--list .site-content__sections-list {
grid-area: sections-list;
display: block;
list-style: none;
margin: auto;
padding-left: 0; }
.site-content__body--list .site-content__sections-list li * {
display: inline-block; }
@media (prefers-color-scheme: dark) {
/*@import "themes/dark";*/ }

View File

@ -1,984 +0,0 @@
@charset "UTF-8";
/*
Put this file in /static/css/hugo-easy-gallery.css
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
*/
/*
Grid Layout Styles
*/
.gallery {
overflow: hidden; }
.gallery .box {
float: left;
position: relative;
/* Default: 1 tile wide */
width: 100%;
padding-bottom: 100%; }
@media only screen and (min-width: 365px) {
/* Tablet view: 2 tiles */
.gallery .box {
width: 50%;
padding-bottom: 50%; } }
@media only screen and (min-width: 480px) {
/* Small desktop / ipad view: 3 tiles */
.gallery .box {
width: 33.3%;
padding-bottom: 33.3%;
/* */ } }
@media only screen and (min-width: 9999px) {
/* Medium desktop: 4 tiles */
.box {
width: 25%;
padding-bottom: 25%; } }
/*
Transition styles
*/
.gallery.hover-transition figure,
.gallery.hover-effect-zoom .img,
.gallery:not(.caption-effect-appear) figcaption,
.fancy-figure:not(.caption-effect-appear) figcaption {
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out; }
/*
figure styles
*/
figure {
position: relative;
/* purely to allow absolution positioning of figcaption */
overflow: hidden; }
.gallery figure {
position: absolute;
left: 5px;
right: 5px;
top: 5px;
bottom: 5px; }
.gallery.hover-effect-grow figure:hover {
transform: scale(1.05); }
.gallery.hover-effect-shrink figure:hover {
transform: scale(0.95); }
.gallery.hover-effect-slidedown figure:hover {
transform: translateY(5px); }
.gallery.hover-effect-slideup figure:hover {
transform: translateY(-5px); }
/*
img / a styles
*/
.gallery .img {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-size: cover;
background-position: 50% 50%;
background-repeat: no-repeat; }
.gallery.hover-effect-zoom figure:hover .img {
transform: scale(1.05); }
.gallery img {
display: none !important;
/* only show the img if not inside a gallery */ }
.gallery figure a {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0; }
/*
figcaption styles
*/
.gallery figcaption,
.fancy-figure figcaption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: #000;
color: #FFF;
text-align: center;
font-size: 75%;
/* change this if you want bigger text */
background: rgba(0, 0, 0, 0.5);
opacity: 1;
cursor: pointer; }
.gallery.caption-position-none figcaption,
.fancy-figure.caption-position-none figcaption {
display: none; }
.gallery.caption-position-center figcaption,
.fancy-figure.caption-position-center figcaption {
top: 0;
padding: 40% 5px; }
.gallery.caption-position-bottom figcaption,
.fancy-figure.caption-position-bottom figcaption {
padding: 5px; }
.gallery.caption-effect-fade figure:not(:hover) figcaption,
.gallery.caption-effect-appear figure:not(:hover) figcaption,
.fancy-figure.caption-effect-fade figure:not(:hover) figcaption,
.fancy-figure.caption-effect-appear figure:not(:hover) figcaption {
background: rgba(0, 0, 0, 0);
opacity: 0; }
.gallery.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption,
.fancy-figure.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption {
margin-bottom: -100%; }
.gallery.caption-effect-slide.caption-position-center figure:not(:hover) figcaption,
.fancy-figure.caption-effect-slide.caption-position-center figure:not(:hover) figcaption {
top: 100%; }
.gallery figcaption p {
margin: auto;
/* override style in theme */ }
@font-face {
font-family: "Input Mono";
src: url(/fonts/InputMono-Regular.ttf); }
html {
font-size: 16px;
color: #020202;
background-color: #fffff0;
font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; }
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: normal;
margin: 0; }
a {
text-decoration-skip-ink: auto;
color: #020202;
text-decoration: underline;
opacity: 0.8; }
a:hover {
text-decoration: none;
opacity: 1; }
.sic::after {
content: " [sic]";
font-style: italic; }
.latex {
display: inline !important; }
pre {
padding-left: 1em;
border-left: 2px outset #020202;
display: inline-block;
max-width: 85%; }
pre {
overflow: hidden; }
@media only screen and (min-width: 1024px) {
pre {
margin: 1em 2em; } }
q.guillemets {
quotes: "«" "»" "«" "»"; }
q,
blockquote {
quotes: "" "" "“" "”"; }
q::before {
content: open-quote; }
q::after {
content: close-quote; }
cite,
cite.book,
cite.film,
cite.tv-show,
cite.comic,
cite.book,
cite.podcast,
cite.album,
cite.report {
font-style: italic; }
cite.book--proper-noun {
font-style: inherit; }
cite.legislation,
cite.smallcite,
cite.comic-strip,
cite.short-story,
cite.article,
cite.episode,
cite.video,
cite.chapter,
cite.software,
cite.website,
cite.campaign,
cite.song,
cite.speech,
cite.course,
cite.presentation {
font-style: normal; }
cite.smallcite::before,
cite.article::before,
cite.comic-strip::before,
cite.short-story::before,
cite.episode::before,
cite.video::before,
cite.chapter::before,
cite.song::before,
cite.poem::before,
cite.campaign::before,
cite.speech::before,
cite.course::before,
cite.presentation::before {
content: "“"; }
cite.smallcite::after,
cite.article::after,
cite.comic-strip::after,
cite.short-story::after,
cite.episode::after,
cite.video::after,
cite.chapter::after,
cite.song::after,
cite.poem::after,
cite.campaign::after,
cite.speech::after,
cite.course::after,
cite.presentation::after {
content: "”"; }
cite.article--shortcite::before,
cite.article--shortcite::after {
content: none; }
code,
samp,
var,
pre {
font-family: "Input Mono", "Lucida Console", Monaco, monospace;
font-size: 1em; }
pre .nocode {
font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif;
font-size: 1em;
padding: 1px 3px;
border-radius: 6px;
border: dashed 1px black; }
code,
samp,
var {
background-color: #d1d1d1;
border-radius: 5px;
padding: 2px; }
pre {
max-width: 50vw;
overflow: scroll; }
h1 code,
.post-title code,
pre code,
h1 samp,
.post-title samp,
pre samp,
h1 var,
.post-title var,
pre var {
background-color: transparent;
padding: 0; }
.heading code,
.subheading code {
background-color: transparent; }
pre.prettyprint ol {
padding-left: 3.5em; }
pre.prettyprint li {
background: none !important; }
samp {
display: block;
width: 80ch;
margin: 1em 4em;
border-left: 2px solid #ccc;
color: #333; }
kbd {
padding: 0.1em 0.6em;
border: 1px solid #ccc;
font-size: 11px;
font-family: Arial, Helvetica, sans-serif;
background-color: #f7f7f7;
color: #333;
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset;
border-radius: 3px;
display: inline-block;
margin: 0 0.1em;
text-shadow: 0 1px 0 white;
line-height: 1.4;
white-space: nowrap; }
.pre-nominals,
.post-nominals {
font-size: 0.6em;
font-variant: small-caps; }
.site-container {
display: grid;
grid-template-columns: 2.5% 1fr 2.5%;
grid-template-rows: auto 1fr 2.5%;
grid-template-areas: "header header header" "page-container page-container page-container" "footer footer footer";
min-height: calc(100vh - 4em);
border-top: 0; }
.site-container--homepage {
align-items: center;
grid-template-rows: auto 2.5%;
grid-template-areas: "page-container page-container page-container" "footer footer footer";
margin-top: 2em;
margin-bottom: 2em; }
.site-container--list, .site-container--section {
align-items: center; }
.site-header {
display: grid;
grid-area: header;
grid-gap: 0;
grid-template-columns: 1fr;
grid-template-rows: auto auto auto auto;
grid-template-areas: "header-title" "header-tagline" "header-icons" "header-nav";
position: sticky;
top: 0;
left: 0;
width: 100%;
text-align: center;
z-index: 1; }
.site-header__title, .site-header__tagline, .site-header__icons, .site-header__nav {
background-color: #fffff0;
margin: 0; }
.site-header__title, .site-header__tagline, .site-header__icons {
padding: 5px 0; }
.site-header__title {
font-weight: normal;
grid-area: header-title; }
.site-header__tagline {
grid-area: header-tagline; }
.site-header__icons {
grid-area: header-icons;
border-bottom: 2px solid #020202;
margin-bottom: 0; }
.site-header__nav {
grid-area: header-nav;
margin: auto;
width: 100%; }
.site-header__nav ul {
margin-top: 0;
margin-bottom: 0; }
.site-header__nav li {
width: calc(100% / 3);
display: block;
float: left;
border-bottom: 2px solid black;
border-left: 1px solid black;
border-right: 1px solid black;
padding: 0.4em;
background-color: inherit; }
.site-header__nav a:first-child li {
border-left: 2px solid black; }
.site-header__nav a:last-child li {
border-right: 2px solid black; }
.site-header__nav li:hover {
background-color: #ffffd0; }
.site-header__nav li a {
width: 100%;
height: 100%;
display: block; }
.site-footer {
grid-area: footer;
display: block;
width: 99%;
/* Overflows right of viewport otherwise */
position: fixed;
bottom: 0; }
.site-footer p {
width: fit-content;
margin: auto;
background: #fffff0;
border: 2px solid black;
padding: 0.4em;
border-bottom: none;
font-size: 0.6em; }
.site-content {
grid-area: page-container;
margin-left: 1em;
margin-right: 1em; }
.feed-icon {
display: inline-block;
height: 0.6em;
width: 0.6em;
margin-bottom: 0.2em; }
.link--tile {
text-decoration: none;
box-sizing: border-box;
border: 2px solid transparent; }
.link--tile:hover {
border-color: #020202; }
.item-tile {
display: grid;
min-height: 180px;
grid-template-columns: 5% auto 5%;
grid-template-rows: 2.5% auto 2.5%;
grid-template-areas: ". . ." ". tile-details ." ". . .";
background-size: cover;
background-repeat: no-repeat;
background-position: center; }
@media (prefers-reduced-data: reduce) {
.item-tile {
background: none !important; } }
.item-tile.lazy {
background-image: none !important; }
.item-tile--heading {
font-size: 3em; }
.item-tile--heading .item-tile__header {
opacity: 1; }
.item-tile--ohwhatohjeez {
border: 2px solid #ff8900; }
.item-tile--oldphaloskepsis {
border: 2px solid #003d52; }
.item-tile--omphaloskepsis {
border: 2px solid #fffff0; }
.item-tile__header {
text-align: center;
background-color: #020202;
opacity: 0.8;
display: grid;
grid-area: tile-details;
grid-template-columns: 5px auto 5px;
grid-template-rows: 0 auto auto auto;
grid-template-areas: ". . ." ". banner ." ". tile-title ." ". tile-subtitle ."; }
.item-tile__banner {
padding: 0.5em 1em 0;
grid-area: banner;
width: auto;
margin-left: auto;
margin-right: auto;
border-radius: 0 0 10px 10px;
text-align: center;
text-decoration: none !important;
line-height: 0.5em;
background-color: #ebebeb; }
.item-tile__title, .item-tile__subtitle {
color: #fffff0;
margin: 0;
font-weight: normal; }
.item-tile__title {
font-size: 1.4em;
grid-area: tile-title;
align-self: center; }
.item-tile__title--long {
font-size: 1em; }
.item-tile__subtitle {
font-size: 0.8em;
grid-area: tile-subtitle;
align-self: start; }
/* TODO: Not currently used */
@media screen and (max-width: 480px) {
.table-scroller {
overflow-x: auto;
width: 320px; } }
table {
border: 1px solid #020202;
margin: auto; }
table td {
padding: 0.5em 1em;
border: 1px solid #020202; }
.site-content--homepage {
text-align: center; }
.site-content--homepage .page-title {
font-size: 2.5em;
margin-bottom: 1em; }
.site-content--homepage .page-title span {
display: block !important;
font-size: 0.3em; }
.site-content--section,
.site-content--list {
display: grid;
grid-gap: 10px;
grid-template-columns: 0.2fr 1fr 0.2fr;
grid-template-rows: auto auto 60px;
justify-items: center;
align-items: center;
grid-template-areas: "list-page-header list-page-header list-page-header" "list-page-grid list-page-grid list-page-grid" "list-page-footer list-page-footer list-page-footer";
margin-top: 5em; }
.site-content--section .site-content__header,
.site-content--list .site-content__header {
grid-area: list-page-header;
text-align: center; }
.site-content--section .site-content__header .page-header__minor-links,
.site-content--list .site-content__header .page-header__minor-links {
text-align: center;
margin: auto;
overflow: auto; }
.site-content--section .site-content__header .page-header__minor-links ul,
.site-content--list .site-content__header .page-header__minor-links ul {
list-style: none; }
.site-content--section .site-content__header .page-header__minor-links ul li,
.site-content--list .site-content__header .page-header__minor-links ul li {
float: left;
margin: 0 1em; }
.site-content--section .site-content__header .page-header__minor-links ul li *,
.site-content--list .site-content__header .page-header__minor-links ul li * {
display: inline-block; }
.site-content--section .site-content__header .page-header__minor-links .minor-links__categories,
.site-content--list .site-content__header .page-header__minor-links .minor-links__categories {
width: 100%;
display: block;
font-size: 0.8em !important;
overflow: auto; }
.site-content--section .site-content__header .page-header__minor-links .minor-links__years,
.site-content--list .site-content__header .page-header__minor-links .minor-links__years {
width: 100%;
display: block;
margin: auto;
width: fit-content; }
.site-content--section .site-content__body,
.site-content--list .site-content__body {
width: 100%;
display: grid;
justify-items: stretch;
align-items: stretch;
grid-gap: 10px;
grid-area: list-page-grid;
grid-template-columns: 1fr;
grid-template-rows: repeat(8, 1fr);
justify-items: stretch;
align-items: stretch; }
.site-content--section .site-content__body--list,
.site-content--list .site-content__body--list {
grid-template-columns: 1fr auto 1fr;
grid-template-rows: auto;
grid-template-areas: ". sections-list ."; }
.site-content--section .site-content__body--chart,
.site-content--list .site-content__body--chart {
grid-template-columns: 1em 100% 1fr;
grid-template-rows: 100%;
grid-template-areas: ". section-chart ."; }
.site-content--section .site-content__footer,
.site-content--list .site-content__footer {
grid-area: list-page-footer; }
.site-content--single {
display: grid;
column-gap: 2em;
grid-template-columns: 0.4fr 0.6fr;
grid-template-rows: auto auto auto; }
.site-content--single .site-content__header, .site-content--single .site-content__footer {
display: grid;
grid-column-start: 1;
grid-column-end: 3;
background-color: #fffff0;
filter: brightness(80%); }
.site-content--single .site-content__header {
grid-row-start: 1;
grid-row-end: 2;
overflow: auto;
border-bottom: 2px solid #020202;
margin-bottom: 2em; }
.site-content--single .site-content__header .article-header {
text-align: center;
background-color: #020202;
opacity: 0.8;
color: #fffff0;
display: grid;
grid-area: post-header-details;
grid-template-columns: 1fr;
padding: 20px;
grid-template-rows: 1fr auto auto 1fr;
justify-items: center;
align-items: center;
grid-template-areas: "." "post-title" "post-subtitle" "."; }
.site-content--single .site-content__header .article-header__series {
margin: 0 auto 1em;
font-size: 1.2em; }
.site-content--single .site-content__header .article-header__featured-image {
display: grid;
grid-template-columns: 15% 1fr 15%;
grid-template-rows: 20% 1fr 20%;
grid-template-areas: ". . ." ". post-header-details ." ". . .";
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
height: 40vh;
min-height: 380px;
width: 100%;
border: 2px solid #020202; }
.site-content--single .site-content__header .article-header__featured-image .attr {
background-color: #020202;
font-size: 0.7em;
color: #fffff0;
width: fit-content;
position: fixed;
padding: 0.2em 0.5em;
opacity: 0.8;
margin: 0 auto; }
.site-content--single .site-content__header .article-header__featured-image .attr a {
color: #fffff0; }
.site-content--single .site-content__header .article-header__title, .site-content--single .site-content__header .article-header__subtitle {
border-bottom: 2px inset #020202;
margin-top: 0.5em;
margin-bottom: 0.5em;
line-height: 1.2em;
border-bottom: 2px inset #020202;
margin-top: 0.5em;
margin-bottom: 0.5em;
line-height: 1.2em; }
.site-content--single .site-content__header .article-header__title-wrapper {
display: grid;
grid-area: post-header-details;
background-color: #020202;
opacity: 0.8;
text-align: center;
grid-template-columns: 1fr;
padding: 20px;
grid-template-rows: 1fr auto auto 1fr;
justify-items: center;
align-items: center;
grid-template-areas: "." "post-title" "post-subtitle" "."; }
.site-content--single .site-content__header .article-header__title-wrapper--no-title {
visibility: hidden; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__title, .site-content--single .site-content__header .article-header__title-wrapper .article-header__subtitle {
color: #fffff0; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__title {
grid-area: post-title;
font-weight: bold; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__title--long {
font-size: 1.5em; }
.site-content--single .site-content__header .article-header__title-wrapper .article-header__subtitle {
grid-area: post-subtitle; }
.site-content--single .site-content__header .article-header__word-count, .site-content--single .site-content__header .article-header__publish-date, .site-content--single .site-content__header .article-header__modified-date {
font-size: 1.2em;
margin: 0.2rem auto; }
.site-content--single .site-content__header .article-header__word-count {
margin-top: 1rem; }
.site-content--single .site-content__header .article-header__notes, .site-content--single .site-content__header .article-header__warnings {
width: 90%;
margin: 1.6em auto;
display: block;
padding-right: 1em; }
.site-content--single .site-content__header .article-header__notes ul, .site-content--single .site-content__header .article-header__warnings ul {
list-style: circle; }
.site-content--single .site-content__header .article-header__notes ul li, .site-content--single .site-content__header .article-header__warnings ul li {
margin: 0.5em 0; }
.site-content--single .site-content__header .article-header__notes {
background-color: #fffff0;
filter: brightness(70%);
border: 1px solid gray; }
.site-content--single .site-content__header .article-header__warnings {
border: 4px solid darkred;
background-color: #fc3a3a;
color: #fffff0;
font-weight: 500; }
.site-content--single .site-content__header .article-header__warnings ul {
list-style: disc; }
.site-content--single .site-content__header .article-header__table-of-contents ul {
list-style-type: arabic;
padding-left: 2em; }
.site-content--single .site-content__body {
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 2;
grid-row-end: 3;
/* Temporary until I've fixed all the figures */
overflow-x: clip;
/* TODO: remove once replaced in content with figures */ }
.site-content--single .site-content__body .heading {
text-align: center;
font-size: 2em;
font-weight: bold; }
.site-content--single .site-content__body .heading::before,
.site-content--single .site-content__body .heading::after {
content: " ~ "; }
.site-content--single .site-content__body .subheading {
font-size: 1.6em;
border-bottom: 2px inset #020202;
margin-top: 0.5em;
margin-bottom: 0.5em;
line-height: 1.2em;
text-align: center; }
.site-content--single .site-content__body .subheading__subtitle {
font-size: 1em;
border-bottom: 1px dashed #020202;
margin-top: 0;
margin-bottom: 1em;
padding-bottom: 0.5em;
line-height: 1em;
text-align: center;
font-weight: bold;
width: fit-content;
margin: auto;
padding: 0 3em 0.4em; }
.site-content--single .site-content__body .subsubheading {
font-size: 1.4em;
border-bottom: 1px dashed #020202;
margin-top: 1em;
margin-bottom: 1em;
padding-bottom: 0.5em;
line-height: 1em;
text-align: left;
font-weight: bold; }
.site-content--single .site-content__body .subsubsubheading {
font-size: 1.2em;
margin-top: 1em;
margin-bottom: 1em;
line-height: 1em;
text-align: left;
font-weight: bold; }
.site-content--single .site-content__body blockquote {
padding-left: 1em;
border-left: 2px outset #020202;
display: inline-block;
max-width: 85%; }
.site-content--single .site-content__body blockquote footer {
text-align: right;
font-style: normal;
display: inline-block;
margin-left: 5em; }
.site-content--single .site-content__body blockquote footer::before {
content: "—"; }
.site-content--single .site-content__body blockquote:first-child {
font-size: 1.2em;
text-align: center;
display: block;
margin: 0 auto;
border-left: 0;
padding-left: 0;
width: 100%;
padding-top: 1em;
padding-bottom: 1.2em;
border-top: 2px outset #020202;
border-bottom: 2px inset #020202; }
.site-content--single .site-content__body blockquote p:first-child {
margin-top: 0; }
.site-content--single .site-content__body blockquote p:last-of-type {
margin-bottom: 0.5em; }
.site-content--single .site-content__body blockquote.script {
display: grid;
grid-template-columns: auto 1fr 0.2fr;
padding-bottom: 0.4em;
text-align: left; }
.site-content--single .site-content__body blockquote.script > p::before, .site-content--single .site-content__body blockquote.script > p::after {
content: none !important; }
.site-content--single .site-content__body blockquote.script > .script-line__character {
grid-column: 1;
margin: 0.5em 2em 0.5em 0.5em;
font-style: italic; }
.site-content--single .site-content__body blockquote.script > .script-line__text {
grid-column-start: 2;
grid-column-end: 4;
margin: 0.5em; }
.site-content--single .site-content__body blockquote.script footer {
grid-column-start: 1;
grid-column-end: 3; }
@media only screen and (min-width: 1024px) {
.site-content--single .site-content__body blockquote {
margin: 1em 2em; } }
.site-content--single .site-content__body img,
.site-content--single .site-content__body video {
max-width: 100%;
height: auto;
width: auto;
max-height: 50vh;
margin: auto;
display: block; }
.site-content--single .site-content__body .figure {
margin: 16px auto;
width: fit-content; }
.site-content--single .site-content__body .figure__image {
display: block;
width: auto;
max-width: 100%;
margin: auto;
height: auto;
max-height: 50vh; }
.site-content--single .site-content__body .figure__chart {
min-height: 40vh;
max-height: 60vh; }
.site-content--single .site-content__body .figure__caption {
height: auto;
margin: auto; }
.site-content--single .site-content__body .figure__caption--no-height {
height: 0; }
.site-content--single .site-content__body .figure__caption .figcaption__caption {
font-size: 0.9em;
font-style: italic;
text-align: center; }
.site-content--single .site-content__body .figure__caption .figcaption__attr {
background-color: #020202;
font-size: 0.7em;
color: #fffff0;
width: fit-content;
top: -2em;
position: relative;
padding: 0.2em 0.5em;
opacity: 0.8;
margin: 0 auto; }
.site-content--single .site-content__body .figure__caption .figcaption__attr + .figcaption__caption {
margin-top: -0.5em; }
.site-content--single .site-content__body .figure__caption .figcaption__full-size-link {
font-size: 0.6em;
padding-left: 1em; }
.site-content--single .site-content__body .figure__caption .figcaption__full-size-link::before {
content: '['; }
.site-content--single .site-content__body .figure__caption .figcaption__full-size-link::after {
content: ']'; }
.site-content--single .site-content__footer {
grid-row-start: 3;
grid-row-end: 4;
border-top: 2px solid #020202; }
.site-content--single .site-content__footer h2 {
margin: 1rem 0; }
.site-content--single .site-content__footer ul {
margin: 0; }
.site-content--single .site-content__footer #mapdiv {
border: 2px solid #020202; }
.organisations-table {
grid-column-start: 1;
grid-column-end: 5; }
#organisation-body .index {
display: grid;
grid-gap: 6px 5px;
grid-area: items;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: 1fr;
justify-items: stretch;
align-items: stretch;
grid-template-areas: "item1 item2 item3 item4"; }
#organisation-body .index .item:nth-child(1) {
grid-area: item1; }
#organisation-body .index .item:nth-child(2) {
grid-area: item2; }
#organisation-body .index .item:nth-child(3) {
grid-area: item3; }
#organisation-body .index .item:nth-child(4) {
grid-area: item4; }
#organisation-body details {
cursor: pointer;
opacity: 0.7;
border: 2px solid #020202; }
#organisation-body details:hover, #organisation-body details:focus {
opacity: 1; }
#organisation-body summary::marker {
font-size: 2em;
padding-left: 2em; }
#organisation-body summary .subheading {
display: inline;
width: 95%;
padding-bottom: 2em; }
#organisation-body summary .index {
border-top: 2px solid #020202; }
#hierarchy ul {
list-style: none;
padding-left: 1em; }
#hierarchy ul .hierarchy-item:before {
content: '\21B3';
margin: 0 0.4em; }
#hierarchy ul .hierarchy-item--current {
font-weight: bold; }
#hierarchy ul .hierarchy-item--child:before {
content: '\2192'; }
.timeline__legend span {
margin: 0 1em; }
.timeline__legend span * {
display: inline-block; }
.timeline__legend span .colour-square {
width: 1em;
height: 1em;
border-radius: 2.5px;
border: 1px solid #020202; }
.timeline__legend span .colour-square--unpaid-current {
background-color: #bbbbb0; }
.timeline__legend span .colour-square--unpaid-past {
background-color: #fffff0; }
.timeline__legend span .colour-square--paid-current {
background-color: #BCBC7E; }
.timeline__legend span .colour-square--paid-past {
background-color: #FCFCA6; }
.site-content__body--chart #timeline, .site-content__body--chart #map {
width: 100%;
max-width: 100%;
grid-area: section-chart; }
.site-content__body--list .site-content__sections-list {
grid-area: sections-list;
display: block;
list-style: none;
margin: auto;
padding-left: 0; }
.site-content__body--list .site-content__sections-list li * {
display: inline-block; }
@media (prefers-color-scheme: dark) {
html,
.site-header {
color: #fffff0;
background-color: #020202; }
.site-header__nav li {
color: #fffff0;
border-color: #fffff0; }
.site-header__nav li:hover {
background-color: #020202; }
.site-header__title a {
color: #fffff0; }
.item-tile--heading, .item-tile__header {
background-color: #fffff0; }
.item-tile--heading, .item-tile__header, .item-tile__title, .item-tile__subtitle {
color: #020202; } }

View File

@ -0,0 +1,22 @@
@media print {
html {
font-size: 12pt; }
/*
a::after {
content: " (" attr(href) ")";
}
*/
.site-header,
.site-footer {
display: none; }
.site-content {
column-width: 17em;
column-gap: 3em;
widows: 3;
orphans: 3; }
.site-content--single .site-content__header, .site-content--single .site-content__footer, .site-content--single .site-content .article__links {
background-color: none; }
.site-content .figure {
break-inside: avoid; }
.site-content .figure--gallery {
break-inside: auto; } }

BIN
images/feed-icon.svg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
images/layers-2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
images/layers.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

BIN
images/marker-icon-2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
images/marker-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/marker-shadow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

View File

@ -11,19 +11,61 @@ function drawChart() {
dataTable.addColumn({ type: 'date', id: 'End' });
dataTable.addRows([
[
"Accessibility Standing Group",
"Member",
"#BBBBB0",
new Date("2023-07-12"),
new Date("2023-08-07")
],
[
"Online Safety SIG",
"Member",
"#BBBBB0",
new Date("2023-07-12"),
new Date("2023-08-07")
],
[
"Youth Standing Group",
"Member",
"#BBBBB0",
new Date("2023-07-12"),
new Date("2023-08-07")
],
[
"Centro de Derechos Humanos Fray Bartolomé de las Casas, La Organización Sociedad Civil Las Abejas de Acteal",
"BriCO Volunteer",
"#FFFFF0",
new Date("2023-06-26"),
new Date("2023-07-13")
],
[
"Centro de Español y Lenguas Mayas Rebelde Autónomo Zapatista",
"Student",
"#FFFFF0",
new Date("2023-06-05"),
new Date("2023-06-23")
],
[
"Instituto Cubano de Amistad con los Pueblos, Cuba Solidarity Campaign",
"Brigadista, XVI Brigada Internacional Primero de May",
"#FFFFF0",
new Date("2023-04-23"),
new Date("2023-05-12")
],
[
"Workaway, Volcano Day",
"Workawayer",
"#BBBBB0",
new Date("2023-03-26"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Cuba Solidarity Campaign",
"Member",
"#BBBBB0",
new Date("2023-03-03"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Workaway, Hospedaje Wounaan",
@ -51,7 +93,7 @@ function drawChart() {
"Developer",
"#BBBBB0",
new Date("2023-01-19"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Workaway, Finca DeLaRey",
@ -82,18 +124,18 @@ function drawChart() {
new Date("2022-11-24")
],
[
"Morecambe Net",
"Self-Employed, Morecambe Net",
"Web Developer",
"#BCBC7E",
"#FCFCA6",
new Date("2022-10-26"),
new Date("2023-04-13")
new Date("2023-02-01")
],
[
"Chartered Institute for Information Security",
"Associate Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-08-09"),
new Date("2023-04-13")
new Date("2023-05-31")
],
[
"West Lancs Scouts Active Support",
@ -105,114 +147,114 @@ function drawChart() {
[
"Advanced Programming Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Computer Arts Society",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Computer Conservation Society",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Consultancy Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Enterprise Architecture Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Green IT Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Health & Care Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Internet Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Information Risk Management and Assurance Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Information Security Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"IT Ethics Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Law Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"BCS Nottingham & Derby Branch",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Open Source Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Sociotechnical Specialist Group",
"Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"BCS, the Chartered Institute for IT",
"Professional Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-06-06"),
new Date("2023-04-13")
new Date("2023-05-26")
],
[
"Chartered Institute for Information Security",
@ -231,9 +273,9 @@ function drawChart() {
[
"BCS, the Chartered Institute for IT",
"Student Member",
"#BBBBB0",
"#FFFFF0",
new Date("2022-05-26"),
new Date("2023-04-13")
new Date("2022-06-06")
],
[
"MORS Cyber CoP",
@ -275,7 +317,7 @@ function drawChart() {
"Supporter",
"#BBBBB0",
new Date("2022-01-14"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Actica Consulting",
@ -331,14 +373,14 @@ function drawChart() {
"Member",
"#BBBBB0",
new Date("2021-09-24"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Mountain Training Association",
"Trainee Member",
"#BBBBB0",
new Date("2021-08-24"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"North West Area Meeting",
@ -352,7 +394,7 @@ function drawChart() {
"Member",
"#BBBBB0",
new Date("2021-07-26"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Lancaster Quaker Meeting",
@ -397,19 +439,12 @@ function drawChart() {
new Date("2022-04-15")
],
[
"Morecambe Net",
"Self-Employed, Morecambe Net",
"Web Developer",
"#FCFCA6",
new Date("2021-01-24"),
new Date("2021-10-03")
],
[
"CSS Selectors as Fragment Identifiers Community Group",
"Participant",
"#BBBBB0",
new Date("2021-01-23"),
new Date("2023-04-13")
],
[
"footnotes",
"Contributor",
@ -417,6 +452,13 @@ function drawChart() {
new Date("2021-01-23"),
new Date("2022-03-08")
],
[
"CSS Selectors as Fragment Identifiers Community Group",
"Participant",
"#FFFFF0",
new Date("2021-01-23"),
new Date("2023-04-07")
],
[
"The Scout Association",
"UK Contingent 16th World Scout Moot",
@ -443,7 +485,7 @@ function drawChart() {
"Member",
"#BBBBB0",
new Date("2020-09-29"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Executive Committee",
@ -464,14 +506,7 @@ function drawChart() {
"Website Content Manager",
"#BBBBB0",
new Date("2020-08-31"),
new Date("2023-04-13")
],
[
"Unity2020",
"Volunteer",
"#FFFFF0",
new Date("2020-07-08"),
new Date("2020-08-21")
new Date("2023-08-07")
],
[
"Digital & Data Scout Active Support Unit",
@ -618,14 +653,14 @@ function drawChart() {
"Associate Member",
"#BBBBB0",
new Date("2019-04-01"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Youth Hostel Association",
"Company Member",
"#BBBBB0",
new Date("2019-02-20"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Friends of Lancaster Library",
@ -807,14 +842,14 @@ function drawChart() {
"Member",
"#BBBBB0",
new Date("2018-06-20"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"UK England Chapter",
"Member",
"#BBBBB0",
new Date("2018-06-13"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Community Networks SIG",
@ -828,14 +863,14 @@ function drawChart() {
"Member",
"#BBBBB0",
new Date("2018-06-06"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Internet Society",
"Member",
"#BBBBB0",
new Date("2018-06-04"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Mitigate Cyber",
@ -979,7 +1014,7 @@ function drawChart() {
],
[
"Graduate College",
"MCR Member",
"Member",
"#FFFFF0",
new Date("2017-10-05"),
new Date("2018-12-12")
@ -1024,7 +1059,7 @@ function drawChart() {
"Member",
"#BBBBB0",
new Date("2017-06-06"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Lonsdale District Scout Network, Scout Network",
@ -1087,7 +1122,7 @@ function drawChart() {
"Member",
"#BBBBB0",
new Date("2016-12-19"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Pendle College, Lancaster University Students' Union",
@ -1458,7 +1493,7 @@ function drawChart() {
"Librarian",
"#BBBBB0",
new Date("2013-05-01"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Patient Participation Group",
@ -1514,7 +1549,7 @@ function drawChart() {
"Minister",
"#BBBBB0",
new Date("2012-01-01"),
new Date("2023-04-13")
new Date("2023-08-07")
],
[
"Salvation Army",

View File

View File

@ -1 +1 @@
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="{{ range after 1 ( seq .Level ) }}sub{{ end }}heading">{{ .Text | safeHTML }} <a class="heading-anchor" href="#{{ .Anchor | safeURL }}"></a></h{{ .Level }}>
<h{{ .Level }} id="{{ .Anchor }}" class="{{ range after 1 ( seq .Level ) }}sub{{ end }}heading">{{ .Text | safeHTML }} <a class="heading-anchor" href="#{{ .Anchor }}"></a></h{{ .Level }}>

View File

@ -1 +0,0 @@
{{- with 1 -}}{{- end -}}<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>{{- with 1 -}}{{- end -}}

View File

@ -2,12 +2,11 @@
{{ partialCached "copying.html" . }}
<html lang="en-gb" itemscope itemtype="https://schema.org/WebSite">
<html class="h-card" lang="en-gb" itemscope itemtype="https://schema.org/Blog">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, intitial-scale=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex">
<!--<meta http-equiv="Content-Security-Policy" content="default-src 'self'">-->
<meta name="theme-color" content="#FFFFF0">
<meta name="description" content="{{ block "head-description" . }}{{ $.Site.Params.description | html }}{{ end }}">
<meta name="twitter:dnt" content="on">
@ -15,35 +14,48 @@
<title itemprop="name">{{- block "title" . -}}{{- .Site.Title }} | {{ .Site.Params.tagline -}}{{- end -}}</title>
<link rel="license" href="{{ block "head-license" . }}https://creativecommons.org/publicdomain/zero/1.0/{{ end }}">
<link rel="me" href="mailto:me+bg@bengoldsworthy.net">
<link rel="icon" sizes="192x192" href="/images/icon.png">
{{ with .OutputFormats.Get "rss" }}<link rel="{{ .Rel }}" type="{{ .MediaType.Type | html }}" href="{{ .RelPermalink }}" title="{{ $.Site.Title | safeHTML }}" />{{ end }}
<link class="u-url u-uid" rel="me" href="{{ .Site.Home.Permalink }}">
<link class="u-email" rel="me" href="mailto:me+bg@bengoldsworthy.net">
<link class="u-url" rel="me" href="https://github.com/Rumperuu">
<link class="u-url" rel="me" href="https://news.ycombinator.com/user?id=Rumperuu">
<link class="u-logo" rel="icon" sizes="192x192" href="/images/icon.png">
<link class="u-key" rel="author" href="{{ .Site.Params.keyfile }}">
<link rel="canonical" href="{{ .Permalink }}">
{{ with .OutputFormats.Get "rss" -}}
<link rel="{{ .Rel }}" type="{{ .MediaType.Type | html }}" href="{{ .RelPermalink }}" title="{{ $.Site.Title | safeHTML }}" />
{{- end }}
<link href="/css/sanitize.css" rel="stylesheet" />
{{- $sass := resources.Get "css/main.scss" }}
{{- $style := $sass | resources.ToCSS | resources.Fingerprint }}
<link rel="stylesheet" type="text/css" href="{{ $style.Permalink }}" integrity="{{ $style.Data.Integrity | html }}">
{{- block "header-styles" . -}}<!-- -->{{- end -}}
{{- $mainStylesheet := resources.Get "css/main.scss" }}
{{- $mainStylesheet := $mainStylesheet | resources.ToCSS | resources.Fingerprint }}
<link rel="stylesheet" type="text/css" href="{{ $mainStylesheet.Permalink }}" integrity="{{ $mainStylesheet.Data.Integrity | html }}">
{{- $printStylesheet := resources.Get "css/print.scss" }}
{{- $printStylesheet := $printStylesheet | resources.ToCSS | resources.Fingerprint }}
<link rel="stylesheet" media="print" href="{{ $printStylesheet.Permalink }}" integrity="{{ $printStylesheet.Data.Integrity | html }}">
{{- block "header-scripts" . -}}<!-- -->{{- end -}}
{{- block "header-styles" . -}}<!-- -->{{- end -}}
</head>
<body class="site-container site-container{{ block "main-class" . }}{{ end }}">
<body class="site-container site-container{{ block "main-class" . }} layouts-default-baseof{{ end }}">
{{ block "header" . -}}
{{- partialCached "header/site-header.html" . -}}
{{- end }}
<main class="site-content site-content{{ block "main-class" . }}{{ end }}" itemscope itemtype="{{ block "main-type" . }}https://schema.org/Thing{{ end }}">
<article class="{{ block "article-class" . }}h-entry {{ end }}site-content site-content{{ block "main-class" . }}{{ end }}" itemscope itemtype="https://schema.org/BlogPosting">
{{ block "main-header" . }}{{ end }}
{{ block "main-body" . }}{{ end }}
{{ block "main-footer" . }}{{ end }}
</main>
</article>
{{- block "footer" . -}}
<footer class="site-footer">
<p>
By <a href="/">{{ $.Site.Author.name }}</a> |
<a href="{{ $.Site.Params.reportIssueURL }}" target="_blank" rel="noopener noreferrer">Report an Issue</a> |
<a href="{{ $.Site.Params.codeURL }}{{ $.Site.Params.reportIssueURL }}">Report an Issue</a> |
<a href="{{ relref . "privacy-policy" }}">Privacy Policy</a> |
<a href="/{{ .Sitemap.Filename }}">Sitemap</a> |
Built: {{ now.Format "2006-01-02T15:04:05" }}

View File

@ -2,17 +2,17 @@
{{ .Type | singularize }}: &lsquo;{{ .Page.Title | plainify }}&rsquo; | {{ .Site.Title }}
{{ end }}
{{ define "main-class" }}--list{{ end}}
{{ define "main-class" }}--list layouts-default-list{{ end}}
{{ define "main-header" }}
<header class="site-content__header">
<h1 class="page-title">{{ .Type | singularize }}: <q>{{ .Title | safeHTML }}</q>
<h2 class="page-title">{{ .Type | singularize }}: <q>{{ .Title | safeHTML }}</q>
{{ range .AlternativeOutputFormats -}}
<a href="{{ .RelPermalink }}">
<img class="feed-icon" src="/images/feed-icon.png">
<a href="{{ .RelPermalink }}" aria-label="{{ $.Title }} RSS feed">
<img class="feed-icon" alt="RSS icon" src="{{ $.Site.Params.feedIcon }}">
</a>
{{ end }}
</h1>
</h2>
{{ .Content }}
<nav class="page-header__minor-links">

View File

@ -2,7 +2,7 @@
{{ .Page.Title | plainify }} | {{ .Site.Title }}
{{ end }}
{{ define "main-class" }}--section{{ end }}
{{ define "main-class" }}--section layouts-default-section{{ end }}
{{ define "main-type" }}.{{ .Params.mainType }}{{ end }}
{{ define "item-type" }}{{ .Params.itemsType }}{{ end }}
@ -10,13 +10,13 @@
{{ define "main-header" }}
<header class="site-content__header">
<h1 class="page-title">{{ .Title | safeHTML }}
<h2 class="page-title">{{ .Title | safeHTML }}
{{ range .AlternativeOutputFormats -}}
<a href="{{ .RelPermalink }}">
<img class="feed-icon" src="/images/feed-icon.png">
<a href="{{ .RelPermalink }}" aria-label="{{ $.Title }} RSS feed">
<img class="feed-icon" alt="RSS icon" src="{{ $.Site.Params.feedIcon }}">
</a>
{{ end }}
</h1>
</h2>
{{ .Content }}
</header>
{{ end }}

View File

@ -2,47 +2,57 @@
{{ define "head-description" }}{{ .Summary | plainify }}{{ end }}
{{ define "main-class" }}--single{{ end }}
{{ define "main-class" }}--single layouts-default-single{{ end }}
{{ define "header-scripts" }}
{{ with .Params.locations }}
{{ $mapJS := resources.Get "js/leaflet.js" | fingerprint }}
<script id="Map-script" src="{{ $mapJS.Permalink }}" integrity="{{ $mapJS.Data.Integrity }}"></script>
{{ end }}
{{ end }}
{{ define "header-styles" }}
{{ with .Params.styles }}
<link rel="stylesheet" type="text/css" href="{{ ( $.Page.Resources.GetMatch "style").RelPermalink }}">
{{ end }}
{{ with .Params.locations }}
<link rel="stylesheet" href="/css/leaflet.css">
{{ end }}
{{ end }}
{{ define "footer-scripts" }}
{{ with .Params.locations }}
<script src="https://www.openlayers.org/api/OpenLayers.js"></script>
<script>
map = new OpenLayers.Map("mapdiv");
map.addLayer(new OpenLayers.Layer.OSM());
<script>
var map = L.map('map').setView([55, -3], 13);
var lonLats = [];
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
var latLons = [];
{{ range . }}
{{ with ( index $.Site.Data.locations . ) }}
lonLats.push(new OpenLayers.LonLat( {{ .lon }} , {{ .lat }} )
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
map.getProjectionObject() // to Spherical Mercator Projection
));
{{ with ( index $.Site.Data.locations . ) }}
L.marker([{{ .lat }}, {{ .lon }}]).addTo(map);
latLons.push([{{ .lat }}, {{ .lon }}]);
{{ else }}
{{ warnf "Could not find lat-lon for %q (%q)" . $.File.Path }}
{{ end }}
{{ end }}
/* TODO: Smarter zoom selection */
var zoom=5;
var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
for (var i = 0; i < lonLats.length; i++) {
markers.addMarker(new OpenLayers.Marker(lonLats[i]));
}
/* TODO: Smarter centering */
map.setCenter(lonLats[0], zoom);
map.fitBounds(latLons);
</script>
{{ end }}
{{ with .Params.scripts }}
{{ if in . "mathjax" }}
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="/js/mathjax-config.js"></script>
<script src="/js/polyfill.js"></script>
<script id="MathJax-script" async src="/js/mathjax/tex-chtml.js"></script>
<script src="/js/mathjax/config.js"></script>
{{ end }}
{{ if in . "charts" }}
{{ $chartsCoreJS := resources.Get "js/chart.js" | fingerprint }}
{{ $chartsConfigJS := $.Page.Resources.GetMatch "charts-init" }}
<script id="Charts-script" src="{{ $chartsCoreJS.Permalink }}" integrity="{{ $chartsCoreJS.Data.Integrity }}"></script>
<script id="Charts-config-script" src="{{ $chartsConfigJS.Permalink }}"></script>
{{ end }}
{{ end }}
{{ end }}
@ -58,12 +68,12 @@
{{ end }}
{{ end }}>
<div class="article-header__title-wrapper">
<h1 class="article-header__title{{ if gt ( len ( .Title | plainify ) ) 40 }} article-header__title--long{{ end }}">
<h2 class="article-header__title{{ if gt ( len ( .Title | plainify ) ) 40 }} article-header__title--long{{ end }}">
<span role="text" itemprop="name">{{ .Title | safeHTML }}</span>
</h1>
{{ with .Params.subtitle }}
<p class="article-header__subtitle">{{ . | safeHTML }}</p>
{{ end }}
</h2>
{{ with .Params.subtitle }}
<p class="article-header__subtitle">{{ . | safeHTML }}</p>
{{ end }}
</div>
{{ with .Resources.GetMatch .Params.featured_image }}
<p class="attr">
@ -102,7 +112,7 @@
{{ if and ( .TableOfContents ) ( ne .TableOfContents "<nav id=\"TableOfContents\"></nav>" ) }}
<nav class="article-header__table-of-contents">
<h2 class="article-header__subtitle">Table of Contents</h2>
<h3 class="article-header__subtitle">Table of Contents</h3>
{{ .TableOfContents }}
</nav>
{{ end }}
@ -110,9 +120,39 @@
{{ end }}
{{ define "main-body" }}
<article class="site-content__body">
<section class="site-content__body">
{{- if ( or .Params.internal_links .Params.external_links ) -}}
<section class="article__links">
{{- with .Params.internal_links -}}
<h3>Internal Links</h3>
<ul>
{{- range . -}}
{{ if eq ( printf "%T" . ) "map[string]interface {}" }}
<li><a href="{{ .link }}">{{ .title | safeHTML }}</a></li>
{{ else }}
<li><a href="{{ . }}">Link</a></li>
{{ end }}
{{- end -}}
</ul>
{{- end -}}
{{- with .Params.external_links -}}
<h3>External Links</h3>
<ul>
{{- range . -}}
{{ if eq ( printf "%T" . ) "map[string]interface {}" }}
<li><a href="{{ .link }}" rel="noopener noreferrer" target="_blank">{{ .title | safeHTML }}</a></li>
{{ else }}
<li><a href="{{ . }}" rel="noopener noreferrer" target="_blank">Link</a></li>
{{ end }}
{{- end -}}
</ul>
{{- end -}}
</section>
{{- end -}}
{{ .Content }}
</article>
</section>
{{ end }}
{{ define "main-footer" }}

View File

@ -2,7 +2,7 @@
{{ .Page.Title | plainify }} | {{ .Site.Title }}
{{ end }}
{{ define "main-class" }}--section{{ end }}
{{ define "main-class" }}--section layouts-blog-section{{ end }}
{{ define "main-type" }}{{ .Params.mainType }}{{ end }}
@ -63,30 +63,30 @@
{{ define "main-header" }}
<header class="site-content__header">
<h1 class="page-title">{{ .Title | safeHTML }}
<h2 class="page-title">{{ .Title | safeHTML }}
{{ if eq .Type "blog" }}
{{ with .GetPage "blog/posts" }}
{{ range .AlternativeOutputFormats -}}
<a href="{{ .RelPermalink }}">
<img class="feed-icon" src="{{ $.Site.Params.feedIcon }}">
<a href="{{ .RelPermalink }}" aria-label="{{ $.Title }} RSS feed">
<img class="feed-icon" alt="RSS icon" src="{{ $.Site.Params.feedIcon }}">
</a>
{{ end }}
{{ end }}
{{ else }}
{{ range .AlternativeOutputFormats -}}
<a href="{{ .RelPermalink }}">
<img class="feed-icon" src="{{ $.Site.Params.feedIcon }}">
</a>
{{ end }}
<a href="{{ .RelPermalink }}" aria-label="{{ $.Title }} RSS feed">
<img class="feed-icon" alt="RSS icon" src="{{ $.Site.Params.feedIcon }}">
</a>
{{ end }}
{{ end }}
</h1>
</h2>
{{ .Content }}
<nav class="page-header__minor-links">
<ul class="minor-links__categories">
<li><a href="/series"><h2>Series</h2></a> <p>({{ len .Site.Taxonomies.series }})</p></li>
<li><a href="/series"><h3>Series</h3></a> <p>({{ len .Site.Taxonomies.series }})</p></li>
{{ range .Site.Taxonomies.categories }}
<li><a href="{{ .Page.RelPermalink }}"><h2>{{ .Page.Title | safeHTML }}</h2></a> <p>({{ len . }})</p></li>
<li><a href="{{ .Page.RelPermalink }}"><h3>{{ .Page.Title | safeHTML }}</h3></a> <p>({{ len . }})</p></li>
{{ end }}
</ul>
{{ if eq .Type "blog" }}

View File

@ -2,57 +2,57 @@
&ldquo;{{ .Title | plainify }}&rdquo; | {{ .Site.Title }}
{{ end }}
{{ define "main-class" }}--single{{ end }}
{{ define "main-class" }}--single layouts-blog-single{{ end }}
{{ define "header-scripts" }}
{{ with .Params.locations }}
{{ $mapJS := resources.Get "js/leaflet.js" | fingerprint }}
<script id="Map-script" src="{{ $mapJS.Permalink }}" integrity="{{ $mapJS.Data.Integrity }}"></script>
{{ end }}
{{ end }}
{{ define "header-styles" }}
{{ with .Params.styles }}
<link rel="stylesheet" type="text/css" href="{{ ( $.Page.Resources.GetMatch "style").RelPermalink }}">
{{ end }}
{{ with .Params.locations }}
<link rel="stylesheet" href="/css/leaflet.css">
{{ end }}
{{ end }}
{{ define "footer-scripts" }}
{{ with .Params.locations }}
<script src="https://www.openlayers.org/api/OpenLayers.js"></script>
<script>
map = new OpenLayers.Map("mapdiv");
map.addLayer(new OpenLayers.Layer.OSM());
<script>
var map = L.map('map').setView([55, -3], 13);
var lonLats = [];
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
var latLons = [];
{{ range . }}
{{ with ( index $.Site.Data.locations . ) }}
lonLats.push(new OpenLayers.LonLat( {{ .lon }} , {{ .lat }} )
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
map.getProjectionObject() // to Spherical Mercator Projection
));
{{ with ( index $.Site.Data.locations . ) }}
L.marker([{{ .lat }}, {{ .lon }}]).addTo(map);
latLons.push([{{ .lat }}, {{ .lon }}]);
{{ else }}
{{ warnf "Could not find lat-lon for %q (%q)" . $.File.Path }}
{{ end }}
{{ end }}
/* TODO: Smarter zoom selection */
var zoom=5;
var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
for (var i = 0; i < lonLats.length; i++) {
markers.addMarker(new OpenLayers.Marker(lonLats[i]));
}
/* TODO: Smarter centering */
map.setCenter(lonLats[0], zoom);
map.fitBounds(latLons);
</script>
{{ end }}
{{ with .Params.scripts }}
{{ if in . "mathjax" }}
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="/js/mathjax-config.js"></script>
<script src="/js/polyfill.js"></script>
<script id="MathJax-script" async src="/js/mathjax/tex-chtml.js"></script>
<script src="/js/mathjax/config.js"></script>
{{ end }}
{{ if in . "charts" }}
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="{{ ( $.Page.Resources.GetMatch "charts-init").RelPermalink }}"></script>
{{ $chartsCoreJS := resources.Get "js/chart.js" | fingerprint }}
{{ $chartsConfigJS := $.Page.Resources.GetMatch "charts-init" }}
<script id="Charts-script" src="{{ $chartsCoreJS.Permalink }}" integrity="{{ $chartsCoreJS.Data.Integrity }}"></script>
<script id="Charts-config-script" src="{{ $chartsConfigJS.Permalink }}"></script>
{{ end }}
{{ end }}
{{ end }}
@ -62,25 +62,53 @@
{{ if .Params.series }}
<p class="article-header__series">Part of series:
{{ range ( .GetTerms "series" ) }}
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
<a class="u-url" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
{{ end }}
</p>
{{ end }}
{{ with .Params.featured_image }}
<img class="u-photo" style="display: none;" src="
{{- with ( $.Resources.GetMatch . ) -}}
{{- if eq .MediaType.SubType "svg" -}}
{{- .RelPermalink -}}
{{- else }}
{{- with .Resize "1200x webp" -}}
{{- .RelPermalink -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{- . -}}
{{- end -}}
"
itemprop="image"
{{- with ( $.Resources.GetMatch . ) -}}
alt="{{ .Params.alt }}"
{{- end -}}
/>
{{ end }}
<div class="article-header__featured-image"
{{ if .Params.featured_image }}
{{ if .Resources.GetMatch .Params.featured_image }}
style="background-image: url({{ ( .Resources.GetMatch .Params.featured_image ).RelPermalink }})"
{{ with .Resources.GetMatch .Params.featured_image }}
{{ if eq .MediaType.SubType "svg" }}
style="background-image: url({{ .RelPermalink }})"
{{ else }}
{{ with .Resize "1500x webp" }}
style="background-image: url({{ .RelPermalink }})"
{{ end }}
{{ end }}
{{ else }}
style="background-image: url({{ .Params.featured_image }})"
{{ end }}
{{ end }}>
<div class="article-header__title-wrapper">
<h1 class="article-header__title{{ if gt ( len ( .Title | plainify ) ) 40 }} article-header__title--long{{ end }}">
<span role="text" itemprop="name">{{ .Title | safeHTML }}</span>
</h1>
{{ with .Params.subtitle }}
<p class="article-header__subtitle">{{ . | safeHTML }}</p>
{{ end }}
{{ end -}}
>
<div class=" article-header__title-wrapper">
<p class="p-name" style="display: none;" itemprop="name"><a class="u-url u-uid" href="{{ .Permalink }}">{{ .Title | safeHTML }}{{ with .Params.subtitle }}: {{ . | safeHTML }}{{ end }}</a></p>
<h2 class="article-header__title{{ if gt ( len ( .Title | plainify ) ) 40 }} article-header__title--long{{ end }}">
{{- .Title | safeHTML -}}
</h2>
{{ with .Params.subtitle }}
<p class="article-header__subtitle">{{ . | safeHTML }}</p>
{{ end }}
</div>
{{ with .Resources.GetMatch .Params.featured_image }}
<p class="attr">
@ -93,8 +121,27 @@
</div>
<p class="article-header__word-count">~<span itemprop="wordCount">{{ .FuzzyWordCount | lang.NumFmt 0 }}</span> words</p>
<p class="article-header__publish-date">Published: <span itemprop="datePublished" datetime="{{ .PublishDate }}">{{ .PublishDate.Format "January 2" }}<sup>{{ if in (slice 1 21 31) .PublishDate.Day}}st{{ else if in (slice 2 22) .PublishDate.Day}}nd{{ else if in (slice 3 23) .PublishDate.Day}}rd{{ else }}th{{ end }}</sup>, 1{{ .PublishDate.Format "2006" | lang.NumFmt 0 }}&nbsp;<abbr style="text-transform: small-caps; font-size: 0.8em;" title="Holocene Era">HE</abbr></span></p>
<p class="article-header__modified-date">Last modified: <span itemprop="dateModified" datetime="{{ .Lastmod }}">{{ .Lastmod.Format "January 2" }}<sup>{{ if in (slice 1 21 31) .Lastmod.Day}}st{{ else if in (slice 2 22) .Lastmod.Day}}nd{{ else if in (slice 3 23) .Lastmod.Day}}rd{{ else }}th{{ end }}</sup>, 1{{ .Lastmod.Format "2006" | lang.NumFmt 0 }}&nbsp;<abbr style="text-transform: small-caps; font-size: 0.8em;" title="Holocene Era">HE</abbr></span></p>
<p class="article-header__publish-date">Published: <time class="dt-published" datetime="{{ .PublishDate | time.Format "2006-01-02T15:04:05-07:00" }}" itemprop="datePublished">{{ .PublishDate.Format "January 2" }}<sup>{{ if in (slice 1 21 31) .PublishDate.Day}}st{{ else if in (slice 2 22) .PublishDate.Day}}nd{{ else if in (slice 3 23) .PublishDate.Day}}rd{{ else }}th{{ end }}</sup>, 1{{ .PublishDate.Format "2006" | lang.NumFmt 0 }}&nbsp;<abbr style="font-variant: small-caps; font-size: 0.8em;" title="Holocene Era">HE</abbr></time></p>
<p class="article-header__modified-date">Last modified: <time class="dt-updated" datetime="{{ .Lastmod | time.Format "2006-01-02T15:04:05-07:00" }}" itemprop="dateModified">{{ .Lastmod.Format "January 2" }}<sup>{{ if in (slice 1 21 31) .Lastmod.Day}}st{{ else if in (slice 2 22) .Lastmod.Day}}nd{{ else if in (slice 3 23) .Lastmod.Day}}rd{{ else }}th{{ end }}</sup>, 1{{ .Lastmod.Format "2006" | lang.NumFmt 0 }}&nbsp;<abbr style="font-variant: small-caps; font-size: 0.8em;" title="Holocene Era">HE</abbr></time></p>
<p style="display: none">Author{{ with .Params.authors }}s{{ end }}:&nbsp;
{{- with .Params.authors -}}
</p>
<ul>
{{- range . -}}
{{- if ( eq . .Site.Author.name ) -}}
<li><p><a class="p-author" itemprop="author" rel="author" href="{{ .Site.Home.Permalink }}">{{ .Site.Author.name }}</a></p></li>
{{- else -}}
<li><p class="p-author" itemprop="author">{{- . -}}</p></li>
{{- end -}}
{{- end -}}
</ul>
{{- else -}}
<a class="p-author" itemprop="author" rel="author" href="{{ .Site.Home.Permalink }}">{{ .Site.Author.name }}</a>
{{- end -}}
</p>
{{ $post_age_in_years := math.Round ( div ( div ( now.Sub .PublishDate ).Hours 24 ) 365 ) }}
{{ if ( or .Params.site .Params.controversial ( gt $post_age_in_years 2 ) ) }}
@ -119,25 +166,89 @@
{{ if and ( .TableOfContents ) ( ne .TableOfContents "<nav id=\"TableOfContents\"></nav>" ) }}
<nav class="article-header__table-of-contents">
<h2 class="article-header__subtitle">Table of Contents</h2>
<h3 class="article-header__subtitle">Table of Contents</h3>
{{ .TableOfContents }}
{{- if fileExists ( path.Join $.Page.File.Dir "appendices.md" ) -}}
<ul class="toc-list--appendices">
<li><a href="#appendices">Appendices</a>
<ol>
{{ range .Params.appendices }}
<li><a href="#{{ . | anchorize }}">{{ . | safeHTML }}</a></li>
{{ end }}
</ol>
</li>
</ul>
{{- end -}}
{{- if fileExists ( path.Join $.Page.File.Dir "corrigenda.md" ) -}}
<ul class="toc-list--corrigenda">
<li><a href="#corrigenda">Corrigenda</a></li>
</ul>
{{- end -}}
</nav>
{{ end }}
</header>
{{ end }}
{{ define "main-body" }}
<article class="site-content__body" itemprop="articleBody">
{{ .Content }}
{{ if fileExists ( path.Join $.Page.File.Dir "appendices.md" ) }}
<section class="article-body__appendices">
<h2 class="subheading subheading--appendices">Appendices</h2>
{{ warnf "Getting appendix for '%v'" $.File.Dir }}
{{ $file := path.Join $.Page.File.Dir "appendices.md" }}
{{ $file | markdownify }}
</section>
{{ end }}
</article>
<section class="site-content__body" itemprop="articleBody">
{{ with .Summary }}
<section class="article-body__summary" itemprop="abstract">
<h2>Summary</h2>
<p class="p-summary">{{ . }}</p>
</section>
{{ end }}
{{- if ( or .Params.internal_links .Params.external_links ) -}}
<section class="article__links">
{{- with .Params.internal_links -}}
<h3>Internal Links</h3>
<ul>
{{- range . -}}
{{ if eq ( printf "%T" . ) "map[string]interface {}" }}
<li><a class="button" href="{{ .link }}">{{ .title | safeHTML }}</a></li>
{{ else }}
<li><a class="button" href="{{ . }}">Link</a></li>
{{ end }}
{{- end -}}
</ul>
{{- end -}}
{{- with .Params.external_links -}}
<h3>External Links</h3>
<ul>
{{- range . -}}
{{ if eq ( printf "%T" . ) "map[string]interface {}" }}
<li><a class="button" href="{{ .link }}">{{ .title | safeHTML }}</a></li>
{{ else }}
<li><a class="button" href="{{ . }}">Link</a></li>
{{ end }}
{{- end -}}
</ul>
{{- end -}}
</section>
{{- end -}}
<section class="e-content article-body__content" itemprop="articleBody">
{{ .Content }}
</section>
{{ if fileExists ( path.Join $.Page.File.Dir "appendices.md" ) }}
<section class="article-body__appendices">
<h2 class="subheading subheading--appendices" id="appendices">Appendices</h2>
{{ $file := path.Join $.Page.File.Dir "appendices.md" | readFile }}
{{ $file | .RenderString }}
</section>
{{ end }}
{{ if fileExists ( path.Join $.Page.File.Dir "Corrigendum.md" ) }}
<section class="article-body__corrigendum">
<h2 class="subheading subheading--corrigendum" id="corrigendum">Corrigendum</h2>
{{ $file := path.Join $.Page.File.Dir "corrigendum.md" | readFile }}
{{ $file | .RenderString }}
</section>
{{ end }}
</section>
{{ end }}
{{ define "main-footer" }}

View File

@ -1,218 +0,0 @@
{{ define "title" }}
{{ .Page.Title | plainify }} | {{ .Site.Title }}
{{ end }}
{{ define "main-class" }}
{{- if .IsDescendant ( .GetPage "/cv/organisations" ) -}}--single{{- else -}}--section{{- end -}}
{{ end }}
{{ define "header-scripts" }}
{{ if ( or ( eq .Type "cv" ) ( .IsDescendant ( .GetPage "/cv/organisations" ) ) ) }}
<script type="text/javascript" src="/js/google-charts.js"></script>
{{ end }}
{{ end }}
{{ define "footer-scripts" }}
{{ if eq .Type "cv" }}
{{ $js := resources.Get "js/roles-chart.js" | resources.ExecuteAsTemplate "/js/render-roles-timeline.js" . }}
<script type="text/javascript" src="{{ $js.RelPermalink }}"></script>
{{ else if .IsDescendant ( .GetPage "/cv/organisations" ) }}
{{ $titles := .Scratch.Get "titles" }}
<script>
google.charts.load('current', {'packages':['timeline']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var container = document.getElementById('timeline');
var chart = new google.visualization.Timeline(container);
var dataTable = new google.visualization.DataTable();
dataTable.addColumn({ type: 'string', id: 'Type' });
dataTable.addColumn({ type: 'string', id: 'Job Title' });
dataTable.addColumn({ type: 'string', id: 'style', role: 'style' });
dataTable.addColumn({ type: 'date', id: 'Start' });
dataTable.addColumn({ type: 'date', id: 'End' });
dataTable.addRows([
{{ range where ((.GetPage "cv").Sections) "Title" "Roles" -}}
{{- range where (where ( where .Site.Pages "Section" "cv" ) "Parent.Title" .Title ) ".Params.organisations" "intersect" $titles -}}
[
"{{- delimit (intersect .Params.organisations $titles ) "" | safeHTML -}}",
"{{- .Title | safeHTML -}}",
"{{ if .Params.end_date }}#FFFFF0{{ else }}#BBBBB0{{ end }}",
new Date("{{ .Date.Format "2006-01-02" }}"),
new Date("{{ if .Params.end_date }}{{ delimit ( first 1 .Params.end_date ) "" }}{{ else }}{{ now.Format "2006-01-02" }}{{ end }}")
],
{{- end -}}
{{ end -}}
]);
var options = {
title: '{{ .Title | plainify }} Roles Timeline',
timeline: { showBarLabels: true }
};
chart.draw(dataTable, options);
{{ if $titles }}
container.style.height = ( ( ( {{ len $titles }} - 1 ) * 41 ) + 15 )+ "px";
{{ end }}
}
</script>
{{ end }}
{{ end }}
{{ define "main-header" }}
{{ if .IsDescendant ( .GetPage "/cv/organisations" ) }}
<header class="site-content__header">
<div class="article-header__featured-image"
{{ if .Params.featured_image }}
{{ with .Resources.GetMatch .Params.featured_image }}
style="background-image: url({{ .RelPermalink }})"
{{ end }}
{{ end }}>
<div class="article-header__title-wrapper{{ if .Params.title_in_logo }} article-header__title-wrapper--no-title{{ end }}">
<h1 class="article-header__title">{{ .Title | safeHTML }}LIST</h1>
</div>
</div>
</header>
{{ else }}
<header class="site-content__header">
<h1 class="page-title">{{ .Title | safeHTML }}.</h1>
{{ .Content }}
{{ if eq .Type "cv" }}
<nav class="page-header__minor-links">
<ul>
{{ range ( where .Sections "Type" "not in" ( slice "cv/roles" ) ).ByTitle }}
<li><a href="{{ .RelPermalink }}"><h2>{{ .Title }}</h2></a> <p>({{ len (where ( where .Site.Pages "Section" "cv" ) "Parent.Title" .Title ) }})</p></li>
{{ end }}
</ul>
</nav>
{{ end }}
{{ if eq .Type "cv" }}
<aside class="timeline__legend">
<label for="legend__past">Past</label>
<div id="legend__past">
<span><div class="colour-square colour-square--unpaid-past"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-past"></div> <p>Paid</p></span>
</div>
<br>
<label for="legend__current">Current</label>
<div id="legend__current">
<span><div class="colour-square colour-square--unpaid-current"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-current"></div> <p>Paid</p></span>
</div>
</aside>
{{ end }}
</header>
{{ end }}
{{ end }}
{{ define "main-body" }}
{{ if .IsDescendant ( .GetPage "/cv/organisations" ) }}
{{ $titles := slice (.Title | plainify) }}
{{ range .Sections.ByTitle }}
{{ $titles = $titles | append (slice (.Title | plainify) )}}
{{ $titles = $titles | append ( partial "cv/organisations/recursive-children-titles.html" . ) }}
{{ end }}
{{ .Scratch.Set "titles" $titles }}
<main id="organisation-body" class="site-content__body">
<section id="description">
{{ .Content }}
</section>
<section id="roles-timelimne">
<aside class="timeline__legend">
<label for="legend__past">Past</label>
<div id="legend__past">
<span><div class="colour-square colour-square--unpaid-past"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-past"></div> <p>Paid</p></span>
</div>
<br>
<label for="legend__current">Current</label>
<div id="legend__current">
<span><div class="colour-square colour-square--unpaid-current"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-current"></div> <p>Paid</p></span>
</div>
</aside>
<div id="timeline" aria-label="Role Time" role="img">Javascript must be enabled to view this chart.</div>
</section>
<section id="related" class="row">
{{ if ne .Parent.Title "Organisations" }}
<section id="parents" class="col-6 col-m-12">
<h2 class="subheading">Parent</h2>
{{ with .Parent }}
<ul>
<li><a href="{{ .RelPermalink }}">{{ .Title | safeHTML }}</a></li>
</ul>
{{ end }}
</section>
{{ end }}
{{ if gt (len .Sections) 0 }}
<section id="children" class="col-6 col-m-12">
<h2 class="subheading">Children</h2>
<ul>
{{ range .Sections.ByTitle }}
<li>
<a href="{{ .RelPermalink }}">{{ .Title | safeHTML }}</a>
{{ partial "cv/organisations/recursive-children.html" . }}
</li>
{{ end }}
</ul>
</section>
{{ end }}
{{- $titles := .Scratch.Get "titles" -}}
{{ range (where ((.GetPage "blog").Sections) "Title" "Blog Posts") }}
{{ $section_title := .Title }}
{{ with where (where ( where .Site.Pages "Section" "blog" ) "Parent.Title" .Title ) ".Params.organisations" "intersect" $titles }}
{{ partial "cv/organisations/organisation-items.html" ( dict "section_title" $section_title "content" . ) }}
{{ end }}
{{ end }}
{{ range (where ((.GetPage "portfolio").Sections) "Title" "!=" "Appearances").ByTitle }}
{{ $section_title := .Title }}
{{ with where (where ( where .Site.Pages "Section" "portfolio" ) "Parent.Title" .Title ) ".Params.organisations" "intersect" $titles }}
{{ partial "cv/organisations/organisation-items.html" ( dict "section_title" $section_title "content" . ) }}
{{ end }}
{{ end }}
{{ range (where ((.GetPage "cv").Sections) "Title" "Qualifications") }}
{{ $section_title := .Title }}
{{ with where (where ( where .Site.Pages "Section" "portfolio" ) "Parent.Title" .Title ) ".Params.organisations" "intersect" $titles }}
{{ partial "cv/organisations/organisation-items.html" ( dict "section_title" $section_title "content" . ) }}
{{ end }}
{{ end }}
{{ range (where ((.GetPage "cv").Sections) "Title" "Awards") }}
{{ $section_title := .Title }}
{{ with where (where ( where .Site.Pages "Section" "portfolio" ) "Parent.Title" .Title ) ".Params.organisations" "intersect" $titles }}
{{ partial "cv/organisations/organisation-items.html" ( dict "section_title" $section_title "content" . ) }}
{{ end }}
{{ end }}
{{ range (where ((.GetPage "portfolio").Sections) "Title" "Appearances").ByTitle }}
{{ $section_title := .Title }}
{{ with where (where ( where .Site.Pages "Section" "portfolio" ) "Parent.Title" .Title ) ".Params.organisations" "intersect" $titles }}
{{ partial "cv/organisations/organisation-items.html" ( dict "section_title" $section_title "content" . ) }}
{{ end }}
{{ end }}
</section>
</main>
{{ else }}
{{ if eq .Type "cv" }}
<article class="site-content__body site-content__body--list">
<div id="timeline" width="1000" height="400" aria-label="Roles Timeline" role="img">Javascript must be enabled to view this chart.</div>
</article>
{{ else if eq .Type "cv/organisations" . }}
{{ with .GetPage "cv/organisations" }}
{{ partial "items-table.html" . }}
{{ end }}
{{ else }}
{{ partial "items-grid.html" . }}
{{ end }}
{{ end }}
{{ end }}

View File

@ -43,20 +43,20 @@ L.HeatLayer=(L.Layer?L.Layer:L.Class).extend({initialize:function(t,i){this._lat
{{ .Scratch.Set "maxItems" 0 }}
{{ .Scratch.Set "numOfItems" 0 }}
{{ warnf "No of locations: %v" ( len $.Site.Data.locations ) }}
/* warnf "No of locations: %v" ( len $.Site.Data.locations ) */
{{ range $key, $value := $.Site.Data.locations }}
{{ $childPosts := where $.Site.Pages ".Params.locations" "intersect" ( slice $key ) }}
{{ warnf "Current location: %v" $key }}
{{ warnf "Child posts: %v" $childPosts }}
/* warnf "Current location: %v" $key */
/* warnf "Child posts: %v" $childPosts */
{{ .Scratch.Set "numOfItems" ( len $childPosts ) }}
{{ if ( gt ( .Scratch.Get "numOfItems" ) ( .Scratch.Get "maxItems" ) ) }}
{{ warnf "Updating maxItems" }}
/* warnf "Updating maxItems" */
{{ .Scratch.Set "maxItems" ( .Scratch.Get "numOfItems" ) }}
{{ warnf "New maxItems: %d" .Scratch.Get "maxItems" }}
/* warnf "New maxItems: %d" .Scratch.Get "maxItems" */
{{ end }}
{{ end }}
{{ warnf "maxItems: %v" ( .Scratch.Get "maxItems" ) }}
/* warnf "maxItems: %v" ( .Scratch.Get "maxItems" ) */
console.log({{ .Scratch.Get "maxItems" }});
L.heatLayer([

View File

@ -3,12 +3,13 @@
{{ end }}
{{ define "main-class" }}
{{- if .IsDescendant ( .GetPage "/cv/organisations" ) -}}--single{{- else -}}--section{{- end -}}
{{- if .IsDescendant ( .GetPage "/cv/organisations" ) -}}--single{{- else -}}--section{{- end }} layouts-cv-section
{{ end }}
{{ define "header-scripts" }}
{{ if ( or ( eq .Type "cv" ) ( .IsDescendant ( .GetPage "/cv/organisations" ) ) ) }}
<script type="text/javascript" src="/js/google-charts.js"></script>
{{ $googleChartsJS := resources.Get "js/google-charts.js" | fingerprint }}
<script id="Google-Charts-script" src="{{ $googleChartsJS.Permalink }}" integrity="{{ $googleChartsJS.Data.Integrity }}"></script>
{{ end }}
{{ end }}
@ -75,12 +76,12 @@
timeline: { showBarLabels: true }
};
chart.draw(dataTable, options);
chart.draw(dataTable, options);
}
</script>
{{ else }}
{{ $js := resources.Get "js/roles-chart.js" | resources.ExecuteAsTemplate "/js/render-roles-timeline.js" ( .GetPage "cv/roles" ) }}
<script type="text/javascript" src="{{ $js.RelPermalink }}"></script>
<script src="{{ $js.RelPermalink }}"></script>
{{ end }}
{{ end }}
@ -94,35 +95,38 @@
{{ end }}
{{ end }}>
<div class="article-header__title-wrapper{{ if .Params.title_in_logo }} article-header__title-wrapper--no-title{{ end }}">
<h1 class="article-header__title">{{ if ( .Params.markup_title ) }}{{ .Params.markup_title | safeHTML }}{{ else }}{{ .Title }}{{ end }}</h1>
<h2 class="article-header__title">{{ if ( .Params.markup_title ) }}{{ .Params.markup_title | safeHTML }}{{ else }}{{ .Title }}{{ end }}</h2>
</div>
</div>
</header>
{{ else }}
<header class="site-content__header">
<h1 class="page-title">{{ .Title | safeHTML }}.</h1>
<h2 class="page-title">{{ .Title | safeHTML }}.</h2>
{{ .Content }}
{{ if eq .Type "cv" }}
<nav class="page-header__minor-links">
<ul>
{{ range ( where .Sections "Type" "not in" ( slice "cv/roles" ) ).ByTitle }}
<li><a href="{{ .RelPermalink }}"><h2>{{ .Title }}</h2></a> <p>({{ len (where ( where .Site.Pages "Section" "cv" ) "Parent.Title" .Title ) }})</p></li>
<li><a href="{{ .RelPermalink }}"><h3>{{ .Title }}</h3></a> <p>({{ len (where ( where .Site.Pages "Section" "cv" ) "Parent.Title" .Title ) }})</p></li>
{{ end }}
</ul>
</nav>
{{ end }}
{{ if eq .Type "cv" }}
<aside class="timeline__legend">
<label for="legend__past">Past</label>
<div id="legend__past">
<span><div class="colour-square colour-square--unpaid-past"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-past"></div> <p>Paid</p></span>
<div>
<label for="legend__past">Past</label>
<div id="legend__past">
<span><div class="colour-square colour-square--unpaid-past"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-past"></div> <p>Paid</p></span>
</div>
</div>
<br>
<label for="legend__current">Current</label>
<div id="legend__current">
<span><div class="colour-square colour-square--unpaid-current"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-current"></div> <p>Paid</p></span>
<div>
<label for="legend__current">Current</label>
<div id="legend__current">
<span><div class="colour-square colour-square--unpaid-current"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-current"></div> <p>Paid</p></span>
</div>
</div>
</aside>
{{ end }}
@ -131,7 +135,6 @@
{{ end }}
{{ define "main-body" }}
<!-- TODO: Replace with check for 'cv/organsation' -->
{{ if .IsDescendant ( .GetPage "/cv/organisations" ) }}
{{ $titles := slice ( .Title | plainify ) }}
{{ with .Sections }}
@ -146,16 +149,19 @@
<section id="roles-timeline">
<aside class="timeline__legend">
<label for="legend__past">Past</label>
<div id="legend__past">
<span><div class="colour-square colour-square--unpaid-past"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-past"></div> <p>Paid</p></span>
<div>
<label for="legend__past">Past</label>
<div id="legend__past">
<span><div class="colour-square colour-square--unpaid-past"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-past"></div> <p>Paid</p></span>
</div>
</div>
<br>
<label for="legend__current">Current</label>
<div id="legend__current">
<span><div class="colour-square colour-square--unpaid-current"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-current"></div> <p>Paid</p></span>
<div>
<label for="legend__current">Current</label>
<div id="legend__current">
<span><div class="colour-square colour-square--unpaid-current"></div> <p>Unpaid</p></span>
<span><div class="colour-square colour-square--paid-current"></div> <p>Paid</p></span>
</div>
</div>
</aside>
<div id="timeline" aria-label="Role Time" role="img">Javascript must be enabled to view this chart.</div>
@ -207,7 +213,7 @@
</article>
{{ else if eq .Type "cv/organisations" . }}
{{ with .GetPage "cv/organisations" }}
{{ partial "items-table.html" . }}
{{ partial "cv/organisations/items-table.html" . }}
{{ end }}
{{ else }}
{{ partial "items-grid.html" . }}
@ -219,10 +225,10 @@
{{ if .IsDescendant ( .GetPage "/cv/organisations" ) }}
<footer class="site-content__footer">
<section id="hierarchy">
<h2 class="subheading">Hierarchy</h2>
<h3 class="subheading">Hierarchy</h3>
{{ $.Scratch.Set "parents" ( slice ) }}
{{ partial "cv/organisations/recursive-parents.html" (dict "c" . "g" $ ) }}
{{- $parents := partial "reverse-slice.html" ( $.Scratch.Get "parents" ) -}}
{{- $parents := partial "cv/organisations/reverse-slice.html" ( $.Scratch.Get "parents" ) -}}
{{- range $parents -}}<ul><li class="hierarchy-item hierarchy-item--parent"><a href="{{ .RelPermalink }}">{{ .Title | safeHTML }}</a>{{- end -}}
<ul><li class="hierarchy-item hierarchy-item--current">{{ .Title | safeHTML }}</li>

View File

@ -2,12 +2,15 @@
{{ define "header" }} <!-- null --> {{ end }}
{{ define "article-class" }} <!-- null --> {{ end }}
{{ define "main-body" }}
<h1 class="page-title">
{{- with .Site.Params.pre_nominals }}<span class="pre-nominals">{{ . | safeHTML }}</span> {{ end -}}
Ben Goldsworthy
{{- with .Site.Params.post_nominals }} <span class="post-nominals">{{ . | safeHTML }}</span>{{ end -}}
{{- with .Site.Params.pre_nominals }}<span class="pre-nominals p-honorific-prefix">{{ . | safeHTML }}</span> {{ end -}}
<span class="p-name">Ben Goldsworthy</span>
{{- with .Site.Params.post_nominals }} <span class="post-nominals p-honorific-suffix">{{ . | safeHTML }}</span>{{ end -}}
</h1>
<p class="p-note" style="display: none;">{{ .Site.Params.description }}</p>
{{ range ( where .Pages "Type" "in" site.Params.mainSections ).ByTitle }}<a href="{{ .RelPermalink }}"><h2>{{ .Title }}</h2></a>{{ end }}
{{ end }}

View File

@ -2,7 +2,7 @@
featured_image: {{ .Name }}
resources:
- name: {{ .Name }}
alt:
src: images/{{ .Name }}.*
params:
alt:
attr:

View File

@ -0,0 +1,38 @@
{{- $itemType := default "CreativeWork" ( .Params.schemaType ) -}}
{{- if ( in $.Site.Data.itemtypes $itemType ) -}}
{{- with .Params.href -}}
<a href="{{ if eq . "asCite" }}{{ $.Params.cite }}{{ else }}{{ . }}{{ end }}">
{{- end -}}
<cite
class="cite{{ with .Params.citeStyle }} cite--{{ . }}{{ end }}"
itemscope
itemprop="citation"
itemtype="https://schema.org/{{- $itemType -}}"
{{- if .Params.titleLang -}}
lang="{{- .Params.titleLang -}}"
title="{{- .Params.titleTr -}}"
{{- end -}}>
{{- with .Params.cite -}}
<meta itemprop="url" content="{{ . }}">
{{- end -}}
<span itemprop="name">
{{- if .Params.titleLang -}}
<i lang="{{ .Params.titleLang }}" title="{{ .Params.titleTr }}">
{{- end -}}
{{- if .Params.shortTitle -}}
{{- .Params.shortTitle | markdownify | safeHTML -}}
{{- else -}}
{{- .Params.title | markdownify | safeHTML -}}
{{- end -}}
{{- if .Params.titleLang -}}
</i>
{{- end -}}
</span>{{- /**/ -}}
</cite>
{{- with .Params.href -}}
</a>
{{- end -}}
{{- else -}}
{{- warnf "Invalid Schema.org type value: %q (%q)" $itemType .Page.File.Path -}}
{{- end -}}

View File

@ -1,12 +1,14 @@
{{ "<!--" | safeHTML }}
{{ .Site.Title}} - {{ .Site.Params.tagline }}
Page content written in {{ now.Format "2006" }} by {{ .Site.Author.name }} <{{ .Site.Author.email }}>
This page was created by {{ .Site.Author.name }} <{{ .Site.Author.email }}>.
The date of creation and last modification should be available within the page
below.
To the extent possible under law, the author(s) have dedicated all copyright
and related and neighboring rights to this software to the public domain
worldwide. This software is distributed without any warranty.
Unless stated otherwise, and to the extent possible under law, the author has
dedicated all copyright and related and neighboring rights to this content to
the public domain worldwide. This file is distributed without any warranty.
You should have received a copy of the CC0 Public Domain Dedication along
with this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
See <http://creativecommons.org/publicdomain/zero/1.0/> for
a copy of the CC0 Public Domain Dedication.
{{ "-->" | safeHTML }}

View File

@ -1,8 +0,0 @@
<!--. is .c-->
<!--$ is .g-->
{{ $scratch := .g.Scratch }}
{{ with ( where ( where .g.Site.Pages "Type" "organisations" ) "Params.parent" .g.File.ContentBaseName ) }}
{{ $scratch.Add "children" ( slice . ) }}
{{ partial "cv/organisations/recursive-children.html" (dict "c" . "g" $.g ) }}
{{ end }}

View File

@ -1,5 +1,5 @@
{{ if gt ( len .content ) 4 }}
<details id="posts" class="org-items row">
<details id="{{ .section_title | anchorize }}" class="org-items row">
<summary>
<h2 class="subheading">{{ .section_title }} ({{ len .content }})</h2>
<div class="index">
@ -15,7 +15,7 @@
</div>
</details>
{{ else }}
<div id="posts" class="org-items row">
<div id="{{ .section_title | anchorize }}" class="org-items row">
<h2 class="subheading">{{ .section_title }} ({{ len .content }})</h2>
<div class="index">
{{ range first 4 .content }}

View File

@ -1,4 +1,4 @@
<li class="hierarchy-item hierarchy-item--child"><a href="{{ .RelPermalink }}">{{ .Title | safeHTML }}</a>
<li class="hierarchy-item hierarchy-item--child"><a href="{{ .RelPermalink }}">{{ with .Params.markup_title }}{{ . | safeHTML }}{{ else }}{{ .Title | safeHTML }}{{ end }}</a>
{{ range .Sections }}<ul>
{{ partial "cv/organisations/recursive-children.html" . }}
</ul>{{ end }}

View File

@ -1,8 +1,8 @@
<header class="site-header">
<header class="site-header h-card">
{{ block "header" . }}
<h1 class="site-header__title" itemprop="name"><a href="{{ .Site.Home.RelPermalink }}">{{ .Site.Title }}</a></h1>
<p class="site-header__tagline" itemprop="about">Views my own. Discussion ≠ endorsement. Do try this at home.</p>
<p class="site-header__icons">~ <a href="mailto:{{ $.Site.Author.email }}" rel="me">&#128231;</a> ~ <a href="{{ .Site.Params.codeURL }}">&#128187;</a> ~ <a href="/{{ .Site.Params.keyfile }}">&#128272;</a> ~ <a href="/index.xml"><img class="feed-icon" src="/images/feed-icon.png"></a> ~</p>
<h2 class="p-name site-header__title" itemprop="name"><a class="u-url" href="{{ .Site.Home.RelPermalink }}" rel="me author">{{ .Site.Title }}</a></h2>
<p class="p-note site-header__tagline" itemprop="about">Views my own. Discussion ≠ endorsement. Do try this at home.</p>
<p class="site-header__icons">~ <a class="u-email" href="mailto:{{ $.Site.Author.email }}" rel="me">&#128231;</a> ~ <a class="u-url" href="{{ .Site.Params.codeURL }}" rel="me">&#128187;</a> ~ <a class="u-key" href="/{{ .Site.Params.keyfile }}" rel="me">&#128272;</a> ~ <a href="/index.xml" aria-label="{{ .Site.Title }} RSS feed"><img class="feed-icon" alt="RSS icon" src="{{ .Site.Params.feedIcon }}"></a> ~</p>
{{ partial "header/site-nav.html" . }}
{{ end }}
</header>

View File

@ -1,7 +1,7 @@
<nav class="site-header__nav">
<ul>
{{ range ( where .Site.Sections.ByTitle "Type" "in" site.Params.mainSections ) }}
<a href="{{ .RelPermalink }}"><li>{{ .Title | safeHTML }}</li></a>
<li><a href="{{ .RelPermalink }}">{{ .Title | safeHTML }}</a></li>
{{ end }}
</ul>
</nav>

View File

@ -1,11 +1,11 @@
<a id="{{ .Slug }}" class="link--tile" href="{{ .RelPermalink }}" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
<a id="{{ .Title | urlize }}" class="h-entry u-url link--tile" href="{{ .RelPermalink }}" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
<article class="item-tile lazy {{- with .Params.site }} item-tile--{{ . }}{{ end -}}"
{{ if .Params.featured_image }}
{{ with .Resources.GetMatch .Params.featured_image }}
{{ if eq .MediaType.SubType "svg" }}
style="background-image: url({{ .RelPermalink }})"
{{ else }}
{{ with .Resize "2000x webp" }}
{{ with .Resize "1000x webp" }}
style="background-image: url({{ .RelPermalink }})"
{{ end }}
{{ end }}
@ -14,22 +14,43 @@
{{ end }}
{{ end }}
>
<header class="item-tile__header">
{{ if ( or .Params.series .Params.published_in ) }}
<span class="item-tile__banner item-tile__banner--{{ if .Params.series }}series{{ else if .Params.published_in }}published-in{{ end}}">
{{- if .Params.series -}}
{{ .Params.series | safeHTML }}
{{- else if .Params.published_in -}}
{{ .Params.published_in | safeHTML }}
{{- end -}}
</span>
{{ end }}
<h1 class="item-tile__title{{ if gt ( len ( .Title | plainify ) ) 40 }} item-tile__title--long{{ end }}" itemprop="name">
<span role="text">{{ .Title | safeHTML }}</span>
</h1>
{{ with .Params.subtitle }}
<p class="item-tile__subtitle">{{ . | safeHTML }}</p>
{{ end }}
</header>
</article>
{{ if .Params.featured_image -}}
<img class="u-photo" style="display: none;" src="
{{- with .Resources.GetMatch .Params.featured_image -}}
{{- if eq .MediaType.SubType "svg" -}}
{{ .RelPermalink }}
{{- else -}}
{{- with .Resize "1000x webp" -}}
{{- .RelPermalink -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{ .Params.featured_image }}
{{ end }}
" alt="
{{- with .Resources.GetMatch .Params.featured_image -}}
{{- .Params.alt -}}
{{- end -}}
"
/>
{{- end }}
<header class="item-tile__header">
{{ if ( or .Params.series .Params.published_in ) }}
<span class="item-tile__banner item-tile__banner--{{ if .Params.series }}series{{ else if .Params.published_in }}published-in{{ end}}">
{{- if .Params.series -}}
{{ .Params.series | safeHTML }}
{{- else if .Params.published_in -}}
{{ .Params.published_in | safeHTML }}
{{- end -}}
</span>
{{ end }}
<h2 class="p-name item-tile__title{{ if gt ( len ( .Title | plainify ) ) 40 }} item-tile__title--long{{ end }}" itemprop="name">
{{ .Title | safeHTML }}
</h2>
{{ with .Params.subtitle }}
<p class="item-tile__subtitle">{{ . | safeHTML }}</p>
{{ end }}
<p style="display: none;">Published: <time class="dt-published" itemprop="datePublished" datetime="{{ .PublishDate | time.Format "2006-01-02T15:04:05-07:00" }}">{{ .PublishDate | time.Format "2006-01-02T15:04:05-07:00"}}</time></p>
</header>
</article>
</a>

View File

@ -1,8 +1,10 @@
<section class="site-content__body">
{{ range ( ( where .Pages "Draft" false ).GroupByPublishDate "2006" ) }}
{{ partial "header-tile.html" . }}
{{ range .Pages }}
{{ partial "item-tile.html" . }}
{{ if ( not ( eq .Key "0001" ) ) }}
{{ partial "header-tile.html" . }}
{{ range .Pages }}
{{ partial "item-tile.html" . }}
{{ end }}
{{ end }}
{{ end }}
</section>

View File

@ -1,61 +1,58 @@
{{ if fileExists ( path.Join $.Page.File.Dir "comments.md" ) }}
<!--<section id="comments">
<h2 class="subheading subheading--comments" id="comments">Comments</h2>
<ol>
{{ $file := path.Join $.Page.File.Dir "comments.md" | readFile }}
{{ $file | .RenderString }}
</ol>
</section>-->
{{ end }}
<footer class="site-content__footer">
<h1>Meta</h1>
<h2>Meta</h2>
{{- if .GetTerms "categories" -}}
<section id="post-categories" class="article-footer__categories" aria-labelledby="post-categories-title">
<h2 id="post-categories-title">Categories</h2>
<section id="post-categories" class="article-footer__categories" aria-labelledby="post-categories-title" itemprop="articleSection">
<h3 id="post-categories-title">Categories</h3>
<ul>
{{- range (.GetTerms "categories") -}}
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle | safeHTML }}</a></li>
{{- end -}}
</ul>
</section>
{{- end -}}
{{- with .Params.internal_links -}}
<section class="article-footer__links">
<h2>Internal Links</h2>
<ul>
{{- range . -}}
{{ if eq ( printf "%T" . ) "map[string]interface {}" }}
<li><a href="{{ .link }}">{{ .title | safeHTML }}</a></li>
{{ else }}
<li><a href="{{ . }}">Link</a></li>
{{ end }}
{{- end -}}
</ul>
</section>
{{- end -}}
{{- with .Params.external_links -}}
<section class="article-footer__links">
<h2>External Links</h2>
<ul>
{{- range . -}}
{{ if eq ( printf "%T" . ) "map[string]interface {}" }}
<li><a href="{{ .link }}" rel="noopener noreferrer" target="_blank">{{ .title | safeHTML }}</a></li>
{{ else }}
<li><a href="{{ . }}" rel="noopener noreferrer" target="_blank">Link</a></li>
{{ end }}
<li class="p-category"><a href="{{ .RelPermalink }}">{{ .LinkTitle | safeHTML }}</a></li>
{{- end -}}
</ul>
</section>
{{- end -}}
{{- if .GetTerms "areas" -}}
<section class="article-footer__links">
<h2 id="item-areas-title">Areas</h2>
<section class="article-footer__links" itemprop="articleSection">
<h3 id="item-areas-title">Areas</h3>
<ul>
{{- range ( .GetTerms "areas" ).ByTitle -}}
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
<li class="p-category"><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
{{- end -}}
</ul>
</section>
{{- end -}}
{{- if .GetTerms "skills" -}}
<section class="article-footer__links" itemprop="articleSection">
<h3 id="item-skills-title">Skills</h3>
<ul>
{{- .Scratch.Set "i" 0 -}}
{{- range ( .GetTerms "skills" ).ByTitle -}}
{{- if hasPrefix .LinkTitle "CIISec/" -}}
<li class="p-category"><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> <span class="level">{{ index $.Params.skills_ciisec_levels ( $.Scratch.Get "i" ) }}</span></li>
{{- $.Scratch.Add "i" 1 -}}
{{- else -}}
<li class="p-category"><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
{{- end -}}
{{- end -}}
</ul>
</section>
{{- end -}}
{{- if .GetTerms "organisations" -}}
<section id="post-organisations" class="article-footer__organisations" aria-labelledby="post-organisations-title">
<h2 id="post-organisations-title">Organisations</h2>
<section id="post-organisations" class="article-footer__organisations" aria-labelledby="post-organisations-title" itemprop="articleSection">
<h3 id="post-organisations-title">Organisations</h3>
<ul>
{{ $all_organisations := partialCached "get_all_organisations.html" . }}
<!-- TODO: Replace with hierarchy partial -->
@ -75,17 +72,22 @@
{{- if .GetTerms "locations" -}}
<section id="post-locations" class="article-footer__locations" aria-labelledby="post-locations-title">
<h2 id="post-locations-title">Locations</h2>
<div id="mapdiv" style="width: 100%; height: 500px; margin: 0; display: block;"></div>
<h3 id="post-locations-title">Locations</h3>
<div id="map" style="width: 100%; height: 500px; margin: 0; display: block;"></div>
<ul style="display: none">
{{- range ( .GetTerms "locations" ).ByTitle -}}
<li class="p-location"><a href="{{ .RelPermalink }}">{{ .LinkTitle | safeHTML }}</a></li>
{{- end -}}
</ul>
</section>
{{- end -}}
{{- if .GetTerms "tags" -}}
<section id="post-tags" class="article-footer__tags" aria-labelledby="post-tags-title">
<h2 id="post-tags-title">Tags</h2>
<h3 id="post-tags-title">Tags</h3>
<ul>
{{- range ( .GetTerms "tags" ).ByTitle -}}
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle | safeHTML }}</a></li>
<li class="p-category"><a href="{{ .RelPermalink }}">{{ .LinkTitle | safeHTML }}</a></li>
{{- end -}}
</ul>
</section>

View File

@ -1,5 +1,7 @@
<ul class="minor-links__years">
{{ range ( ( where .Pages "Draft" false ).GroupByDate "2006" ) }}
<li><a href="#items-{{ .Key }}">{{ .Key }}</a></li>
{{ if ( not ( eq .Key "0001" ) ) }}
<li><a href="#items-{{ .Key }}">{{ .Key }}</a></li>
{{ end }}
{{ end }}
</ul>

View File

@ -2,7 +2,7 @@
{{ .Page.Title | plainify }} | {{ .Site.Title }}
{{ end }}
{{ define "main-class" }}--section{{ end }}
{{ define "main-class" }}--section layouts-portfolio-section{{ end }}
{{ define "footer-scripts" }}
<script>
@ -61,13 +61,13 @@
{{ define "main-header" }}
<header class="site-content__header">
<h1 class="page-title">{{ .Title | safeHTML }}.
<h2 class="page-title">{{ .Title | safeHTML }}.
{{ range .AlternativeOutputFormats -}}
<a href="{{ .RelPermalink }}">
<img class="feed-icon" src="/images/feed-icon.png">
<img class="feed-icon" src="{{ $.Site.Params.feedIcon }}">
</a>
{{ end }}
</h1>
</h2>
{{ .Content }}
{{ if ne .Type "portfolio" }}
@ -84,7 +84,7 @@
<ul class="site-content__sections-list">
{{ range .Sections.ByWeight }}
{{ if eq .Weight 10 }}<hr>{{ end }}
<li><a href="{{ .RelPermalink }}"><h2>{{ .Title }}</h2></a> <p>({{ len .Pages }})</p></li>
<li><a href="{{ .RelPermalink }}"><h3>{{ .Title }}</h3></a> <p>({{ len .Pages }})</p></li>
{{ end }}
</ul>
</article>

View File

@ -1,2 +1,25 @@
# Internet Archive
# If I ever decomission this site, I will archive it first. Until then, no
# archiving.
User-agent: ia_archiver
Disallow: /
# Common Crawl
User-agent: CCBot
Disallow: /
# OpenAI
User-agent: ChatGPT-User
Disallow: /
# Turn It In Plagiarism Checker
User-Agent: TurnitinBot
Disallow: /
# Name Protect
User-Agent: NPBot
Disallow: /
# Sly Search
User-Agent: SlySearch
Disallow: /

View File

@ -2,12 +2,12 @@
{{ .Type | singularize }}: &lsquo;{{ .Page.Title | plainify }}&rsquo; | {{ .Site.Title }}
{{ end }}
{{ define "main-class" }}--list{{ end}}
{{ define "main-class" }}--list layouts-series-list{{ end}}
{{ define "main-header" }}
<header class="site-content__header">
<h1 class="page-title">
<h2 class="page-title">
{{- if eq .Title "Series" -}}
{{- .Title | safeHTML }}&rsquo;
{{- else -}}
@ -18,7 +18,7 @@
<img class="feed-icon" src="{{ $.Site.Params.feedIcon }}">
</a>
{{ end }}
</h1>
</h2>
{{ .Content }}
</header>
{{ end }}

View File

@ -1,32 +1,57 @@
{{ with where ( $.Site.Data.abbreviations .Params.abbr ) }}
{{ if ( or ( eq .Params.mode "shortTitle" ) ( eq .Params.mode "shortTitlePl" ) ) }}
<abbr class="abbr" title="
{{- if ( eq .Params.mode "shortTitle" ) }}
{{ .shortTitle }}
{{ else if ( eq .Params.mode "shortTitlePl" ) }}
{{ if .shortTitlePl }}{{ .shortTitlePl }}{{ else }}{{ .shortTitle }}s{{ end }}
{{ end -}}
">
{{- if ( eq .Params.mode "shortTitle" ) }}
{{ .shortTitle }}
{{ else if ( eq .Params.mode "shortTitlePl" ) }}
{{ if .shortTitlePl }}{{ .shortTitlePl }}{{ else }}{{ .shortTitle }}s{{ end }}
{{ end -}}
</abbr>
{{ else if ( or ( eq .Params.mode "longtitle" ) ( eq .Params.mode "longTitlePl" ) ) }}
{{- if ( eq .Params.mode "longTitle" ) }}
{{ .longTitle }}
{{ else if ( eq .Params.mode "longTitlePl" ) }}
{{ if .longTitlePl }}{{ .longTitlePl }}{{ else }}{{ .longTitle }}s{{ end }}
{{ end -}}
{{ else if ( or ( eq .Params.mode "fullTitle" ) ( eq .Params.mode "fullTitlePl" ) ) }}
{{ if ( eq .Params.mode "fullTitle" ) }}
{{ .longTitle }}&nbsp;(<abbr>{{ .short }}</abbr>)
{{ else if ( eq .Params.mode "fullTitlePl" ) }}
{{- if .longTitlePl }}{{ .longTitlePl }}{{ else }}{{ .longTitle }}s{{ end -}}
&nbsp;(<abbr>{{ if .shortPl }}{{ .shortPl }}{{ else }}{{ .short }}s{{ end }}</abbr>)
{{ end }}
{{ end }}
{{ else }}
{{ errorf "No definition found for abbreviation '%q'" .Params.abbr }}
{{ end }}
{{- /**/ -}}
{{- $abbr := .Get 0 -}}
{{- $mode := default "shortTitle" ( .Get 1 ) -}}
{{- with ( index $.Site.Data.abbreviations $abbr ) -}}
<!-- Short titles (e.g. 'FBB') -->
{{- if ( or ( eq $mode "shortTitle" ) ( eq $mode "shortTitlePl" ) ) -}}
<abbr
class="abbr"
title="
{{- if ( eq $mode "shortTitle" ) -}}
{{- .longTitle -}}
{{- else if ( eq $mode "shortTitlePl" ) -}}
{{- with .longTitlePl -}}{{- . -}}{{- else -}}{{- .longTitle -}}s{{- end -}}
{{- end -}}
{{- if .lang }} [{{ .longTitleTrans }}]{{- end -}}
"
{{- with .lang }} lang="{{ . }}"{{- end -}}
>
{{- if ( eq $mode "shortTitle" ) -}}
{{- .shortTitle | safeHTML -}}
{{- else if ( eq $mode "shortTitlePl" ) -}}
{{- with .shortTitlePl -}}{{- . | safeHTML -}}{{- else -}}{{- .shortTitle | safeHTML -}}s{{- end -}}
{{- end -}}
</abbr>{{- /**/ -}}
<!-- Long titles (e.g. 'foo bar baz') -->
{{- else if ( or ( eq $mode "longTitle" ) ( eq $mode "longTitlePl" ) ) -}}
{{- if ( eq $mode "longTitle" ) -}}
{{- if .lang -}}<i lang="{{- .lang -}}" title="{{- $.longTitleTrans | safeHTML -}}">{{- end -}}
{{- .longTitle | safeHTML -}}
{{- if .lang -}}</i>{{- end -}}
{{- else if ( eq $mode "longTitlePl" ) -}}
{{- if .lang -}}<i lang="{{- .lang -}}" title="{{- with .longTitleTransPl -}}{{- . | safeHTML -}}{{- else -}}{{- .longTitleTrans | safeHTML -}}s{{- end -}}">{{- end -}}
{{- with .longTitlePl -}}{{- . | safeHTML -}}{{- else -}}{{- .longTitle | safeHTML -}}s{{- end -}}
{{- if .lang -}}</i>{{- end -}}{{- /**/ -}}
{{- end -}}
<!-- Full titles (e.g. 'foo bar baz (FBB)') -->
{{- else if ( or ( eq $mode "fullTitle" ) ( eq $mode "fullTitlePl" ) ) -}}
{{- if ( eq $mode "fullTitle" ) -}}
{{- if .lang -}}<i lang="{{- .lang -}}" title="{{- .longTitleTrans | safeHTML -}}">{{- end -}}
{{- .longTitle | safeHTML -}}
{{- if .lang -}}</i>{{- end -}}
&nbsp;(<abbr{{- with .lang }} lang="{{ . }}"{{- end -}}>{{- .shortTitle | safeHTML -}}</abbr>)
{{- else if ( eq $mode "fullTitlePl" ) -}}
{{- if .lang -}}<i lang="{{- .lang -}}" title="{{- with .longTitleTransPl -}}{{- . | safeHTML -}}{{- else -}}{{- .longTitleTrans | safeHTML -}}s{{- end -}}">{{- end -}}
{{- with .longTitlePl -}}{{- . | safeHTML -}}{{- else -}}{{- .longTitle | safeHTML -}}s{{- end -}}
{{- if .lang -}}</i>{{- end -}}
&nbsp;(<abbr{{- with .lang }} lang="{{ . }}"{{- end -}}>{{- with .shortTitlePl -}}{{- . | safeHTML -}}{{- else -}}{{- .shortTitle | safeHTML -}}s{{- end -}}</abbr>){{- /**/ -}}
{{- end -}}
{{- end -}}
{{- else -}}
{{- errorf "No definition found for abbreviation '%q'" $abbr -}}
{{- end -}}
{{- /**/ -}}

View File

@ -0,0 +1,35 @@
{{- if ( not .Params ) -}}
{{- errorf "No params provided for blockquote" -}}
{{- end -}}
<figure
class="figure--blockquote blockquote{{- if .Params.style }} blockquote--{{- .Params.style -}}{{- end -}}"
itemscope
itemtype="Quotation"
>
<blockquote
class="blockquote__body"
{{- if .Params.cite }} cite="{{ .Params.cite }}"{{- end -}}
>
{{- .Inner | .Page.RenderString -}}
</blockquote>
<figcaption class="blockquote__caption">
{{- if .Params.ibid -}}
<abbr lang="la" title="ibīdem [in the same place]">Ibid.</abbr>
{{- else -}}
<span itemprop="spokenByCharacter">{{- .Params.source | safeHTML -}}</span>
{{- if .Params.title -}}, <span itemprop="isBasedOn">{{- partial "cite.html" . -}}
{{- if .Params.titleSeries }} (
{{- .Scratch.SetInMap "Params" "title" .Params.titleSeries -}}
{{- .Scratch.SetInMap "Params" "titleLang" .Params.titleSeriesLang -}}
{{- .Scratch.SetInMap "Params" "titleTr" .Params.titleSeriesTr -}}
{{- .Scratch.SetInMap "Params" "cite" .Params.citeSeries -}}
{{- .Scratch.SetInMap "Params" "schemaType" .Params.schemaTypeSeries -}}
{{- .Scratch.SetInMap "parentCite" "Params" ( .Scratch.Get "Params" ) -}}
{{- partial "cite.html" ( .Scratch.Get "parentCite" ) -}}
{{- with .Params.numberSeries }}, {{ . | safeHTML -}}{{- end -}}
){{- end -}}</span>
{{- end -}}
{{- end -}}
</figcaption>
</figure>

View File

@ -1,16 +1 @@
{{ if .Params.href }}
<a href="{{ if eq .Params.href "asCite" }}{{ .Params.cite }}{{ else }}{{ .Params.href }}{{end}}" target="_blank" rel="noopener noreferrer">
<cite class="cite {{ with .Params.citeStyle }}cite--{{ . }}{{ end }}"
{{ with .Params.cite }}cite="{{ . }}"{{ end }}
itemscope
itemtype="https://schema.org/
{{- with .Params.schemaType -}}
{{- . -}}
{{- else -}}
CreativeWork
{{- end -}}"
>
{{- .Params.title -}}
</cite>
</a>
{{ end }}
{{- /**/ -}}{{- partial "cite.html" . -}}{{- /**/ -}}

View File

@ -0,0 +1,13 @@
<li class="comment">
<article class="comment__body">
<header class="comment__header">
<h3 class="comment__author">{{ .Params.author }}</h3>
</header>
{{ .Inner | markdownify }}
<footer class="comment__footer">
{{ with .Params.source }}<p class="comment__source">Source: {{ . }}</p>{{ end }}
</footer>
</article>
</li>

View File

@ -3,12 +3,12 @@
{{- end -}}
{{ $src := $.Page.Resources.GetMatch (.Get "src") }}
{{ if ( not $src ) }}
{{- errorf "No Page Resource found for src '%v' for post '%v'" ( .Get "src" ) $.File.Path -}}
{{ if ( and ( not $src ) ( not ( .Get "chart-id" ) ) ) }}
{{- errorf "No Page Resource found for src '%q' (%q)" ( .Get "src" ) .Page.File.Path -}}
{{ end }}
{{ $linkedResource := $.Page.Resources.GetMatch (.Get "link") }}
<figure class="article__figure{{ with .Get "class" }} {{ . }}{{ end }}">
<figure class="article__figure figure{{ with .Get "class" }} {{ . }}{{ end }}">
{{- with .Get "chart-id" -}}
<canvas class="figure__chart" id="{{ . }}">
You must enable Javascript to view this chart.
@ -18,56 +18,57 @@
{{- if $linkedResource }}
<a href="{{ $linkedResource.RelPermalink }}"{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
{{ else }}
<a
href="{{ .Get "link" }}"
{{- with .Get "target" -}}
target="{{ . }}"
{{- else -}}
{{ warnf "No target defined for non-page resource link %q" ( .Get "link" ) -}}
{{- end -}}
{{- with .Get "rel" -}}
rel="{{ . }}"
{{- else -}}
{{- warnf "No rel defined for non-page resource link %q" ( .Get "link" ) -}}
{{- end -}}
>
<a href="{{ .Get "link" }}">
{{ end }}
{{- end -}}
{{- if eq $src.ResourceType "image" -}}
<picture class="figure__picture">
<img class="figure__image"
<picture class="figure__picture"
itemprop="image">
<img class="u-photo figure__image"
{{ if ( or ( eq $src.MediaType.SubType "svg" ) ( eq $src.MediaType.SubType "gif" ) ) }}
src="{{ $src.RelPermalink }}"
{{ else }}
{{ with $src.Resize "1500x webp" }}
{{ with $src.Resize "1200x webp" }}
src="{{ .RelPermalink }}"
{{ end }}
width="{{ $src.Width }}"
height="{{ $src.Height }}"
{{ end }}
{{- if or ($src.Params.alt) (.Get "caption") }}
alt="{{ with $src.Params.alt }}{{ . }}{{ else }}{{ .Get "caption" | markdownify | plainify }}{{ end }}"
{{- with $src.Params.alt }}
alt="{{ . }}"
{{- end -}}
{{- with $src.Params.title }} title="{{ . }}"{{ end -}}
{{- with $src.Params.title }} title="{{ . }}" {{ end -}}
loading="lazy"
role="img"
/>
</picture>
{{- else if eq $src.ResourceType "video" -}}
{{- if eq $src.MediaType "video/ogg" -}}
<audio class="figure__audio" controls>
<audio class="u-audio figure__audio" itemprop="audio" controls>
<source src="{{ $src.RelPermalink }}" type="{{ $src.MediaType }}" />
<p>Your browser doesn't support embedded audio, but you can view the audio <a href="{{ $src.RelPermalink }}">here</a>.</p>
<p>Your browser doesn't support embedded audio, <a href="{{ $src.RelPermalink }}">view the audio here</a>.</p>
</audio>
{{- else -}}
<video class="figure__video"
<video class="u-video figure__video"
controls
src="{{ $src.RelPermalink }}"
poster="{{ if $src.Params.poster }}{{ .Get $src.Params.poster }}{{ else }}{{ warnf "No poster defined for resource %q" $src.RelPermalink }}{{ end }}"
poster="
{{- if $src.Params.poster -}}
{{- $posterSrc := $.Page.Resources.GetMatch ( .Get $src.Params.poster ) -}}
{{- with $posterSrc.Resize "1200x webp" -}}
{{- .RelPermalink -}}
{{- end -}}
{{- else -}}
{{- warnf "No poster defined for resource %q (%q)" $src.RelPermalink .Page.File.Path -}}
{{- end -}}
"
itemprop="video"
>
Your browser doesn't support embedded video, but you can view the video <a href="{{ $src.RelPermalink }}">here</a>.
Your browser doesn't support embedded video, <a href="{{ $src.RelPermalink }}">view the video here</a>.
</video>
{{- end -}}
{{- else if or ( ne $src.ResourceType "image" ) ( ne $src.ResourceType "video" ) -}}
{{- else if ( or ( ne $src.ResourceType "image" ) ( ne $src.ResourceType "video" ) ) -}}
{{- errorf "No handling for resource of type %q" $src.ResourceType -}}
{{- end -}}
{{- if .Get "link" }}</a>{{ end -}}
@ -77,20 +78,16 @@
<figcaption class="figure__caption{{ if not ( or ( .Get "caption" ) ( .Get "title" ) ) }} figure__caption--no-height{{ end }}">
{{- with $src -}}
{{ if .Params.attrlink -}}
<a class="figcaption__attrlink" href="{{ .Params.attrlink }}"
{{- with .Params.attrtarget }} target="{{ . }}"{{ end -}}
{{- with .Params.attrrel }} rel="{{ . }}"{{ end -}}
>
<a class="figcaption__attrlink" href="{{ .Params.attrlink }}">
{{- end -}}
{{- if .Params.attr -}}<p class="figcaption__attr">{{ .Params.attr | safeHTML }}{{ with .Params.attrlicence }} <span class="figcaption__licence">{{ . | safeHTML }}</span>{{ end }}</p>{{- end -}}
{{- if .Params.attrlink -}}
</a>
{{- end -}}
{{- with .Params.title -}}<h4 class="figcaption__title">{{ . }}</h4>{{- end -}}
{{- end -}}
{{- with .Get "title" -}}<h4 class="figcaption__title">{{ . }}</h4>{{- end -}}
{{- with .Get "title" -}}<h4 class="figcaption__title">{{ . | markdownify | safeHTML }}</h4>{{- end -}}
{{- with .Get "caption" -}}
<p class="figcaption__caption">{{ . | markdownify }}</p>
<p class="figcaption__caption">{{ . | markdownify | safeHTML }}</p>
{{- end -}}
</figcaption>
{{- end -}}

View File

@ -15,7 +15,7 @@
<div class="box">
<figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<div class="img" style="background-image: url('{{ $linkURL }}');" >
<img itemprop="thumbnail" src="{{ $linkURL }}" alt="{{ $caption }}" /><!-- <img> hidden if in .gallery -->
<img itemprop="thumbnail" loading="lazy" src="{{ $linkURL }}" alt="{{ $caption }}" /><!-- <img> hidden if in .gallery -->
</div>
<a href="{{ $linkURL }}" itemprop="contentUrl"></a><!-- put <a> last so it is stacked on top -->
</figure>

View File

@ -0,0 +1,81 @@
<figure class="figure--gallery gallery" itemscope itemtype="http://schema.org/ImageGallery">
{{- if or ( .Get "caption" ) ( .Get "title" ) -}}
<figcaption class="figure__caption gallery__caption{{ if not ( or ( .Get "caption" ) ( .Get "title" ) ) }} figure__caption--no-height{{ end }}">
{{- with .Get "title" -}}<h4 class="figcaption__title">{{ . | markdownify | safeHTML }}</h4>{{- end -}}
{{- with .Get "caption" -}}
<p class="figcaption__caption">{{ . | markdownify | safeHTML }}</p>
{{- end -}}
</figcaption>
{{- end -}}
{{- with (.Get "dir") -}}
<!-- If a directory was specified, generate figures for all of the images in the directory -->
{{- $images := $.Page.Resources.Match ( print . "/*" ) }}
{{- range $images -}}
{{- $caption := .Name | replaceRE "\\..*" "" | humanize }}<!-- humanized filename without extension -->
{{- $linkURL := print $.Page.Permalink ($.Get "dir") "/" .Name | absURL }}<!-- absolute URL to hi-res image -->
<figure class="figure gallery__figure" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<a href="{{ .RelPermalink }}" itemprop="contentUrl">
<picture class="figure__picture"
itemprop="image">
<img itemprop="thumbnail"
class="u-photo gallery__thumbnail"
{{ if ( or ( eq .MediaType.SubType "svg" ) ( eq .MediaType.SubType "gif" ) ) }}
src="{{ .RelPermalink }}"
{{ else }}
{{ with .Resize "600x webp" }}
src="{{ .RelPermalink }}"
{{ end }}
width="{{ .Width }}"
height="{{ .Height }}"
{{ end }}
{{- with .Params.alt }}
alt="{{ . }}"
{{- end -}}
{{- with .Params.title }} title="{{ . }}" {{ end -}}
loading="lazy"
>
</picture>
</a>
{{- if or ( .Params.title ) ( .Params.attr ) -}}
<figcaption class="figure__caption{{ if not .Params.title }} figure__caption--no-height{{ end }}">
{{ if .Params.attrlink -}}
<a class="figcaption__attrlink" href="{{ .Params.attrlink }}"
{{- with .Params.attrtarget }} target="{{ . }}"{{ end -}}
{{- with .Params.attrrel }} rel="{{ . }}"{{ end -}}
>
{{- end -}}
{{- if .Params.attr -}}<p class="figcaption__attr">{{ .Params.attr | safeHTML }}{{ with .Params.attrlicence }} <span class="figcaption__licence">{{ . | safeHTML }}</span>{{ end }}</p>{{- end -}}
{{- if .Params.attrlink -}}
</a>
{{- end -}}
{{- if .Params.href -}}
<a href="{{- if ( eq .Params.href "asCite" ) -}}{{ .Params.cite }}{{- else -}}{{ .Params.href }}{{- end -}}">
{{- end -}}
{{- if .Params.title -}}
<h5 class="figcaption__title">
{{- if .Params.titleLang -}}
<i lang="{{ .Params.titleLang }}" title="{{ .Params.titleTr }}">
{{- end -}}
{{ .Params.title | safeHTML }}
{{- if .Params.titleLang -}}
</i>
{{- end -}}
</h5>
{{- else -}}
{{- with .Params.href -}}
<p class="figcaption__title">Link</p>
{{- end -}}
{{- end -}}
{{- if .Params.href -}}
</a>
{{- end -}}
</figcaption>
{{- end -}}
</figure>
{{- end }}
{{- else -}}
<!-- If no directory was specified, include any figure shortcodes called within the gallery -->
{{ .Inner }}
{{- end }}
</figure>

View File

@ -1,4 +1,4 @@
{{ $resource := .Page.Resources.GetMatch ($.Get 0) }}
{{ with $resource }}
{{ $resource.RelPermalink }}
{{ end }}
{{- $resource := .Page.Resources.GetMatch ($.Get 0) -}}
{{- with $resource -}}
{{- $resource.RelPermalink -}}
{{- end -}}

View File

@ -0,0 +1,9 @@
{{- /**/ -}}
<q
itemscope
itemtype="Quotation"
{{- if .Params -}}{{- with .Params.cite }} cite="{{ . }}"{{- end -}}{{- if .Params.lang }} lang="{{ .Params.lang }}" title="{{ .Params.trans }}"{{- end -}}{{- end -}}>
{{- with .Params -}}{{- with .cite -}}<meta itemprop="isBasedOn" content="{{ . }}">{{- end -}}{{- end -}}
{{- .Inner | .Page.RenderString -}}
</q>
{{- /**/ -}}