X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=3bff1ffa4d1c22ae489a5b8c698196cec2f522ac;hp=a5cdc232a61ce3a6cfa2b90508411b467b4e6202;hb=6f6ae45314e4f9876ab4fa9b9ba50e0c6a5e8371;hpb=bf646866821723c84ac275cab2314a43aed20d64 diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index a5cdc23..3bff1ff 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -48,8 +48,8 @@ var highlight_to = undefined; /** @type {?jQuery} @private */ var highlighted_move = null; -/** @type {!number} @private */ -var unique = Math.random(); +/** @type {?number} @private */ +var unique = null; /** The current position on the board, represented as a FEN string. * @type {?string} @@ -76,6 +76,28 @@ var current_display_line = null; /** @type {?number} @private */ var current_display_move = null; +var supports_html5_storage = function() { + try { + return 'localStorage' in window && window['localStorage'] !== null; + } catch (e) { + return false; + } +} + +// Make the unique token persistent so people refreshing the page won't count twice. +// Of course, you can never fully protect against people deliberately wanting to spam. +var get_unique = function() { + var use_local_storage = supports_html5_storage(); + if (use_local_storage && localStorage['unique']) { + return localStorage['unique']; + } + var unique = Math.random(); + if (use_local_storage) { + localStorage['unique'] = unique; + } + return unique; +} + var request_update = function() { $.ajax({ url: "http://analysis.sesse.net/analysis.pl?ims=" + ims + "&unique=" + unique @@ -407,7 +429,7 @@ var add_pv = function(fen, uci_pv, pretty_pv, move_num, toplay, opt_limit, opt_s var print_pv = function(line_num, pretty_pv, move_num, toplay, opt_limit, opt_showlast) { var pv = ''; var i = 0; - if (opt_limit && opt_showlast) { + if (opt_limit && opt_showlast && pretty_pv.length > opt_limit) { // Truncate the PV at the beginning (instead of at the end). // We assume here that toplay is 'W'. We also assume that if // opt_showlast is set, then it is the history, and thus, @@ -455,7 +477,7 @@ var update_highlight = function() { } var update_history = function() { - if (display_lines[0] === null) { + if (display_lines[0] === null || display_lines[0].pretty_pv.length == 0) { $("#history").html("No history"); } else if (truncate_display_history) { $("#history").html(print_pv(0, display_lines[0].pretty_pv, 1, 'W', 8, true)); @@ -579,9 +601,16 @@ var update_board = function(data, num_viewers) { if (data['score'] !== null) { $("#score").text(data['score']); } + if (data['short_score'] !== undefined && data['short_score'] !== null) { + document.title = '(' + data['short_score'] + ') analysis.sesse.net'; + } else { + document.title = 'analysis.sesse.net'; + } // The search stats. - if (data['nodes'] && data['nps'] && data['depth']) { + if (data['tablebase'] == 1) { + $("#searchstats").text("Tablebase result"); + } else if (data['nodes'] && data['nps'] && data['depth']) { var stats = thousands(data['nodes']) + ' nodes, ' + thousands(data['nps']) + ' nodes/sec, depth ' + data['depth'] + ' ply'; if (data['seldepth']) { stats += ' (' + data['seldepth'] + ' selective)'; @@ -595,6 +624,8 @@ var update_board = function(data, num_viewers) { } $("#searchstats").text(stats); + } else { + $("#searchstats").text(""); } // Update the board itself. @@ -762,15 +793,29 @@ var update_displayed_line = function() { hiddenboard.position(current_display_line.start_fen, false); for (var i = 0; i <= current_display_move; ++i) { + var pos = hiddenboard.position(); var move = current_display_line.uci_pv[i]; + var source = move.substr(0, 2); + var target = move.substr(2, 2); var promo = move.substr(4, 1); - move = move.substr(0, 2) + "-" + move.substr(2, 2); + + // Check if we need to do en passant. + var piece = pos[source]; + if (piece == "wP" || piece == "bP") { + if (source.substr(0, 1) != target.substr(0, 1) && + pos[target] === undefined) { + var ep_square = target.substr(0, 1) + source.substr(1, 1); + delete pos[ep_square]; + hiddenboard.position(pos, false); + } + } + + move = source + "-" + target; hiddenboard.move(move, false); + pos = hiddenboard.position(); // Do promotion if needed. if (promo != "") { - var pos = hiddenboard.position(); - var target = move.substr(3, 2); pos[target] = pos[target].substr(0, 1) + promo.toUpperCase(); hiddenboard.position(pos, false); } @@ -795,6 +840,8 @@ var update_displayed_line = function() { } var init = function() { + unique = get_unique(); + // Create board. board = new window.ChessBoard('board', 'start'); hiddenboard = new window.ChessBoard('hiddenboard', 'start');