include a chapter
This commit is contained in:
parent
b27167a4a4
commit
59150d93b0
48
app.py
48
app.py
@ -25,15 +25,11 @@ OUTPUT_D = "dist"
|
|||||||
documents = {}
|
documents = {}
|
||||||
|
|
||||||
|
|
||||||
def showlist(param):
|
def showSnippet(params):
|
||||||
template = env.select_template(["snippets/show-list.jinja"])
|
param = params.split(" ")
|
||||||
html = template.render(documents=documents, type=param.strip())
|
|
||||||
|
|
||||||
return html
|
template = env.select_template([f"snippets/list-documents.jinja"])
|
||||||
|
html = template.render(documents=documents, layout=param[0], type=param[1])
|
||||||
def showGrid(param):
|
|
||||||
template = env.select_template(["snippets/show-grid.jinja"])
|
|
||||||
html = template.render(documents=documents, type=param.strip())
|
|
||||||
|
|
||||||
return html
|
return html
|
||||||
|
|
||||||
@ -43,28 +39,28 @@ def slugify_filter(value):
|
|||||||
|
|
||||||
|
|
||||||
def shortcode_filter(value):
|
def shortcode_filter(value):
|
||||||
|
|
||||||
shortcode_callbacks = {
|
|
||||||
"showlist": showlist,
|
|
||||||
"showGrid": showGrid
|
|
||||||
}
|
|
||||||
|
|
||||||
|
shortcode_callbacks = {
|
||||||
|
"show": showSnippet
|
||||||
|
}
|
||||||
|
|
||||||
def shortcode_replacer(match):
|
def shortcode_replacer(match):
|
||||||
shortcode_name = match.group(1).strip()
|
shortcode_name = match.group(1).strip()
|
||||||
param = match.group(2).strip()
|
param = match.group(2).strip()
|
||||||
|
|
||||||
if shortcode_name in shortcode_callbacks:
|
if shortcode_name in shortcode_callbacks:
|
||||||
return shortcode_callbacks[shortcode_name](param)
|
return shortcode_callbacks[shortcode_name](param)
|
||||||
|
|
||||||
return match.group(0)
|
return match.group(0)
|
||||||
|
|
||||||
pattern = re.compile(r"{{\s*(\w+)\s+([^{}]+?)\s*}}")
|
pattern = re.compile(r"{{\s*(\w+)\s+([^{}]+?)\s*}}")
|
||||||
return pattern.sub(shortcode_replacer, value)
|
return pattern.sub(shortcode_replacer, value)
|
||||||
|
|
||||||
|
|
||||||
env.filters["shortcode"] = shortcode_filter
|
env.filters["shortcode"] = shortcode_filter
|
||||||
env.filters["slugify"] = slugify_filter
|
env.filters["slugify"] = slugify_filter
|
||||||
|
|
||||||
|
|
||||||
def render_single_file(template, page, path, dist):
|
def render_single_file(template, page, path, dist):
|
||||||
html = template.render(documents=documents, page=page)
|
html = template.render(documents=documents, page=page)
|
||||||
name = Path(path).stem
|
name = Path(path).stem
|
||||||
@ -82,9 +78,15 @@ def get_page_data(path):
|
|||||||
page = frontmatter.load(path)
|
page = frontmatter.load(path)
|
||||||
page['slug'] = slugify(filename)
|
page['slug'] = slugify(filename)
|
||||||
page.filename = filename
|
page.filename = filename
|
||||||
|
page.folder = os.path.basename(os.path.dirname(path))
|
||||||
|
|
||||||
|
page.body = markdown.markdown(
|
||||||
|
page.content,
|
||||||
|
extensions=[
|
||||||
|
'def_list',
|
||||||
|
'footnotes',
|
||||||
|
markdown_include])
|
||||||
|
|
||||||
page.body = markdown.markdown(page.content, extensions=['def_list', 'footnotes', markdown_include])
|
|
||||||
|
|
||||||
return page
|
return page
|
||||||
|
|
||||||
|
|
||||||
@ -131,7 +133,16 @@ def get_inventory():
|
|||||||
|
|
||||||
with open("src/content/component-inventory.csv") as f:
|
with open("src/content/component-inventory.csv") as f:
|
||||||
documents['inventory'] = []
|
documents['inventory'] = []
|
||||||
for line in csv.DictReader(f, fieldnames=('ID', 'Name', 'Value', 'type', 'Date', 'Where', 'Mounting type')):
|
for line in csv.DictReader(
|
||||||
|
f,
|
||||||
|
fieldnames=(
|
||||||
|
'ID',
|
||||||
|
'Name',
|
||||||
|
'Value',
|
||||||
|
'type',
|
||||||
|
'Date',
|
||||||
|
'Where',
|
||||||
|
'Mounting type')):
|
||||||
documents['inventory'].append(line)
|
documents['inventory'].append(line)
|
||||||
|
|
||||||
|
|
||||||
@ -155,4 +166,5 @@ def main():
|
|||||||
|
|
||||||
copy_assets()
|
copy_assets()
|
||||||
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
42
src/assets/app.js
Normal file
42
src/assets/app.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
document.querySelectorAll(".footnote ol li").forEach((li) => {
|
||||||
|
const link = document.querySelector(
|
||||||
|
`sup a:not(.footnote a):not(sup sup a)[href="#${li.id}"]`,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (link) {
|
||||||
|
console.log("moving around", link);
|
||||||
|
li.setAttribute("count", link.textContent);
|
||||||
|
link.parentNode.insertBefore(li, link.nextSibling);
|
||||||
|
} else {
|
||||||
|
console.log("couldnt find it for ", li);
|
||||||
|
const nestedLink = document.querySelector(`a[href="#${li.id}"]`);
|
||||||
|
li.setAttribute("count", nestedLink.textContent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const dialog = document.querySelector("dialog");
|
||||||
|
const closeDialog = (e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
console.log("close")
|
||||||
|
dialog.close();
|
||||||
|
document.body.removeEventListener("click", closeDialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
const showLightbox = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
const img = dialog.querySelector("img");
|
||||||
|
|
||||||
|
img.src = e.currentTarget.src;
|
||||||
|
img.alt = e.currentTarget.alt;
|
||||||
|
dialog.querySelector("p").textContent = e.currentTarget.alt;
|
||||||
|
dialog.showModal();
|
||||||
|
document.body.addEventListener("click", closeDialog, false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll("article img").forEach((img) => {
|
||||||
|
console.log(img);
|
||||||
|
img.addEventListener("click", showLightbox);
|
||||||
|
})
|
@ -34,7 +34,7 @@ aside {
|
|||||||
padding: 1rem 1rem 1rem 0;
|
padding: 1rem 1rem 1rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
article {
|
article, header {
|
||||||
max-width: var(--article-w);
|
max-width: var(--article-w);
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@ -51,7 +51,7 @@ sup li:before,
|
|||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.grid {
|
.list--grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 0 0;
|
padding: 0 0;
|
||||||
@ -60,7 +60,7 @@ ul.grid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen {
|
@media screen {
|
||||||
ul.grid {
|
.list--grid {
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
margin-left: calc(-50vw + (var(--article-w) / 2));
|
margin-left: calc(-50vw + (var(--article-w) / 2));
|
||||||
padding-left: 2rem;
|
padding-left: 2rem;
|
||||||
@ -71,29 +71,30 @@ ul.grid {
|
|||||||
img {
|
img {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
cursor: hover;
|
||||||
}
|
}
|
||||||
|
|
||||||
li.grid__item {
|
.list--grid .list__item {
|
||||||
border: 2px solid #989177;
|
border: 2px solid #989177;
|
||||||
border-top-color: transparent;
|
border-top-color: transparent;
|
||||||
border-right-color: transparent;
|
border-right-color: transparent;
|
||||||
padding: 24px;
|
padding: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
li.grid__item:nth-of-type(4n),
|
.list--grid .list__item:nth-of-type(4n),
|
||||||
li.grid__item:last-child {
|
.list--grid .list__item:last-child {
|
||||||
border-right-color: #989177;
|
border-right-color: #989177;
|
||||||
}
|
}
|
||||||
|
|
||||||
li.grid__item:nth-of-type(1),
|
.list--grid .list__item:nth-of-type(1),
|
||||||
li.grid__item:nth-of-type(2),
|
.list--grid .list__item:nth-of-type(2),
|
||||||
li.grid__item:nth-of-type(3),
|
.list--grid .list__item:nth-of-type(3),
|
||||||
li.grid__item:nth-of-type(4) {
|
.list--grid .list__item:nth-of-type(4) {
|
||||||
border-top-color: #989177;
|
border-top-color: #989177;
|
||||||
}
|
}
|
||||||
|
|
||||||
article h1,
|
article h1,
|
||||||
article h2 {
|
article h2, article img {
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,3 +139,32 @@ article h2 {
|
|||||||
max-width: calc(100% - var(--img-offset) - var(--img-offset));
|
max-width: calc(100% - var(--img-offset) - var(--img-offset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dialog {
|
||||||
|
max-width: var(--main-w);
|
||||||
|
height: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
border: none;
|
||||||
|
overflow: hidden;
|
||||||
|
outline: none;
|
||||||
|
background-color: transparent;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
max-height: calc(100svh - 2rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog::backdrop {
|
||||||
|
background-color: transparent;
|
||||||
|
transition: .2s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog[open]::backdrop {
|
||||||
|
background-color: black;
|
||||||
|
opacity: .5;
|
||||||
|
}
|
@ -19,13 +19,13 @@ body {
|
|||||||
color: var(--text);
|
color: var(--text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.list--events {
|
.list--list {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 0 0;
|
padding: 0 0;
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list--events li {
|
.list--list .list__item {
|
||||||
border: 2px solid var(--text);
|
border: 2px solid var(--text);
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
@ -34,7 +34,7 @@ body {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list--events .host {
|
.list--list .host {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
|
@ -49,8 +49,14 @@ article h4 {
|
|||||||
article img {
|
article img {
|
||||||
max-width: 90ch;
|
max-width: 90ch;
|
||||||
margin-left: var(--img-offset);
|
margin-left: var(--img-offset);
|
||||||
|
margin-right: var(--img-offset);
|
||||||
margin-top: 2ch;
|
margin-top: 2ch;
|
||||||
margin-bottom: 2ch;
|
margin-bottom: 2ch;
|
||||||
|
width: calc(100% + (var(--img-offset) * -2));
|
||||||
|
}
|
||||||
|
|
||||||
|
ul img {
|
||||||
|
--img-offset: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
article img::after {
|
article img::after {
|
||||||
|
@ -1,345 +0,0 @@
|
|||||||
__NOTOC__
|
|
||||||
|
|
||||||
<h1
|
|
||||||
style="
|
|
||||||
text-align: center;
|
|
||||||
margin: -2rem auto 2rem;
|
|
||||||
font-size: 150px;
|
|
||||||
line-height: 1;
|
|
||||||
border-bottom: none;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<span style="text-decoration: line-through">''Pre''/Fake</span> Assessment
|
|
||||||
</h1>
|
|
||||||
<h2 style="text-align: center; margin: 2rem auto; font-size: 70px">
|
|
||||||
Salvaging Sound Devices
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
font-size: 20px;
|
|
||||||
min-height: 100vh;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<h3>Planning for the next 20 mins</h3>
|
|
||||||
<ul
|
|
||||||
style="
|
|
||||||
margin: 2rem 0;
|
|
||||||
list-style: arabic-indic;
|
|
||||||
list-style-type: "// ";
|
|
||||||
font-size: 80px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<li>Y1</li>
|
|
||||||
<li>Graduation Proposal</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
clear: both;
|
|
||||||
font-size: 24px;
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1fr;
|
|
||||||
min-height: 100svh;
|
|
||||||
margin-left: -10svw;
|
|
||||||
margin-right: -10svw;
|
|
||||||
width: calc(100% + 20svw);
|
|
||||||
align-items: start;
|
|
||||||
grid-gap: 2rem;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div style="position: sticky; top: 12px">
|
|
||||||
<h3>// Year 1 (or pre now)</h3>
|
|
||||||
<p>
|
|
||||||
HTML’ing, Repair’ing (Or break’ing), Sound’ing, Radio’ing,
|
|
||||||
Solder’ing, Workshop’ing, developing the interest in
|
|
||||||
Permacomput’ing, Server’ing
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 50% 50%;
|
|
||||||
grid-auto-columns: min-content;
|
|
||||||
grid-gap: 1rem;
|
|
||||||
font-size: 16px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/thumb/5/59/THHGTAAA_visual_promo.jpg/600px-THHGTAAA_visual_promo.jpg"
|
|
||||||
/>
|
|
||||||
<p>The Hitchhiker's Guide to an Active Archive</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/thumb/4/4b/Screenshot_2024-04-02_at_09.20.12.png/751px-Screenshot_2024-04-02_at_09.20.12.png"
|
|
||||||
/>
|
|
||||||
<p>Finding new ways of programming</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/thumb/8/83/Android_postmarketos.jpeg/270px-Android_postmarketos.jpeg"
|
|
||||||
/>
|
|
||||||
<p>Failing to install postmarketOS</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/thumb/4/4c/GarageCafe_1.jpeg/798px-GarageCafe_1.jpeg?20241217205603"
|
|
||||||
/>
|
|
||||||
<p>Presenting the web comic at Garage Cafe</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/thumb/0/02/Screenshot_2024-12-17_at_21.57.32.png/1600px-Screenshot_2024-12-17_at_21.57.32.png?20241217205746"
|
|
||||||
/>
|
|
||||||
<p>Printer Jam at GPN22</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/thumb/4/43/DIWO_workshop.jpg/441px-DIWO_workshop.jpg"
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
<p>Many!</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/1/13/Workshop_1.jpg?20240402074408"
|
|
||||||
/>
|
|
||||||
<p>Many !Workshops!</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
{{audio|mp3=https://pzwiki.wdka.nl/mw-mediadesign/images/d/d2/Vitrinekast_proposal_workshop_1.mp3|style=width:200px}}
|
|
||||||
<p>Many</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{audio|mp3=https://pzwiki.wdka.nl/mw-mediadesign/images/6/66/Vitrinekast_proposal_workshop_3.mp3|style=width:200px}}
|
|
||||||
<p>Many</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{audio|mp3=https://pzwiki.wdka.nl/mw-mediadesign/images/5/51/Vitrinekast_proposal_workshop_2.mp3|style=width:200px}}
|
|
||||||
<p>Many</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{video|mp4=https://pzwiki.wdka.nl/mw-mediadesign/images/e/ea/Vitrinekast_proposal_project_3.mp4|style=width:250px}}
|
|
||||||
<p>Many</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3 style="font-size: 24px">
|
|
||||||
''DIWO as a powerful method of sharing & exploring''
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
clear: both;
|
|
||||||
font-size: 24px;
|
|
||||||
display: grid;
|
|
||||||
gap: 2rem;
|
|
||||||
grid-template-columns: 3fr 1fr;
|
|
||||||
min-height: 100svh;
|
|
||||||
margin-left: -10svw;
|
|
||||||
margin-right: -10svw;
|
|
||||||
align-items: center;
|
|
||||||
width: calc(100% + 20svw);
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<h3>// Graduation Proposal: Salvaging sound devices</h3>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
In this project, I will research the various ways in which
|
|
||||||
<mark>abandoned media can be repurposed into sound devices</mark>. I
|
|
||||||
consider "abandoned media" to be discarded devices that no longer
|
|
||||||
serve their original intended purpose yet could still function as
|
|
||||||
something else. For instance, a printer that has an “Internal
|
|
||||||
Communication Problem” being repurposed into a percussive
|
|
||||||
instrument. I’ll explore the ideas of
|
|
||||||
<mark>speculative sound circuits</mark>, where playful and absurdist
|
|
||||||
methodologies are applied to create sound using various unlikely
|
|
||||||
technological devices (Richards, 2018)
|
|
||||||
<ref
|
|
||||||
>John Richards. Speculative Sound Circuits. 2018. DOI:
|
|
||||||
10.14236/ewic/EVAC18.33</ref
|
|
||||||
>
|
|
||||||
, and Salvage Computing<ref
|
|
||||||
>‘Salvage computing’ (no date) ''Salvage computing''.
|
|
||||||
https://damaged.bleu255.com/Salvage_Computing/ (Accessed:
|
|
||||||
November 22, 2024).</ref
|
|
||||||
>. This will happen in a
|
|
||||||
<mark>series of DIY/DIWO workshops/hangouts</mark>. The workshops
|
|
||||||
will be hosted at Klankschool
|
|
||||||
<ref
|
|
||||||
>Klankschool is a community operating a space (and a server) in
|
|
||||||
the south of Rotterdam. Its members share a common interest in
|
|
||||||
performances, sound art, improvisation, noise, … Each member is
|
|
||||||
a teacher, student, musician, janitor and more. The motivation
|
|
||||||
to have a community-run space is to share sounds, work on
|
|
||||||
projects, organise events, hang out, exhibit works, learn, teach
|
|
||||||
and listen. See https://klank.school/</ref
|
|
||||||
>, together with Riviera Taylor.</p
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
grid-auto-rows: min-content;
|
|
||||||
grid-gap: 2rem;
|
|
||||||
font-size: 16px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/thumb/f/f4/Applebiteme.jpg/360px-Applebiteme.jpg"
|
|
||||||
/>
|
|
||||||
<p>Apple certified Modifier</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
clear: both;
|
|
||||||
font-size: 24px;
|
|
||||||
display: grid;
|
|
||||||
gap: 2rem;
|
|
||||||
grid-template-columns: 2fr 1fr;
|
|
||||||
min-height: 100svh;
|
|
||||||
margin-left: -10svw;
|
|
||||||
margin-right: -10svw;
|
|
||||||
align-items: center;
|
|
||||||
width: calc(100% + 20svw);
|
|
||||||
align-items: start;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<h3>Workshops</h3>
|
|
||||||
<p>
|
|
||||||
During the hangouts, we will <mark>explore various methods around
|
|
||||||
salvaging components and dismantling devices </mark>, making our own
|
|
||||||
instruments using these materials, live coding hardware through
|
|
||||||
MQTT/OSC servers & applications, and everything in between.
|
|
||||||
Ultimately, they <i>could</i> lead up to a BYOP (Bring Your Own Printer)
|
|
||||||
Orchestra. <mark>The hangouts will be at the Klankschool and involve
|
|
||||||
the Klankschool community</mark>. The hangouts are hosted in collaboration
|
|
||||||
with Riviera Taylor, who’s writing a thesis about Community Server Maintenance, and creating her project
|
|
||||||
around the KlankServer.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We're already having an (un)repair night every thursday, so if
|
|
||||||
you're in the neighberhood, <mark>come by</mark>!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Link to https://unrepair.klank.school/ for a "schedule".
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
grid-auto-rows: min-content;
|
|
||||||
grid-gap: 2rem;
|
|
||||||
font-size: 16px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/1/1d/Omdooreenringlightjetehalen.jpg"
|
|
||||||
/>
|
|
||||||
<p>(Un)Repaired Salvaged Stuff</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/0/0a/Repairnight_1.jpeg"
|
|
||||||
/>
|
|
||||||
<p>Modded Pokemon camera</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
clear: both;
|
|
||||||
font-size: 24px;
|
|
||||||
display: grid;
|
|
||||||
gap: 2rem;
|
|
||||||
grid-template-columns: 2fr 1fr;
|
|
||||||
min-height: 100svh;
|
|
||||||
margin-left: -10svw;
|
|
||||||
margin-right: -10svw;
|
|
||||||
align-items: center;
|
|
||||||
width: calc(100% + 20svw);
|
|
||||||
align-items: start;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<h3>// Field guide</h3>
|
|
||||||
<p>
|
|
||||||
The field guide is an open-ended, pocket sized, compact publication, so the
|
|
||||||
reader (and me) is invited to take the publication outside, further
|
|
||||||
investigate, annotate and experiment with the discarded materials.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
I have set up a documentation tool on the klankserver, which has already been pretty helpful.
|
|
||||||
It is built using markdown/CSV-with-Jinja-to-HTML-to-CTRL+P.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
https://unrepair.klank.school/thesis.html
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
grid-template-rows: 1fr;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
style="width: 100%; height: 100%; object-fit: contain"
|
|
||||||
src="https://pzwiki.wdka.nl/mw-mediadesign/images/5/55/Worm_hitch.jpg?20240402072728"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style="clear: both; font-size: 24px">
|
|
||||||
<div>
|
|
||||||
<h3>BUT...</h3>
|
|
||||||
<ul
|
|
||||||
style="
|
|
||||||
margin: 2rem 0;
|
|
||||||
list-style: arabic-indic;
|
|
||||||
list-style-type: "?_?";
|
|
||||||
font-size: 48px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<li>Electronics is <b>hard</b>: <i>How to make the workshop accessible?</i></li>
|
|
||||||
<li>Salvaging causes a scarcity of materials: <i>Not very workshop friendly?</li>
|
|
||||||
<li><i>Fallback scenario: what if <b>nothing</b>works?</i></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
=== Footnotes ===
|
|
||||||
<references />
|
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: "Chapter 1: Dismantling"
|
title: "Chapter 1: Dismantling"
|
||||||
type: Chapter
|
type: Chapter
|
||||||
|
slug: true
|
||||||
pdf: "/assets/chapters/chapter_1.pdf"
|
pdf: "/assets/chapters/chapter_1.pdf"
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ This process really is about finding small gaps in the enclosures[^black-boxism]
|
|||||||
|
|
||||||
# Overview of dismantled devices
|
# Overview of dismantled devices
|
||||||
|
|
||||||
{{ showGrid devices}}
|
{{ show grid devices}}
|
||||||
|
|
||||||
## Hardware to look out for, or to avoid
|
## Hardware to look out for, or to avoid
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: "Chapter 2: Components"
|
title: "Chapter 2: Components"
|
||||||
type: Chapter
|
type: Chapter
|
||||||
|
slug: true
|
||||||
---
|
---
|
||||||
|
|
||||||
An overview of Resistors, transistors, LED's, capacitors, switches, knobs, speakers, coils, that can be found in the wild.
|
An overview of Resistors, transistors, LED's, capacitors, switches, knobs, speakers, coils, that can be found in the wild.
|
||||||
@ -15,4 +16,4 @@ Of each component, i'll include:
|
|||||||
Will include a subsection for "rare" components. I expect that chips (counters, 555 timers) will be way more difficult to salvage. What are ways to work around these components? Are there any devices to look out for where these components can be salvaged?
|
Will include a subsection for "rare" components. I expect that chips (counters, 555 timers) will be way more difficult to salvage. What are ways to work around these components? Are there any devices to look out for where these components can be salvaged?
|
||||||
|
|
||||||
_I have started to create an inventory of components based on the first found device. The pages in the sidebar are accessible._
|
_I have started to create an inventory of components based on the first found device. The pages in the sidebar are accessible._
|
||||||
{{ showGrid components}}
|
{{ show grid components}}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: "Chapter 3: Recipes for sound devices"
|
title: "Chapter 3: Recipes for sound devices"
|
||||||
type: Chapter
|
type: Chapter
|
||||||
|
slug: true
|
||||||
---
|
---
|
||||||
|
|
||||||
How to ism, waarbij zelfs in het circuit bend boek precies staat gvoorgekouwd wat hje moet doen.
|
How to ism, waarbij zelfs in het circuit bend boek precies staat gvoorgekouwd wat hje moet doen.
|
||||||
|
@ -12,4 +12,3 @@ The Reel to Reel Recorder was found in the trash bin at the Interaction Station.
|
|||||||
|
|
||||||
Since so many parts were already removed, I'm unable to see which brand the device is from. But some of the components have a "Germany" mark.
|
Since so many parts were already removed, I'm unable to see which brand the device is from. But some of the components have a "Germany" mark.
|
||||||
|
|
||||||
![Reel to Reel Recorder](/assets/reel-to-reel-recorder.jpeg)
|
|
||||||
|
@ -1,35 +1,11 @@
|
|||||||
---
|
---
|
||||||
excerpt: A documentation page
|
title: "Let's unrepair together"
|
||||||
title: Index
|
|
||||||
description: This is the description of the about us page
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Dear reader,
|
# Let's unrepair together
|
||||||
|
|
||||||
This web page includes the WIP version of my thesis. Organisation wise, I'm still exploring out file structures, but hopefully it won't be too messy. Ideally, the sidebar wil act as a TOC, allowing you to navigate to the different sections of the thesis. I'm using this same repository to manage documentation for the unrepair page at [https://unrepair.klank.school](https://unrepair.klank.school), so it could be that these collide in some spaces.
|
Hello! Every thursday we're hanging out at Cato, to unrepair together. In januari 2025 we're kickstarting a series of hangouts where we'll dive into topics like server maintainance, salvaging electronic components and making sound devices.
|
||||||
|
|
||||||
The sidebar will also include functionality to export the entire thesis as a PDF, and mediawiki format.
|
Come hang out!
|
||||||
|
|
||||||
### links
|
|
||||||
|
|
||||||
- [The Klankschool Calendar](https://calendar.klank.school/)
|
|
||||||
- [The documentation pages for the unrepair nights](https://unrepair.klank.school)
|
|
||||||
- [Thesis Proposal (XPUB WIKI)](https://pzwiki.wdka.nl/mediadesign/User:Vitrinekast/Thesis_Proposal)
|
|
||||||
- [Project Proposal (XPUB WIKI)](https://pzwiki.wdka.nl/mediadesign/User:Vitrinekast/Proposal)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# All chapters
|
|
||||||
|
|
||||||
[Open page](/chapters/1-dismantling.html)
|
|
||||||
|
|
||||||
{! chapters/1-dismantling.md !}
|
|
||||||
|
|
||||||
[Open page](/chapters/2-component-salvaging.html)
|
|
||||||
|
|
||||||
{! chapters/2-component-salvaging.md !}
|
|
||||||
|
|
||||||
[Open page](/chapters/3-recipes.html)
|
|
||||||
|
|
||||||
{! chapters/3-recipes.md !}
|
|
||||||
|
|
||||||
|
{{ show list events }}
|
35
src/content/thesis.md
Normal file
35
src/content/thesis.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
excerpt: A documentation page
|
||||||
|
title: Index
|
||||||
|
description: This is the description of the about us page
|
||||||
|
---
|
||||||
|
|
||||||
|
Dear reader,
|
||||||
|
|
||||||
|
This web page includes the WIP version of my thesis. Organisation wise, I'm still exploring out file structures, but hopefully it won't be too messy. Ideally, the sidebar wil act as a TOC, allowing you to navigate to the different sections of the thesis. I'm using this same repository to manage documentation for the unrepair page at [https://unrepair.klank.school](https://unrepair.klank.school), so it could be that these collide in some spaces.
|
||||||
|
|
||||||
|
The sidebar will also include functionality to export the entire thesis as a PDF, and mediawiki format.
|
||||||
|
|
||||||
|
### links
|
||||||
|
|
||||||
|
- [The Klankschool Calendar](https://calendar.klank.school/)
|
||||||
|
- [The documentation pages for the unrepair nights](https://unrepair.klank.school)
|
||||||
|
- [Thesis Proposal (XPUB WIKI)](https://pzwiki.wdka.nl/mediadesign/User:Vitrinekast/Thesis_Proposal)
|
||||||
|
- [Project Proposal (XPUB WIKI)](https://pzwiki.wdka.nl/mediadesign/User:Vitrinekast/Proposal)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# All chapters
|
||||||
|
|
||||||
|
[Open page](/chapters/1-dismantling.html)
|
||||||
|
|
||||||
|
{! chapters/1-dismantling.md !}
|
||||||
|
|
||||||
|
[Open page](/chapters/2-component-salvaging.html)
|
||||||
|
|
||||||
|
{! chapters/2-component-salvaging.md !}
|
||||||
|
|
||||||
|
[Open page](/chapters/3-recipes.html)
|
||||||
|
|
||||||
|
{! chapters/3-recipes.md !}
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Let's unrepair together"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Let's unrepair together
|
|
||||||
|
|
||||||
Hello! Every thursday we're hanging out at Cato, to unrepair together. In januari 2025 we're kickstarting a series of hangouts where we'll dive into topics like server maintainance, salvaging electronic components and making sound devices.
|
|
||||||
|
|
||||||
Come hang out!
|
|
@ -77,8 +77,12 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<dialog>
|
||||||
|
<img src="" alt="">
|
||||||
|
<p></p>
|
||||||
|
</dialog>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/assets/app.js"></script>
|
||||||
</html>
|
</html>
|
@ -1,36 +0,0 @@
|
|||||||
{% extends "base.jinja" %}
|
|
||||||
{% from 'snippets/inventory.jinja' import inventory with context %}
|
|
||||||
|
|
||||||
{% block title %}
|
|
||||||
<title>Components | {{ page['title'] }}</title>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<header><p>template: components.jinja</p></header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<h1>{{page['title']}}</h1>
|
|
||||||
<img src="{{ page['image'] }}" alt="">
|
|
||||||
|
|
||||||
{{ page['body'] }}
|
|
||||||
|
|
||||||
<h2>Component inventory</h2>
|
|
||||||
|
|
||||||
{{inventory("type", (page.type.capitalize() | slugify)) }}
|
|
||||||
</article>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block aside %}
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
document.querySelectorAll(".footnote ol li").forEach((li) => {
|
|
||||||
console.log(li.id);
|
|
||||||
const link = document.querySelector(`a[href="#${li.id}"]`);
|
|
||||||
li.setAttribute("count", link.textContent);
|
|
||||||
|
|
||||||
link.parentNode.insertBefore(li, link.nextSibling);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
@ -1,38 +0,0 @@
|
|||||||
{% extends "base.jinja" %}
|
|
||||||
{% from 'snippets/inventory.jinja' import inventory with context %}
|
|
||||||
|
|
||||||
{% block title %}
|
|
||||||
<title>Devices | {{ page['title'] }}</title>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<header><p>template: device.jinja</p></header>
|
|
||||||
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<h1>{{page['title']}}</h1>
|
|
||||||
{{ page['body'] }}
|
|
||||||
|
|
||||||
<h2>Parts salvaged from this device</h2>
|
|
||||||
|
|
||||||
{% if page.title %}
|
|
||||||
{{ inventory("Where", ( page.title.capitalize() | slugify )) }}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
</article>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block aside %}
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
document.querySelectorAll(".footnote ol li").forEach((li) => {
|
|
||||||
console.log(li.id);
|
|
||||||
const link = document.querySelector(`a[href="#${li.id}"]`);
|
|
||||||
li.setAttribute("count", link.textContent);
|
|
||||||
|
|
||||||
link.parentNode.insertBefore(li, link.nextSibling);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
@ -1,37 +1,36 @@
|
|||||||
{% extends "base.jinja" %} {% block content %}
|
{% extends "base.jinja" %}
|
||||||
<header><p>template: post.jinja</p>
|
{% from 'snippets/inventory.jinja' import inventory with context %}
|
||||||
<input type="checkbox" checked id="show-notes"><label for="show-notes">Show notes</label></header>
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<p>template: post.jinja</p>
|
||||||
|
|
||||||
|
<h5>{{page.folder}}</h5>
|
||||||
|
<h1>{{page['title']}}</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<h1>{{page['title']}}</h1>
|
|
||||||
|
{% if page['image'] %}
|
||||||
|
<img src="{{ page['image'] }}" alt="" />
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if page.pdf %}
|
{% if page.pdf %}
|
||||||
<p class='no-print'>
|
<p class="no-print">
|
||||||
<i>Download this chapter as a <a href="{{ page.pdf }}">PDF</a></i>
|
<i>Download this chapter as a <a href="{{ page.pdf }}">PDF</a></i>
|
||||||
</p>
|
</p>
|
||||||
{% endif %} {{ page['body'] | shortcode }}
|
{% endif %}
|
||||||
|
|
||||||
|
{{ page['body'] | shortcode }}
|
||||||
|
|
||||||
|
{% if page.folder == "devices" %}
|
||||||
|
{{ inventory("Where", ( page.title.capitalize() | slugify )) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.folder == "components" %}
|
||||||
|
{{inventory("type", (page.type.capitalize() | slugify)) }}
|
||||||
|
{% endif %}
|
||||||
</article>
|
</article>
|
||||||
{% endblock %}
|
{% endblock %} {% block aside %} {% endblock %}
|
||||||
|
|
||||||
{% block aside %}
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
document.querySelectorAll(".footnote ol li").forEach((li) => {
|
|
||||||
const link = document.querySelector(`sup a:not(.footnote a):not(sup sup a)[href="#${li.id}"]`);
|
|
||||||
|
|
||||||
if(link) {
|
|
||||||
console.log("moving around", link)
|
|
||||||
li.setAttribute("count", link.textContent);
|
|
||||||
link.parentNode.insertBefore(li, link.nextSibling);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
console.log("couldnt find it for ", li)
|
|
||||||
const nestedLink = document.querySelector(`a[href="#${li.id}"]`);
|
|
||||||
li.setAttribute("count", nestedLink.textContent);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
37
src/templates/snippets/list-documents.jinja
Normal file
37
src/templates/snippets/list-documents.jinja
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<h2>Layout is {{layout}}</h2>
|
||||||
|
<h2>Name is {{type}}</h2>
|
||||||
|
|
||||||
|
{% if documents[type]|length > 0 %}
|
||||||
|
<ul class='list--{{ layout }}'>
|
||||||
|
|
||||||
|
{% for item in documents[type]|sort(attribute="filename") %}
|
||||||
|
|
||||||
|
|
||||||
|
<li class="list__item">
|
||||||
|
{% if layout == "list" %}
|
||||||
|
|
||||||
|
<span class="date">{{ item['date'] }} </span>
|
||||||
|
<b>{{ item['title'] }}</b>
|
||||||
|
{% if item.host != "Cafe" %}
|
||||||
|
<span class="host">{{item.host}}</span>
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
<a href="/{{ type }}/{{ item['slug'] }}.html">
|
||||||
|
{% if item['image'] %}
|
||||||
|
<img src="{{ item['image'] }}" class="m-0" alt="" />
|
||||||
|
{% endif %}
|
||||||
|
<h5 class="m-0" >{{ item['title'] }}</h5>
|
||||||
|
{% if item['excerpt'] %}
|
||||||
|
<p>{{ item['excerpt'] }}</p>
|
||||||
|
{% endif %}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
@ -1,19 +0,0 @@
|
|||||||
{% macro render_grid(name) -%} {% if documents[name]|length > 0 %}
|
|
||||||
<ul class="grid">
|
|
||||||
{% for item in documents[name] %}
|
|
||||||
<li class="grid__item">
|
|
||||||
<a href="/{{ name }}/{{ item['slug'] }}.html">
|
|
||||||
{% if item['image'] %}
|
|
||||||
<img src="{{ item['image'] }}" class="m-0" alt="" />
|
|
||||||
{% endif %}
|
|
||||||
<h5 class="m-0" >{{ item['title'] }}</h5></a
|
|
||||||
{% if item['excerpt'] %}
|
|
||||||
<p>{{ item['excerpt'] }}</p>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endif %} {%- endmacro %}
|
|
||||||
|
|
||||||
<p>{{ render_grid(type) }}</p>
|
|
@ -1,17 +0,0 @@
|
|||||||
{% macro render_list(name) -%}
|
|
||||||
{% if documents[name]|length > 0 %}
|
|
||||||
<h2>{{ name }}</h2>
|
|
||||||
<ul>
|
|
||||||
{% for item in documents[name] %}
|
|
||||||
<li>
|
|
||||||
<a href="/{{ name }}/{{ item['slug'] }}.html">{{ item['title'] }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
{%- endmacro %}
|
|
||||||
<p>{{ render_list(type) }}</p>
|
|
||||||
<h2>{{type}}</h2>
|
|
||||||
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
|||||||
{% extends "base.jinja" %}
|
|
||||||
|
|
||||||
{% block title %}
|
|
||||||
<title>Let's unrepair together</title>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<header><p>template: unrepair.jinja</p></header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<h1>{{page['title']}}</h1>
|
|
||||||
{{ page['body'] | shortcode}}
|
|
||||||
|
|
||||||
{% if documents['events']|length > 0 %}
|
|
||||||
<h2>{{ name }}</h2>
|
|
||||||
<ul class='list--events'>
|
|
||||||
{% for item in documents['events']|sort(attribute="filename") %}
|
|
||||||
<li {% if item.host == "Cafe" %}class="cafe"{% endif %}>
|
|
||||||
<span class="date">{{ item['date'] }} </span>
|
|
||||||
|
|
||||||
<b>{{ item['title'] }}</b>
|
|
||||||
{% if item.host != "Cafe" %}
|
|
||||||
<span class="host">{{item.host}}</span>
|
|
||||||
{% endif %}
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
</article>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block aside %}
|
|
||||||
|
|
||||||
<aside>
|
|
||||||
<h1>Let's (un)repair together</h1>
|
|
||||||
<a href="/index.html">index</a>
|
|
||||||
|
|
||||||
{% macro render_list(name) -%}
|
|
||||||
{% if documents[name]|length > 0 %}
|
|
||||||
<h2>{{ name |capitalize }}</h2>
|
|
||||||
<ul>
|
|
||||||
{% for item in documents[name] %}
|
|
||||||
<li>
|
|
||||||
<a href="/{{ name }}/{{ item['slug'] }}.html">{{ item['title'] }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
{%- endmacro %}
|
|
||||||
|
|
||||||
<p>{{ render_list('repair-logs') }}</p>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% block footer %}
|
|
||||||
<p>Find the code on Klankservers <a target="_blank" href="https://code.klank.school/vitrinekast/klank-docs">Git!</a>.</p>
|
|
||||||
{% endblock %}
|
|
||||||
</aside>
|
|
||||||
{% endblock %}
|
|
Loading…
Reference in New Issue
Block a user