include a chapter

This commit is contained in:
vitrinekast 2025-01-07 11:21:48 +01:00
parent b27167a4a4
commit 59150d93b0
21 changed files with 238 additions and 622 deletions

38
app.py
View File

@ -25,15 +25,11 @@ OUTPUT_D = "dist"
documents = {}
def showlist(param):
template = env.select_template(["snippets/show-list.jinja"])
html = template.render(documents=documents, type=param.strip())
def showSnippet(params):
param = params.split(" ")
return html
def showGrid(param):
template = env.select_template(["snippets/show-grid.jinja"])
html = template.render(documents=documents, type=param.strip())
template = env.select_template([f"snippets/list-documents.jinja"])
html = template.render(documents=documents, layout=param[0], type=param[1])
return html
@ -45,11 +41,9 @@ def slugify_filter(value):
def shortcode_filter(value):
shortcode_callbacks = {
"showlist": showlist,
"showGrid": showGrid
"show": showSnippet
}
def shortcode_replacer(match):
shortcode_name = match.group(1).strip()
param = match.group(2).strip()
@ -62,9 +56,11 @@ def shortcode_filter(value):
pattern = re.compile(r"{{\s*(\w+)\s+([^{}]+?)\s*}}")
return pattern.sub(shortcode_replacer, value)
env.filters["shortcode"] = shortcode_filter
env.filters["slugify"] = slugify_filter
def render_single_file(template, page, path, dist):
html = template.render(documents=documents, page=page)
name = Path(path).stem
@ -82,8 +78,14 @@ def get_page_data(path):
page = frontmatter.load(path)
page['slug'] = slugify(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
@ -131,7 +133,16 @@ def get_inventory():
with open("src/content/component-inventory.csv") as f:
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)
@ -155,4 +166,5 @@ def main():
copy_assets()
main()

42
src/assets/app.js Normal file
View 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);
})

View File

@ -34,7 +34,7 @@ aside {
padding: 1rem 1rem 1rem 0;
}
article {
article, header {
max-width: var(--article-w);
margin: 0 auto;
flex-direction: column;
@ -51,7 +51,7 @@ sup li:before,
color: var(--accent);
}
ul.grid {
.list--grid {
display: grid;
list-style: none;
padding: 0 0;
@ -60,7 +60,7 @@ ul.grid {
}
@media screen {
ul.grid {
.list--grid {
width: 100vw;
margin-left: calc(-50vw + (var(--article-w) / 2));
padding-left: 2rem;
@ -71,29 +71,30 @@ ul.grid {
img {
max-width: 100%;
width: 100%;
cursor: hover;
}
li.grid__item {
.list--grid .list__item {
border: 2px solid #989177;
border-top-color: transparent;
border-right-color: transparent;
padding: 24px;
}
li.grid__item:nth-of-type(4n),
li.grid__item:last-child {
.list--grid .list__item:nth-of-type(4n),
.list--grid .list__item:last-child {
border-right-color: #989177;
}
li.grid__item:nth-of-type(1),
li.grid__item:nth-of-type(2),
li.grid__item:nth-of-type(3),
li.grid__item:nth-of-type(4) {
.list--grid .list__item:nth-of-type(1),
.list--grid .list__item:nth-of-type(2),
.list--grid .list__item:nth-of-type(3),
.list--grid .list__item:nth-of-type(4) {
border-top-color: #989177;
}
article h1,
article h2 {
article h2, article img {
clear: both;
}
@ -138,3 +139,32 @@ article h2 {
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;
}

View File

@ -19,13 +19,13 @@ body {
color: var(--text);
}
.list--events {
.list--list {
list-style: none;
padding: 0 0;
font-family: monospace;
}
.list--events li {
.list--list .list__item {
border: 2px solid var(--text);
padding: 12px;
margin-bottom: 12px;
@ -34,7 +34,7 @@ body {
align-items: center;
}
.list--events .host {
.list--list .host {
margin-left: auto;
background: var(--background);
padding: 4px;

View File

@ -49,8 +49,14 @@ article h4 {
article img {
max-width: 90ch;
margin-left: var(--img-offset);
margin-right: var(--img-offset);
margin-top: 2ch;
margin-bottom: 2ch;
width: calc(100% + (var(--img-offset) * -2));
}
ul img {
--img-offset: 0px;
}
article img::after {

View File

@ -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: &quot;// &quot;;
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>
HTMLing, Repairing (Or breaking), Sounding, Radioing,
Soldering, Workshoping, developing the interest in
Permacomputing, Servering
</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. Ill 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, whos 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: &quot;?_?&quot;;
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 />

View File

@ -1,6 +1,7 @@
---
title: "Chapter 1: Dismantling"
type: Chapter
slug: true
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
{{ showGrid devices}}
{{ show grid devices}}
## Hardware to look out for, or to avoid

View File

@ -1,6 +1,7 @@
---
title: "Chapter 2: Components"
type: Chapter
slug: true
---
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?
_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}}

View File

@ -1,6 +1,7 @@
---
title: "Chapter 3: Recipes for sound devices"
type: Chapter
slug: true
---
How to ism, waarbij zelfs in het circuit bend boek precies staat gvoorgekouwd wat hje moet doen.

View File

@ -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.
![Reel to Reel Recorder](/assets/reel-to-reel-recorder.jpeg)

View File

@ -1,35 +1,11 @@
---
excerpt: A documentation page
title: Index
description: This is the description of the about us page
title: "Let's unrepair together"
---
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.
### 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 !}
Come hang out!
{{ show list events }}

35
src/content/thesis.md Normal file
View 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 !}

View File

@ -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!

View File

@ -77,8 +77,12 @@
{% endblock %}
</main>
<dialog>
<img src="" alt="">
<p></p>
</dialog>
</body>
<script type="text/javascript" src="/assets/app.js"></script>
</html>

View File

@ -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 %}

View File

@ -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 %}

View File

@ -1,37 +1,36 @@
{% extends "base.jinja" %} {% block content %}
<header><p>template: post.jinja</p>
<input type="checkbox" checked id="show-notes"><label for="show-notes">Show notes</label></header>
{% extends "base.jinja" %}
{% from 'snippets/inventory.jinja' import inventory with context %}
{% block content %}
<header>
<p>template: post.jinja</p>
<h5>{{page.folder}}</h5>
<h1>{{page['title']}}</h1>
</header>
<article>
<h1>{{page['title']}}</h1>
{% if page['image'] %}
<img src="{{ page['image'] }}" alt="" />
{% endif %}
{% if page.pdf %}
<p class='no-print'>
<p class="no-print">
<i>Download this chapter as a <a href="{{ page.pdf }}">PDF</a></i>
</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>
{% 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 %}
{% endblock %} {% block aside %} {% endblock %}

View 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 %}

View File

@ -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>

View File

@ -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>

View File

@ -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 %}