+function move_by_filter(direction, filter) {
+ // Keep moving in direction until filter is satisfied
+ var new_index = input_index;
+ while (true) {
+ var next = new_index + direction;
+ if (next < 0) {
+ say("At beginning");
+ return;
+ }
+ if (next >= files.length) {
+ say("At end");
+ return;
+ }
+ new_index = next;
+ if (filter(new_index)) {
+ break;
+ }
+ }
+ input_index = new_index;
+ say(input_index + " " + (picinfo[files[input_index]].name || ""));
+ setpic();
+}
+function move(direction) {
+ move_by_filter(direction, function() { return true; });
+}
+function move_to_nondeleted(direction) {
+ move_by_filter(direction, function(i) {
+ return !("deleted" in picinfo[files[i]]); });
+}
+function move_to_unnamed(direction) {
+ move_by_filter(direction, function(i) {
+ return !("deleted" in picinfo[files[i]]) &&
+ !("name" in picinfo[files[i]]); });
+}
+
+function mark_deleted() {
+ picinfo[files[input_index]].deleted = 1;
+ save_picinfo();
+ say("Deleted");
+}
+
+function mark_not_deleted() {
+ delete picinfo[files[input_index]].deleted;
+ save_picinfo();
+ say("Undeleted");
+}
+
+function change_exposure(amount) {
+ if (!endsWith(files[input_index], ".NEF")) {
+ say("Exposure adjustment not available");
+ return;
+ }
+ exposure += amount;
+ picinfo[files[input_index]].exposure = exposure;
+ save_picinfo();
+ setpic();
+ var display_exposure = (exposure / 4) - 3.5;
+ say((display_exposure >= 0 ? "+" : "") + display_exposure);
+}
+
+function set_name() {
+ var name_input = $("#name").hide().get(0);
+ var name = name_input.value;
+ name_input.value = "";
+ picinfo[files[input_index]].name = name;
+ save_picinfo();
+ say("Named " + name);