173 lines
6.2 KiB
HTML
173 lines
6.2 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<title>Infokiosque LOL</title>
|
||
|
||
<link rel="stylesheet" href="/_src/styles/global.css" />
|
||
|
||
</head>
|
||
<body vocab="http://schema.org/" typeof="Website" resource="." class="home">
|
||
|
||
<img src="/_src/img/logo_kiosque.svg" alt="Logo du site" />
|
||
|
||
<h1 property="name">Infokiosque du LOL <small>Brochures et autres textes</small></h1>
|
||
|
||
<nav>
|
||
<ul>
|
||
<li><a href="https://labolyon.fr">Labolyon.fr</a></li>
|
||
<li><a href="https://wiki.labolyon.fr/doku.php?id=infokiosque">Wiki</a></li>
|
||
</ul>
|
||
</nav>
|
||
|
||
<section id="publications"
|
||
property="hasPart"
|
||
typeof="Collection"
|
||
resource="#publications" >
|
||
|
||
<h2 property="name">Textes à emporter</h2>
|
||
|
||
<p property="description">Ces textes sont disponibles au LOL et emportables a prix libres. Vous pouvez aussi en telecharger le contenu librement et le redistribuer comme vous le voulez.</p>
|
||
|
||
<ul>
|
||
<li><a property="hasPart" href="publications/2023-02-02-datafoire-steakernet-sympa/">
|
||
Datafoire, sneakernet sympa <small>du outdoor computer club</small>
|
||
</a></li>
|
||
<li><a property="hasPart" href="publications/2023-01-03-detruire-le-capitalisme-de-surveillance/">
|
||
Détruire le capitalisme de surveillance <small>par Cory Doctorow</small>
|
||
</a></li>
|
||
<li><a property="hasPart" href="publications/2023-01-01-une-critique-a-la-va-vite-de-la-pensee-primitiviste-et-anticiv/">
|
||
Une critique à la va-vite de la pensée primitiviste et anticiv</small>
|
||
</a></li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section id="empruntables"
|
||
property="hasPart"
|
||
typeof="Collection"
|
||
resource="#empruntables" >
|
||
|
||
<h2 property="name">Textes à lire sur place</h2>
|
||
|
||
<p property="description">Ces textes sont à lire sur place ou empruntable dans la bibliotheque du LOL.</p>
|
||
|
||
<ul>
|
||
|
||
<li><a property="hasPart" href="empruntables/a-bout-de-flux/">
|
||
À bout de flux <small>de Fanny Lopez</small>
|
||
</a></li>
|
||
|
||
<li><a href="empruntables/angles-mort-du-numerique-ubiquitaire/">
|
||
Angles morts du numérique ubiquitaire <small>de Yves Citton, Marie Lechner et Masure Anthony</small>
|
||
</a></li>
|
||
|
||
<li><a href="empruntables/en-toute-puissance/">
|
||
En toute puissance, manuel d’autodétermination radicale <small>de Viciss Hackso</small>
|
||
</a></li>
|
||
|
||
<li><a href="empruntables/hacker-protesters/">
|
||
Hacker Protester : guide pratique des outils de lutte citoyenne <small>de Geoffrey Dorne</small>
|
||
</a></li>
|
||
|
||
<li><a href="empruntables/le-mythe-de-l-entrepreneur/">
|
||
Le mythe de l'entrepruneur <small>de Anthony Galluzzo</small>
|
||
</a></li>
|
||
|
||
<li><a href="empruntables/guide-d-autodéfense-numerique/">
|
||
Guide d’Autodéfense Numérique, <small>Edition Tahin Party</small>
|
||
</a></li>
|
||
|
||
<li><a href="empruntables/race-after-technology/">
|
||
Race after technology <small>de Ruha Benjamin</small>
|
||
</a></li>
|
||
|
||
</ul>
|
||
</section>
|
||
|
||
<template id="publication-card-tmplt">
|
||
<article class="publication-card">
|
||
<img property="image" src="" alt="Couverture" />
|
||
<h1 property="name"></h1>
|
||
<div class="meta">
|
||
<span>Par <span property="author"></span></span>
|
||
</div>
|
||
<p property="abstract"></p>
|
||
<nav>
|
||
<a href="" property="url">Plus d'infos <i>🠺</i></a>
|
||
</nav>
|
||
</article>
|
||
</template>
|
||
|
||
<script type="module">
|
||
import {fetchDocumentData, takeFirst, takeUrl} from "/_src/js/utils/data.js"
|
||
|
||
initBookList(document.getElementById("publications"))
|
||
initBookList(document.getElementById("empruntables"))
|
||
|
||
async function initBookList(listElement) {
|
||
for(let it of listElement.querySelectorAll("ul > li a[href]")) {
|
||
let data = null;
|
||
|
||
try {
|
||
data = await fetchDocumentData(it.href)
|
||
} catch(e) {
|
||
continue;
|
||
}
|
||
|
||
let card = null;
|
||
try {
|
||
card = makePublicationCard(data)
|
||
} catch(e) {
|
||
continue;
|
||
}
|
||
|
||
it.innerHTML = ""
|
||
it.append(card)
|
||
}
|
||
}
|
||
|
||
function makePublicationCard(data){
|
||
let template = document.getElementById("publication-card-tmplt").content.cloneNode(true);
|
||
|
||
let root = template.children[0]
|
||
root.setAttribute("resource", takeFirst(data["@id"]))
|
||
root.setAttribute("typeof", takeFirst(data["@type"]))
|
||
|
||
let name = takeFirst(data.name)
|
||
if(name){
|
||
template.querySelector('[property="name"]').textContent = name
|
||
} else {
|
||
throw new Error("Provided data doesn't have a \"name\" field");
|
||
}
|
||
|
||
let author = takeFirst(data.author)
|
||
if(author){
|
||
template.querySelector('[property="author"]').textContent = author
|
||
} else {
|
||
template.querySelector('[property="author"]').parentElement.remove()
|
||
}
|
||
|
||
let abstract = takeFirst(data.abstract)
|
||
if(abstract){
|
||
template.querySelector('[property="abstract"]').textContent = abstract
|
||
} else {
|
||
template.querySelector('[property="abstract"]').remove()
|
||
}
|
||
|
||
let image = takeUrl(data.image)
|
||
if(image){
|
||
template.querySelector('[property="image"]').src = image
|
||
} else {
|
||
template.querySelector('[property="image"]').remove()
|
||
}
|
||
|
||
let url = takeUrl(data.url)
|
||
template.querySelector('[property="url"]').href = url || takeUrl(data)
|
||
|
||
return template
|
||
}
|
||
</script>
|
||
</body>
|
||
</html> |