X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=d75b3fca18b980a9dec369699728747d1614699d;hp=595bce185aa1a3457dc89cb5241fe5abee9c307e;hb=944e74aaa3c5b3038d16d8be1461be6f6f33a4b4;hpb=2e6f47cc12a8ce6fdd3c8d5da5183abb8cc3719a diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index 595bce1..d75b3fc 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 @@ -418,7 +440,7 @@ var print_pv = function(line_num, pretty_pv, move_num, toplay, opt_limit, opt_sh ++i; } move_num += i / 2; - } else if (toplay == 'B') { + } else if (toplay == 'B' && pretty_pv.length > 0) { var move = "" + pretty_pv[0] + ""; pv = move_num + '. … ' + move; toplay = 'W'; @@ -550,14 +572,18 @@ var update_board = function(data, num_viewers) { } else { headline = 'Analysis'; } + var last_move; if (data['position']['last_move'] !== 'none') { - headline += ' after ' if (data['position']['toplay'] == 'W') { - headline += (data['position']['move_num']-1) + '… '; + last_move = (data['position']['move_num']-1) + '… '; } else { - headline += data['position']['move_num'] + '. '; + last_move = data['position']['move_num'] + '. '; } - headline += data['position']['last_move']; + last_move += data['position']['last_move']; + + headline += ' after ' + last_move; + } else { + last_move = null; } $("#headline").text(headline); @@ -580,8 +606,24 @@ var update_board = function(data, num_viewers) { $("#score").text(data['score']); } + var title_elems = []; + if (data['short_score'] !== undefined && data['short_score'] !== null) { + title_elems.push(data['short_score']); + } + if (last_move !== null) { + title_elems.push(last_move); + } + + if (title_elems.length != 0) { + document.title = '(' + title_elems.join(', ') + ') 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 +637,8 @@ var update_board = function(data, num_viewers) { } $("#searchstats").text(stats); + } else { + $("#searchstats").text(""); } // Update the board itself. @@ -809,6 +853,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');