1s

Un dépôt pour générer le site de canine - retour accueil

git clone git://bebou.netlib.re/1s

Log | Files | Refs | README |

commit 58040e4f0e5fda6a36a9090e70ebc3abaf962c63
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Sun, 11 May 2025 20:17:46 +0200

Le début

Un assemblage de scripts
Faudrait être un peu malin pour traiter les vidéos et générer les pages
que lorsqu'elles sont nouvelles

Diffstat:
A.gitignore | 4++++
AREADME | 6++++++
Aall.sh | 35+++++++++++++++++++++++++++++++++++
Agencal | 11+++++++++++
Agendays | 29+++++++++++++++++++++++++++++
Agenindex | 42++++++++++++++++++++++++++++++++++++++++++
Agenm | 45+++++++++++++++++++++++++++++++++++++++++++++
Ageny | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
Astyle.css | 534+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9 files changed, 760 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -0,0 +1,4 @@ +.*.sw? +cal +public + diff --git a/README b/README @@ -0,0 +1,6 @@ +Dépôt pour faire le site de canine + +On va tenter sans catium parce que : + + * Pas besoin de traducteur + * Tout ou presque est autogénéré diff --git a/all.sh b/all.sh @@ -0,0 +1,35 @@ +#! /bin/sh + +cp style.css public/style.css + +# On sépare toutes les secondes +# et on place les montages +for year in $(seq 2018 2024);do + mkdir -p public/$year + cp videos/$year.mp4 public/$year/$year.mp4 + ffmpeg -i "videos/$year.mp4" \ + -c:v libx264 \ + -r 24 \ + -x264opts keyint=24:min-keyint=24 \ + -crf 10 \ + -segment_time 00:01 -reset_timestamps 1 \ + -f segment public/$year/%03d.mp4 +done + +# On déplace les vidéos secondes dans les bons dossiers +# et on les renomme +< cal awk '{ printf "mkdir -p public%s\n",$6 + printf "mv public/%s/%s.mp4 public%s\n",$3,$2,$7 }' | sh + +# On fait l'index +./genindex > public/index.html + +# On génère les pages de jours +< cal awk '{ printf "./gendays %s %s %s %s %s %s > public%s/index.html\n",$3,$4,$5,$1,$8,$7,$6}' | sh + +# On génère les pages de mois +< cal awk '{ printf "./genm %s %s %s > public/%s/%s/index.html\n",$3,$4,$8,$3,$4}' | uniq | sh + +# On génère les pages d'années +< cal awk '{ printf "./geny %s > public/%s/index.html\n",$3,$3}' | uniq | sh + diff --git a/gencal b/gencal @@ -0,0 +1,11 @@ +# /bin/sh + +v=$(find videos/* | xargs -I@ basename @ .mp4) +start=$(echo "$v" | sed -n '1 p') +end=$(( $(echo "$v" | sed -n '$ p') + 1)) + +for i in $(seq 0 50000);do + d=$(date --date="$start-01-01 +$i day" +"%A %j %Y %m %d /%Y/%m/%d /%Y/%m/%d/%Y-%m-%d.mp4 %B") + echo "$d" | grep -q "$end" && break || echo "$d" +done + diff --git a/gendays b/gendays @@ -0,0 +1,29 @@ +#! /bin/sh + +<<@@ cat +<!DOCTYPE html> +<html> +<head> + <title>$3/$2/$1</title> + <link rel=stylesheet href=/style.css /> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1.0"> + <meta name="generator" content="catium" /> +</head> +<header> + <h1>$4 $3 $5 $1</h1> +</header> +<body> + <nav> + <p><a href="/">Accueil</a></p> + <p>Année : <a href="/$1">$1</a></p> + <p>Mois : <a href="/$1/$2">$2</a></p> + </nav> + <main> + <video controls> + <source src="$6"> + </video> + </main> +</body> +</html> +@@ diff --git a/genindex b/genindex @@ -0,0 +1,42 @@ +#! /bin/sh + +<<@@ cat +<!DOCTYPE html> +<html> +<head> + <title>Canine</title> + <link rel=stylesheet href=/style.css /> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1.0"> + <meta name="generator" content="catium" /> +</head> +<header> + <h1>Canine</h1> +</header> +<body> + <nav> + <p>Années :</p> + <ol> +@@ + +< cal awk '{print $3}' | sort -u | sed 'p' | xargs printf "<li><a href=/%s>%s</a>\n" + +<<@@ cat + </ol> + </nav> + <main> +@@ + +< cal awk '{print $3}' | sort -u | sed 'p;p;p' | xargs printf ' +<p><a href=/%s>Année %s</a></p> +<video controls preload="none"> + <source src="/%s/%s.mp4"> +</video> +' + +<<@@ cat + </main> +</body> +</html> +@@ + diff --git a/genm b/genm @@ -0,0 +1,45 @@ +#! /bin/sh + +<<@@ cat +<!DOCTYPE html> +<html> +<head> + <title>$2/$1</title> + <link rel=stylesheet href=/style.css /> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1.0"> + <meta name="generator" content="catium" /> +</head> +<header> + <h1>$3 $1</h1> +</header> +<body> + <nav> + <p><a href="/">Accueil</a></p> + <p>Année : <a href="/$1">$1</a></p> + <p>Jours :</p> + <ol> +@@ + +< cal grep "$1/$2" | + awk '{print $5}' | sed 'p' | + xargs printf "<li><a href='/$1/$2/%s'>%s</a></li>\n" + +<<@@ cat + </ol> + </nav> + <main> +@@ + +< cal grep "$1/$2" | awk '{print $6,$1,$5,$8,$3,$7}' | xargs printf ' +<p><a href=%s>%s %s %s %s</a></p> +<video controls loop preload="none"> + <source src="%s"> +</video> +' + +<<@@ cat + </main> +</body> +</html> +@@ diff --git a/geny b/geny @@ -0,0 +1,54 @@ +#! /bin/sh + +<<@@ cat +<!DOCTYPE html> +<html> +<head> + <title>$1</title> + <link rel=stylesheet href=/style.css /> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1.0"> + <meta name="generator" content="catium" /> +</head> +<header> + <h1>$1</h1> +</header> +<body> + <nav> + <p><a href="/">Accueil</a></p> + <p>Mois :</p> + <ol> + <li><a href="/$1/01">01</a></li> + <li><a href="/$1/02">02</a></li> + <li><a href="/$1/03">03</a></li> + <li><a href="/$1/04">04</a></li> + <li><a href="/$1/05">05</a></li> + <li><a href="/$1/06">06</a></li> + <li><a href="/$1/07">07</a></li> + <li><a href="/$1/08">08</a></li> + <li><a href="/$1/09">09</a></li> + <li><a href="/$1/10">10</a></li> + <li><a href="/$1/11">11</a></li> + <li><a href="/$1/12">12</a></li> + </ol> + </nav> + <main> + <hr> + <p>Vidéo de l'année</p> + <video controls loop preload="none"> + <source src="/$1/$1.mp4"> + </video> + <hr> +@@ +< cal grep "$1" | awk '{print $6,$1,$5,$8,$3,$7}' | xargs printf ' +<p><a href=%s>%s %s %s %s</a></p> +<video controls loop preload="none"> + <source src="%s"> +</video> +' +<<@@ cat + </main> +</body> +</html> +@@ + diff --git a/style.css b/style.css @@ -0,0 +1,534 @@ +/* Global variables. */ +:root, +::backdrop { + /* Set sans-serif & mono fonts */ + --sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir, + "Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica, + "Helvetica Neue", sans-serif; + --mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + --standard-border-radius: 5px; + + /* Default (light) theme */ + --bg: #fff; + --accent-bg: #f5f7ff; + --text: #212121; + --text-light: #585858; + --border: #898EA4; + --accent: #0d47a1; + --accent-hover: #1266e2; + --accent-text: var(--bg); + --code: #d81b60; + --preformatted: #444; + --marked: #ffdd33; + --disabled: #efefef; +} + +/* Dark theme */ +@media (prefers-color-scheme: dark) { + :root, + ::backdrop { + color-scheme: dark; + --bg: #212121; + --accent-bg: #2b2b2b; + --text: #dcdcdc; + --text-light: #ababab; + --accent: #ffb300; + --accent-hover: #ffe099; + --accent-text: var(--bg); + --code: #f06292; + --preformatted: #ccc; + --disabled: #111; + } + /* Add a bit of transparency so light media isn't so glaring in dark mode */ + img, + video { + opacity: 0.8; + } +} + +/* Reset box-sizing */ +*, *::before, *::after { + box-sizing: border-box; +} + +html { + /* Set the font globally */ + font-family: var(--sans-font); + scroll-behavior: smooth; +} + +/* Make the body a nice central block */ +body { + color: var(--text); + background-color: var(--bg); + font-size: 1.10rem; + line-height: 1.5; + display: grid; + grid-template-columns: 1fr min(50rem, 90%) 1fr; + margin: 0; +} + +body > * { + grid-column: 2; +} + +/* Make the header bg full width, but the content inline with body */ +body > header { + background-color: var(--accent-bg); + border-bottom: 1px solid var(--border); + text-align: center; + /*padding: 0 0.5rem 2rem 0.5rem;*/ + grid-column: 1 / -1; +} + +body > header > *:only-child { + /*margin-block-start: 2rem;*/ +} + +body > header h1 { + max-width: 1200px; + margin: 1rem auto; +} + +body > header p { + max-width: 40rem; + margin: 1rem auto; +} + +/* Add a little padding to ensure spacing is correct between content and header > nav */ +main { + padding-top: 1.5rem; +} + +footer { + margin-top: 4rem; + padding: 2rem 1rem 1.5rem 1rem; + color: var(--text-light); + font-size: 0.9rem; + text-align: center; + border-top: 1px solid var(--border); +} + +/* Format headers */ +h1 { + font-size: 3rem; +} + +h2 { + font-size: 2.6rem; + margin-top: 3rem; +} + +h3 { + font-size: 2rem; + margin-top: 3rem; +} + +h4 { + font-size: 1.44rem; +} + +h5 { + font-size: 1.15rem; +} + +h6 { + font-size: 0.96rem; +} + +p { + margin: 1.5rem 0; +} + +/* Prevent long strings from overflowing container */ +p, h1, h2, h3, h4, h5, h6 { + overflow-wrap: break-word; +} + +/* Fix line height when title wraps */ +h1, +h2, +h3 { + line-height: 1.1; +} + +/* Reduce header size on mobile */ +@media only screen and (max-width: 720px) { + h1 { + font-size: 2.5rem; + } + + h2 { + font-size: 2.1rem; + } + + h3 { + font-size: 1.75rem; + } + + h4 { + font-size: 1.25rem; + } +} + +/* Format links & buttons */ +a, +a:visited { + color: var(--accent); +} + +a:hover { + text-decoration: none; +} + +/* Set the cursor to '?' on an abbreviation and style the abbreviation to show that there is more information underneath */ +abbr[title] { + cursor: help; + text-decoration-line: underline; + text-decoration-style: dotted; +} + +/* Format navigation */ +header > nav { + font-size: 1.2rem; + line-height: 2; + /*padding: 1rem 0 0 0;*/ +} + +/* Use flexbox to allow items to wrap, as needed */ +header > nav ul, +header > nav ol { + align-content: space-around; + align-items: center; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + list-style-type: none; + margin: 0; + padding: 0; +} + +/* List items are inline elements, make them behave more like blocks */ +header > nav ul li, +header > nav ol li { + display: inline-block; +} + +header > nav a, +header > nav a:visited { + /*margin: 0 0.5rem 1rem 0.5rem;*/ + /*border-left: 1px solid var(--border); + border-right: 1px solid var(--border);*/ + /*border-radius: var(--standard-border-radius);*/ + color: var(--text); + display: inline-block; + padding: 0.7rem 2.5rem; + text-decoration: none; +} + +header > nav a:hover, +header > nav a.current, +header > nav a[aria-current="page"] { + /*border-color: var(--accent);*/ + color: var(--accent); + cursor: pointer; +} + +/* Reduce nav side on mobile */ +@media only screen and (max-width: 720px) { + header > nav a { + border: none; + padding: 0; + text-decoration: underline; + line-height: 1; + } +} + +/* Consolidate box styling */ +aside, details, pre, progress { + background-color: var(--accent-bg); + border: 1px solid var(--border); + border-radius: var(--standard-border-radius); + margin-bottom: 1rem; +} + +aside { + font-size: 1rem; + width: 30%; + padding: 0 15px; + margin-inline-start: 15px; + float: right; +} +*[dir="rtl"] aside { + float: left; +} + +/* Make aside full-width on mobile */ +@media only screen and (max-width: 720px) { + aside { + width: 100%; + float: none; + margin-inline-start: 0; + } +} + +article, fieldset, dialog { + border: 1px solid var(--border); + padding: 1rem; + border-radius: var(--standard-border-radius); + margin-bottom: 1rem; +} + +article h2:first-child, +section h2:first-child { + margin-top: 1rem; +} + +section { + border-top: 1px solid var(--border); + border-bottom: 1px solid var(--border); + padding: 2rem 1rem; + margin: 3rem 0; +} + +/* Don't double separators when chaining sections */ +section + section, +sectionmd:first-child { + border-top: 0; + padding-top: 0; +} + +section:last-child { + border-bottom: 0; + padding-bottom: 0; +} + +details { + padding: 0.7rem 1rem; +} + +summary { + cursor: pointer; + font-weight: bold; + padding: 0.7rem 1rem; + margin: -0.7rem -1rem; + word-break: break-all; +} + +details[open] > summary + * { + margin-top: 0; +} + +details[open] > summary { + margin-bottom: 0.5rem; +} + +details[open] > :last-child { + margin-bottom: 0; +} + +/* Format tables */ +table { + border-collapse: collapse; + margin: 1.5rem 0; +} + +figure > table { + width: max-content; +} + +td, +th { + border: 1px solid var(--border); + text-align: start; + padding: 0.5rem; +} + +th { + background-color: var(--accent-bg); + font-weight: bold; +} + +tr:nth-child(even) { + /* Set every other cell slightly darker. Improves readability. */ + background-color: var(--accent-bg); +} + +table caption { + font-weight: bold; + margin-bottom: 0.5rem; +} + +/* Misc body elements */ +hr { + border: none; + height: 1px; + background: var(--border); + margin: 1rem auto; +} + +mark { + padding: 2px 5px; + border-radius: var(--standard-border-radius); + background-color: var(--marked); + color: black; +} + +mark a { + color: #0d47a1; +} + +img, +video { + max-width: 100%; + height: auto; + border-radius: var(--standard-border-radius); +} + +figure { + margin: 0; + display: block; + overflow-x: auto; +} + +figure > img, +figure > picture > img { + display: block; + margin-inline: auto; +} + +figcaption { + text-align: center; + font-size: 0.9rem; + color: var(--text-light); + margin-block: 1rem; +} + +blockquote { + margin-inline-start: 2rem; + margin-inline-end: 0; + margin-block: 2rem; + padding: 0.4rem 0.8rem; + border-inline-start: 0.35rem solid var(--accent); + color: var(--text-light); + font-style: italic; +} + +cite { + font-size: 0.9rem; + color: var(--text-light); + font-style: normal; +} + +dt { + color: var(--text-light); +} + +/* Use mono font for code elements */ +code, +pre, +pre span, +kbd, +samp { + font-family: var(--mono-font); + color: var(--code); +} + +kbd { + color: var(--preformatted); + border: 1px solid var(--preformatted); + border-bottom: 3px solid var(--preformatted); + border-radius: var(--standard-border-radius); + padding: 0.1rem 0.4rem; +} + +pre { + padding: 1rem 1.4rem; + max-width: 100%; + overflow: auto; + color: var(--preformatted); +} + +/* Fix embedded code within pre */ +pre code { + color: var(--preformatted); + background: none; + margin: 0; + padding: 0; +} + +dialog { + max-width: 40rem; + margin: auto; +} + +dialog::backdrop { + background-color: var(--bg); + opacity: 0.8; +} + +@media only screen and (max-width: 720px) { + dialog { + max-width: 100%; + margin: auto 1em; + } +} + +/* Superscript & Subscript */ +/* Prevent scripts from affecting line-height. */ +sup, sub { + vertical-align: baseline; + position: relative; +} + +sup { + top: -0.4em; +} + +sub { + top: 0.3em; +} + +@media print { + @page { + margin: 1cm; + } + * { + background: none !important; + } + body { + display: block; + } + body > header nav, + body > footer, + a[href="/"], + a[href^="#fn"] { + display: none; + } + a[href^="http"]::after { + content: " <" attr(href) ">"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a { + text-decoration: none; + } + p { + widows: 3; + orphans: 3; + } + hr { + border-top: 1px solid var(--border); + } + pre, table, figure, img, svg { + break-inside: avoid; + } + pre code { + white-space: pre-wrap; + } + button, .button { + color: var(--text) !important; + } +}