X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=8dbeccbbd9e6ad329e6b754477d379fe162e0061;hb=e9516524af69bdf7bf09c4b530abd04f82c7626e;hp=9635c9198f20cb05268ce38229b3dd097d46df3c;hpb=7672cd409aaf8cdf4ae2caf8a1f403c7d86c7fcd;p=remoteglot diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index 9635c91..8dbeccb 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -135,10 +135,14 @@ var request_update = function() { url: "/analysis.pl?ims=" + ims + "&unique=" + unique }).done(function(data, textstatus, xhr) { sync_server_clock(xhr.getResponseHeader('Date')); - ims = xhr.getResponseHeader('X-Remoteglot-Last-Modified'); - var num_viewers = xhr.getResponseHeader('X-Remoteglot-Num-Viewers'); + ims = xhr.getResponseHeader('X-RGLM'); + var num_viewers = xhr.getResponseHeader('X-RGNV'); possibly_play_sound(current_analysis_data, data); - current_analysis_data = data; + if (Array.isArray(data)) { + current_analysis_data = JSON_delta.patch(current_analysis_data, data); + } else { + current_analysis_data = data; + } update_board(current_analysis_data, displayed_analysis_data); update_num_viewers(num_viewers); @@ -629,6 +633,28 @@ var update_refutation_lines = function() { } } +/** + * @param {?string} fen + * @param {Array.} moves + * @param {number} last_move + */ +var chess_from = function(fen, moves, last_move) { + var hiddenboard = new Chess(); + if (fen !== null) { + hiddenboard.load(fen); + } + for (var i = 0; i <= last_move; ++i) { + if (moves[i] === '0-0') { + hiddenboard.move('O-O'); + } else if (moves[i] === '0-0-0') { + hiddenboard.move('O-O-O'); + } else { + hiddenboard.move(moves[i]); + } + } + return hiddenboard; +} + /** * @param {Object} data * @param {?Object} display_data @@ -702,10 +728,7 @@ var update_board = function(current_data, display_data) { // 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 hiddenboard = chess_from(null, current_display_line.pretty_pv, current_display_move); var moves = hiddenboard.history({ verbose: true }); var last_move = moves.pop(); highlight_from = last_move.from; @@ -851,16 +874,22 @@ var update_clock = function() { if (result === '1-0') { $("#whiteclock").text("1"); $("#blackclock").text("0"); + $("#whiteclock").removeClass("running-clock"); + $("#blackclock").removeClass("running-clock"); return; } if (result === '1/2-1/2') { $("#whiteclock").text("1/2"); $("#blackclock").text("1/2"); + $("#whiteclock").removeClass("running-clock"); + $("#blackclock").removeClass("running-clock"); return; } if (result === '0-1') { $("#whiteclock").text("0"); $("#blackclock").text("1"); + $("#whiteclock").removeClass("running-clock"); + $("#blackclock").removeClass("running-clock"); return; } } @@ -880,8 +909,15 @@ var update_clock = function() { var color; if (data['position']['white_clock_target']) { color = "white"; + $("#whiteclock").addClass("running-clock"); + $("#blackclock").removeClass("running-clock"); } else if (data['position']['black_clock_target']) { color = "black"; + $("#whiteclock").removeClass("running-clock"); + $("#blackclock").addClass("running-clock"); + } else { + $("#whiteclock").removeClass("running-clock"); + $("#blackclock").removeClass("running-clock"); } if (color) { var now = new Date().getTime() + client_clock_offset_ms; @@ -1021,10 +1057,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(current_display_line.pretty_pv[i]); - } + var hiddenboard = chess_from(null, current_display_line.pretty_pv, current_display_move); var filename = "/history/move" + (current_display_move + 1) + "-" + hiddenboard.fen().replace(/ /g, '_').replace(/\//g, '-') + ".json"; @@ -1064,15 +1097,10 @@ var update_displayed_line = function() { $("#nextmove").html("Next"); } - var hiddenboard = new Chess(); - hiddenboard.load(current_display_line.start_fen); - for (var i = 0; i <= current_display_move; ++i) { - hiddenboard.move(current_display_line.pretty_pv[i]); - } - highlighted_move = $("#automove" + current_display_line.line_number + "-" + current_display_move); highlighted_move.addClass('highlight'); + var hiddenboard = chess_from(current_display_line.start_fen, current_display_line.pretty_pv, current_display_move); board.position(hiddenboard.fen()); }