]> git.sesse.net Git - remoteglot-book/commitdiff
Allow switching computer moves with j/k.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 3 Jun 2016 19:40:54 +0000 (21:40 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 3 Jun 2016 19:40:54 +0000 (21:40 +0200)
www/js/book.js

index e4c3ce159dc238ff759e5711bfb989d07a7197ce..aacd98030c516bef45fa7bd0d380884e16f90674 100644 (file)
@@ -158,12 +158,15 @@ var find_last_move_score = function() {
        });
 }
 
+var candidate_moves = [];
+var chosen_index = null;
+
 var find_computer_move = function() {
        var fen = current_display_fen();
        $.ajax({
                url: "/opening-stats.pl?fen=" + encodeURIComponent(fen) + ";includetransp=0"
        }).done(function(data, textstatus, xhr) {
-               var candidate_moves = [];
+               candidate_moves = [];
 
                var moves = data['moves'];
                var root_move = sort_move_by_frequency(moves, data);
@@ -185,19 +188,37 @@ var find_computer_move = function() {
                }
 
                // Pick one at random.
-               var chosen_index = Math.floor(Math.random() * candidate_moves.length);
-               var chosen = candidate_moves[chosen_index];
-               $("#compmove").text(chosen['move']);
-               $("#compfraction").text((100.0 * chosen['fraction']).toFixed(1) + "%");
-               if (candidate_moves.length == 1) {
-                       $("#comprank").text("only candidate move");
-               } else {
-                       $("#comprank").text(format_ordinal(chosen_index + 1) + " out of " + candidate_moves.length + " candidate moves");
-               }
-               make_move(chosen['move']);
+               choose_move(Math.floor(Math.random() * candidate_moves.length));
        });
 }
 
+var choose_move = function(idx) {
+       chosen_index = idx;
+       var chosen = candidate_moves[chosen_index];
+       $("#compmove").text(chosen['move']);
+       $("#compfraction").text((100.0 * chosen['fraction']).toFixed(1) + "%");
+       if (candidate_moves.length == 1) {
+               $("#comprank").text("only candidate move");
+       } else {
+               $("#comprank").text(format_ordinal(chosen_index + 1) + " out of " + candidate_moves.length + " candidate moves, j/k to switch");
+       }
+       make_move(chosen['move']);
+}
+
+var prev_variant = function() {
+       if (chosen_index !== null) {
+               --move_override;
+               choose_move((chosen_index + candidate_moves.length - 1) % candidate_moves.length);
+       }
+}
+
+var next_variant = function() {
+       if (chosen_index !== null) {
+               --move_override;
+               choose_move((chosen_index + 1) % candidate_moves.length);
+       }
+}
+
 // Add deried data and then sort moves to get the most common ones (in-place).
 // Remove the root mode and return it. Currently usable for practice mode only!
 var sort_move_by_frequency = function(moves, data)
@@ -734,6 +755,10 @@ var init = function() {
                        next_move();
                } else if (event.which == 37) {
                        prev_move();
+               } else if (event.which == 74) {  // j
+                       if (practice_mode) next_variant();
+               } else if (event.which == 75) {  // k
+                       if (practice_mode) prev_variant();
                }
        });