]> 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 5cd1a97e1a1dbcf14c4ed1bc5fabe9e1cbff887e..d14571792bff114783834c973a4873ea95d2ebc9 100644 (file)
@@ -47,6 +47,7 @@ var displayed_analysis_data = null;
  * @type {?Array.<{
  *      name: string,
  *      url: string,
+ *      hashurl: string,
  *      id: string,
  *      score: Object=,
  *      result: string=,
@@ -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;
                }
@@ -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;
                }
@@ -1570,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;
                }
        }
@@ -1973,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);
@@ -2061,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;
@@ -2083,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;
@@ -2121,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();
@@ -2171,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();