initial commit
This commit is contained in:
commit
5c664be9a8
55 changed files with 8825 additions and 0 deletions
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
cgi-bin/
|
||||
__pycache__/
|
||||
.well-known/
|
||||
resources/
|
||||
node_modules/
|
||||
public/
|
||||
logs/
|
||||
.env
|
||||
venv/
|
||||
scripts/caching/
|
121
COPYING.txt
Normal file
121
COPYING.txt
Normal file
|
@ -0,0 +1,121 @@
|
|||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
1
README.md
Normal file
1
README.md
Normal file
|
@ -0,0 +1 @@
|
|||
# Cataloguer
|
6
archetypes/default.md
Normal file
6
archetypes/default.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
4
assets/css/abstracts/_fonts.scss
Normal file
4
assets/css/abstracts/_fonts.scss
Normal file
|
@ -0,0 +1,4 @@
|
|||
@font-face {
|
||||
font-family: "Input Mono";
|
||||
src: url(/fonts/InputMono-Regular.ttf);
|
||||
}
|
12
assets/css/abstracts/_mixins.scss
Normal file
12
assets/css/abstracts/_mixins.scss
Normal file
|
@ -0,0 +1,12 @@
|
|||
@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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
24
assets/css/abstracts/_variables.scss
Normal file
24
assets/css/abstracts/_variables.scss
Normal file
|
@ -0,0 +1,24 @@
|
|||
// Colours
|
||||
$dark: #020202;
|
||||
$light: #fffff0;
|
||||
|
||||
// Fonts
|
||||
$defaultFont: "Domitian", "Palatino Linotype", "Book Antiqua", Palatino, serif;
|
||||
$codeFont: /*"Input Mono", */"Lucida Console", Monaco, monospace;
|
||||
|
||||
// Breakpoints
|
||||
$breakpoints: (
|
||||
"phone": 400px,
|
||||
"phone-wide": 480px,
|
||||
"phablet": 560px,
|
||||
"tablet-small": 640px,
|
||||
"tablet": 768px,
|
||||
"tablet-wide": 1024px,
|
||||
"desktop": 1248px,
|
||||
"desktop-wide": 1440px
|
||||
);
|
||||
|
||||
// Old Site Versions
|
||||
$ohwhatohjeez: #ff8900;
|
||||
$oldphaloskepsis: #003d52;
|
||||
$omphaloskepsis: #fffff0;
|
328
assets/css/base/_typography.scss
Normal file
328
assets/css/base/_typography.scss
Normal file
|
@ -0,0 +1,328 @@
|
|||
html {
|
||||
font-size: 16px;
|
||||
color: $dark;
|
||||
background-color: $light;
|
||||
font-family: $defaultFont;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
.sic::after {
|
||||
content: " [sic]";
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.latex {
|
||||
display: inline !important;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding-left: 1em;
|
||||
border-left: 2px outset $dark;
|
||||
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;
|
||||
}
|
||||
|
||||
// Schema.org citations
|
||||
|
||||
cite,
|
||||
.cite {
|
||||
font-style: italic;
|
||||
|
||||
&[itemtype$="Code"],
|
||||
&[itemtype$="SocialMediaPosting"],
|
||||
&[itemtype$="SoftwareApplication"],
|
||||
&[itemtype$="WebSite"],
|
||||
&[itemtype$="WebContent"],
|
||||
&[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$="Chapter"],
|
||||
&[itemtype$="Clip"],
|
||||
&[itemtype$="MovieClip"],
|
||||
&[itemtype$="RadioClip"],
|
||||
&[itemtype$="TVClip"],
|
||||
&[itemtype$="VideoGameClip"],
|
||||
&[itemtype$="Comment"],
|
||||
&[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: normal;
|
||||
|
||||
&::before {
|
||||
content: "“";
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: "”";
|
||||
}
|
||||
}
|
||||
|
||||
&--normal {
|
||||
font-style: normal !important;
|
||||
|
||||
&::before {
|
||||
content: none !important;
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
table .cite {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.episode-number,
|
||||
.authors--additional,
|
||||
.comments,
|
||||
.edition,
|
||||
.year--original {
|
||||
font-size: 0.75em;
|
||||
}
|
||||
|
||||
.comments,
|
||||
.edition {
|
||||
margin-block-start: 0.4em;
|
||||
margin-block-end: 0;
|
||||
}
|
||||
|
||||
code,
|
||||
samp,
|
||||
var,
|
||||
pre {
|
||||
font-family: $codeFont;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
pre .nocode {
|
||||
font-family: $defaultFont;
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* Special Text
|
||||
*/
|
||||
|
||||
|
||||
:where([title]) {
|
||||
text-decoration: underline;
|
||||
text-decoration: underline dotted;
|
||||
|
||||
&:not(a *) {
|
||||
cursor: help;
|
||||
}
|
||||
}
|
98
assets/css/components/_item-tile.scss
Normal file
98
assets/css/components/_item-tile.scss
Normal file
|
@ -0,0 +1,98 @@
|
|||
.link--tile {
|
||||
text-decoration: none;
|
||||
box-sizing: border-box;
|
||||
border: 2px solid transparent;
|
||||
|
||||
&:hover {
|
||||
border-color: $dark;
|
||||
}
|
||||
}
|
||||
|
||||
.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;
|
||||
|
||||
&.lazy {
|
||||
background-image: none !important;
|
||||
}
|
||||
|
||||
&--heading {
|
||||
font-size: 3em;
|
||||
|
||||
& .item-tile__header {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&--ohwhatohjeez {
|
||||
border: 2px solid $ohwhatohjeez;
|
||||
}
|
||||
|
||||
&--oldphaloskepsis {
|
||||
border: 2px solid $oldphaloskepsis;
|
||||
}
|
||||
|
||||
&--omphaloskepsis {
|
||||
border: 2px solid $omphaloskepsis;
|
||||
}
|
||||
|
||||
&__header {
|
||||
text-align: center;
|
||||
background-color: $dark;
|
||||
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 .";
|
||||
}
|
||||
|
||||
&__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;
|
||||
}
|
||||
|
||||
&__title,
|
||||
&__subtitle {
|
||||
color: $light;
|
||||
margin: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-size: 1.4em;
|
||||
grid-area: tile-title;
|
||||
align-self: center;
|
||||
|
||||
&--long {
|
||||
font-size: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
&__subtitle {
|
||||
font-size: 0.8em;
|
||||
grid-area: tile-subtitle;
|
||||
align-self: start;
|
||||
}
|
||||
}
|
18
assets/css/components/_log-stats.scss
Normal file
18
assets/css/components/_log-stats.scss
Normal file
|
@ -0,0 +1,18 @@
|
|||
.log-stats {
|
||||
text-align: center;
|
||||
font-size: 1.4em;
|
||||
|
||||
& summary {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
& div {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
& p {
|
||||
float: left;
|
||||
margin-inline-end: 1.2em;
|
||||
}
|
||||
}
|
||||
}
|
159
assets/css/components/gallery.scss
Normal file
159
assets/css/components/gallery.scss
Normal file
|
@ -0,0 +1,159 @@
|
|||
/*
|
||||
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 */
|
||||
}
|
||||
|
||||
|
10
assets/css/components/icons.scss
Normal file
10
assets/css/components/icons.scss
Normal file
|
@ -0,0 +1,10 @@
|
|||
.feed-icon {
|
||||
display: inline-block;
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
.site-header__icons a {
|
||||
text-decoration: none;
|
||||
}
|
30
assets/css/components/table.scss
Normal file
30
assets/css/components/table.scss
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* TODO: Not currently used */
|
||||
@media screen and (max-width: 480px) {
|
||||
.table-scroller {
|
||||
overflow-x: auto;
|
||||
width: 320px;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
margin: auto;
|
||||
width: 80%;
|
||||
display: table;
|
||||
|
||||
& thead {
|
||||
border: 2px solid $dark;
|
||||
}
|
||||
|
||||
& td {
|
||||
padding: 0.5em 1em;
|
||||
border: 1px solid $dark;
|
||||
}
|
||||
}
|
||||
|
||||
td[colspan] {
|
||||
text-align: center;
|
||||
|
||||
& h3 {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
20
assets/css/layout/_footer.scss
Normal file
20
assets/css/layout/_footer.scss
Normal file
|
@ -0,0 +1,20 @@
|
|||
.site-footer {
|
||||
grid-area: footer;
|
||||
display: block;
|
||||
width: 99%; /* Overflows right of viewport otherwise */
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
|
||||
& p {
|
||||
width: fit-content;
|
||||
margin: auto;
|
||||
background: $light;
|
||||
border: 2px solid black;
|
||||
padding: 0.4em;
|
||||
border-bottom: none;
|
||||
font-size: 0.6em;
|
||||
@include mq('desktop') {
|
||||
font-size: 1em;
|
||||
}
|
||||
}
|
||||
}
|
88
assets/css/layout/_header.scss
Normal file
88
assets/css/layout/_header.scss
Normal file
|
@ -0,0 +1,88 @@
|
|||
.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;
|
||||
|
||||
&__title,
|
||||
&__tagline,
|
||||
&__icons,
|
||||
&__nav {
|
||||
background-color: $light;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&__title,
|
||||
&__tagline,
|
||||
&__icons {
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-weight: normal;
|
||||
grid-area: header-title;
|
||||
}
|
||||
|
||||
&__tagline {
|
||||
grid-area: header-tagline;
|
||||
}
|
||||
|
||||
&__icons {
|
||||
grid-area: header-icons;
|
||||
border-bottom: 2px solid $dark;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&__nav {
|
||||
grid-area: header-nav;
|
||||
margin: auto;
|
||||
width: 100%;
|
||||
@include mq('desktop') {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
& ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
& li {
|
||||
width: calc(100% / 4);
|
||||
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;
|
||||
}
|
||||
|
||||
& a:first-child li {
|
||||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
& a:last-child li {
|
||||
border-right: 2px solid black;
|
||||
}
|
||||
|
||||
& li {
|
||||
&:hover {
|
||||
background-color: #ffffd0;
|
||||
}
|
||||
|
||||
& a {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
8
assets/css/layout/_main.scss
Normal file
8
assets/css/layout/_main.scss
Normal file
|
@ -0,0 +1,8 @@
|
|||
.site-content {
|
||||
grid-area: page-container;
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
@include mq('desktop') {
|
||||
margin: 2em;
|
||||
}
|
||||
}
|
70
assets/css/main.scss
Normal file
70
assets/css/main.scss
Normal file
|
@ -0,0 +1,70 @@
|
|||
@import "abstracts/fonts";
|
||||
@import "abstracts/variables";
|
||||
@import "abstracts/mixins";
|
||||
|
||||
@import "base/typography";
|
||||
|
||||
.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;
|
||||
@include mq('desktop') {
|
||||
margin-bottom: 2em;
|
||||
grid-template-areas:
|
||||
"header header header"
|
||||
". page-container ."
|
||||
"footer footer footer";
|
||||
border: 2px solid black;
|
||||
margin-left: 2em;
|
||||
margin-right: 2em;
|
||||
}
|
||||
|
||||
&--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;
|
||||
@include mq('desktop') {
|
||||
border: 2px solid black;
|
||||
margin-left: 2em;
|
||||
margin-right: 2em;
|
||||
grid-template-areas:
|
||||
". page-container ."
|
||||
"footer footer footer";
|
||||
}
|
||||
}
|
||||
|
||||
&--list,
|
||||
&--section {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
@import "layout/header";
|
||||
@import "layout/footer";
|
||||
@import "layout/main";
|
||||
|
||||
@import "components/gallery";
|
||||
@import "components/icons";
|
||||
@import "components/item-tile";
|
||||
@import "components/table";
|
||||
@import "components/log-stats";
|
||||
|
||||
@import "pages/home";
|
||||
@import "pages/collection";
|
||||
@import "pages/single";
|
||||
@import "pages/organisations-list";
|
||||
@import "pages/single-organisation";
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
/*@import "themes/dark";*/
|
||||
}
|
87
assets/css/pages/_collection.scss
Normal file
87
assets/css/pages/_collection.scss
Normal file
|
@ -0,0 +1,87 @@
|
|||
.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;
|
||||
@include mq('desktop') {
|
||||
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;
|
||||
margin: auto;
|
||||
overflow: auto;
|
||||
|
||||
& ul {
|
||||
list-style: none;
|
||||
|
||||
& li {
|
||||
float: left;
|
||||
margin: 0 1em;
|
||||
|
||||
& * {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .minor-links__categories {
|
||||
width: 100%;
|
||||
display: block;
|
||||
font-size: 0.8em !important;
|
||||
overflow: auto;
|
||||
@include mq('desktop') {
|
||||
font-size: 1em !important;
|
||||
}
|
||||
}
|
||||
|
||||
& .minor-links__years {
|
||||
width: 100%;
|
||||
display: block;
|
||||
margin: auto;
|
||||
width: fit-content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .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: 1fr;
|
||||
justify-items: stretch;
|
||||
align-items: stretch;
|
||||
|
||||
|
||||
&--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: 100%;
|
||||
grid-template-areas: ". section-chart .";
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__footer {
|
||||
grid-area: list-page-footer;
|
||||
}
|
||||
}
|
||||
|
||||
|
16
assets/css/pages/_home.scss
Normal file
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-bottom: 1em;
|
||||
@include mq('desktop') {
|
||||
font-size: 4em;
|
||||
}
|
||||
|
||||
& span {
|
||||
display: block !important;
|
||||
font-size: 0.3em;
|
||||
}
|
||||
}
|
||||
}
|
4
assets/css/pages/_organisations-list.scss
Normal file
4
assets/css/pages/_organisations-list.scss
Normal file
|
@ -0,0 +1,4 @@
|
|||
.organisations-table {
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 5;
|
||||
}
|
124
assets/css/pages/_single-organisation.scss
Normal file
124
assets/css/pages/_single-organisation.scss
Normal file
|
@ -0,0 +1,124 @@
|
|||
#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";
|
||||
}
|
||||
|
||||
& .index .item:nth-child(1) {
|
||||
grid-area: item1;
|
||||
}
|
||||
|
||||
& .index .item:nth-child(2) {
|
||||
grid-area: item2;
|
||||
}
|
||||
|
||||
& .index .item:nth-child(3) {
|
||||
grid-area: item3;
|
||||
}
|
||||
|
||||
& .index .item:nth-child(4) {
|
||||
grid-area: item4;
|
||||
}
|
||||
|
||||
& details {
|
||||
cursor: pointer;
|
||||
opacity: 0.7;
|
||||
border: 2px solid $dark;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
& summary {
|
||||
&::marker {
|
||||
font-size: 2em;
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
& .subheading {
|
||||
display: inline;
|
||||
width: 95%;
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
|
||||
& .index {
|
||||
border-top: 2px solid $dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#hierarchy ul {
|
||||
list-style: none;
|
||||
padding-left: 1em;
|
||||
|
||||
& .hierarchy-item {
|
||||
&:before {
|
||||
content: '\21B3';
|
||||
margin: 0 0.4em;
|
||||
}
|
||||
|
||||
&--current {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&--child:before {
|
||||
content: '\2192';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.timeline__legend {
|
||||
& span {
|
||||
margin: 0 1em;
|
||||
|
||||
& * {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
& .colour-square {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
border-radius: 2.5px;
|
||||
border: 1px solid $dark;
|
||||
|
||||
&--current {
|
||||
background-color: #bbbbb0;
|
||||
}
|
||||
|
||||
&--past {
|
||||
background-color: #fffff0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.site-content__body--chart {
|
||||
& #timeline,
|
||||
& #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;
|
||||
|
||||
& li * {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
381
assets/css/pages/_single.scss
Normal file
381
assets/css/pages/_single.scss
Normal file
|
@ -0,0 +1,381 @@
|
|||
.site-content--single {
|
||||
display: grid;
|
||||
column-gap: 2em;
|
||||
grid-template-columns: 0.4fr 0.6fr;
|
||||
grid-template-rows: 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('desktop') {
|
||||
border: 2px solid $dark;
|
||||
grid-column-end: 2;
|
||||
padding: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__header {
|
||||
grid-row-start: 1;
|
||||
grid-row-end: 2;
|
||||
overflow: auto;
|
||||
border-bottom: 2px solid $dark;
|
||||
margin-bottom: 2em;
|
||||
|
||||
& .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: 0 auto 1em;
|
||||
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;
|
||||
height: 40vh;
|
||||
min-height: 380px;
|
||||
width: 100%;
|
||||
border: 2px solid $dark;
|
||||
|
||||
& .attr {
|
||||
background-color: $dark;
|
||||
font-size: 0.7em;
|
||||
color: $light;
|
||||
width: fit-content;
|
||||
position: fixed;
|
||||
padding: 0.2em 0.5em;
|
||||
opacity: 0.8;
|
||||
margin: 0 auto;
|
||||
|
||||
& a {
|
||||
color: $light;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__title,
|
||||
&__subtitle {
|
||||
border-bottom: 2px inset $dark;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
line-height: 1.2em;
|
||||
border-bottom: 2px inset $dark;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
&__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: 0.2rem auto;
|
||||
}
|
||||
|
||||
&__word-count {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
&__notes,
|
||||
&__warnings {
|
||||
width: 90%;
|
||||
margin: 1.6em auto;
|
||||
display: block;
|
||||
padding-right: 1em;
|
||||
|
||||
& ul {
|
||||
list-style: circle;
|
||||
|
||||
& li {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__notes {
|
||||
background-color: $light;
|
||||
filter: brightness(70%);
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
&__warnings {
|
||||
border: 4px solid darkred;
|
||||
background-color: #fc3a3a;
|
||||
color: $light;
|
||||
font-weight: 500;
|
||||
|
||||
& ul {
|
||||
list-style: disc;
|
||||
}
|
||||
}
|
||||
|
||||
&__table-of-contents {
|
||||
& ul {
|
||||
list-style-type: arabic;
|
||||
padding-left: 2em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__body {
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 3;
|
||||
grid-row-start: 2;
|
||||
grid-row-end: 3;
|
||||
|
||||
@include mq('desktop') {
|
||||
grid-row-start: 1;
|
||||
grid-row-end: 4;
|
||||
grid-column-start: 2;
|
||||
}
|
||||
/* Temporary until I've fixed all the figures */
|
||||
overflow-x: clip;
|
||||
|
||||
.heading {
|
||||
text-align: center;
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.heading::before,
|
||||
.heading::after {
|
||||
content: " ~ ";
|
||||
}
|
||||
|
||||
.subheading {
|
||||
font-size: 1.6em;
|
||||
border-bottom: 2px inset $dark;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
line-height: 1.2em;
|
||||
text-align: center;
|
||||
|
||||
&__subtitle {
|
||||
font-size: 1em;
|
||||
border-bottom: 1px dashed $dark;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote {
|
||||
padding-left: 1em;
|
||||
border-left: 2px outset $dark;
|
||||
display: inline-block;
|
||||
max-width: 85%;
|
||||
|
||||
& footer {
|
||||
text-align: right;
|
||||
font-style: normal;
|
||||
display: inline-block;
|
||||
margin-left: 5em;
|
||||
|
||||
&::before {
|
||||
content: "—";
|
||||
}
|
||||
}
|
||||
|
||||
&: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 $dark;
|
||||
border-bottom: 2px inset $dark;
|
||||
}
|
||||
|
||||
& p:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
& p:last-of-type {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
&.script {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr 0.2fr;
|
||||
padding-bottom: 0.4em;
|
||||
text-align: left;
|
||||
|
||||
& > 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1024px) {
|
||||
blockquote {
|
||||
margin: 1em 2em;
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: remove once replaced in content with figures */
|
||||
img,
|
||||
video {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
max-height: 50vh;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.figure {
|
||||
margin: 16px auto;
|
||||
width: fit-content;
|
||||
|
||||
&__image {
|
||||
display: block;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
height: auto;
|
||||
max-height: 50vh;
|
||||
}
|
||||
|
||||
&__caption {
|
||||
height: auto;
|
||||
margin: auto;
|
||||
|
||||
&--no-height {
|
||||
height: 0;
|
||||
}
|
||||
|
||||
& .figcaption {
|
||||
&__caption {
|
||||
font-size: 0.9em;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&__attr {
|
||||
background-color: $dark;
|
||||
font-size: 0.7em;
|
||||
color: $light;
|
||||
width: fit-content;
|
||||
top: -2em;
|
||||
position: relative;
|
||||
padding: 0.2em 0.5em;
|
||||
opacity: 0.8;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
&__attr + .figcaption__caption {
|
||||
margin-top: -0.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& .site-content__footer {
|
||||
grid-row-start: 3;
|
||||
grid-row-end: 4;
|
||||
border-top: 2px solid $dark;
|
||||
@include mq('desktop') {
|
||||
margin-bottom: 2em;
|
||||
grid-row-start: 2;
|
||||
grid-row-end: 3;
|
||||
}
|
||||
|
||||
& h2 {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
& ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#mapdiv {
|
||||
border: 2px solid $dark;
|
||||
}
|
||||
}
|
||||
}
|
32
assets/css/themes/_dark.scss
Normal file
32
assets/css/themes/_dark.scss
Normal file
|
@ -0,0 +1,32 @@
|
|||
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;
|
||||
}
|
||||
}
|
5
config.toml
Normal file
5
config.toml
Normal file
|
@ -0,0 +1,5 @@
|
|||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = true
|
||||
min = "0.140.0"
|
||||
max = "0.140.2"
|
1363
data/itemtypes.json
Normal file
1363
data/itemtypes.json
Normal file
File diff suppressed because it is too large
Load diff
3
go.mod
Normal file
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
|||
module code.bengoldsworthy.net/Rumperuu/Cataloguer
|
||||
|
||||
go 1.22.10
|
53
layouts/_default/baseof.html
Normal file
53
layouts/_default/baseof.html
Normal file
|
@ -0,0 +1,53 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
{{ partialCached "copying.html" . }}
|
||||
|
||||
<html itemscope itemtype="https://schema.org/WebSite">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, intitial-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">
|
||||
|
||||
<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 href="/css/sanitize.css" rel="stylesheet" />
|
||||
{{- $sass := resources.Get "css/main.scss" }}
|
||||
{{- $style := $sass | css.Sass | resources.Fingerprint }}
|
||||
<link rel="stylesheet" type="text/css" href="{{ $style.RelPermalink }}" integrity="{{ $style.Data.Integrity | html }}">
|
||||
|
||||
</head>
|
||||
|
||||
<body class="site-container site-container{{ block "main-class" . }}{{ 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 }}">
|
||||
{{ block "main-header" . }}{{ end }}
|
||||
{{ block "main-body" . }}{{ end }}
|
||||
{{ block "main-footer" . }}{{ end }}
|
||||
</main>
|
||||
|
||||
{{- block "footer" . -}}
|
||||
<footer class="site-footer">
|
||||
<p>
|
||||
By <a href="/">{{ $.Site.Author.name }}</a> |
|
||||
<a href="{{ $.Site.Params.codeURL }}{{ $.Site.Params.reportIssueURL }}" target="_blank" rel="noopener noreferrer">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" }}
|
||||
</p>
|
||||
</footer>
|
||||
{{- end -}}
|
||||
</body>
|
||||
|
||||
</html>
|
37
layouts/_default/list.html
Normal file
37
layouts/_default/list.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
{{ define "title" }}
|
||||
{{ .Page.Title | plainify }} | {{ .Site.Title }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-class" }}--list{{ end }}
|
||||
|
||||
{{ define "main-type" }}.{{ .Params.mainType }}{{ end }}
|
||||
{{ define "item-type" }}{{ .Params.itemsType }}{{ end }}
|
||||
|
||||
{{ define "main-header" }}
|
||||
<header class="site-content__header">
|
||||
<h1 class="page-title">{{ .Title | safeHTML }}
|
||||
{{ range .AlternativeOutputFormats -}}
|
||||
<a href="{{ .RelPermalink }}">
|
||||
<img class="feed-icon" src="/images/feed-icon.svg">
|
||||
</a>
|
||||
{{ end }}
|
||||
</h1>
|
||||
{{ .Content }}
|
||||
</header>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-body" }}
|
||||
<main class="site-content__body">
|
||||
{{ if .File }}
|
||||
{{ if ( eq .File.Dir "log/" ) }}
|
||||
{{ .Scratch.Set "listMode" "log" }}
|
||||
{{ else if ( eq .File.Dir "wishlist/" ) }}
|
||||
{{ .Scratch.Set "listMode" "wishlist" }}
|
||||
{{ end }}
|
||||
|
||||
{{ if ( in "log/ wishlist/" .File.Dir ) }}
|
||||
{{ partial "table" . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</main>
|
||||
{{ end }}
|
56
layouts/_default/section.html
Normal file
56
layouts/_default/section.html
Normal file
|
@ -0,0 +1,56 @@
|
|||
{{ define "title" }}
|
||||
{{ .Page.Title | plainify }} | {{ .Site.Title }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-class" }}--section{{ end }}
|
||||
|
||||
{{ define "main-type" }}.{{ .Params.mainType }}{{ end }}
|
||||
{{ define "item-type" }}{{ .Params.itemsType }}{{ end }}
|
||||
|
||||
{{ define "main-header" }}
|
||||
<header class="site-content__header">
|
||||
{{- .Scratch.Set "section" ( first 1 ( split .File.Dir "/" ) ) -}}
|
||||
{{- $section := .Scratch.Get "section" -}}
|
||||
{{ if ( or ( in "books" ( delimit $section "" ) ) ( in "games" ( delimit $section "" ) ) ) }}
|
||||
<a href="/{{ delimit $section "" }}/current">Current</a> ~
|
||||
{{ end }}
|
||||
<a href="/{{ delimit $section "" }}/log">Log</a> ~
|
||||
<a href="/{{ delimit $section "" }}/wishlist">Wishlist</a>
|
||||
|
||||
<h1 class="page-title">{{ .Title | safeHTML }}
|
||||
{{ range .AlternativeOutputFormats -}}
|
||||
<a href="{{ .RelPermalink }}">
|
||||
<img class="feed-icon" src="/images/feed-icon.svg">
|
||||
</a>
|
||||
{{ end }}
|
||||
</h1>
|
||||
{{ .Content }}
|
||||
</header>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-body" }}
|
||||
<main class="site-content__body">
|
||||
{{ if .File }}
|
||||
|
||||
{{ .Scratch.Set "page" ( index ( split .File.Dir "/" ) 1 ) }}
|
||||
{{ if ( in "current log wishlist" ( .Scratch.Get "page" ) ) }}
|
||||
|
||||
{{ if ( eq ( .Scratch.Get "page" ) "current" ) }}
|
||||
{{ .Scratch.Set "listMode" "current" }}
|
||||
|
||||
{{ else if ( eq ( .Scratch.Get "page" ) "log" ) }}
|
||||
{{ .Scratch.Set "listMode" "log" }}
|
||||
|
||||
{{ else if ( eq ( .Scratch.Get "page" ) "wishlist" ) }}
|
||||
{{ .Scratch.Set "listMode" "wishlist" }}
|
||||
|
||||
{{ end }}
|
||||
|
||||
{{ partial "stats" . }}
|
||||
|
||||
{{ partial "table" . }}
|
||||
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</main>
|
||||
{{ end }}
|
76
layouts/_default/single.html
Normal file
76
layouts/_default/single.html
Normal file
|
@ -0,0 +1,76 @@
|
|||
{{ define "title" }}{{ .Title | plainify }} | {{ .Site.Title }}{{ end }}
|
||||
|
||||
{{ define "head-description" }}{{ .Summary | plainify }}{{ end }}
|
||||
|
||||
{{ define "main-class" }}--single{{ end }}
|
||||
|
||||
{{ define "main-header" }}
|
||||
<header class="site-content__header">
|
||||
<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 }})"
|
||||
{{ 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 }}
|
||||
</div>
|
||||
{{ with .Resources.GetMatch .Params.featured_image }}
|
||||
<p class="attr">
|
||||
{{ if .Params.attrlink }}<a href="{{ .Params.attrlink }}" target="_blank" rel="noopener">{{ end }}
|
||||
{{- .Params.Attr | safeHTML -}}
|
||||
{{ if .Params.attrlink }}</a>{{ end }}
|
||||
{{ if .Params.attrlicence }} ({{ .Params.attrlicence }}){{ end }}
|
||||
<p>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<p class="article-header__word-count">~<span itemprop="wordCount">{{ .FuzzyWordCount | lang.FormatNumberCustom 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.FormatNumberCustom 0 }} <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.FormatNumberCustom 0 }} <abbr style="text-transform: small-caps; font-size: 0.8em;" title="Holocene Era">HE</abbr></span></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 ) ) }}
|
||||
<aside class="article-header__warnings">
|
||||
<ul>
|
||||
{{ if ( gt $post_age_in_years 2 ) }}<li>This piece was written <strong>over {{ $post_age_in_years }} years ago</strong>. It may no longer accurately reflect my views now, or may be factually outdated.</li>{{ end }}
|
||||
{{ if .Params.controversial }}<li>This piece has been marked as potentially <strong>controversial</strong>, whether due to the topic addressed, the content of the article, or both. Don't say you weren't warned.</li>{{ end }}
|
||||
{{ if .Params.site }}<li>This piece was originally written for an older version of this site. As such, it may not have transferred over properly and some images and links might be broken.</li>{{ end }}
|
||||
</ul>
|
||||
</aside>
|
||||
{{ end }}
|
||||
|
||||
{{ if .Params.notes }}
|
||||
<aside class="article-header__notes">
|
||||
<ul>
|
||||
{{ range .Params.notes }}
|
||||
<li>{{ . | safeHTML }}</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</aside>
|
||||
{{ end }}
|
||||
|
||||
{{ 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>
|
||||
{{ .TableOfContents }}
|
||||
</nav>
|
||||
{{ end }}
|
||||
</header>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-body" }}
|
||||
<article class="site-content__body">
|
||||
{{ .Content }}
|
||||
</article>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main-footer" }}
|
||||
{{ end }}
|
11
layouts/index.html
Normal file
11
layouts/index.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
{{ define "main-class" }}--homepage{{ end }}
|
||||
|
||||
{{ define "header" }} <!-- null --> {{ end }}
|
||||
|
||||
{{ define "main-body" }}
|
||||
<h1 class="page-title">
|
||||
Ben's Catalogue
|
||||
</h1>
|
||||
|
||||
{{ range ( where .Pages "Type" "in" site.Params.mainSections ).ByTitle }}<a href="{{ .RelPermalink }}"><h2>{{ .Title }}</h2></a>{{ end }}
|
||||
{{ end }}
|
34
layouts/partials/books/rows/authors.html
Normal file
34
layouts/partials/books/rows/authors.html
Normal file
|
@ -0,0 +1,34 @@
|
|||
{{- with .Author -}}
|
||||
<p class="authors">{{ . }}</p>
|
||||
{{- else -}}
|
||||
{{- $authors_names := slice -}}
|
||||
|
||||
{{- range .authors -}}
|
||||
{{- $authors_names = $authors_names | append .name -}}
|
||||
{{- end -}}
|
||||
{{- range .work.authors -}}
|
||||
{{- $authors_names = $authors_names | append .name -}}
|
||||
{{- end -}}
|
||||
{{- if .contributors -}}
|
||||
{{- range ( where .contributors "role" "like" `[aA]uthor` ) -}}
|
||||
{{- $authors_names = $authors_names | append .name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
<p class="authors">{{ delimit ( uniq $authors_names ) ", " }}</p>
|
||||
{{- end -}}
|
||||
|
||||
{{- if .contributors -}}
|
||||
{{- $translators_names := slice -}}
|
||||
|
||||
{{- range ( where .contributors "role" "like" `[tT]ranslat` ) -}}
|
||||
{{- $translators_names = $translators_names | append .name -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- with $translators_names -}}
|
||||
<p class="authors--additional">Translator(s): {{ delimit ( uniq . ) ", " }}</p>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- with ( index . "Additional Authors" ) -}}
|
||||
<p class="authors--additional">Additional Author(s): {{ . }}</p>
|
||||
{{- end -}}
|
7
layouts/partials/books/rows/publish-date.html
Normal file
7
layouts/partials/books/rows/publish-date.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
<p class="year">{{- .publish_date -}}
|
||||
{{- if .first_publish_date -}}
|
||||
{{- if ( ne .first_publish_date .publish_date ) -}}
|
||||
<span class="year--original">(<abbr title="original publication year">orig.</abbr> {{ .first_publish_date }})</span>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</p>
|
9
layouts/partials/books/rows/read-dates.html
Normal file
9
layouts/partials/books/rows/read-dates.html
Normal file
|
@ -0,0 +1,9 @@
|
|||
{{- with .date_started -}}
|
||||
{{- time.Format "Jan 2, 2006" . -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}–{{- with .date_finished -}}
|
||||
{{- time.Format "Jan 2, 2006" . -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}
|
23
layouts/partials/books/rows/title.html
Normal file
23
layouts/partials/books/rows/title.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
{{-
|
||||
$cite_options := ( dict
|
||||
"c" .c
|
||||
"g" .g
|
||||
"section" "books"
|
||||
"schemaType" "Book"
|
||||
"title" ( cond ( isset .c "subtitle" ) (
|
||||
printf "%s: %s" .c.title .c.subtitle
|
||||
) (
|
||||
.c.title
|
||||
)
|
||||
)
|
||||
"edition" (
|
||||
default .c.edition_name .c.Edition
|
||||
)
|
||||
)
|
||||
-}}
|
||||
|
||||
{{- if .c.work.original_language -}}
|
||||
{{- $cite_options = merge $cite_options ( dict "titleLang" .c.work.original_language "titleTrans" .c.work.title ) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- partial "cite" $cite_options -}}
|
112
layouts/partials/books/table-body.html
Normal file
112
layouts/partials/books/table-body.html
Normal file
|
@ -0,0 +1,112 @@
|
|||
{{ if ( eq ( .Scratch.Get "listMode" ) "current" ) }}
|
||||
{{ range ( sort $.Site.Data.books.current "date_started" "desc" ) }}
|
||||
<tr>
|
||||
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ else }}n/a{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/title.html" ( dict "c" . "g" $ ) -}}
|
||||
|
||||
{{- with .comments -}}
|
||||
<p class="comments">Comments: {{ . }}</p>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/authors.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/publish-date.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- with .date_started -}}
|
||||
Since {{ time.Format "Jan 2, 2006" . -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ else if ( eq ( .Scratch.Get "listMode" ) "log" ) }}
|
||||
<tr>
|
||||
<td colspan=5><h3>Diary</h3></td>
|
||||
</tr>
|
||||
{{ range ( sort ( where $.Site.Data.books.log "Date Finished" "!=" "" ) "Date Finished" "desc" ) }}
|
||||
<tr>
|
||||
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ else }}n/a{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/title.html" ( dict "c" . "g" $ ) -}}
|
||||
|
||||
{{- with .comments -}}
|
||||
<p class="comments">Comments: {{ . }}</p>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/authors.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/publish-date.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/read-dates.html" . -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
<tr>
|
||||
<td colspan=5><h3>Assorted</h3></td>
|
||||
</tr>
|
||||
{{ range ( sort ( where $.Site.Data.books.log "Date Finished" "" ) "Title" "asc" ) }}
|
||||
<tr>
|
||||
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ else }}n/a{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/title.html" ( dict "c" . "g" $ ) -}}
|
||||
|
||||
{{- with .comments -}}
|
||||
<p class="comments">Comments: {{ . }}</p>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/authors.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/publish-date.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/read-dates.html" . -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ else if ( eq ( .Scratch.Get "listMode" ) "wishlist" ) }}
|
||||
{{ range ( sort $.Site.Data.books.wishlist "Title" "asc" ) }}
|
||||
<tr>
|
||||
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ else }}n/a{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/title.html" ( dict "c" . "g" $ ) -}}
|
||||
|
||||
{{- with .comments -}}
|
||||
<p class="comments">Comments: {{ . }}</p>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/authors.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- partial "books/rows/publish-date.html" . -}}
|
||||
</td>
|
||||
|
||||
<td>n/a</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ end }}
|
5
layouts/partials/books/table-header.html
Normal file
5
layouts/partials/books/table-header.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
<th>Date Added</th>
|
||||
<th>Title</th>
|
||||
<th>Author(s)</th>
|
||||
<th>Publication Date</th>
|
||||
<th>Dates Read</th>
|
21
layouts/partials/cite.html
Normal file
21
layouts/partials/cite.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
{{- $itemType := default "CreativeWork" .schemaType -}}
|
||||
|
||||
{{- $pages := where ( where .g.Site.Pages "Section" .section ) "title" .title | first 1 -}}
|
||||
|
||||
{{- with .c -}}
|
||||
{{- with $pages -}}{{- range . -}}<a href="{{ .RelPermalink }}">{{- end -}}{{- end -}}
|
||||
<cite
|
||||
class="cite{{ with .citeStyle }} cite--{{ . }}{{ end }}"
|
||||
itemscope
|
||||
itemprop="citation"
|
||||
itemtype="https://schema.org/{{- $itemType -}}"
|
||||
{{- if $.titleTrans -}}
|
||||
lang="{{- $.titleLang -}}"
|
||||
title="{{- $.titleTrans -}}"
|
||||
{{- end -}}>
|
||||
{{- default .Title $.title -}}
|
||||
</cite>
|
||||
{{- with $pages -}}</a>{{- end -}}
|
||||
|
||||
{{- with $.edition }}<p class="edition">{{ . }}</p>{{- end -}}
|
||||
{{- end -}}
|
12
layouts/partials/copying.html
Normal file
12
layouts/partials/copying.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
{{ "<!--" | safeHTML }}
|
||||
{{ .Site.Title}} - {{ .Site.Params.tagline }}
|
||||
|
||||
Written in {{ now.Format "2006" }} by {{ .Site.Author.name }} <{{ .Site.Author.email }}>
|
||||
|
||||
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.
|
||||
|
||||
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/>.
|
||||
{{ "-->" | safeHTML }}
|
81
layouts/partials/films/table-body.html
Normal file
81
layouts/partials/films/table-body.html
Normal file
|
@ -0,0 +1,81 @@
|
|||
{{ if ( eq ( .Scratch.Get "listMode" ) "log" ) }}
|
||||
<tr>
|
||||
<td colspan=4><h3>Diary</h3></td>
|
||||
</tr>
|
||||
{{ range ( sort ( where $.Site.Data.films.log "date_finished" "!=" "" ) "date_finished" "desc" ) }}
|
||||
<tr>
|
||||
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "films" "schemaType" "Movie" "title" .title "titleLang" .original_language "titleTrans" .original_title ) -}}
|
||||
|
||||
{{- with .comments -}}
|
||||
<p class="comments">Comments: {{ . }}</p>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- if .date_finished -}}
|
||||
{{- time.Format "Jan 2, 2006" .date_finished -}}
|
||||
{{- if .is_repeat }} ↻{{ end -}}
|
||||
{{- else -}}
|
||||
n/a
|
||||
{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
<tr>
|
||||
<td colspan=4><h3>Assorted</h3></td>
|
||||
</tr>
|
||||
{{ range ( sort ( where $.Site.Data.films.log "date_finished" "" ) "title" "asc" ) }}
|
||||
<tr>
|
||||
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "films" "schemaType" "Movie" "title" .title "titleLang" .original_language "titleTrans" .original_title ) -}}
|
||||
|
||||
{{- with .comments -}}
|
||||
<p class="comments">Comments: {{ . }}</p>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- if .date_finished -}}
|
||||
{{- time.Format "Jan 2, 2006" .date_finished -}}
|
||||
{{- if .is_repeat }} ↻{{ end -}}
|
||||
{{- else -}}
|
||||
n/a
|
||||
{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ else if ( eq ( .Scratch.Get "listMode" ) "wishlist" ) }}
|
||||
{{ range ( sort $.Site.Data.films.wishlist "title" "asc" ) }}
|
||||
<tr>
|
||||
<td>{{ with .date_added }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "films" "schemaType" "Movie" "title" .title "titleLang" .original_language "titleTrans" .original_title ) -}}
|
||||
|
||||
{{- with .comments -}}
|
||||
<p class="comments">Comments: {{ . }}</p>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>{{ with .release_date }}{{ time.Format "Jan 2, 2006" . }}{{ end }}</td>
|
||||
|
||||
<td>
|
||||
{{- if .date_finished -}}
|
||||
{{- time.Format "Jan 2, 2006" .date_finished -}}
|
||||
{{- if .is_repeat }} ↻{{ end -}}
|
||||
{{- else -}}
|
||||
n/a
|
||||
{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ end }}
|
4
layouts/partials/films/table-header.html
Normal file
4
layouts/partials/films/table-header.html
Normal file
|
@ -0,0 +1,4 @@
|
|||
<th>Date Added</th>
|
||||
<th>Title</th>
|
||||
<th>Release Date</th>
|
||||
<th>Date Watched</th>
|
78
layouts/partials/games/table-body.html
Normal file
78
layouts/partials/games/table-body.html
Normal file
|
@ -0,0 +1,78 @@
|
|||
{{ if ( eq ( .Scratch.Get "listMode" ) "current" ) }}
|
||||
{{ range ( sort $.Site.Data.games.current "Date Started" "desc" ) }}
|
||||
<tr>
|
||||
<td>
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "games" "schemaType" "VideoGame" ) -}}
|
||||
</td>
|
||||
<td>{{ index . "Date Released" }}</td>
|
||||
<td>{{ .Platforms }}</td>
|
||||
<td>
|
||||
{{- if index . "Date Started" -}}
|
||||
Since {{ time.Format "Jan 2, 2006" ( index . "Date Started" ) -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ else if ( eq ( .Scratch.Get "listMode" ) "log" ) }}
|
||||
<tr>
|
||||
<td colspan=4><h3>Diary</h3></td>
|
||||
</tr>
|
||||
{{ range ( sort ( where $.Site.Data.games.log "Date Finished" "!=" "" ) "Date Finished" "desc" ) }}
|
||||
<tr>
|
||||
<td>
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "games" "schemaType" "VideoGame" ) -}}
|
||||
</td>
|
||||
<td>{{ index . "Date Released" }}</td>
|
||||
<td>{{ .Platforms }}</td>
|
||||
<td>
|
||||
{{- if index . "Date Started" -}}
|
||||
{{- time.Format "Jan 2, 2006" ( index . "Date Started" ) -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}–{{- if index . "Date Finished" -}}
|
||||
{{- time.Format "Jan 2, 2006" ( index . "Date Finished" ) -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}
|
||||
{{- if index . "Level of Completion" }} <span class="games__level-of-completion">({{ index . "Level of Completion" }})</span>{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
<tr>
|
||||
<td colspan=5><h3>Assorted</h3></td>
|
||||
</tr>
|
||||
{{ range ( sort ( where $.Site.Data.games.log "Date Finished" "" ) "Title" "asc" ) }}
|
||||
<tr>
|
||||
<td>
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "games" "schemaType" "VideoGame" ) -}}
|
||||
</td>
|
||||
<td>{{ index . "Date Released" }}</td>
|
||||
<td>{{ .Platforms }}</td>
|
||||
<td>
|
||||
{{- if index . "Date Started" -}}
|
||||
{{- time.Format "Jan 2, 2006" ( index . "Date Started" ) -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}–{{- if index . "Date Finished" -}}
|
||||
{{- time.Format "Jan 2, 2006" ( index . "Date Finished" ) -}}
|
||||
{{- else -}}
|
||||
Unknown
|
||||
{{- end -}}
|
||||
{{- if index . "Level of Completion" }} <span class="games__level-of-completion">({{ index . "Level of Completion" }})</span>{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ else if ( eq ( .Scratch.Get "listMode" ) "wishlist" ) }}
|
||||
{{ range ( sort $.Site.Data.games.wishlist "Title" "asc" ) }}
|
||||
<tr>
|
||||
<td>
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "games" "schemaType" "VideoGame" ) -}}
|
||||
</td>
|
||||
<td>{{ index . "Date Released" }}</td>
|
||||
<td>{{ .Platforms }}</td>
|
||||
<td>n/a</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ end }}
|
4
layouts/partials/games/table-header.html
Normal file
4
layouts/partials/games/table-header.html
Normal file
|
@ -0,0 +1,4 @@
|
|||
<th>Title</th>
|
||||
<th>Release Year</th>
|
||||
<th>Platform(s) Played</th>
|
||||
<th>Date Played</th>
|
20
layouts/partials/header/site-header.html
Normal file
20
layouts/partials/header/site-header.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
<header class="site-header">
|
||||
{{ 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">📧</a> ~
|
||||
<a href="{{ .Site.Params.codeURL }}">💻</a> ~
|
||||
<a href="/{{ .Site.Params.keyfile }}">🔐</a> ~
|
||||
<a href="/index.xml"><img class="feed-icon" src="/images/feed-icon.svg"></a> ~
|
||||
</p>
|
||||
|
||||
<nav class="site-header__nav">
|
||||
<ul>
|
||||
{{ range .Site.Sections.ByTitle }}
|
||||
<a href="{{ .RelPermalink }}"><li>{{ .Title | safeHTML }}</li></a>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
{{ end }}
|
||||
</header>
|
22
layouts/partials/series_by_id.html
Normal file
22
layouts/partials/series_by_id.html
Normal file
|
@ -0,0 +1,22 @@
|
|||
{{- $series_tmdb_id := .tmdb_id -}}
|
||||
{{- $series := "" -}}
|
||||
|
||||
{{- range ( index .g.Site.Data.tv_series.current ) -}}
|
||||
{{- if ( eq .tmdb_id $series_tmdb_id ) -}}
|
||||
{{- $series = . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- range ( index .g.Site.Data.tv_series.log ) -}}
|
||||
{{- if ( eq .tmdb_id $series_tmdb_id ) -}}
|
||||
{{- $series = . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- range ( index .g.Site.Data.tv_series.wishlist ) -}}
|
||||
{{- if ( eq .tmdb_id $series_tmdb_id ) -}}
|
||||
{{- $series = . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- return $series -}}
|
51
layouts/partials/stats.html
Normal file
51
layouts/partials/stats.html
Normal file
|
@ -0,0 +1,51 @@
|
|||
{{- $section := default "" ( .Scratch.Get "section" ) -}}
|
||||
{{- $list_mode := default "" ( .Scratch.Get "listMode" ) -}}
|
||||
{{- $log_file := index ( index $.Site.Data $section ) $list_mode -}}
|
||||
|
||||
{{- if $log_file -}}
|
||||
{{- $total := len $log_file -}}
|
||||
|
||||
{{- $today := time.Now -}}
|
||||
|
||||
{{-
|
||||
$this_year_total := (
|
||||
where (
|
||||
where $log_file "date_finished" "gt" (
|
||||
( $today.AddDate -1 0 0 ).Format "2006-01-02"
|
||||
)
|
||||
) "date_finished" "lt" ( $today.Format "2006-01-02" )
|
||||
) | len
|
||||
-}}
|
||||
|
||||
{{-
|
||||
$this_quarter_total := (
|
||||
where (
|
||||
where $log_file "date_finished" "gt" (
|
||||
( $today.AddDate 0 -3 0 ).Format "2006-01-02"
|
||||
)
|
||||
) "date_finished" "lt" ( $today.Format "2006-01-02" )
|
||||
) | len
|
||||
-}}
|
||||
{{-
|
||||
$this_month_total := (
|
||||
where (
|
||||
where $log_file "date_finished" "gt" (
|
||||
( $today.AddDate 0 -1 0 ).Format "2006-01-02"
|
||||
)
|
||||
) "date_finished" "lt" ( $today.Format "2006-01-02" )
|
||||
) | len
|
||||
-}}
|
||||
|
||||
<details class="log-stats">
|
||||
<summary>Summary</summary>
|
||||
|
||||
<div>
|
||||
<p>Total: {{ lang.FormatNumber 0 $total }}</p>
|
||||
{{- if eq $list_mode "log" -}}
|
||||
<p>Last 12 months: {{ lang.FormatNumber 0 $this_year_total }}</p>
|
||||
<p>Last 3 months: {{ lang.FormatNumber 0 $this_quarter_total }}</p>
|
||||
<p>Last month: {{ lang.FormatNumber 0 $this_month_total }}</p>
|
||||
{{- end -}}
|
||||
</div>
|
||||
</details>
|
||||
{{- end -}}
|
16
layouts/partials/table.html
Normal file
16
layouts/partials/table.html
Normal file
|
@ -0,0 +1,16 @@
|
|||
{{ if ( .Scratch.Get "listMode" ) }}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
{{ if ( and ( in site.Params.mainSections .Section ) ( in "current log wishlist" ( .Scratch.Get "page" ) ) ) }}
|
||||
{{ partial ( printf "%s/%s" .Section "table-header" ) . }}
|
||||
{{ end }}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{ if ( and ( in site.Params.mainSections .Section ) ( in "current log wishlist" ( .Scratch.Get "page" ) ) ) }}
|
||||
{{ partial ( printf "%s/%s" .Section "table-body" ) . }}
|
||||
{{ end }}
|
||||
</tbody>
|
||||
<table>
|
||||
{{ end }}
|
46
layouts/partials/tv/table-body.html
Normal file
46
layouts/partials/tv/table-body.html
Normal file
|
@ -0,0 +1,46 @@
|
|||
{{ if ( eq ( .Scratch.Get "listMode" ) "log" ) }}
|
||||
{{ if ( eq ( .Scratch.Get "listMode" ) "log" ) }}
|
||||
{{ .Scratch.Set "filterCol" "date_finished" }}
|
||||
{{ .Scratch.Set "filterDir" "desc" }}
|
||||
{{ end }}
|
||||
|
||||
{{ range ( sort ( index $.Site.Data.tv_episodes ( .Scratch.Get "listMode" ) ) ( .Scratch.Get "filterCol" ) ( .Scratch.Get "filterDir" ) ) }}
|
||||
<tr>
|
||||
<td>
|
||||
{{- with ( index . "Series Title" ) -}}
|
||||
<cite class="cite" itemscope itemtype="TVSeries">{{ . }}</cite>
|
||||
{{- else -}}
|
||||
{{- $series := partialCached "series_by_id" ( dict "g" $ "tmdb_id" .series.tmdb_id ) .series.tmdb_id -}}
|
||||
{{- if ( not ( eq $series "" ) ) -}}
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "tv" "schemaType" "TVSeries" "title" $series.name "titleLang" $series.original_language "titleTrans" $series.original_name ) -}}
|
||||
{{- else -}}
|
||||
Unknown series
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- if ( index . "Episode Title" ) -}}
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "tv" "schemaType" "TVEpisode" "title" ( index . "Episode Title" ) ) -}}
|
||||
<span class="episode-number">({{ index . "Episode Number" }})</span>
|
||||
{{- else -}}
|
||||
{{- partial "cite" ( dict "c" . "g" $ "section" "tv" "schemaType" "TVEpisode" "title" .name ) -}}
|
||||
<span class="episode-number">(S{{ .season_number }}E{{ .episode_number }})</span>
|
||||
{{- end -}}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{- if ( or ( index . "Date Watched" ) .date_finished ) -}}
|
||||
{{- with ( index . "Date Watched" ) -}}
|
||||
{{- time.Format "Jan 2, 2006" . -}}
|
||||
{{- else -}}
|
||||
{{- time.Format "Jan 2, 2006" .date_finished -}}
|
||||
{{- end -}}
|
||||
{{- if ( or .is_rewatch .Rewatch ) }} ↻{{ end -}}
|
||||
{{- else -}}
|
||||
n/a
|
||||
{{- end -}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
{{ end }}
|
3
layouts/partials/tv/table-header.html
Normal file
3
layouts/partials/tv/table-header.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
<th>Series Title</th>
|
||||
<th>Episode Title</th>
|
||||
<th>Watch Date</th>
|
4567
package-lock.json
generated
Normal file
4567
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
59
package.json
Normal file
59
package.json
Normal file
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"name": "cataloguer",
|
||||
"version": "1.0.0",
|
||||
"description": "A theme for my personal static site incorporating a blog, various portfolios and a CV searcher.",
|
||||
"scripts": {
|
||||
"precommit": "npm run lint-staged",
|
||||
"dev": "snap run hugo serve",
|
||||
"lint": "npm run lint:css; npm run lint:md; npm run lint:html; npm run lint:json",
|
||||
"lint:fix": "npm run lint:css:fix; npm run lint:md:fix; npm run lint:html:fix; npm run lint:json:fix",
|
||||
"lint:css": "stylelint \"./assets/css/**/*.scss\" --cache --cache-location .cache/ .stylelintcache",
|
||||
"lint:css:fix": "npm run lint:css -- --fix",
|
||||
"lint:js": "eslint \"./assets/js/*.js\" \"./content/**/*.js\"",
|
||||
"format:html": "prettier --parser html --check \"public/**/*.{htm,html}\"",
|
||||
"format:html:fix": "npm run format:html -- --write",
|
||||
"format:md": "prettier --parser markdown \"*/**/*.md\"",
|
||||
"format:md:fix": "npm run format:md -- --write",
|
||||
"lint:md": "markdownlint --rules sentences-per-line \"*/**/*.md\"",
|
||||
"lint:md:fix": "npm run lint:md -- --fix",
|
||||
"lint:json": "jsonlint ./**/*.json -s",
|
||||
"lint:json:fix": "npm run lint:json -- -i"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.s?[ca]ss": [
|
||||
"npm run spellcheck",
|
||||
"npm run lint:css",
|
||||
"git add"
|
||||
],
|
||||
"*.md": [
|
||||
"npm run spellcheck",
|
||||
"npm run format:md",
|
||||
"npm run lint:md",
|
||||
"git add"
|
||||
],
|
||||
"*.html?": [
|
||||
"npm run spellcheck",
|
||||
"npm run format:html",
|
||||
"git add"
|
||||
],
|
||||
"*.json": [
|
||||
"npm run spellcheck",
|
||||
"npm run lint:json",
|
||||
"git add"
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^9.17.0",
|
||||
"husky": "^9.1.7",
|
||||
"jsonlint": "^1.6.3",
|
||||
"lint-staged": "^15.3.0",
|
||||
"markdownlint": "^0.37.3",
|
||||
"markdownlint-cli": "^0.43.0",
|
||||
"prettier": "^3.4.2",
|
||||
"stylelint": "^16.12.0",
|
||||
"stylelint-config-standard-scss": "^14.0.0",
|
||||
"stylelint-prettier": "^5.0.2",
|
||||
"stylelint-scss": "^6.10.0",
|
||||
"stylelint-selector-bem-pattern": "^4.0.1"
|
||||
}
|
||||
}
|
363
static/css/sanitize.css
Normal file
363
static/css/sanitize.css
Normal 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;
|
||||
}
|
BIN
static/images/feed-icon.png
Normal file
BIN
static/images/feed-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
18
static/images/feed-icon.svg
Normal file
18
static/images/feed-icon.svg
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">
|
||||
<defs>
|
||||
<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">
|
||||
<stop offset="0.0" stop-color="#E3702D"/><stop offset="0.1071" stop-color="#EA7D31"/>
|
||||
<stop offset="0.3503" stop-color="#F69537"/><stop offset="0.5" stop-color="#FB9E3A"/>
|
||||
<stop offset="0.7016" stop-color="#EA7C31"/><stop offset="0.8866" stop-color="#DE642B"/>
|
||||
<stop offset="1.0" stop-color="#D95B29"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="256" height="256" rx="55" ry="55" x="0" y="0" fill="#CC5D15"/>
|
||||
<rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/>
|
||||
<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>
|
||||
<circle cx="68" cy="189" r="24" fill="#FFF"/>
|
||||
<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>
|
||||
<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
15
theme.toml
Normal file
15
theme.toml
Normal file
|
@ -0,0 +1,15 @@
|
|||
name = "Cataloguer"
|
||||
min_version = "0.41.0"
|
||||
license = "CC0"
|
||||
licenselink = "https://code.bengoldsworthy.net/Rumperuu/Cataloguer/blob/main/LICENSE"
|
||||
description = "A media cataloguing site, made with Hugo."
|
||||
|
||||
demosite = "https://cataloguebengoldsworthy.net"
|
||||
homepage = "https://bengoldsworthy.net/portfolio/programs/cataloguer"
|
||||
|
||||
tags = ["cataloguing"]
|
||||
features = []
|
||||
|
||||
[author]
|
||||
name = "Ben Goldsworthy"
|
||||
homepage = "https://bengoldsworthy.net/"
|
Loading…
Reference in a new issue