X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=5f0531e74acac670c33ba4d8464f99f0c1e86353;hb=077d88375f1372cbde80304131860fc66a8e0756;hp=04bc1493c9f37a51bf39d05208181b1bb000b7c4;hpb=9439a26fb0f61e6becaa8736fce4bafc61a4ba38;p=remoteglot diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index 04bc149..5f0531e 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -7,7 +7,7 @@ * @type {Number} * @const * @private */ -var SCRIPT_VERSION = 2016032000; +var SCRIPT_VERSION = 2016032201; /** * The current backend URL. @@ -48,6 +48,8 @@ var displayed_analysis_data = null; * name: string, * url: string, * id: string, + * score: =Object, + * result: =string, * }>} * @private */ @@ -644,8 +646,8 @@ var add_pv = function(start_fen, pretty_pv, move_num, toplay, score, start_displ /** * @param {number} line_num - * @param {number=} opt_limit - * @param {boolean=} opt_showlast + * @param {number=} opt_limit If set, show at most this number of moves. + * @param {boolean=} opt_showlast If limit is set, show the last moves instead of the first ones. */ var print_pv = function(line_num, opt_limit, opt_showlast) { var display_line = display_lines[line_num]; @@ -731,7 +733,7 @@ var update_history = function() { } else { $("#history").html( '(collapse) ' + - print_pv(0, 1, 'W')); + print_pv(0)); } } @@ -822,7 +824,11 @@ var update_refutation_lines = function() { var depth_td = document.createElement("td"); tr.appendChild(depth_td); $(depth_td).addClass("depth"); - $(depth_td).text("d" + line['depth']); + if (line['depth'] && line['depth'] >= 0) { + $(depth_td).text("d" + line['depth']); + } else { + $(depth_td).text("—"); + } var pv_td = document.createElement("td"); tr.appendChild(pv_td); @@ -891,6 +897,15 @@ var update_game_list = function(games) { game_a.appendChild(game_name); game_span.appendChild(game_a); } + + var score; + if (game['result']) { + score = " (" + game['result'] + ")"; + } else { + score = " (" + format_short_score(game['score']) + ")"; + } + game_span.appendChild(document.createTextNode(score)); + games_div.appendChild(game_span); } } @@ -908,7 +923,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']); + switch_backend(current_games[i]['url'], current_games[i]['hashurl']); } return; } @@ -937,11 +952,10 @@ var update_board = function() { if (current_data['games']) { current_games = current_data['games']; possibly_switch_game_from_hash(); - update_game_list(current_data['games']); } else { current_games = null; - update_game_list(null); } + update_game_list(current_games); // The headline. Names are always fetched from current_data; // the rest can depend a bit. @@ -1019,8 +1033,10 @@ var update_board = function() { // The contains a very brief headline. var title_elems = []; - if (data['score']) { - title_elems.push(format_short_score(data['score']).replace(/^ /, "")); + if (data['position'] && data['position']['result']) { + title_elems.push(data['position']['result']); + } else if (data['score']) { + title_elems.push(format_short_score(data['score'])); } if (last_move !== null) { title_elems.push(last_move); @@ -1502,6 +1518,24 @@ var next_move = function() { } window['next_move'] = next_move; +var next_game = function() { + if (current_games === null) { + return; + } + + // Try to find the game we are currently looking at. + for (var game_num = 0; game_num < current_games.length; ++game_num) { + 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']); + return; + } + } + + // Couldn't find it; give up. +} + var update_historic_analysis = function() { if (!current_display_line_is_history) { return; @@ -1797,6 +1831,15 @@ var get_best_move = function(game, source, target, invert) { move_hash[moves[i].san] = moves[i]; } + // See if we're already exploring some line. + if (current_display_line && + current_display_move < current_display_line.pretty_pv.length - 1) { + var first_move = current_display_line.pretty_pv[current_display_move + 1]; + if (move_hash[first_move]) { + return move_hash[first_move]; + } + } + // History and PV take priority over the display lines. for (var i = 0; i < 2; ++i) { var line = display_lines[i]; @@ -1887,14 +1930,6 @@ var onSnapEnd = function(source, target) { } // End of dragging-related code. -var pad = function(val, num_digits) { - var s = val.toString(); - while (s.length < num_digits) { - s = " " + s; - } - return s; -} - var fmt_cp = function(v) { if (v === 0) { return "0.00"; @@ -1907,11 +1942,14 @@ var fmt_cp = function(v) { } var format_short_score = function(score) { + if (!score) { + return "???"; + } if (score[0] === 'm') { if (score[2]) { // Is a bound. - return score[2] + "\u00a0M" + pad(score[1], 3); + return score[2] + "\u00a0M " + score[1]; } else { - return "M" + pad(score[1], 3); + return "M " + score[1]; } } else if (score[0] === 'd') { return "TB draw"; @@ -1919,7 +1957,7 @@ var format_short_score = function(score) { if (score[2]) { // Is a bound. return score[2] + "\u00a0" + fmt_cp(score[1]); } else { - return pad(fmt_cp(score[1]), 5); + return fmt_cp(score[1]); } } return null; @@ -1992,7 +2030,7 @@ var compute_score_sort_key = function(score, invert) { /** * @param {string} new_backend_url */ -var switch_backend = function(new_backend_url) { +var switch_backend = function(new_backend_url, new_backend_hash_url) { // Stop looking at historic data. current_display_line = null; current_display_move = null; @@ -2022,6 +2060,7 @@ var switch_backend = function(new_backend_url) { // Request an immediate fetch with the new backend. backend_url = new_backend_url; + backend_hash_url = new_backend_hash_url; current_analysis_data = null; ims = 0; request_update(); @@ -2063,10 +2102,17 @@ var init = function() { redraw_arrows(); }); $(window).keyup(function(event) { - if (event.which == 39) { + if (event.which == 39) { // Left arrow. next_move(); - } else if (event.which == 37) { + } else if (event.which == 37) { // Right arrow. prev_move(); + } 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']); + } + } else if (event.which == 78) { // N. + next_game(); } }); window.addEventListener('hashchange', possibly_switch_game_from_hash, false);