]> git.sesse.net Git - remoteglot/blobdiff - www/js/remoteglot.js
Fix an issue where the URL hash would override the game choice the user just made...
[remoteglot] / www / js / remoteglot.js
index 114f3a4e7435aaf26f2700757dbd981f3ffa8084..d14571792bff114783834c973a4873ea95d2ebc9 100644 (file)
@@ -47,9 +47,10 @@ var displayed_analysis_data = null;
  * @type {?Array.<{
  *      name: string,
  *      url: string,
+ *      hashurl: string,
  *      id: string,
- *      score: =Object,
- *      result: =string,
+ *      score: Object=,
+ *      result: string=,
  * }>}
  * @private
  */
@@ -552,8 +553,8 @@ var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_
 
 // Note: invert is ignored.
 var compare_by_name = function(refutation_lines, invert, a, b) {
-       var ska = refutation_lines[a]['pretty_move'];
-       var skb = refutation_lines[b]['pretty_move'];
+       var ska = refutation_lines[a]['move'];
+       var skb = refutation_lines[b]['move'];
        if (ska < skb) return -1;
        if (ska > skb) return 1;
        return 0;
@@ -572,7 +573,7 @@ var compare_by_score = function(refutation_lines, invert, a, b) {
  * @param {!Object} data
  * @param {number} margin The maximum number of centipawns worse than the
  *     best move can be and still be included.
- * @param {boolean} margin Whether black is to play.
+ * @param {boolean} invert Whether black is to play.
  * @return {Array.<string>} The FEN representation (e.g. Ne4) of all
  *     moves, in score order.
  */
@@ -584,7 +585,7 @@ var find_nonstupid_moves = function(data, margin, invert) {
        var pv_score = undefined;
        for (var move in data['refutation_lines']) {
                var line = data['refutation_lines'][move];
-               var score = compute_score_sort_key(line['score'], line['depth'], invert);
+               var score = compute_score_sort_key(line['score'], line['depth'], invert, false);
                if (move == data['pv'][0]) {
                        pv_score = score;
                }
@@ -797,7 +798,7 @@ var update_refutation_lines = function() {
 
                if (line['pv'].length == 0) {
                        // Not found, so just make a one-move PV.
-                       var move = "<a class=\"move\" href=\"javascript:show_line(" + display_lines.length + ", " + 0 + ");\">" + line['pretty_move'] + "</a>";
+                       var move = "<a class=\"move\" href=\"javascript:show_line(" + display_lines.length + ", " + 0 + ");\">" + line['move'] + "</a>";
                        $(move_td).html(move);
                        var score_td = document.createElement("td");
 
@@ -813,13 +814,13 @@ var update_refutation_lines = function() {
                        var pv_td = document.createElement("td");
                        tr.appendChild(pv_td);
                        $(pv_td).addClass("pv");
-                       $(pv_td).html(add_pv(base_fen, base_line.concat([ line['pretty_move'] ]), move_num, toplay, scores, start_display_move_num));
+                       $(pv_td).html(add_pv(base_fen, base_line.concat([ line['move'] ]), move_num, toplay, scores, start_display_move_num));
 
                        tbl.append(tr);
                        continue;
                }
 
-               var move = "<a class=\"move\" href=\"javascript:show_line(" + display_lines.length + ", " + 0 + ");\">" + line['pretty_move'] + "</a>";
+               var move = "<a class=\"move\" href=\"javascript:show_line(" + display_lines.length + ", " + 0 + ");\">" + line['move'] + "</a>";
                $(move_td).html(move);
 
                var score_td = document.createElement("td");
@@ -941,7 +942,7 @@ var possibly_switch_game_from_hash = function() {
        for (var i = 0; i < current_games.length; ++i) {
                if (current_games[i]['id'] === hash) {
                        if (backend_url !== current_games[i]['url']) {
-                               switch_backend(current_games[i]['url'], current_games[i]['hashurl']);
+                               switch_backend(current_games[i]);
                        }
                        return;
                }
@@ -959,8 +960,8 @@ var update_board = function() {
        // Print the history. This is pretty much the only thing that's
        // unconditionally taken from current_data (we're not interested in
        // historic history).
-       if (current_data['position']['pretty_history']) {
-               add_pv('start', current_data['position']['pretty_history'], 1, 'W', null, 0, 8, true);
+       if (current_data['position']['history']) {
+               add_pv('start', current_data['position']['history'], 1, 'W', null, 0, 8, true);
        } else {
                display_lines.push(null);
        }
@@ -1076,7 +1077,7 @@ var update_board = function() {
                // from the start.
                var hiddenboard = chess_from(null, current_display_line.pv, current_display_move);
                var moves = hiddenboard.history({ verbose: true });
-               var last_move = moves.pop();
+               last_move = moves.pop();
                highlight_from = last_move.from;
                highlight_to = last_move.to;
        } else {
@@ -1204,7 +1205,7 @@ var update_board = function() {
                                break;
                        }
                        var line = data['refutation_lines'][nonstupid_moves[i]];
-                       var hiddenboard = new Chess(base_fen);
+                       hiddenboard = new Chess(base_fen);
                        hiddenboard.move(line['pv'][0]);
                        var this_response = hiddenboard.move(line['pv'][1]);
                        if (response.from !== this_response.from || response.to !== this_response.to) {
@@ -1336,7 +1337,6 @@ var update_clock = function() {
 
        var white_clock_ms = null;
        var black_clock_ms = null;
-       var show_seconds = false;
 
        // Static clocks.
        if (data['position'] &&
@@ -1465,14 +1465,14 @@ var format_halfmove_with_number = function(move, halfmove_num) {
  */
 var format_tooltip = function(data, halfmove_num) {
        if (data['score_history'][halfmove_num] ||
-           halfmove_num === data['position']['pretty_history'].length) {
+           halfmove_num === data['position']['history'].length) {
                var move;
                var short_score;
-               if (halfmove_num === data['position']['pretty_history'].length) {
+               if (halfmove_num === data['position']['history'].length) {
                        move = data['position']['last_move'];
                        short_score = format_short_score(data['score']);
                } else {
-                       move = data['position']['pretty_history'][halfmove_num];
+                       move = data['position']['history'][halfmove_num];
                        short_score = format_short_score(data['score_history'][halfmove_num]);
                }
                var move_with_number = format_halfmove_with_number(move, halfmove_num);
@@ -1481,7 +1481,7 @@ var format_tooltip = function(data, halfmove_num) {
        } else {
                for (var i = halfmove_num; i --> 0; ) {
                        if (data['score_history'][i]) {
-                               var move = data['position']['pretty_history'][i];
+                               var move = data['position']['history'][i];
                                return "[Analysis kept from " + format_halfmove_with_number(move, i) + "]";
                        }
                }
@@ -1571,7 +1571,7 @@ var next_game = function() {
                var game = current_games[game_num];
                if (game['url'] === backend_url) {
                        var next_game_num = (game_num + 1) % current_games.length;
-                       switch_backend(current_games[next_game_num]['url'], current_games[next_game_num]['hashurl']);
+                       switch_backend(current_games[next_game_num]);
                        return;
                }
        }
@@ -1974,6 +1974,10 @@ var onSnapEnd = function(source, target) {
        // this move, then select that. Note that this gives us a good priority
        // order (history first, then PV, then multi-PV lines).
        for (var i = 0; i < display_lines.length; ++i) {
+               if (i == 1 && current_display_line) {
+                       // Do not choose PV if not on it.
+                       continue;
+               }
                var line = display_lines[i];
                if (line.pv[line.start_display_move_num] === move.san) {
                        show_line(i, 0);
@@ -2062,9 +2066,10 @@ var compute_plot_score = function(score) {
  * @param score The score digest tuple.
  * @param {?number} depth Depth the move has been computed to, or null.
  * @param {boolean} invert Whether black is to play.
+ * @param {boolean=} depth_secondary_key
  * @return {number}
  */
-var compute_score_sort_key = function(score, depth, invert) {
+var compute_score_sort_key = function(score, depth, invert, depth_secondary_key) {
        var s;
        if (!score) {
                return -10000000;
@@ -2084,16 +2089,20 @@ var compute_score_sort_key = function(score, depth, invert) {
        }
        if (s) {
                if (invert) s = -s;
-               return s * 200 + (depth || 0);
+               if (depth_secondary_key) {
+                       return s * 200 + (depth || 0);
+               } else {
+                       return s;
+               }
        } else {
                return null;
        }
 }
 
 /**
- * @param {string} new_backend_url
+ * @param {Object} game
  */
-var switch_backend = function(new_backend_url, new_backend_hash_url) {
+var switch_backend = function(game) {
        // Stop looking at historic data.
        current_display_line = null;
        current_display_move = null;
@@ -2122,8 +2131,9 @@ var switch_backend = function(new_backend_url, new_backend_hash_url) {
        }
 
        // Request an immediate fetch with the new backend.
-       backend_url = new_backend_url;
-       backend_hash_url = new_backend_hash_url;
+       backend_url = game['url'];
+       backend_hash_url = game['hashurl'];
+       window.location.hash = '#' + game['id'];
        current_analysis_data = null;
        ims = 0;
        request_update();
@@ -2172,7 +2182,7 @@ var init = function() {
                } else if (event.which >= 49 && event.which <= 57) {  // 1-9.
                        var num = event.which - 49;
                        if (current_games && current_games.length >= num) {
-                               switch_backend(current_games[num]['url'], current_games[num]['hashurl']);
+                               switch_backend(current_games[num]);
                        }
                } else if (event.which == 78) {  // N.
                        next_game();