]> git.sesse.net Git - remoteglot/blobdiff - www/js/remoteglot.js
Support starting from a nonstandard position.
[remoteglot] / www / js / remoteglot.js
index 836b4ba5529c407b1875e69865860b3c4df14991..ff566ab85c81c4ba4b33ff8a9853bec23d8f89ca 100644 (file)
@@ -7,7 +7,7 @@
  * @type {Number}
  * @const
  * @private */
-var SCRIPT_VERSION = 2016091401;
+var SCRIPT_VERSION = 2016113002;
 
 /**
  * The current backend URL.
@@ -94,9 +94,6 @@ var toplay = 'W';
 /** @type {number} @private */
 var ims = 0;
 
-/** @type {boolean} @private */
-var sort_refutation_lines_by_score = true;
-
 /** @type {boolean} @private */
 var truncate_display_history = true;
 
@@ -569,15 +566,6 @@ var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_
        arrows.push(arrow);
 }
 
-// Note: invert is ignored.
-var compare_by_name = function(refutation_lines, invert, a, b) {
-       var ska = refutation_lines[a]['move'];
-       var skb = refutation_lines[b]['move'];
-       if (ska < skb) return -1;
-       if (ska > skb) return 1;
-       return 0;
-};
-
 var compare_by_score = function(refutation_lines, invert, a, b) {
        var sa = compute_score_sort_key(refutation_lines[b]['score'], refutation_lines[b]['depth'], invert);
        var sb = compute_score_sort_key(refutation_lines[a]['score'], refutation_lines[a]['depth'], invert);
@@ -801,8 +789,7 @@ var update_refutation_lines = function() {
        if (current_display_line && current_display_move % 2 == 0) {
                invert = !invert;
        }
-       var compare = sort_refutation_lines_by_score ? compare_by_score : compare_by_name;
-       moves = moves.sort(function(a, b) { return compare(refutation_lines, invert, a, b) });
+       moves = moves.sort(function(a, b) { return compare_by_score(refutation_lines, invert, a, b) });
        for (var i = 0; i < moves.length; ++i) {
                var line = refutation_lines[moves[i]];
 
@@ -863,15 +850,6 @@ var update_refutation_lines = function() {
                tbl.append(tr);
        }
 
-       // Make one of the links clickable and the other nonclickable.
-       if (sort_refutation_lines_by_score) {
-               $("#sortbyscore0").html("<a href=\"javascript:resort_refutation_lines(false)\">Move</a>");
-               $("#sortbyscore1").html("<strong>Score</strong>");
-       } else {
-               $("#sortbyscore0").html("<strong>Move</strong>");
-               $("#sortbyscore1").html("<a href=\"javascript:resort_refutation_lines(true)\">Score</a>");
-       }
-
        // Update the move highlight, as we've rewritten all the HTML.
        update_move_highlight();
 }
@@ -886,7 +864,7 @@ var update_refutation_lines = function() {
  */
 var chess_from = function(fen, moves, last_move) {
        var hiddenboard = new Chess();
-       if (fen !== null) {
+       if (fen !== null && fen !== undefined) {
                hiddenboard.load(fen);
        }
        for (var i = 0; i <= last_move; ++i) {
@@ -979,7 +957,8 @@ var update_board = function() {
        // unconditionally taken from current_data (we're not interested in
        // historic history).
        if (current_data['position']['history']) {
-               add_pv('start', current_data['position']['history'], 1, 'W', null, 0, 8, true);
+               var start = (current_data['position'] && current_data['position']['start_fen']) ? current_data['position']['start_fen'] : 'start';
+               add_pv(start, current_data['position']['history'], 1, 'W', null, 0, 8, true);
        } else {
                display_lines.push(null);
        }
@@ -1105,7 +1084,8 @@ var update_board = function() {
                // We don't have historic analysis for this position, but we
                // can reconstruct what the last move was by just replaying
                // from the start.
-               var hiddenboard = chess_from(null, current_display_line.pv, current_display_move);
+               var position = (data['position'] && data['position']['start_fen']) ? data['position']['start_fen'] : null;
+               var hiddenboard = chess_from(position, current_display_line.pv, current_display_move);
                var moves = hiddenboard.history({ verbose: true });
                last_move = moves.pop();
                highlight_from = last_move.from;
@@ -1418,8 +1398,9 @@ var update_clock = function() {
                return;
        }
 
-       // If either player has ten minutes or less left, add the second counters.
-       var show_seconds = (white_clock_ms < 60 * 10 * 1000 || black_clock_ms < 60 * 10 * 1000);
+       // If either player has twenty minutes or less left, add the second counters.
+       // This matches what DGT clocks do.
+       var show_seconds = (white_clock_ms < 60 * 20 * 1000 || black_clock_ms < 60 * 20 * 1000);
 
        if (color) {
                // See when the clock will change next, and update right after that.
@@ -1539,18 +1520,6 @@ var format_tooltip = function(data, halfmove_num) {
        }
 }
 
-/**
- * @param {boolean} sort_by_score
- */
-var resort_refutation_lines = function(sort_by_score) {
-       sort_refutation_lines_by_score = sort_by_score;
-       if (supports_html5_storage()) {
-               localStorage['sort_refutation_lines_by_score'] = sort_by_score ? 1 : 0;
-       }
-       update_refutation_lines();
-}
-window['resort_refutation_lines'] = resort_refutation_lines;
-
 /**
  * @param {boolean} truncate_history
  */
@@ -1640,7 +1609,7 @@ var update_historic_analysis = function() {
        }
 
        // Fetch old analysis for this line if it exists.
-       var hiddenboard = chess_from(null, current_display_line.pv, current_display_move);
+       var hiddenboard = chess_from(current_display_line.start_fen, current_display_line.pv, current_display_move);
        var filename = "/history/move" + (current_display_move + 1) + "-" +
                hiddenboard.fen().replace(/ /g, '_').replace(/\//g, '-') + ".json";
 
@@ -2200,11 +2169,6 @@ var init = function() {
        } else {
                set_sound(false);
        }
-       if (supports_html5_storage() && localStorage['sort_refutation_lines_by_score']) {
-               sort_refutation_lines_by_score = parseInt(localStorage['sort_refutation_lines_by_score']);
-       } else {
-               sort_refutation_lines_by_score = true;
-       }
 
        // Create board.
        board = new window.ChessBoard('board', {