summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--txt/books.txt4
-rw-r--r--www/photo.causal.agency/c35/body1
-rw-r--r--www/photo.causal.agency/c35/lens1
-rw-r--r--www/photo.causal.agency/fx-3/body1
-rw-r--r--www/photo.causal.agency/fx-3/lens1
-rw-r--r--www/photo.causal.agency/generate.sh21
-rw-r--r--www/photo.causal.agency/trips.html27
7 files changed, 49 insertions, 7 deletions
diff --git a/txt/books.txt b/txt/books.txt
index bd31cc0d..d7a504d0 100644
--- a/txt/books.txt
+++ b/txt/books.txt
@@ -1,3 +1,7 @@
+[ 2025 ]
+
+  1. ★★☆ Ruthanna Emrys, A Half-Built Garden
+
 [ 2024 ]
 
   2. ★☆☆ R. A. MacAvoy, Tea with the Black Dragon
diff --git a/www/photo.causal.agency/c35/body b/www/photo.causal.agency/c35/body
new file mode 100644
index 00000000..3676b877
--- /dev/null
+++ b/www/photo.causal.agency/c35/body
@@ -0,0 +1 @@
+Konica C35 Automatic
diff --git a/www/photo.causal.agency/c35/lens b/www/photo.causal.agency/c35/lens
new file mode 100644
index 00000000..3fef9a43
--- /dev/null
+++ b/www/photo.causal.agency/c35/lens
@@ -0,0 +1 @@
+Konica Hexanon 38mm f/2.8
diff --git a/www/photo.causal.agency/fx-3/body b/www/photo.causal.agency/fx-3/body
new file mode 100644
index 00000000..0962ee7d
--- /dev/null
+++ b/www/photo.causal.agency/fx-3/body
@@ -0,0 +1 @@
+Yashica FX-3
diff --git a/www/photo.causal.agency/fx-3/lens b/www/photo.causal.agency/fx-3/lens
new file mode 100644
index 00000000..eaab4375
--- /dev/null
+++ b/www/photo.causal.agency/fx-3/lens
@@ -0,0 +1 @@
+Carl Zeiss Planar T* 50mm f/1.7
diff --git a/www/photo.causal.agency/generate.sh b/www/photo.causal.agency/generate.sh
index e4293d8c..be7c238e 100644
--- a/www/photo.causal.agency/generate.sh
+++ b/www/photo.causal.agency/generate.sh
@@ -36,6 +36,7 @@ encode() {
 
 page_title() {
 	case $1 in
+		(leader) echo 'Film Leader';;
 		(20*) date -j -f '%F' $1 '+%B %e, %Y';;
 		(0*) echo Roll $(dc -e "${1}p");;
 	esac
@@ -47,7 +48,7 @@ page_head() {
 	local date body lens film
 
 	if test -f $page/date; then
-		date=$(sed 's/\([0-9]\)-\([0-9]\)/\1-\2/g' $page/date | encode)
+		date=$(sed 's/\([0-9]\)-\([0-9]\)/\1–\2/g' $page/date | encode)
 	fi
 	if test -f $page/body; then
 		body=$(encode $page/body)
@@ -56,7 +57,7 @@ page_head() {
 		lens=$(
 			sed '
 				s,f/,ƒ/,g
-				s/\([0-9]\)-\([0-9]\)/\1-\2/g
+				s/\([0-9]\)-\([0-9]\)/\1–\2/g
 			' $page/lens |
 			encode
 		)
@@ -90,7 +91,7 @@ page_head() {
 	details { max-width: 78ch; margin: 0.5em auto; }
 	</style>
 	<h1>${title}</h1>
-	<p>${date:+📆 }${date:-} 📷 ${body:-}${body:+ 🔘 }${lens}${film:+ 🎞️ }${film:-}</p>
+	<p>${date:+📆 }${date:-} 📷 ${body:-}${body:+ 🔘 }${lens:-}${film:+ 🎞️ }${film:-}</p>
 	EOF
 }
 
@@ -248,6 +249,20 @@ for entry in 20* 0*; do
 	set -- $entry "$@"
 done
 
+mkdir -p static/leader
+page=static/leader/index.html
+if [ leader -nt $page ]; then
+	echo $page >&2
+	page_head leader >$page
+	for photo in leader/*.[Jj][Pp][Gg]; do
+		preview=$(preview $photo)
+		if ! test -f static/${photo}; then
+			ln $photo static/${photo}
+		fi
+		page_photo $photo $preview xxx >>$page
+	done
+fi
+
 echo static/index.html >&2
 index_head >static/index.html
 echo static/feed.atom >&2
diff --git a/www/photo.causal.agency/trips.html b/www/photo.causal.agency/trips.html
index a5cacc5c..d65aeaef 100644
--- a/www/photo.causal.agency/trips.html
+++ b/www/photo.causal.agency/trips.html
@@ -32,6 +32,17 @@ input[type="number"] { width: 5ch; }
 </select>
 <label for="roll-film">Film:</label>
 <input id="roll-film" list="films" required>
+<span>Exposures:</span>
+<span>
+<input id="roll-36" type="radio" name="roll-exposures" value="36" checked>
+<label for="roll-36">36</label>
+<input id="roll-27" type="radio" name="roll-exposures" value="27">
+<label for="roll-27">27</label>
+<input id="roll-24" type="radio" name="roll-exposures" value="24">
+<label for="roll-24">24</label>
+<input id="roll-12" type="radio" name="roll-exposures" value="12">
+<label for="roll-12">12</label>
+</span>
 <button type="button" onclick="loadRoll()">Load</button>
 </form>
 
@@ -207,8 +218,9 @@ function setTrips() {
 		rollB.appendChild(document.createTextNode(rollTrips[0].film));
 		rollLi.appendChild(rollB);
 		rollLi.appendChild(document.createTextNode(` (${rollTrips[0].body})`));
+		let body = bodies.find(body => body.name == rollTrips[0].body);
 		let rollUl = document.createElement("ul");
-		for (let trip of rollTrips) {
+		for (let [index, trip] of rollTrips.entries()) {
 			let li = document.createElement("li");
 			let b = document.createElement("b");
 			b.appendChild(document.createTextNode(trip.date));
@@ -216,8 +228,13 @@ function setTrips() {
 			li.appendChild(document.createTextNode(
 				`: ${trip.firstExposure}–${trip.lastExposure}`
 			));
-			li.appendChild(document.createElement("br"));
-			li.appendChild(document.createTextNode(trip.lens));
+			if (
+				body.mount != body.name &&
+				(!index || trip.lens != rollTrips[index-1].lens)
+			) {
+				li.appendChild(document.createElement("br"));
+				li.appendChild(document.createTextNode(trip.lens));
+			}
 			if (trip.note) {
 				li.appendChild(document.createElement("br"));
 				li.appendChild(document.createTextNode(`“${trip.note}”`));
@@ -261,6 +278,7 @@ setTripBody();
 function clearForm(form) {
 	let inputs = form.querySelectorAll("input");
 	for (input of inputs) {
+		if (input.type == "radio") continue;
 		input.value = null;
 	}
 }
@@ -313,7 +331,8 @@ function loadRoll() {
 	if (!form.checkValidity()) return;
 	let body = document.getElementById("roll-body").value;
 	let film = document.getElementById("roll-film").value;
-	rolls[body] = { id: nextId++, film, used: 0, exposures: 36 };
+	let exposures = +new FormData(form).get("roll-exposures");
+	rolls[body] = { id: nextId++, film, exposures, used: 0 };
 	localStorage.setItem("nextId", nextId);
 	setRolls();
 	clearForm(form);