convert into Hugo module theme
19
.gitignore
vendored
|
@ -1,19 +0,0 @@
|
|||
# ---> Hugo
|
||||
# Generated files by hugo
|
||||
/public/
|
||||
/resources/_gen/
|
||||
/assets/jsconfig.json
|
||||
hugo_stats.json
|
||||
|
||||
# Executable may be added to repository
|
||||
hugo.exe
|
||||
hugo.darwin
|
||||
hugo.linux
|
||||
|
||||
# Temporary lock file while building
|
||||
/.hugo_build.lock
|
||||
|
||||
# TEMP - until I figure out licensing
|
||||
/js/
|
||||
/css/openlayers.css
|
||||
/css/leaflet.css
|
13
assets/css/abstracts/_mixins.scss
Normal file
|
@ -0,0 +1,13 @@
|
|||
@mixin mq($width, $type: min) {
|
||||
@if map_has_key($breakpoints, $width) {
|
||||
$width: map_get($breakpoints, $width);
|
||||
|
||||
@if $type == max {
|
||||
$width: $width - 1px;
|
||||
}
|
||||
|
||||
@media only screen and (#{$type}-width: $width) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
}
|
20
assets/css/abstracts/_variables.scss
Normal file
|
@ -0,0 +1,20 @@
|
|||
// Colours
|
||||
$dark: #020202;
|
||||
$light: #fffff0;
|
||||
|
||||
// Fonts
|
||||
$default-font: "Domitian", "Palatino Linotype", "Book Antiqua", palatino,
|
||||
garamond, serif;
|
||||
$code-font: "Input Mono", "Lucida Console", monaco, monospace;
|
||||
|
||||
// Breakpoints
|
||||
$breakpoints: (
|
||||
"small": 480px,
|
||||
"medium": 768px,
|
||||
"large": 1248px,
|
||||
);
|
||||
|
||||
// Old Site Versions
|
||||
$ohwhatohjeez: #ff8900;
|
||||
$oldphaloskepsis: #003d52;
|
||||
$omphaloskepsis: #fffff0;
|
352
assets/css/base/_typography.scss
Normal file
|
@ -0,0 +1,352 @@
|
|||
/*
|
||||
* Fonts
|
||||
*/
|
||||
|
||||
/*
|
||||
* Commented out until I decide to buy a licence for Input Mono.
|
||||
*
|
||||
* @font-face {
|
||||
* font-family: "Input Mono";
|
||||
* src: url(/fonts/InputMono-Regular.ttf);
|
||||
* }
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: Domitian;
|
||||
src: url("/fonts/Domitian-Roman.woff2") format("woff2");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Domitian;
|
||||
src: url("/fonts/Domitian-Bold.woff2") format("woff2");
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Domitian;
|
||||
src: url("/fonts/Domitian-Italic.woff2") format("woff2");
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Domitian;
|
||||
src: url("/fonts/Domitian-BoldItalic.woff2") format("woff2");
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/*
|
||||
* Base
|
||||
*/
|
||||
|
||||
html {
|
||||
font-size: 16px;
|
||||
color: $dark;
|
||||
background-color: $light;
|
||||
font-family: $default-font;
|
||||
font-variant-numeric: 'oldstyle-nums slashed-zero';
|
||||
writing-mode: horizontal-tb;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration-skip-ink: auto;
|
||||
color: $dark;
|
||||
text-decoration: underline;
|
||||
opacity: 0.8;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Quotations
|
||||
*/
|
||||
|
||||
q:lang(en) {
|
||||
quotes: "‘" "’" "“" "”";
|
||||
}
|
||||
|
||||
/*
|
||||
* Citations
|
||||
*/
|
||||
|
||||
// Legacy citations
|
||||
|
||||
cite,
|
||||
cite.book,
|
||||
cite.film,
|
||||
cite.tv-show,
|
||||
cite.comic,
|
||||
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.poem,
|
||||
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;
|
||||
}
|
||||
|
||||
// Schema.org citations
|
||||
|
||||
cite,
|
||||
.cite {
|
||||
font-style: italic;
|
||||
|
||||
&[itemtype$="Code"],
|
||||
&[itemtype$="SocialMediaPosting"],
|
||||
&[itemtype$="SoftwareApplication"],
|
||||
&[itemtype$="WebApplication"],
|
||||
&[itemtype$="MobileApplication"],
|
||||
&[itemtype$="WebSite"],
|
||||
&[itemtype$="WebContent"],
|
||||
&[itemtype$="Comment"],
|
||||
&[itemtype$="Statement"],
|
||||
&[itemtype$="CreativeWorkSeason"],
|
||||
&[itemtype$="PodcastSeason"],
|
||||
&[itemtype$="RadioSeason"],
|
||||
&[itemtype$="TVSeason"],
|
||||
&[itemtype$="CreativeWorkSeries"],
|
||||
&[itemtype$="BookSeries"],
|
||||
&[itemtype$="MovieSeries"],
|
||||
&[itemtype$="VideoGameSeries"],
|
||||
&[itemtype$="Legislation"],
|
||||
&--inherit {
|
||||
font-style: inherit;
|
||||
}
|
||||
|
||||
&[itemtype$="Article"],
|
||||
&[itemtype$="BlogPosting"],
|
||||
&[itemtype$="NewsArticle"],
|
||||
&[itemtype$="AnalysisNewsArticle"],
|
||||
&[itemtype$="ReportageNewsArticle"],
|
||||
&[itemtype$="OpinionNewsArticle"],
|
||||
&[itemtype$="ScholarlyArticle"],
|
||||
&[itemtype$="TechArticle"],
|
||||
&[itemtype$="Event"],
|
||||
&[itemtype$="Chapter"],
|
||||
&[itemtype$="Clip"],
|
||||
&[itemtype$="MovieClip"],
|
||||
&[itemtype$="RadioClip"],
|
||||
&[itemtype$="TVClip"],
|
||||
&[itemtype$="VideoGameClip"],
|
||||
&[itemtype$="Course"],
|
||||
&[itemtype$="DigitalDocument"],
|
||||
&[itemtype$="NoteDigitalDocument"],
|
||||
&[itemtype$="PresentationDigitalDocument"],
|
||||
&[itemtype$="TextDigitalDocument"],
|
||||
&[itemtype$="Episode"],
|
||||
&[itemtype$="PodcastEpisode"],
|
||||
&[itemtype$="RadioEpisode"],
|
||||
&[itemtype$="TVEpisode"],
|
||||
&[itemtype$="MusicRecording"],
|
||||
&[itemtype$="MusicComposition"],
|
||||
&[itemtype$="Message"],
|
||||
&--enquote {
|
||||
font-style: inherit;
|
||||
|
||||
&::before {
|
||||
content: "“";
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: "”";
|
||||
}
|
||||
}
|
||||
|
||||
&--normal {
|
||||
font-style: normal !important;
|
||||
|
||||
&::before {
|
||||
content: none !important;
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Code
|
||||
*/
|
||||
|
||||
pre {
|
||||
padding-inline-start: 1em;
|
||||
border-inline-start: 2px outset $dark;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
max-inline-size: 80%;
|
||||
overflow: scroll;
|
||||
|
||||
@include mq("large") {
|
||||
margin-block: 1em;
|
||||
margin-inline: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
code,
|
||||
samp,
|
||||
var,
|
||||
pre {
|
||||
font-family: $code-font;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
code,
|
||||
samp,
|
||||
var {
|
||||
background-color: #d1d1d1;
|
||||
border-radius: 5px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
samp {
|
||||
display: block;
|
||||
inline-size: 80ch;
|
||||
margin-block: 1em;
|
||||
margin-inline: 4em;
|
||||
border-inline-start: 2px solid #ccc;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
h1 code,
|
||||
pre code,
|
||||
pre samp,
|
||||
pre var,
|
||||
h1 samp,
|
||||
h1 var,
|
||||
.post-title code,
|
||||
.post-title samp,
|
||||
.post-title var {
|
||||
background-color: transparent;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.heading code,
|
||||
.subheading code {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
// Source: Stack Overflow Stylesheet
|
||||
kbd {
|
||||
padding-block: 0.1em;
|
||||
padding-inline: 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-block: 0;
|
||||
margin-inline: 0.1em;
|
||||
text-shadow: 0 1px 0 white;
|
||||
line-height: 1.4;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/*
|
||||
* Special Text
|
||||
*/
|
||||
|
||||
.pre-nominals,
|
||||
.post-nominals {
|
||||
font-size: 0.6em;
|
||||
font-variant: small-caps;
|
||||
}
|
||||
|
||||
.sic::after {
|
||||
content: " [sic]";
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.latex {
|
||||
display: inline !important;
|
||||
}
|
||||
|
||||
.MathJax {
|
||||
font-size: 1em !important;
|
||||
}
|
||||
|
||||
:where([title]) {
|
||||
text-decoration: underline;
|
||||
text-decoration: underline dotted;
|
||||
|
||||
&:not(a *) {
|
||||
cursor: help;
|
||||
}
|
||||
}
|
||||
|
||||
dfn {
|
||||
font-variant: small-caps;
|
||||
}
|
0
assets/css/components/_audio.scss
Normal file
81
assets/css/components/_blockquote.scss
Normal file
|
@ -0,0 +1,81 @@
|
|||
.blockquote {
|
||||
padding-inline-start: 1em;
|
||||
border-inline-start: 2px outset $dark;
|
||||
display: inline-block;
|
||||
max-inline-size: 85%;
|
||||
|
||||
@media only screen and (min-width: 1024px) {
|
||||
margin-block: 0.5em;
|
||||
margin-inline: 1em;
|
||||
}
|
||||
|
||||
&__body {
|
||||
& p:first-child {
|
||||
margin-block-start: 0;
|
||||
}
|
||||
|
||||
& p:last-of-type {
|
||||
margin-block-end: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
&__caption {
|
||||
display: none;
|
||||
text-align: end;
|
||||
font-style: normal;
|
||||
margin-inline-start: 5em;
|
||||
inline-size: 80%;
|
||||
orphans: 3;
|
||||
|
||||
&::before {
|
||||
content: "—";
|
||||
}
|
||||
}
|
||||
|
||||
&--epigram {
|
||||
font-size: 1.1em;
|
||||
text-align: center;
|
||||
display: block;
|
||||
margin-block: 0;
|
||||
margin-inline: auto;
|
||||
border-inline-start: 0;
|
||||
padding-inline-start: 0;
|
||||
inline-size: 100%;
|
||||
padding-block-start: 1em;
|
||||
padding-block-end: 1.2em;
|
||||
border-block-start: 2px outset $dark;
|
||||
border-block-end: 2px inset $dark;
|
||||
|
||||
& .blockquote {
|
||||
&__caption {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--script {
|
||||
& .blockquote__body {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr 0.2fr;
|
||||
padding-block-end: 0.4em;
|
||||
text-align: start;
|
||||
|
||||
& > p::before,
|
||||
& > p::after {
|
||||
content: none !important;
|
||||
}
|
||||
|
||||
& > .script-line__character {
|
||||
margin-inline: 2em 0.5em;
|
||||
margin-block: 0.5em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
& > .script-line__text {
|
||||
grid-column-start: 2;
|
||||
grid-column-end: 4;
|
||||
margin: 0.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
assets/css/components/_button.scss
Normal file
|
@ -0,0 +1,17 @@
|
|||
.label--button {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
inline-size: fit-content;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.button {
|
||||
border: 2px solid $dark;
|
||||
background-color: $light;
|
||||
padding: 0.4em 1em;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
box-shadow: 2px 2px gray;
|
||||
}
|
||||
}
|
22
assets/css/components/_chart.scss
Normal file
|
@ -0,0 +1,22 @@
|
|||
.chart-container {
|
||||
position: relative;
|
||||
margin-inline: auto;
|
||||
block-size: 50vh;
|
||||
inline-size: 95vw;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
@media (orientation: landscape) {
|
||||
block-size: 75vh;
|
||||
inline-size: 95vw;
|
||||
}
|
||||
|
||||
@include mq("large") {
|
||||
block-size: 50vh;
|
||||
inline-size: 50vw;
|
||||
}
|
||||
|
||||
& + .chart-container {
|
||||
margin-block-start: 1em;
|
||||
}
|
||||
}
|
35
assets/css/components/_comment.scss
Normal file
|
@ -0,0 +1,35 @@
|
|||
.comment {
|
||||
&__header {
|
||||
}
|
||||
|
||||
&__author {
|
||||
display: inline;
|
||||
font-weight: bold;
|
||||
margin-inline-end: 0.5em;
|
||||
}
|
||||
|
||||
&__publish-date {
|
||||
display: inline;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
&__source {
|
||||
font-style: italic;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
&__subheading {
|
||||
font-weight: bold;
|
||||
margin-block-end: 1em;
|
||||
margin-block-start: 1em;
|
||||
}
|
||||
|
||||
&__thread,
|
||||
&__subthread {
|
||||
list-style: none;
|
||||
margin-block-start: 1em;
|
||||
padding-inline-start: 1em;
|
||||
border-inline-start: 1px dotted $dark;
|
||||
margin-inline-start: 0;
|
||||
}
|
||||
}
|
5
assets/css/components/_details.scss
Normal file
|
@ -0,0 +1,5 @@
|
|||
details {
|
||||
& summary {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
55
assets/css/components/_figure.scss
Normal file
|
@ -0,0 +1,55 @@
|
|||
.figure {
|
||||
inline-size: fit-content;
|
||||
margin: 16px auto;
|
||||
|
||||
&__caption {
|
||||
block-size: auto;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
|
||||
&--no-height {
|
||||
height: 0;
|
||||
}
|
||||
|
||||
& .figcaption {
|
||||
&__caption {
|
||||
font-size: 0.9em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-size: 0.95em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&__attr {
|
||||
background-color: $dark;
|
||||
font-size: 0.7em;
|
||||
color: $light;
|
||||
inline-size: fit-content;
|
||||
inset-block-start: -2em;
|
||||
position: relative;
|
||||
padding: 0.2em 0.5em;
|
||||
opacity: 0.8;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
&__attr + .figcaption__caption {
|
||||
margin-block-start: -0.5em;
|
||||
}
|
||||
|
||||
&__full-size-link {
|
||||
font-size: 0.6em;
|
||||
padding-inline-start: 1em;
|
||||
|
||||
&::before {
|
||||
content: "[";
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: "]";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
12
assets/css/components/_gallery.scss
Normal file
|
@ -0,0 +1,12 @@
|
|||
.gallery {
|
||||
display: grid;
|
||||
grid-gap: 10px;
|
||||
grid-template-columns: repeat(auto-fill, minmax(20%, 1fr));
|
||||
grid-template-rows: 1fr auto;
|
||||
overflow-inline: scroll;
|
||||
|
||||
&__caption {
|
||||
grid-column-end: -1;
|
||||
grid-column-start: 1;
|
||||
}
|
||||
}
|
10
assets/css/components/_icons.scss
Normal file
|
@ -0,0 +1,10 @@
|
|||
.feed-icon {
|
||||
display: inline-block;
|
||||
block-size: 1em;
|
||||
inline-size: 1em;
|
||||
margin-block-end: 0.2em;
|
||||
}
|
||||
|
||||
.site-header__icons a {
|
||||
text-decoration: none;
|
||||
}
|
109
assets/css/components/_item-tile.scss
Normal file
|
@ -0,0 +1,109 @@
|
|||
.link--tile {
|
||||
text-decoration: none;
|
||||
box-sizing: border-box;
|
||||
border: 2px solid transparent;
|
||||
|
||||
&:hover {
|
||||
border-color: $dark;
|
||||
}
|
||||
}
|
||||
|
||||
.site-container--section .item-tile.lazy {
|
||||
background-image: none !important;
|
||||
}
|
||||
|
||||
.item-tile {
|
||||
display: grid;
|
||||
min-block-size: 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;
|
||||
word-break: break-word;
|
||||
|
||||
@media (prefers-reduced-data: reduce) {
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
&__header {
|
||||
text-align: center;
|
||||
background-color: $dark;
|
||||
opacity: 0.9;
|
||||
display: grid;
|
||||
grid-area: tile-details;
|
||||
grid-template-columns: 5px auto 5px;
|
||||
grid-template-rows: 0 1.8em auto auto;
|
||||
grid-template-areas:
|
||||
". . ."
|
||||
". banner ."
|
||||
". tile-title ."
|
||||
". tile-subtitle .";
|
||||
}
|
||||
|
||||
&--heading {
|
||||
font-size: 3em;
|
||||
|
||||
& .item-tile__header,
|
||||
& .item-tile__redacted {
|
||||
opacity: 1;
|
||||
grid-template-rows: auto;
|
||||
grid-template-areas: ". tile-title .";
|
||||
}
|
||||
}
|
||||
|
||||
&--ohwhatohjeez {
|
||||
border: 2px solid $ohwhatohjeez;
|
||||
}
|
||||
|
||||
&--oldphaloskepsis {
|
||||
border: 2px solid $oldphaloskepsis;
|
||||
}
|
||||
|
||||
&--omphaloskepsis {
|
||||
border: 2px solid $omphaloskepsis;
|
||||
}
|
||||
|
||||
&__banner {
|
||||
padding-inline: 0.75em;
|
||||
grid-area: banner;
|
||||
inline-size: auto;
|
||||
margin-inline: auto;
|
||||
border-start-start-radius: 0;
|
||||
border-start-end-radius: 0;
|
||||
border-end-end-radius: 10px;
|
||||
border-end-start-radius: 10px;
|
||||
text-align: center;
|
||||
text-decoration: none !important;
|
||||
line-height: 1.8em;
|
||||
background-color: #ebebeb;
|
||||
}
|
||||
|
||||
&__title,
|
||||
&__subtitle {
|
||||
color: $light;
|
||||
margin: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-size: 1.4em;
|
||||
line-height: 1em;
|
||||
grid-area: tile-title;
|
||||
align-self: center;
|
||||
|
||||
&--long {
|
||||
font-size: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
&__subtitle {
|
||||
font-size: 1em;
|
||||
grid-area: tile-subtitle;
|
||||
align-self: start;
|
||||
}
|
||||
}
|
19
assets/css/components/_picture.scss
Normal file
|
@ -0,0 +1,19 @@
|
|||
// TODO: remove once replaced in content with figures
|
||||
img,
|
||||
video {
|
||||
max-inline-size: 100%;
|
||||
block-size: auto;
|
||||
inline-size: auto;
|
||||
max-block-size: 50vh;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.picture {
|
||||
display: block;
|
||||
inline-size: auto;
|
||||
max-inline-size: 100%;
|
||||
margin: auto;
|
||||
block-size: auto;
|
||||
max-block-size: 50vh;
|
||||
}
|
44
assets/css/components/_table.scss
Normal file
|
@ -0,0 +1,44 @@
|
|||
/* TODO: Not currently used */
|
||||
@media screen and (max-width: 480px) {
|
||||
.table-scroller {
|
||||
overflow-inline: auto;
|
||||
inline-size: 320px;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid $dark;
|
||||
margin: auto;
|
||||
|
||||
& thead {
|
||||
background-color: #808080;
|
||||
color: $light;
|
||||
z-index: 1;
|
||||
position: sticky;
|
||||
vertical-align: middle;
|
||||
inset-block-start: 0;
|
||||
max-block-size: 1.8em;
|
||||
|
||||
& th {
|
||||
font-weight: bold;
|
||||
text-align: start;
|
||||
padding: 1em;
|
||||
font-size: 1.4em;
|
||||
border: 1px solid $dark;
|
||||
}
|
||||
}
|
||||
|
||||
& tbody {
|
||||
& tr {
|
||||
&:nth-child(2n) {
|
||||
background-color: #DDDDD0;
|
||||
}
|
||||
|
||||
& td {
|
||||
padding: 0.5em 1em;
|
||||
border: 1px solid $dark;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
3
assets/css/components/_video.scss
Normal file
|
@ -0,0 +1,3 @@
|
|||
video {
|
||||
background-color: black;
|
||||
}
|
23
assets/css/layout/_footer.scss
Normal file
|
@ -0,0 +1,23 @@
|
|||
.site-footer {
|
||||
grid-area: footer;
|
||||
display: block;
|
||||
inline-size: 100%;; /* Overflows right of viewport otherwise */
|
||||
position: fixed;
|
||||
inset-block-end: 0;
|
||||
|
||||
& p {
|
||||
text-align: center;
|
||||
background: $light;
|
||||
padding: 0.4em;
|
||||
margin-block-end: unset;
|
||||
border-block-end: none;
|
||||
font-size: 1em;
|
||||
border-block-start: 2px solid black;
|
||||
|
||||
@include mq("medium") {
|
||||
inline-size: fit-content;
|
||||
margin: auto;
|
||||
border-inline: 2px solid black;
|
||||
}
|
||||
}
|
||||
}
|
42
assets/css/layout/_grid.scss
Normal file
|
@ -0,0 +1,42 @@
|
|||
.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-block-size: calc(100vh - 4em);
|
||||
border-block-start: 0;
|
||||
|
||||
@include mq("large") {
|
||||
margin-block-end: 2em;
|
||||
grid-template-areas:
|
||||
"header header header"
|
||||
". page-container ."
|
||||
"footer footer footer";
|
||||
border: 2px solid black;
|
||||
margin-inline: 2em;
|
||||
}
|
||||
|
||||
&--homepage {
|
||||
align-items: center;
|
||||
grid-template-rows: auto 2.5%;
|
||||
grid-template-areas:
|
||||
"page-container page-container page-container"
|
||||
"footer footer footer";
|
||||
margin: 2em;
|
||||
|
||||
@include mq("large") {
|
||||
border: 2px solid black;
|
||||
grid-template-areas:
|
||||
". page-container ."
|
||||
"footer footer footer";
|
||||
}
|
||||
}
|
||||
|
||||
&--list,
|
||||
&--section {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
89
assets/css/layout/_header.scss
Normal file
|
@ -0,0 +1,89 @@
|
|||
.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";
|
||||
inset-block-start: 0;
|
||||
inset-inline-start: 0;
|
||||
inline-size: 100%;
|
||||
text-align: center;
|
||||
z-index: 1;
|
||||
|
||||
&__title,
|
||||
&__tagline,
|
||||
&__icons,
|
||||
&__nav {
|
||||
background-color: $light;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&__title,
|
||||
&__tagline,
|
||||
&__icons {
|
||||
padding-block: 5px;
|
||||
padding-inline: 0;
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-weight: normal;
|
||||
grid-area: header-title;
|
||||
}
|
||||
|
||||
&__tagline {
|
||||
grid-area: header-tagline;
|
||||
}
|
||||
|
||||
&__icons {
|
||||
grid-area: header-icons;
|
||||
border-block-end: 2px solid $dark;
|
||||
margin-block-end: 0;
|
||||
}
|
||||
|
||||
&__nav {
|
||||
grid-area: header-nav;
|
||||
margin: auto;
|
||||
inline-size: 100%;
|
||||
|
||||
@include mq("large") {
|
||||
inline-size: 60%;
|
||||
}
|
||||
|
||||
& ul {
|
||||
margin-block: 0;
|
||||
|
||||
& li {
|
||||
inline-size: calc(100% / 3);
|
||||
display: block;
|
||||
float: inline-start;
|
||||
border-block-end: 2px solid black;
|
||||
border-inline: 1px solid black;
|
||||
padding: 0.4em;
|
||||
background-color: inherit;
|
||||
|
||||
&:hover {
|
||||
background-color: #ffffd0;
|
||||
}
|
||||
|
||||
& a {
|
||||
inline-size: 100%;
|
||||
block-size: 100%;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
& a:first-child li {
|
||||
border-inline-start: 2px solid black;
|
||||
}
|
||||
|
||||
& a:last-child li {
|
||||
border-inline-start: 2px solid black;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
7
assets/css/layout/_main.scss
Normal file
|
@ -0,0 +1,7 @@
|
|||
.site-content {
|
||||
grid-area: page-container;
|
||||
|
||||
@include mq("large") {
|
||||
margin: 2em;
|
||||
}
|
||||
}
|
0
assets/css/layout/_navigation.scss
Normal file
31
assets/css/main.scss
Normal file
|
@ -0,0 +1,31 @@
|
|||
@import "abstracts/variables";
|
||||
@import "abstracts/mixins";
|
||||
|
||||
@import "base/typography";
|
||||
|
||||
@import "layout/grid";
|
||||
@import "layout/header";
|
||||
@import "layout/footer";
|
||||
@import "layout/main";
|
||||
|
||||
@import "components/audio";
|
||||
@import "components/blockquote";
|
||||
@import "components/button";
|
||||
@import "components/chart";
|
||||
@import "components/comment";
|
||||
@import "components/details";
|
||||
@import "components/figure";
|
||||
@import "components/gallery";
|
||||
@import "components/picture";
|
||||
@import "components/icons";
|
||||
@import "components/item-tile";
|
||||
@import "components/table";
|
||||
@import "components/video";
|
||||
|
||||
@import "pages/home";
|
||||
@import "pages/collection";
|
||||
@import "pages/single";
|
||||
@import "pages/organisations-list";
|
||||
@import "pages/single-organisation";
|
||||
|
||||
/* @import "themes/dark"; */
|
113
assets/css/pages/_collection.scss
Normal file
|
@ -0,0 +1,113 @@
|
|||
.site-content--section,
|
||||
.site-content--list {
|
||||
display: grid;
|
||||
grid-gap: 10px;
|
||||
grid-template-columns: 0.2fr 1fr 0.2fr;
|
||||
grid-template-rows: auto auto auto;
|
||||
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-block-start: 5em;
|
||||
|
||||
@include mq("large") {
|
||||
grid-template-areas:
|
||||
". list-page-header ."
|
||||
"list-page-grid list-page-grid list-page-grid"
|
||||
". list-page-footer .";
|
||||
}
|
||||
|
||||
& .site-content__header {
|
||||
grid-area: list-page-header;
|
||||
text-align: center;
|
||||
|
||||
& .page-header__minor-links {
|
||||
text-align: center;
|
||||
overflow: auto;
|
||||
|
||||
& ul {
|
||||
list-style: none;
|
||||
|
||||
& li {
|
||||
float: inline-start;
|
||||
margin-block: 0;
|
||||
margin-inline: 1em;
|
||||
|
||||
& * {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .minor-links {
|
||||
&__categories {
|
||||
inline-size: fit-content;
|
||||
margin: auto;
|
||||
display: block;
|
||||
overflow: auto;
|
||||
|
||||
@include mq("large") {
|
||||
font-size: 1em !important;
|
||||
}
|
||||
}
|
||||
|
||||
&__years {
|
||||
display: block;
|
||||
margin: auto;
|
||||
inline-size: fit-content;
|
||||
|
||||
& li {
|
||||
inline-size: fit-content;
|
||||
min-inline-size: fit-content;
|
||||
padding: 0.5em;
|
||||
|
||||
@include mq("large") {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__body {
|
||||
inline-size: 100%;
|
||||
display: grid;
|
||||
grid-gap: 10px;
|
||||
grid-area: list-page-grid;
|
||||
grid-template-columns: 1fr;
|
||||
grid-template-rows: repeat(8, 1fr);
|
||||
justify-items: stretch;
|
||||
align-items: stretch;
|
||||
|
||||
@include mq("medium") {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: repeat(4, 1fr);
|
||||
}
|
||||
|
||||
@include mq("large") {
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
grid-template-rows: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
&--list {
|
||||
grid-template-columns: 1fr auto 1fr;
|
||||
grid-template-rows: auto;
|
||||
grid-template-areas: ". sections-list .";
|
||||
}
|
||||
|
||||
&--chart {
|
||||
grid-template-columns: 1em 100% 1fr;
|
||||
grid-template-rows: auto auto;
|
||||
grid-template-areas:
|
||||
". section-chart ."
|
||||
". section-content .";
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__footer {
|
||||
grid-area: list-page-footer;
|
||||
}
|
||||
}
|
16
assets/css/pages/_home.scss
Normal file
|
@ -0,0 +1,16 @@
|
|||
.site-content--homepage {
|
||||
text-align: center;
|
||||
|
||||
& .page-title {
|
||||
font-size: 2.5em;
|
||||
margin-block-end: 1em;
|
||||
|
||||
@include mq("large") {
|
||||
font-size: 4em;
|
||||
}
|
||||
|
||||
& span {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
}
|
14
assets/css/pages/_organisations-list.scss
Normal file
|
@ -0,0 +1,14 @@
|
|||
.organisations-table {
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 5;
|
||||
|
||||
&__items-icon {
|
||||
text-align: center;
|
||||
float: inline-start;
|
||||
padding-inline-end: 1em;
|
||||
|
||||
&--none {
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
}
|
205
assets/css/pages/_single-organisation.scss
Normal file
|
@ -0,0 +1,205 @@
|
|||
.organisation {
|
||||
&__description {
|
||||
margin-block-end: 2em;
|
||||
|
||||
details {
|
||||
margin-inline-start: 1em;
|
||||
padding-inline-start: 1em;
|
||||
border-inline-start: 2px solid $dark;
|
||||
|
||||
summary {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__timeline {
|
||||
margin-block-end: 1em;
|
||||
|
||||
& #timeline {
|
||||
clear: both;
|
||||
|
||||
& > div > div {
|
||||
block-size: unset !important;
|
||||
|
||||
& > div {
|
||||
position: unset !important;
|
||||
inline-size: unset !important;
|
||||
block-size: unset !important;
|
||||
|
||||
& > div:first-of-type {
|
||||
overflow: unset !important;
|
||||
position: unset !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__related {
|
||||
& .related-section {
|
||||
text-align: center;
|
||||
|
||||
&--list {
|
||||
text-align: start;
|
||||
inline-size: 50%;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
padding-block: 0;
|
||||
padding-inline: 2em;
|
||||
}
|
||||
|
||||
& .related-items {
|
||||
margin-block: 2em;
|
||||
|
||||
&--tiles {
|
||||
& .index {
|
||||
display: grid;
|
||||
grid-gap: 1em;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
&--collapsible {
|
||||
margin-block-end: 1em;
|
||||
|
||||
& summary {
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
padding-block-end: 1em;
|
||||
|
||||
&::marker {
|
||||
font-size: 2em;
|
||||
padding-inline-start: 2em;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--list {
|
||||
.related-item {
|
||||
&__expiry,
|
||||
&__grade {
|
||||
font-size: 0.8em;
|
||||
display: block;
|
||||
margin-inline-start: 0.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-title {
|
||||
border-block-end: none;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
& .related-item {
|
||||
&--expired {
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.organisation-table {
|
||||
&__logo {
|
||||
max-inline-size: 5em;
|
||||
max-block-size: 5em;
|
||||
}
|
||||
}
|
||||
|
||||
.timeline__legend > fieldset {
|
||||
inline-size: 45%;
|
||||
float: inline-start;
|
||||
text-align: center;
|
||||
border: none;
|
||||
|
||||
& legend {
|
||||
display: block;
|
||||
inline-size: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
#hierarchy ul {
|
||||
list-style: none;
|
||||
padding-inline-start: 1em;
|
||||
|
||||
& .hierarchy-item {
|
||||
&::before {
|
||||
content: "\21B3";
|
||||
margin-block: 0;
|
||||
margin-inline: 0.4em;
|
||||
}
|
||||
|
||||
&--current {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&--child::before {
|
||||
content: "\2192";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.timeline__legend {
|
||||
& .legend__button {
|
||||
cursor: pointer;
|
||||
|
||||
& span {
|
||||
margin-block: 0;
|
||||
margin-inline: 1em;
|
||||
display: inline-block;
|
||||
|
||||
&.colour-square {
|
||||
inline-size: 1em;
|
||||
block-size: 1em;
|
||||
border-radius: 2.5px;
|
||||
border: 1px solid $dark;
|
||||
|
||||
&--unpaid-current {
|
||||
background-color: #bbbbb0;
|
||||
}
|
||||
|
||||
&--unpaid-past {
|
||||
background-color: #fffff0;
|
||||
}
|
||||
|
||||
&--paid-current {
|
||||
background-color: #bcbc7e;
|
||||
}
|
||||
|
||||
&--paid-past {
|
||||
background-color: #fcfca6;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--disabled {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.site-content__body--chart {
|
||||
& #timeline,
|
||||
& #map {
|
||||
inline-size: 100%;
|
||||
max-inline-size: 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-inline-start: 0;
|
||||
|
||||
& li * {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
455
assets/css/pages/_single.scss
Normal file
|
@ -0,0 +1,455 @@
|
|||
.site-content--single {
|
||||
display: grid;
|
||||
column-gap: 2em;
|
||||
grid-template-columns: 0.4fr 0.6fr;
|
||||
grid-template-rows: auto auto auto auto 60px;
|
||||
|
||||
@include mq("large") {
|
||||
grid-template-rows: auto auto auto auto;
|
||||
}
|
||||
|
||||
& .site-content__header,
|
||||
& .site-content__footer {
|
||||
display: grid;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 3;
|
||||
background-color: $light;
|
||||
filter: brightness(80%);
|
||||
|
||||
@include mq("large") {
|
||||
border: 2px solid $dark;
|
||||
grid-column-end: 2;
|
||||
padding: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__header {
|
||||
grid-row-start: 1;
|
||||
grid-row-end: 2;
|
||||
overflow: auto;
|
||||
border-block-end: 2px solid $dark;
|
||||
margin-block-end: 2em;
|
||||
padding-inline: 1em;
|
||||
|
||||
& .article-header {
|
||||
text-align: center;
|
||||
background-color: $dark;
|
||||
opacity: 0.8;
|
||||
color: $light;
|
||||
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" ".";
|
||||
|
||||
&__series {
|
||||
margin-block: 0 1em;
|
||||
margin-inline: auto;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
&__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;
|
||||
block-size: 40vh;
|
||||
min-block-size: 380px;
|
||||
inline-size: 100%;
|
||||
border: 2px solid $dark;
|
||||
|
||||
& .attr {
|
||||
background-color: $dark;
|
||||
font-size: 0.7em;
|
||||
color: $light;
|
||||
inline-size: fit-content;
|
||||
position: fixed;
|
||||
padding-block: 0.2em;
|
||||
padding-inline: 0.5em;
|
||||
opacity: 0.8;
|
||||
margin-block: 0;
|
||||
margin-inline: auto;
|
||||
|
||||
& a {
|
||||
color: $light;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__title,
|
||||
&__subtitle {
|
||||
border-block-end: 2px inset $dark;
|
||||
margin-block: 0;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
&__subtitle {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
&__title-wrapper {
|
||||
display: grid;
|
||||
grid-area: post-header-details;
|
||||
background-color: $dark;
|
||||
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" ".";
|
||||
|
||||
&--no-title {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
& .article-header__title,
|
||||
& .article-header__subtitle {
|
||||
color: $light;
|
||||
}
|
||||
|
||||
& .article-header__title {
|
||||
grid-area: post-title;
|
||||
font-weight: bold;
|
||||
|
||||
&--long {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
}
|
||||
|
||||
& .article-header__subtitle {
|
||||
grid-area: post-subtitle;
|
||||
}
|
||||
}
|
||||
|
||||
&__word-count,
|
||||
&__publish-date,
|
||||
&__modified-date {
|
||||
font-size: 1.2em;
|
||||
margin-block: 0.2rem;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
&__word-count {
|
||||
margin-block-start: 1rem;
|
||||
}
|
||||
|
||||
&__warnings,
|
||||
&__notes {
|
||||
inline-size: 90%;
|
||||
margin-block: 1.6em;
|
||||
margin-inline: auto;
|
||||
display: block;
|
||||
padding-inline-end: 1em;
|
||||
|
||||
& ul {
|
||||
list-style: circle;
|
||||
|
||||
& li {
|
||||
margin-block: 0.5em;
|
||||
margin-inline: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__warnings {
|
||||
border: 4px solid darkred;
|
||||
background-color: #fc3a3a;
|
||||
color: $light;
|
||||
font-weight: 500;
|
||||
|
||||
& ul {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
& + .article-header__notes {
|
||||
margin-block-start: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&__notes {
|
||||
background-color: $light;
|
||||
filter: brightness(70%);
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
&__table-of-contents {
|
||||
& ul {
|
||||
list-style-type: arabic;
|
||||
padding-inline-start: 2em;
|
||||
margin-block-end: 0;
|
||||
|
||||
&.toc-list--appendices,
|
||||
&.toc-list--corrigenda {
|
||||
list-style-type: circle;
|
||||
margin-block-start: 0;
|
||||
|
||||
& ol {
|
||||
padding-inline-start: 2em;
|
||||
list-style-type: upper-latin !important;
|
||||
}
|
||||
}
|
||||
|
||||
& li {
|
||||
padding-block: 0.8em;
|
||||
padding-inline: 0;
|
||||
|
||||
@include mq("large") {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__body {
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 3;
|
||||
grid-row-start: 2;
|
||||
grid-row-end: 3;
|
||||
padding-inline: 1em;
|
||||
|
||||
@include mq("large") {
|
||||
grid-row-start: 1;
|
||||
grid-row-end: 5;
|
||||
grid-column-start: 2;
|
||||
}
|
||||
|
||||
/* Temporary until I've fixed all the figures */
|
||||
overflow-inline: clip;
|
||||
|
||||
& .article__links {
|
||||
background-color: $light;
|
||||
filter: brightness(80%);
|
||||
inline-size: 60%;
|
||||
margin-inline: auto;
|
||||
margin-block: auto 1em;
|
||||
border: 2px solid $dark;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.article-body {
|
||||
&__summary {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.heading {
|
||||
text-align: center;
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: " ~ ";
|
||||
}
|
||||
}
|
||||
|
||||
.heading-anchor {
|
||||
font-size: 0.6em;
|
||||
line-height: 1em;
|
||||
text-decoration: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.subheading {
|
||||
font-size: 1.6em;
|
||||
border-block-end: 2px inset $dark;
|
||||
margin-block: 0.5em;
|
||||
line-height: 1.2em;
|
||||
text-align: center;
|
||||
|
||||
&--appendices,
|
||||
&--comments {
|
||||
text-decoration: underline;
|
||||
border-block-end: none;
|
||||
font-size: 2em;
|
||||
padding-block-start: 1em;
|
||||
border-block-start: 1px dashed $dark;
|
||||
}
|
||||
|
||||
&__subtitle {
|
||||
font-size: 1em;
|
||||
border-block-end: 1px dashed $dark;
|
||||
line-height: 1em;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
inline-size: fit-content;
|
||||
margin-block: 0 1em;
|
||||
margin-inline: auto;
|
||||
padding-block: 0 0.5em;
|
||||
padding-inline: 3em 0.4em;
|
||||
}
|
||||
}
|
||||
|
||||
.subsubheading {
|
||||
font-size: 1.4em;
|
||||
border-block-end: 1px dashed $dark;
|
||||
margin-block-start: 1em;
|
||||
margin-block-end: 1em;
|
||||
padding-block-end: 0.5em;
|
||||
line-height: 1em;
|
||||
text-align: start;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.subsubsubheading {
|
||||
font-size: 1.2em;
|
||||
margin-block-start: 1em;
|
||||
margin-block-end: 1em;
|
||||
line-height: 1em;
|
||||
text-align: start;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.article-body__content > blockquote {
|
||||
padding-inline-start: 1em;
|
||||
border-inline-start: 2px outset $dark;
|
||||
display: inline-block;
|
||||
max-inline-size: 85%;
|
||||
|
||||
& footer {
|
||||
text-align: end;
|
||||
font-style: normal;
|
||||
display: inline-block;
|
||||
margin-inline-start: 5em;
|
||||
|
||||
&::before {
|
||||
content: "—";
|
||||
}
|
||||
}
|
||||
|
||||
& p:first-child {
|
||||
margin-block-start: 0;
|
||||
}
|
||||
|
||||
& p:last-of-type {
|
||||
margin-block-end: 0.5em;
|
||||
}
|
||||
|
||||
&.script {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr 0.2fr;
|
||||
padding-block-end: 0.4em;
|
||||
text-align: end;
|
||||
|
||||
& > p::before,
|
||||
& > p::after {
|
||||
content: none !important;
|
||||
}
|
||||
|
||||
& > .script-line__character {
|
||||
grid-column: 1;
|
||||
margin: 0.5em 2em 0.5em 0.5em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
& > .script-line__text {
|
||||
grid-column-start: 2;
|
||||
grid-column-end: 4;
|
||||
margin: 0.5em;
|
||||
}
|
||||
|
||||
& footer {
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.article-body__content > blockquote:not(.blockquote):first-child {
|
||||
font-size: 1.2em;
|
||||
text-align: center;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
border-inline-start: 0;
|
||||
padding-inline-start: 0;
|
||||
inline-size: 100%;
|
||||
padding-block-start: 1em;
|
||||
padding-block-end: 1.2em;
|
||||
border-block-start: 2px outset $dark;
|
||||
border-block-end: 2px inset $dark;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1024px) {
|
||||
blockquote {
|
||||
margin: 1em 2em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__comments {
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 3;
|
||||
grid-row-start: 3;
|
||||
grid-row-end: 4;
|
||||
font-size: 0.8em;
|
||||
padding-inline-start: 1em;
|
||||
padding-inline-end: 1em;
|
||||
margin-block-end: 2em;
|
||||
@include mq("large") {
|
||||
grid-column-end: 2;
|
||||
grid-row-start: 2;
|
||||
grid-row-end: 3;
|
||||
padding: 1em 3em 1em 2em;
|
||||
border-inline-end: 2px solid $dark;
|
||||
}
|
||||
|
||||
& + .site_content__footer {
|
||||
grid-row-start: 4;
|
||||
grid-row-end: 5;
|
||||
|
||||
@include mq("large") {
|
||||
margin-block-end: 2em;
|
||||
grid-row-start: 3;
|
||||
grid-row-end: 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__footer {
|
||||
grid-row-start: 3;
|
||||
grid-row-end: 4;
|
||||
border-block-start: 2px solid $dark;
|
||||
padding-inline-start: 1em;
|
||||
padding-inline-end: 1em;
|
||||
|
||||
@include mq("large") {
|
||||
margin-block-end: 2em;
|
||||
grid-row-start: 2;
|
||||
grid-row-end: 3;
|
||||
}
|
||||
|
||||
& h2 {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
& ul {
|
||||
margin: 0;
|
||||
|
||||
& li {
|
||||
padding: 0.8em 0;
|
||||
|
||||
@include mq("large") {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& section {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
#map {
|
||||
border: 2px solid $dark;
|
||||
}
|
||||
}
|
||||
}
|
41
assets/css/print.scss
Normal file
|
@ -0,0 +1,41 @@
|
|||
@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;
|
||||
|
||||
&--single {
|
||||
& .site-content {
|
||||
&__header,
|
||||
&__footer,
|
||||
& .article__links {
|
||||
background-color: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .figure {
|
||||
break-inside: avoid;
|
||||
|
||||
&--gallery {
|
||||
break-inside: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
34
assets/css/themes/_dark.scss
Normal file
|
@ -0,0 +1,34 @@
|
|||
@media (prefers-color-scheme: dark) {
|
||||
html,
|
||||
.site-header {
|
||||
color: $light;
|
||||
background-color: $dark;
|
||||
}
|
||||
|
||||
.site-header__nav li {
|
||||
color: $light;
|
||||
border-color: $light;
|
||||
|
||||
&:hover {
|
||||
background-color: $dark;
|
||||
}
|
||||
}
|
||||
|
||||
.site-header__title a {
|
||||
color: $light;
|
||||
}
|
||||
|
||||
.item-tile {
|
||||
&--heading,
|
||||
&__header {
|
||||
background-color: $light;
|
||||
}
|
||||
|
||||
&--heading,
|
||||
&__header,
|
||||
&__title,
|
||||
&__subtitle {
|
||||
color: $dark;
|
||||
}
|
||||
}
|
||||
}
|
0
assets/css/themes/_theme.scss
Normal file
14
assets/js/render-meta-map.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
import * as params from '@params';
|
||||
import L from 'leaflet';
|
||||
|
||||
var map = L.map('map').setView([55, -3], 13);
|
||||
|
||||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
maxZoom: 19,
|
||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
|
||||
}).addTo(map);
|
||||
|
||||
var lonLats = [];
|
||||
params.locations.forEach((location) => {
|
||||
lonLats.push(L.marker([location.lat, location.lon]).addTo(map));
|
||||
});
|
162
assets/js/roles-chart.gojs
Normal file
|
@ -0,0 +1,162 @@
|
|||
const display = {
|
||||
"past-unpaid": false,
|
||||
"past-paid": true,
|
||||
"current-unpaid": true,
|
||||
"current-paid": true,
|
||||
}
|
||||
|
||||
Object.keys(display).forEach(key => {
|
||||
if (!display[key]) document.getElementById(key).classList.add("legend__button--disabled")
|
||||
});
|
||||
|
||||
google.charts.load('current', {'packages':['timeline']});
|
||||
google.charts.setOnLoadCallback(drawChart);
|
||||
|
||||
Array.from(document.getElementsByClassName("legend__button")).forEach(
|
||||
el => el.addEventListener('click', toggleView, false)
|
||||
);
|
||||
|
||||
/**
|
||||
* Changes the filters to apply to the timeline chart.
|
||||
*/
|
||||
function toggleView() {
|
||||
if (this.classList.contains("legend__button--disabled")) {
|
||||
this.classList.remove("legend__button--disabled");
|
||||
} else {
|
||||
this.classList.add("legend__button--disabled");
|
||||
}
|
||||
|
||||
display[this.id] = !display[this.id];
|
||||
|
||||
drawChart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the roles displayed within the timeline chart.
|
||||
*/
|
||||
function drawChart() {
|
||||
var container = document.getElementById('timeline');
|
||||
var chart = new google.visualization.Timeline(container);
|
||||
var rolesTable = new google.visualization.DataTable();
|
||||
|
||||
{{- $past_unpaid := "#FFFFF0" -}}
|
||||
{{- $past_paid := "#FCFCA6" -}}
|
||||
{{- $current_unpaid := "#BBBBB0" -}}
|
||||
{{- $current_paid := "#BCBC7E" -}}
|
||||
|
||||
rolesTable.addColumn({ type: 'string', id: 'Type' });
|
||||
rolesTable.addColumn({ type: 'string', id: 'Job Title' });
|
||||
rolesTable.addColumn({ type: 'string', id: 'style', role: 'style' });
|
||||
rolesTable.addColumn({ type: 'date', id: 'Start' });
|
||||
rolesTable.addColumn({ type: 'date', id: 'End' });
|
||||
|
||||
rolesTable.addRows([
|
||||
{{ $cvPages := ( where $.Site.Pages "Type" "cv" ) -}}
|
||||
{{- range .Pages -}}
|
||||
{{- $site_show_redacted := eq $.Site.Params.redact "show" -}}
|
||||
{{- $.Scratch.Set "parents" ( slice ) -}}
|
||||
|
||||
{{- /* Concatenates all role parent(s) and organisations(s) */ -}}
|
||||
{{- with .Params.organisations -}}
|
||||
{{- range . -}}
|
||||
{{- range ( where $cvPages "Title" . ) -}}
|
||||
{{- $add_redacted := and ( and ( .Params.redact ) ( not $site_show_redacted ) ) ( eq $.Site.Params.redact "black" ) -}}
|
||||
{{- if $add_redacted -}}
|
||||
{{- $.Scratch.Set "parents" ( $.Scratch.Get "parents" | append "███████████████" ) -}}
|
||||
{{- else -}}
|
||||
{{- $.Scratch.Set "parents" ( $.Scratch.Get "parents" | append ( ( partial "cv/organisation/get_top_level_ancestor.html.tmpl" . ) | plainify ) ) -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{ erroridf "missing-organisation" "Could not find organisation %q (%q)" . $.File.Path }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $.Scratch.Set "parents_string" ( delimit ( ( $.Scratch.Get "parents" ) | uniq | sort ) " & " ) -}}
|
||||
{{- $.Scratch.Set "organisations_string" ( delimit . " & " ) -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{- /* Prints a `dataRow` for each role, redacting organisations if necessary */ -}}
|
||||
{{- $has_no_parents := le ( len ( $.Scratch.Get "parents" ) ) 0 -}}
|
||||
{{- $show_role := not ( and ( or .Params.redact $has_no_parents ) ( not $site_show_redacted ) ) -}}
|
||||
{{- $show_role_organisations := not ( eq ( $.Scratch.Get "parents_string" ) ( $.Scratch.Get "organisations_string" ) ) -}}
|
||||
|
||||
{{- if $show_role -}}
|
||||
[
|
||||
{{- /* Top-level parent organisation(s) */ -}}
|
||||
"
|
||||
{{- with .Params.organisations -}}
|
||||
{{- $.Scratch.Get "parents_string" -}}
|
||||
{{- end -}}
|
||||
",
|
||||
|
||||
{{- /* Role and (optional) organisation string */ -}}
|
||||
"
|
||||
{{- if ( and ( .Params.redact ) ( not $site_show_redacted ) ) -}}
|
||||
{{- if ( eq $.Site.Params.redact "black" ) -}}
|
||||
███████████████
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{- .Title | plainify -}}
|
||||
{{- if $show_role_organisations -}}
|
||||
, {{ $.Scratch.Get "organisations_string" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
",
|
||||
|
||||
{{- /* Role type (paid/unpaid) */ -}}
|
||||
"{{ if .Params.end_date -}}
|
||||
{{- if .Params.paid -}}
|
||||
{{- $past_paid -}}
|
||||
{{- else -}}
|
||||
{{- $past_unpaid -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{- if .Params.paid -}}
|
||||
{{- $current_paid -}}
|
||||
{{- else -}}
|
||||
{{- $current_unpaid -}}
|
||||
{{- end -}}
|
||||
{{- end }}",
|
||||
|
||||
{{- /* Role start date */ -}}
|
||||
new Date("{{ .Date.Format "2006-01-02" }}"),
|
||||
|
||||
{{- /* Role end date */ -}}
|
||||
new Date("
|
||||
{{- if .Params.end_date -}}
|
||||
{{- .Params.end_date -}}
|
||||
{{- else -}}
|
||||
{{- now.Format "2006-01-02" -}}
|
||||
{{- end -}}
|
||||
")
|
||||
],
|
||||
{{- end -}}
|
||||
|
||||
{{- $.Scratch.Delete "parents" -}}
|
||||
{{ end -}}
|
||||
]);
|
||||
|
||||
var rolesFilteredView = new google.visualization.DataView(rolesTable);
|
||||
|
||||
var toShow = [];
|
||||
if (display["past-unpaid"]) toShow.push("{{ $past_unpaid }}");
|
||||
if (display['past-paid']) toShow.push("{{ $past_paid }}");
|
||||
if (display['current-unpaid']) toShow.push("{{ $current_unpaid }}");
|
||||
if (display['current-paid']) toShow.push("{{ $current_paid }}");
|
||||
|
||||
rolesFilteredView.setRows(rolesFilteredView.getFilteredRows([{ column: 2, test: (value, rowId, columnId, datatable) => {
|
||||
return toShow.includes(value);
|
||||
}}]));
|
||||
|
||||
var options = {
|
||||
title: 'Roles Timeline',
|
||||
height: '100%',
|
||||
chartArea: {
|
||||
width: '94%'
|
||||
},
|
||||
width: '100%',
|
||||
}
|
||||
|
||||
chart.draw(rolesFilteredView, options);
|
||||
container.setAttribute("style",`height:${document.querySelector("#timeline > div > div > div > div").offsetHeight}px`);
|
||||
}
|
5
config.toml
Normal file
|
@ -0,0 +1,5 @@
|
|||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = true
|
||||
min = "0.140.0"
|
||||
max = "0.140.2"
|
|
@ -1,363 +0,0 @@
|
|||
/* 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;
|
||||
}
|
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 618 B |
|
@ -1,22 +0,0 @@
|
|||
@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; } }
|
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
|||
module code.bengoldsworthy.net/Rumperuu/Omphaloskepsis-2
|
||||
|
||||
go 1.22.10
|
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 618 B |
|
@ -1,11 +0,0 @@
|
|||
MathJax = {
|
||||
tex: {
|
||||
inlineMath: [['$', '$'], ['\\(', '\\)']],
|
||||
displayMath: [['$$','$$'], ['\\[', '\\]']],
|
||||
processEscapes: true,
|
||||
processEnvironments: true
|
||||
},
|
||||
options: {
|
||||
skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre']
|
||||
}
|
||||
};
|
|
@ -1,64 +0,0 @@
|
|||
{{ define "title" }}
|
||||
CV by Location | {{ .Site.Title }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-class" }}--section location-map{{ end }}
|
||||
|
||||
{{ define "header-scripts" }}
|
||||
<link rel="stylesheet" href="/css/leaflet.css"/>
|
||||
{{ end }}
|
||||
|
||||
{{ define "footer-scripts" }}
|
||||
<script src="/js/leaflet.js"></script>
|
||||
<script src="/js/leaflet-heat.js"></script>
|
||||
<script>
|
||||
var map = L.map('map').setView([55, -3], 3);
|
||||
|
||||
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
maxZoom: 19,
|
||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
|
||||
}).addTo(map);
|
||||
|
||||
{{- range $.Site.Data.locations -}}
|
||||
/* L.marker([{{ .lat }}, {{ .lon }}]).addTo(map); */
|
||||
{{- end -}}
|
||||
|
||||
L.heatLayer(
|
||||
[
|
||||
{{- range .Site.AllPages -}}
|
||||
{{- with .Params.locations -}}
|
||||
{{- range . -}}
|
||||
{{- with ( index $.Site.Data.locations . ) -}}
|
||||
[ {{ .lat }}, {{ .lon }} ],
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
],
|
||||
{
|
||||
minOpacity: 0.5,
|
||||
gradient: {0.2: 'blue', 0.5: 'lime', 1: 'red'}
|
||||
|
||||
}
|
||||
).addTo(map);
|
||||
</script>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-header" }}
|
||||
<header class="site-content__header">
|
||||
<h1 class="page-title">{{ .Title | safeHTML }}.</h1>
|
||||
{{ .Content }}
|
||||
</header>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-body" }}
|
||||
<article class="site-content__body site-content__body--chart">
|
||||
<div id="map" style="width: 100%; height: 500px; margin: 0; display: block;"></div>
|
||||
|
||||
<ul style="grid-area: section-content">
|
||||
{{- range $key, $value := $.Site.Data.locations -}}
|
||||
<li itemscope itemtype="https://schema.org/Place">{{ $key }}</li>
|
||||
{{- end -}}
|
||||
</ul>
|
||||
</article>
|
||||
{{ end }}
|
|
@ -110,7 +110,7 @@
|
|||
}
|
||||
</script>
|
||||
{{- else -}}
|
||||
{{ $js := resources.Get "js/roles-chart.js" | resources.ExecuteAsTemplate "/js/render-roles-timeline.js" ( .GetPage "cv/roles" ) | resources.Fingerprint }}
|
||||
{{ $js := resources.Get "js/roles-chart.gojs" | resources.ExecuteAsTemplate "/js/render-roles-timeline.js" ( .GetPage "cv/roles" ) | resources.Fingerprint }}
|
||||
<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}"></script>
|
||||
{{- end -}}
|
||||
{{ end }}
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
{{- $itemType := default "CreativeWork" ( .Params.schemaType ) -}}
|
||||
|
||||
{{- if ( or ( in $.Site.Data.itemtypes $itemType ) ( eq .Params.suppress "true" ) ) -}}
|
||||
{{- 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 -}}
|
||||
{{- erroridf "invalid-schema-type" "Invalid Schema.org type value %q for %q" $itemType .Params.title -}}
|
||||
{{- end -}}
|
|
@ -1,52 +0,0 @@
|
|||
<section class="site-content__body">
|
||||
<table class="organisations-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Logo</th>
|
||||
<th>Title</th>
|
||||
<th>Children</th>
|
||||
<th>Items</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{- range .Pages -}}
|
||||
{{- if ( not ( and ( .Params.redact ) ( ne $.Site.Params.redact "show" ) ) ) -}}
|
||||
<tr>
|
||||
<td>
|
||||
{{- if ( and ( .Params.redact ) ( ne $.Site.Params.redact "show" ) ) -}}
|
||||
{{- if ( eq $.Site.Params.redact "black" ) -}}
|
||||
{{- partialCached "redact-black.html" . -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{- if .Params.featured_image -}}
|
||||
<img class="organisation-table__logo" loading="lazy" src="
|
||||
{{- if .Resources.GetMatch .Params.featured_image -}}
|
||||
{{- ( .Resources.GetMatch .Params.featured_image ).RelPermalink -}}
|
||||
{{- else -}}
|
||||
{{- .Params.featured_image -}}
|
||||
{{- end -}}
|
||||
">
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</td>
|
||||
<td>
|
||||
{{- if ( and ( .Params.redact ) ( ne $.Site.Params.redact "show" ) ) -}}
|
||||
{{- if ( eq $.Site.Params.redact "black" ) -}}
|
||||
{{- partialCached "redact-black.html" . -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
<a href="{{ .RelPermalink }}">
|
||||
{{- if .Params.TitleLang -}}<i lang="{{ .Params.TitleLang }}" title="{{ .Params.TitleTrans }}"}>{{- end -}}
|
||||
{{- with .Params.markup_title -}}{{- . | safeHTML -}}{{- else -}}{{- .Title | safeHTML -}}{{- end -}}
|
||||
{{- if .Params.TitleLang -}}</i>{{- end -}}
|
||||
</a>
|
||||
{{- end -}}
|
||||
</td>
|
||||
<td>{{- if gt (len .Sections) 0 -}}✔{{- end -}}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
|
@ -1,26 +0,0 @@
|
|||
{{ if gt ( len .content ) 4 }}
|
||||
<details id="{{ .section_title | anchorize }}" class="org-items row">
|
||||
<summary>
|
||||
<h2 class="subheading">{{ .section_title }} ({{ len .content }})</h2>
|
||||
<div class="index">
|
||||
{{ range first 4 .content }}
|
||||
{{ partial "item-tile.html" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</summary>
|
||||
<div class="index">
|
||||
{{ range after 4 .content }}
|
||||
{{ partial "item-tile.html" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</details>
|
||||
{{ else }}
|
||||
<div id="{{ .section_title | anchorize }}" class="org-items row">
|
||||
<h2 class="subheading">{{ .section_title }} ({{ len .content }})</h2>
|
||||
<div class="index">
|
||||
{{ range first 4 .content }}
|
||||
{{ partial "item-tile.html" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
|
@ -1,16 +0,0 @@
|
|||
<aside class="timeline__legend">
|
||||
<div>
|
||||
<label for="legend__past">Past</label>
|
||||
<div id="legend__past">
|
||||
<button id="past-unpaid" class="legend__button"><p><span class="colour-square colour-square--unpaid-past"></span> Unpaid</p></button>
|
||||
<button id="past-paid" class="legend__button"><p><span class="colour-square colour-square--paid-past"></span> Paid</p></button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="legend__current">Current</label>
|
||||
<div id="legend__current">
|
||||
<button id="current-unpaid" class="legend__button"><p><span class="colour-square colour-square--unpaid-current"></span> Unpaid</p></button>
|
||||
<button id="current-paid" class="legend__button"><p><span class="colour-square colour-square--paid-current"></span> Paid</p></button>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
|
@ -1,7 +0,0 @@
|
|||
<nav class="site-header__nav">
|
||||
<ul>
|
||||
{{ range ( where .Site.Sections.ByTitle "Type" "in" site.Params.mainSections ) }}
|
||||
<li><a href="{{ .RelPermalink }}">{{ .Title | safeHTML }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
|
@ -1,11 +0,0 @@
|
|||
<!--
|
||||
Given a top-level section title slug [blog|cv|portfolio], returns all
|
||||
`Pages` within that top-level section.
|
||||
|
||||
@param sc The site content (`$`)
|
||||
@param section_slug The slug of the section to use [blog|cv|portfolio]
|
||||
|
||||
@returns Pages|nil
|
||||
-->
|
||||
|
||||
{{- where ( ( .sc.GetPage "cv" ).Sections ) "Title" .section_title -}}
|
|
@ -1,81 +0,0 @@
|
|||
<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>
|
17
static/.htaccess
Normal file
|
@ -0,0 +1,17 @@
|
|||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteCond %{HTTP:X-Forwarded-Proto} !https
|
||||
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
|
||||
RedirectMatch 301 /weblog/? /blog/
|
||||
RewriteRule ^[0-9]{4}/[0-9]{2}/(.*)$ /blog/posts/$1 [R=301,L]
|
||||
</IfModule>
|
||||
|
||||
Header always unset X-Powered-By
|
||||
Header always set Strict-Transport-Security: "max-age=31536000; includeSubdomains; preload" env=HTTPS
|
||||
Header always set Content-Security-Policy "upgrade-insecure-requests"
|
||||
Header always set X-Content-Type-Options "nosniff"
|
||||
Header always set X-XSS-Protection "1; mode=block"
|
||||
Header always append X-Frame-Options SAMEORIGIN
|
||||
Header always set Expect-CT "max-age=7776000, enforce"
|
||||
Header always set Referrer-Policy: "no-referrer-when-downgrade"
|
||||
Header always set Permissions-Policy "geolocation=();midi=();notifications=();push=();sync-xhr=();microphone=();camera=();magnetometer=();gyroscope=();speaker=(self);vibrate=();fullscreen=(self);payment=();interest-cohort=();"
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 618 B After Width: | Height: | Size: 618 B |
BIN
static/fonts/Domitian-Bold.woff
Normal file
BIN
static/fonts/Domitian-Bold.woff2
Normal file
BIN
static/fonts/Domitian-BoldItalic.woff
Normal file
BIN
static/fonts/Domitian-BoldItalic.woff2
Normal file
BIN
static/fonts/Domitian-Italic.woff
Normal file
BIN
static/fonts/Domitian-Italic.woff2
Normal file
BIN
static/fonts/Domitian-Roman.woff
Normal file
BIN
static/fonts/Domitian-Roman.woff2
Normal file
BIN
static/fonts/InputMono-Regular.ttf
Normal file
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 696 B After Width: | Height: | Size: 696 B |
1
static/js/chart/chart.js
Normal file
49
static/js/lazy-images.js
Normal file
|
@ -0,0 +1,49 @@
|
|||
// Source: https://css-tricks.com/the-complete-guide-to-lazy-loading-images/
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
var lazyloadImages;
|
||||
|
||||
if ("IntersectionObserver" in window) {
|
||||
lazyloadImages = document.querySelectorAll(".lazy");
|
||||
var imageObserver = new IntersectionObserver(function(entries, observer) {
|
||||
entries.forEach(function(entry) {
|
||||
if (entry.isIntersecting) {
|
||||
var image = entry.target;
|
||||
image.classList.remove("lazy");
|
||||
imageObserver.unobserve(image);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
lazyloadImages.forEach(function(image) {
|
||||
imageObserver.observe(image);
|
||||
});
|
||||
} else {
|
||||
var lazyloadThrottleTimeout;
|
||||
lazyloadImages = document.querySelectorAll(".lazy");
|
||||
|
||||
function lazyload () {
|
||||
if(lazyloadThrottleTimeout) {
|
||||
clearTimeout(lazyloadThrottleTimeout);
|
||||
}
|
||||
|
||||
lazyloadThrottleTimeout = setTimeout(function() {
|
||||
var scrollTop = window.pageYOffset;
|
||||
lazyloadImages.forEach(function(img) {
|
||||
if(img.offsetTop < (window.innerHeight + scrollTop)) {
|
||||
img.src = img.dataset.src;
|
||||
img.classList.remove('lazy');
|
||||
}
|
||||
});
|
||||
if(lazyloadImages.length == 0) {
|
||||
document.removeEventListener("scroll", lazyload);
|
||||
window.removeEventListener("resize", lazyload);
|
||||
window.removeEventListener("orientationChange", lazyload);
|
||||
}
|
||||
}, 20);
|
||||
}
|
||||
|
||||
document.addEventListener("scroll", lazyload);
|
||||
window.addEventListener("resize", lazyload);
|
||||
window.addEventListener("orientationChange", lazyload);
|
||||
}
|
||||
});
|
BIN
static/js/leaflet-fullscreen/fullscreen.png
Normal file
After Width: | Height: | Size: 299 B |
BIN
static/js/leaflet-fullscreen/fullscreen@2x.png
Normal file
After Width: | Height: | Size: 420 B |
1
static/js/leaflet-fullscreen/leaflet.fullscreen.min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
L.Control.Fullscreen=L.Control.extend({options:{position:"topleft",title:{"false":"View Fullscreen","true":"Exit Fullscreen"}},onAdd:function(map){var container=L.DomUtil.create("div","leaflet-control-fullscreen leaflet-bar leaflet-control");this.link=L.DomUtil.create("a","leaflet-control-fullscreen-button leaflet-bar-part",container);this.link.href="#";this._map=map;this._map.on("fullscreenchange",this._toggleTitle,this);this._toggleTitle();L.DomEvent.on(this.link,"click",this._click,this);return container},_click:function(e){L.DomEvent.stopPropagation(e);L.DomEvent.preventDefault(e);this._map.toggleFullscreen(this.options)},_toggleTitle:function(){this.link.title=this.options.title[this._map.isFullscreen()]}});L.Map.include({isFullscreen:function(){return this._isFullscreen||false},toggleFullscreen:function(options){var container=this.getContainer();if(this.isFullscreen()){if(options&&options.pseudoFullscreen){this._disablePseudoFullscreen(container)}else if(document.exitFullscreen){document.exitFullscreen()}else if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else if(document.webkitCancelFullScreen){document.webkitCancelFullScreen()}else if(document.msExitFullscreen){document.msExitFullscreen()}else{this._disablePseudoFullscreen(container)}}else{if(options&&options.pseudoFullscreen){this._enablePseudoFullscreen(container)}else if(container.requestFullscreen){container.requestFullscreen()}else if(container.mozRequestFullScreen){container.mozRequestFullScreen()}else if(container.webkitRequestFullscreen){container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else if(container.msRequestFullscreen){container.msRequestFullscreen()}else{this._enablePseudoFullscreen(container)}}},_enablePseudoFullscreen:function(container){L.DomUtil.addClass(container,"leaflet-pseudo-fullscreen");this._setFullscreen(true);this.invalidateSize();this.fire("fullscreenchange")},_disablePseudoFullscreen:function(container){L.DomUtil.removeClass(container,"leaflet-pseudo-fullscreen");this._setFullscreen(false);this.invalidateSize();this.fire("fullscreenchange")},_setFullscreen:function(fullscreen){this._isFullscreen=fullscreen;var container=this.getContainer();if(fullscreen){L.DomUtil.addClass(container,"leaflet-fullscreen-on")}else{L.DomUtil.removeClass(container,"leaflet-fullscreen-on")}},_onFullscreenChange:function(e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;if(fullscreenElement===this.getContainer()&&!this._isFullscreen){this._setFullscreen(true);this.fire("fullscreenchange")}else if(fullscreenElement!==this.getContainer()&&this._isFullscreen){this._setFullscreen(false);this.fire("fullscreenchange")}}});L.Map.mergeOptions({fullscreenControl:false});L.Map.addInitHook(function(){if(this.options.fullscreenControl){this.fullscreenControl=new L.Control.Fullscreen(this.options.fullscreenControl);this.addControl(this.fullscreenControl)}var fullscreenchange;if("onfullscreenchange"in document){fullscreenchange="fullscreenchange"}else if("onmozfullscreenchange"in document){fullscreenchange="mozfullscreenchange"}else if("onwebkitfullscreenchange"in document){fullscreenchange="webkitfullscreenchange"}else if("onmsfullscreenchange"in document){fullscreenchange="MSFullscreenChange"}if(fullscreenchange){var onFullscreenChange=L.bind(this._onFullscreenChange,this);this.whenReady(function(){L.DomEvent.on(document,fullscreenchange,onFullscreenChange)});this.on("unload",function(){L.DomEvent.off(document,fullscreenchange,onFullscreenChange)})}});L.control.fullscreen=function(options){return new L.Control.Fullscreen(options)};
|
6
static/js/leaflet/leaflet.js
Normal file
1
static/js/leaflet/leaflet.js.map
Normal file
1
static/js/mathjax/tex-chtml.js
Normal file
18
theme.toml
|
@ -1,14 +1,14 @@
|
|||
# theme.toml template for a Hugo theme
|
||||
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
|
||||
|
||||
name = "Omphaloskepsis 2"
|
||||
license = "MIT"
|
||||
licenselink = "https://code.bengoldsworthy.net/Rumperuu/Omphaloskepsis-2/blob/main/LICENSE"
|
||||
description = ""
|
||||
homepage = "https://bengoldsworthy.net/"
|
||||
tags = []
|
||||
features = []
|
||||
min_version = "0.41.0"
|
||||
license = "CC0"
|
||||
licenselink = "https://code.bengoldsworthy.net/Rumperuu/Omphaloskepsis-2/blob/main/LICENSE"
|
||||
description = "A theme for my personal static site incorporating a blog, various portfolios and a CV searcher."
|
||||
|
||||
demosite = "https://bengoldsworthy.net"
|
||||
homepage = "https://bengoldsworthy.net/"
|
||||
|
||||
tags = ["blog", "cv", "portfolio"]
|
||||
features = []
|
||||
|
||||
[author]
|
||||
name = "Ben Goldsworthy"
|
||||
|
|