X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=37c6b87fca488a9d5b87483e32142ab2e80198d6;hp=52e4c4a72f528827ee4b9c1018060bb8fedc5642;hb=7d17d48232fce74150d7a2802cbd330dc4e9493c;hpb=739a5a75ca7f10bb9759578acea288d97aa4a0a9 diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index 52e4c4a..37c6b87 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -3,6 +3,23 @@ /** @type {window.ChessBoard} @private */ var board = null; +/** + * The most recent analysis data we have from the server + * (about the most recent position). + * + * @type {?Object} + * @private */ +var current_analysis_data = null; + +/** + * If we are displaying previous analysis, this is non-null, + * and will override most of current_analysis_data. + * + * @type {?Object} + * @private + */ +var displayed_analysis_data = null; + /** @type {Array.<{ * from_col: number, * from_row: number, @@ -70,6 +87,9 @@ var display_lines = []; /** @type {?DisplayLine} @private */ var current_display_line = null; +/** @type {boolean} @private */ +var current_display_line_is_history = false; + /** @type {?number} @private */ var current_display_move = null; @@ -101,7 +121,8 @@ var request_update = function() { }).done(function(data, textstatus, xhr) { ims = xhr.getResponseHeader('X-Remoteglot-Last-Modified'); var num_viewers = xhr.getResponseHeader('X-Remoteglot-Num-Viewers'); - update_board(data); + current_analysis_data = data; + update_board(current_analysis_data, displayed_analysis_data); update_num_viewers(num_viewers); // Next update. @@ -565,44 +586,55 @@ var update_refutation_lines = function() { /** * @param {Object} data + * @param {?Object} display_data */ -var update_board = function(data) { +var update_board = function(current_data, display_data) { + var data = display_data || current_data; + display_lines = []; - // The headline. + // 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']['history']) { + add_pv('start', current_data['position']['history'], 1, 'W', 8, true); + } else { + display_lines.push(null); + } + update_history(); + + // The headline. Names are always fetched from current_data; + // the rest can depend a bit. var headline; - if (data['position']['player_w'] && data['position']['player_b']) { - headline = data['position']['player_w'] + 'â' + - data['position']['player_b'] + ', analysis'; + if (current_data && + current_data['position']['player_w'] && current_data['position']['player_b']) { + headline = current_data['position']['player_w'] + 'â' + + current_data['position']['player_b'] + ', analysis'; } else { headline = 'Analysis'; } - var last_move; - if (data['position']['last_move'] !== 'none') { - if (data['position']['toplay'] == 'W') { - last_move = (data['position']['move_num']-1) + '⦠'; - } else { - last_move = data['position']['move_num'] + '. '; - } - last_move += data['position']['last_move']; + var last_move; + if (display_data) { + // Displaying some non-current position, pick out the last move + // from the history. This will work even if the fetch failed. + last_move = format_move_with_number( + current_display_line.pretty_pv[current_display_move], + Math.floor((current_display_move + 1) / 2) + 1, + (current_display_move % 2 == 1)); + headline += ' after ' + last_move; + } else if (data['position']['last_move'] !== 'none') { + last_move = format_move_with_number( + data['position']['last_move'], + data['position']['move_num'], + data['position']['toplay'] == 'W'); headline += ' after ' + last_move; } else { last_move = null; } - $("#headline").text(headline); - // The engine id. - if (data['id'] && data['id']['name'] !== null) { - $("#engineid").text(data['id']['name']); - } - - // The score. - if (data['score'] !== null) { - $("#score").text(data['score']); - } - + // The