summary refs log tree commit diff
path: root/www/photo.causal.agency/trips.html
diff options
context:
space:
mode:
Diffstat (limited to 'www/photo.causal.agency/trips.html')
-rw-r--r--www/photo.causal.agency/trips.html51
1 files changed, 42 insertions, 9 deletions
diff --git a/www/photo.causal.agency/trips.html b/www/photo.causal.agency/trips.html
index 2adf3a71..e81be6ef 100644
--- a/www/photo.causal.agency/trips.html
+++ b/www/photo.causal.agency/trips.html
@@ -32,15 +32,21 @@ 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>
 
 <datalist id="films">
-	<option>Harman Phoenix 200</option>
-	<option>Ilford HP5 Plus 400</option>
-	<option>Shanghai Color 400</option>
-	<option>Fomapan Creative 200</option>
-	<option>Fomapan Action 400</option>
 </datalist>
 </section>
 
@@ -145,6 +151,9 @@ function setBodies() {
 			select.appendChild(option);
 		}
 	}
+	if (trips.length) {
+		selects.forEach(select => select.value = trips[trips.length-1].body);
+	}
 }
 setBodies();
 
@@ -205,8 +214,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));
@@ -214,8 +224,13 @@ function setTrips() {
 			li.appendChild(document.createTextNode(
 				`: ${trip.firstExposure}–${trip.lastExposure}`
 			));
-			li.appendChild(document.createElement("br"));
-			li.appendChild(document.createTextNode(trip.lens));
+			if (
+				(!body || 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}”`));
@@ -238,6 +253,10 @@ function setTripBody() {
 		option.appendChild(document.createTextNode(lensString(lens)));
 		select.appendChild(option);
 	}
+	let lastTrip = trips.findLast(trip => trip.body == bodyName);
+	if (lastTrip) {
+		select.value = lastTrip.lens;
+	}
 	let roll = rolls[body.name];
 	if (roll) {
 		document.getElementById("trip-film").value = roll.film;
@@ -255,6 +274,7 @@ setTripBody();
 function clearForm(form) {
 	let inputs = form.querySelectorAll("input");
 	for (input of inputs) {
+		if (input.type == "radio") continue;
 		input.value = null;
 	}
 }
@@ -307,7 +327,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);
@@ -337,4 +358,16 @@ function addTrip() {
 	setTripBody();
 }
 
+function setFilms() {
+	let datalist = document.getElementById("films");
+	datalist.innerHTML = "";
+	let films = new Set(trips.reverse().map(trip => trip.film));
+	for (let film of films.values().take(20)) {
+		let option = document.createElement("option");
+		option.innerText = film;
+		datalist.appendChild(option);
+	}
+}
+setFilms();
+
 </script>