X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=cdf8a5670e4b48971270d3d31da125564e5d1735;hp=37c6b87fca488a9d5b87483e32142ab2e80198d6;hb=77b62690312c008e5dc2c76bac2f5ac85ecd393d;hpb=7d17d48232fce74150d7a2802cbd330dc4e9493c diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index 37c6b87..cdf8a56 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -254,7 +254,7 @@ var position_arrow = function(arrow) { arrow.svg.parentElement.removeChild(arrow.svg); delete arrow.svg; } - if (current_display_line !== null) { + if (current_display_line !== null && !current_display_line_is_history) { return; } @@ -422,23 +422,15 @@ var thousands = function(x) { /** * @param {!string} fen - * @param {Array.} uci_pv + * @param {Array.} pretty_pv * @param {number} move_num * @param {!string} toplay * @param {number=} opt_limit * @param {boolean=} opt_showlast */ -var add_pv = function(fen, uci_pv, move_num, toplay, opt_limit, opt_showlast) { - var hiddenboard = new Chess(); - hiddenboard.load(fen); - for (var i = 0; i < uci_pv.length; ++i) { - hiddenboard.move(ucimove_to_chessjs_move(uci_pv[i])); - } - var pretty_pv = hiddenboard.history(); - +var add_pv = function(fen, pretty_pv, move_num, toplay, opt_limit, opt_showlast) { display_lines.push({ start_fen: fen, - uci_pv: uci_pv, pretty_pv: pretty_pv, line_number: display_lines.length }); @@ -497,7 +489,8 @@ var print_pv = function(line_num, pretty_pv, move_num, toplay, opt_limit, opt_sh var update_highlight = function() { $("#board").find('.square-55d63').removeClass('nonuglyhighlight'); - if (current_display_line === null && highlight_from !== undefined && highlight_to !== undefined) { + if ((current_display_line === null || current_display_line_is_history) && + highlight_from !== undefined && highlight_to !== undefined) { $("#board").find('.square-' + highlight_from).addClass('nonuglyhighlight'); $("#board").find('.square-' + highlight_to).addClass('nonuglyhighlight'); } @@ -549,7 +542,7 @@ var update_refutation_lines = function() { var move_td = document.createElement("td"); tr.appendChild(move_td); $(move_td).addClass("move"); - if (line['pv_uci'].length == 0) { + if (line['pv_pretty'].length == 0) { $(move_td).text(line['pretty_move']); } else { var move = "" + line['pretty_move'] + ""; @@ -569,7 +562,7 @@ var update_refutation_lines = function() { var pv_td = document.createElement("td"); tr.appendChild(pv_td); $(pv_td).addClass("pv"); - $(pv_td).html(add_pv(fen, line['pv_uci'], move_num, toplay, 10)); + $(pv_td).html(add_pv(fen, line['pv_pretty'], move_num, toplay, 10)); tbl.append(tr); } @@ -596,8 +589,8 @@ var update_board = function(current_data, display_data) { // 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); + if (current_data['position']['pretty_history']) { + add_pv('start', current_data['position']['pretty_history'], 1, 'W', 8, true); } else { display_lines.push(null); } @@ -649,6 +642,27 @@ var update_board = function(current_data, display_data) { document.title = 'analysis.sesse.net'; } + // The last move (shown by highlighting the from and to squares). + if (data['position'] && data['position']['last_move_uci']) { + highlight_from = data['position']['last_move_uci'].substr(0, 2); + highlight_to = data['position']['last_move_uci'].substr(2, 2); + } else if (current_display_line_is_history && current_display_move >= 0) { + // 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 = new Chess(); + for (var i = 0; i <= current_display_move; ++i) { + hiddenboard.move(current_display_line.pretty_pv[i]); + } + var moves = hiddenboard.history({ verbose: true }); + var last_move = moves.pop(); + highlight_from = last_move.from; + highlight_to = last_move.to; + } else { + highlight_from = highlight_to = undefined; + } + update_highlight(); + if (data['failed']) { $("#score").text("No analysis for this move"); $("#pv").empty(); @@ -656,6 +670,7 @@ var update_board = function(current_data, display_data) { $("#refutationlines").empty(); refutation_lines = []; update_refutation_lines(); + clear_arrows(); return; } @@ -694,16 +709,8 @@ var update_board = function(current_data, display_data) { fen = data['position']['fen']; update_displayed_line(); - if (data['position']['last_move_uci']) { - highlight_from = data['position']['last_move_uci'].substr(0, 2); - highlight_to = data['position']['last_move_uci'].substr(2, 2); - } else { - highlight_from = highlight_to = undefined; - } - update_highlight(); - // Print the PV. - $("#pv").html(add_pv(data['position']['fen'], data['pv_uci'], data['position']['move_num'], data['position']['toplay'])); + $("#pv").html(add_pv(data['position']['fen'], data['pv_pretty'], data['position']['move_num'], data['position']['toplay'])); // Update the PV arrow. clear_arrows(); @@ -869,7 +876,7 @@ var update_historic_analysis = function() { // Fetch old analysis for this line if it exists. var hiddenboard = new Chess(); for (var i = 0; i <= current_display_move; ++i) { - hiddenboard.move(ucimove_to_chessjs_move(current_display_line.uci_pv[i])); + hiddenboard.move(current_display_line.pretty_pv[i]); } var filename = "/history/move" + (current_display_move + 1) + "-" + hiddenboard.fen().replace(/ /g, '_').replace(/\//g, '-') + ".json"; @@ -904,7 +911,7 @@ var update_displayed_line = function() { } else { $("#prevmove").html("Previous"); } - if (current_display_move == current_display_line.uci_pv.length - 1) { + if (current_display_move == current_display_line.pretty_pv.length - 1) { $("#nextmove").html("Next"); } else { $("#nextmove").html("Next"); @@ -913,7 +920,7 @@ var update_displayed_line = function() { var hiddenboard = new Chess(); hiddenboard.load(current_display_line.start_fen); for (var i = 0; i <= current_display_move; ++i) { - hiddenboard.move(ucimove_to_chessjs_move(current_display_line.uci_pv[i])); + hiddenboard.move(current_display_line.pretty_pv[i]); } highlighted_move = $("#automove" + current_display_line.line_number + "-" + current_display_move); @@ -922,18 +929,6 @@ var update_displayed_line = function() { board.position(hiddenboard.fen()); } -var ucimove_to_chessjs_move = function(move) { - var source = move.substr(0, 2); - var target = move.substr(2, 2); - var promo = move.substr(4, 1); - - if (promo === '') { - return { from: source, to: target }; - } else { - return { from: source, to: target, promotion: promo }; - } -} - var init = function() { unique = get_unique();