X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=d89da33b3d5339f5b581c356ba2fb68af78f3389;hb=6b412ffcd5797613037e4d69c39f8b4a3f0254f9;hp=ff566ab85c81c4ba4b33ff8a9853bec23d8f89ca;hpb=01a8eaa3db2c015b25c0cf53df96b12493f3db58;p=remoteglot diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index ff566ab..d89da33 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -7,7 +7,7 @@ * @type {Number} * @const * @private */ -var SCRIPT_VERSION = 2016113002; +var SCRIPT_VERSION = 2016113007; /** * The current backend URL. @@ -298,7 +298,9 @@ var request_update = function() { } // Next update. - current_analysis_request_timer = setTimeout(function() { request_update(); }, timeout); + if (!backend_url.match(/history/)) { + current_analysis_request_timer = setTimeout(function() { request_update(); }, timeout); + } }).fail(function(jqXHR, textStatus, errorThrown) { if (textStatus === "abort") { // Aborted because we are switching backends. Abandon and don't retry, @@ -474,17 +476,25 @@ var position_arrow = function(arrow) { return; } - var pos = $(".square-a8").position(); - var zoom_factor = $("#board").width() / 400.0; var line_width = arrow.line_width * zoom_factor; var arrow_size = arrow.arrow_size * zoom_factor; var square_width = $(".square-a8").width(); - var from_y = (7 - arrow.from_row + 0.5)*square_width; - var to_y = (7 - arrow.to_row + 0.5)*square_width; - var from_x = (arrow.from_col + 0.5)*square_width; - var to_x = (arrow.to_col + 0.5)*square_width; + var pos, from_y, to_y, from_x, to_x; + if (board.orientation() === 'black') { + pos = $(".square-h1").position(); + from_y = (arrow.from_row + 0.5)*square_width; + to_y = (arrow.to_row + 0.5)*square_width; + from_x = (7 - arrow.from_col + 0.5)*square_width; + to_x = (7 - arrow.to_col + 0.5)*square_width; + } else { + pos = $(".square-a8").position(); + from_y = (7 - arrow.from_row + 0.5)*square_width; + to_y = (7 - arrow.to_row + 0.5)*square_width; + from_x = (arrow.from_col + 0.5)*square_width; + to_x = (arrow.to_col + 0.5)*square_width; + } var SVG_NS = "http://www.w3.org/2000/svg"; var XHTML_NS = "http://www.w3.org/1999/xhtml"; @@ -930,6 +940,18 @@ var update_game_list = function(games) { * and switch to it if we're not already displaying it. */ var possibly_switch_game_from_hash = function() { + var history_match = window.location.hash.match(/^#history=([a-zA-Z0-9_-]+)/); + if (history_match !== null) { + var game_id = history_match[1]; + var fake_game = { + url: '/history/' + game_id + '.json', + hashurl: '', + id: 'history=' + game_id + }; + switch_backend(fake_game); + return; + } + if (current_games === null) { return; } @@ -945,6 +967,32 @@ var possibly_switch_game_from_hash = function() { } } +/** + * If this is a Chess960 castling which doesn't move the king, + * move the rook instead. +*/ +var patch_move = function(move) { + if (move === null) return null; + if (move.from !== move.to) return move; + + var f = move.rook_sq & 15; + var r = move.rook_sq >> 4; + var from = ('abcdefgh'.substring(f,f+1) + '87654321'.substring(r,r+1)); + var to = move.to; + + if (move.to === 'g1') { + to = 'f1'; + } else if (move.to === 'g8') { + to = 'f8'; + } else if (move.to === 'b1') { + to = 'c1'; + } else if (move.to === 'b8') { + to = 'c8'; + } + + return { from: from, to: to }; +} + /** Update all the HTML on the page, based on current global state. */ var update_board = function() { @@ -1174,20 +1222,21 @@ var update_board = function() { // draw a continuation arrow as long as it's the same piece var last_to; for (var i = 0; i < data['pv'].length; i += 2) { - var move = hiddenboard.move(data['pv'][i]); + var move = patch_move(hiddenboard.move(data['pv'][i])); + if ((i >= 2 && move.from != last_to) || interfering_arrow(move.from, move.to)) { break; } create_arrow(move.from, move.to, '#f66', 6, 20); - last_to = move.from; + last_to = move.to; hiddenboard.move(data['pv'][i + 1]); // To keep continuity. } var alt_moves = find_nonstupid_moves(data, 30, data['position']['toplay'] === 'B'); for (var i = 1; i < alt_moves.length && i < 3; ++i) { hiddenboard = new Chess(base_fen); - var move = hiddenboard.move(alt_moves[i]); + var move = patch_move(hiddenboard.move(alt_moves[i])); if (move !== null) { create_arrow(move.from, move.to, '#f66', 1, 10); } @@ -2160,6 +2209,8 @@ var switch_backend = function(game) { } window['switch_backend'] = switch_backend; +window['flip'] = function() { board.flip(); redraw_arrows(); }; + var init = function() { unique = get_unique(); @@ -2204,6 +2255,7 @@ var init = function() { } }); window.addEventListener('hashchange', possibly_switch_game_from_hash, false); + possibly_switch_game_from_hash(); }; $(document).ready(init);