X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=303f148a2226a845179a8c23bc85e1e916114c0d;hp=fa7e5d4d724f1128a17de3181160944f7040899d;hb=35c3d5a5717df69ce7ce349d5e91fa93ba32cd0c;hpb=9d57ef5623a0f6dc464c4b23760901890f6ea29d diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index fa7e5d4..303f148 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -1,19 +1,27 @@ +var board = []; var arrows = []; var arrow_targets = []; var occupied_by_arrows = []; +var ims = 0; +var highlight_from = undefined; +var highlight_to = undefined; +var unique = Math.random(); var request_update = function(board, first) { $.ajax({ - //url: "http://analysis.sesse.net/analysis.pl?first=" + first - url: "http://analysis.sesse.net:5000/analysis.pl?first=" + first - }).done(function(data) { - update_board(board, data); + url: "http://analysis.sesse.net/analysis.pl?ims=" + ims + "&unique=" + unique + //url: "http://analysis.sesse.net:5000/analysis.pl?ims=" + ims + "&unique=" + unique + }).done(function(data, textstatus, xhr) { + ims = xhr.getResponseHeader('X-Remoteglot-Last-Modified'); + var num_viewers = xhr.getResponseHeader('X-Remoteglot-Num-Viewers'); + update_board(board, data, num_viewers); }); } var clear_arrows = function() { for (var i = 0; i < arrows.length; ++i) { - jsPlumb.detach(arrows[i]); + jsPlumb.detach(arrows[i].connection1); + jsPlumb.detach(arrows[i].connection2); } arrows = []; @@ -28,6 +36,12 @@ var clear_arrows = function() { } } +var redraw_arrows = function() { + for (var i = 0; i < arrows.length; ++i) { + position_arrow(arrows[i]); + } +} + var sign = function(x) { if (x > 0) { return 1; @@ -78,37 +92,38 @@ var add_target = function() { arrow_targets.push(elem); return elem.id; } + +var position_arrow = function(arrow) { + var zoom_factor = $("#board").width() / 400.0; + var line_width = arrow.line_width * zoom_factor; + var arrow_size = arrow.arrow_size * zoom_factor; -var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_size) { - var from_col = from_square.charCodeAt(0) - "a1".charCodeAt(0); - var from_row = from_square.charCodeAt(1) - "a1".charCodeAt(1); - var to_col = to_square.charCodeAt(0) - "a1".charCodeAt(0); - var to_row = to_square.charCodeAt(1) - "a1".charCodeAt(1); - - var from_y = (7 - from_row)*49 + 25; - var to_y = (7 - to_row)*49 + 25; - var from_x = from_col*49 + 25; - var to_x = to_col*49 + 25; + 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 dx = to_x - from_x; var dy = to_y - from_y; var len = Math.sqrt(dx * dx + dy * dy); dx /= len; dy /= len; - - // Create arrow. - var s1 = add_target(); - var d1 = add_target(); - var s1v = add_target(); - var d1v = add_target(); - var pos = $("#board").position(); - $("#" + s1).css({ top: pos.top + from_y + (0.5 * arrow_size) * dy, left: pos.left + from_x + (0.5 * arrow_size) * dx }); - $("#" + d1).css({ top: pos.top + to_y - (0.5 * arrow_size) * dy, left: pos.left + to_x - (0.5 * arrow_size) * dx }); - $("#" + s1v).css({ top: pos.top + from_y - 0 * dy, left: pos.left + from_x - 0 * dx }); - $("#" + d1v).css({ top: pos.top + to_y + 0 * dy, left: pos.left + to_x + 0 * dx }); - var connection1 = jsPlumb.connect({ - source: s1, - target: d1, + var pos = $(".square-a8").position(); + $("#" + arrow.s1).css({ top: pos.top + from_y + (0.5 * arrow_size) * dy, left: pos.left + from_x + (0.5 * arrow_size) * dx }); + $("#" + arrow.d1).css({ top: pos.top + to_y - (0.5 * arrow_size) * dy, left: pos.left + to_x - (0.5 * arrow_size) * dx }); + $("#" + arrow.s1v).css({ top: pos.top + from_y - 0 * dy, left: pos.left + from_x - 0 * dx }); + $("#" + arrow.d1v).css({ top: pos.top + to_y + 0 * dy, left: pos.left + to_x + 0 * dx }); + + if (arrow.connection1) { + jsPlumb.detach(arrow.connection1); + } + if (arrow.connection2) { + jsPlumb.detach(arrow.connection2); + } + arrow.connection1 = jsPlumb.connect({ + source: arrow.s1, + target: arrow.d1, connector:["Straight"], cssClass:"c1", endpoint:"Blank", @@ -116,15 +131,15 @@ var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_ anchor:"Continuous", paintStyle:{ lineWidth:line_width, - strokeStyle:fg_color, + strokeStyle:arrow.fg_color, outlineWidth:1, outlineColor:"#666", opacity:"60%" } - }); - var connection2 = jsPlumb.connect({ - source: s1v, - target: d1v, + }); + arrow.connection2 = jsPlumb.connect({ + source: arrow.s1v, + target: arrow.d1v, connector:["Straight"], cssClass:"vir", endpoint:"Blank", @@ -132,7 +147,7 @@ var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_ anchor:"Continuous", paintStyle:{ lineWidth:0, - strokeStyle:fg_color, + strokeStyle:arrow.fg_color, outlineWidth:0, outlineColor:"#666", }, @@ -140,16 +155,40 @@ var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_ ["Arrow", { cssClass:"l1arrow", location:1.0, - width: arrow_size, length: arrow_size, - paintStyle:{ + width: arrow_size, + length: arrow_size, + paintStyle: { lineWidth:line_width, strokeStyle:"#000", }, }] ] }); - arrows.push(connection1); - arrows.push(connection2); +} + +var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_size) { + var from_col = from_square.charCodeAt(0) - "a1".charCodeAt(0); + var from_row = from_square.charCodeAt(1) - "a1".charCodeAt(1); + var to_col = to_square.charCodeAt(0) - "a1".charCodeAt(0); + var to_row = to_square.charCodeAt(1) - "a1".charCodeAt(1); + + // Create arrow. + var arrow = { + s1: add_target(), + d1: add_target(), + s1v: add_target(), + d1v: add_target(), + from_col: from_col, + from_row: from_row, + to_col: to_col, + to_row: to_row, + line_width: line_width, + arrow_size: arrow_size, + fg_color: fg_color + }; + + position_arrow(arrow); + arrows.push(arrow); } // Fake multi-PV using the refutation lines. Find all “relevant” moves, @@ -161,7 +200,7 @@ var find_nonstupid_moves = function(data, margin) { var best_score = undefined; var pv_score = undefined; for (var move in data.refutation_lines) { - var score = data.refutation_lines[move].score_sort_key; + var score = parseInt(data.refutation_lines[move].score_sort_key); if (move == data.pv_uci[0]) { pv_score = score; } @@ -181,12 +220,12 @@ var find_nonstupid_moves = function(data, margin) { // The PV move will always be first. var moves = []; for (var move in data.refutation_lines) { - var score = data.refutation_lines[move].score_sort_key; + var score = parseInt(data.refutation_lines[move].score_sort_key); if (move != data.pv_uci[0] && best_score - score <= margin) { moves.push(move); } } - moves = moves.sort(function(a, b) { return data.refutation_lines[b].score_sort_key - data.refutation_lines[a].score_sort_key; }); + moves = moves.sort(function(a, b) { return parseInt(data.refutation_lines[b].score_sort_key) - parseInt(data.refutation_lines[a].score_sort_key); }); moves.unshift(data.pv_uci[0]); return moves; @@ -231,8 +270,16 @@ var compare_by_sort_key = function(data, a, b) { if (ska > skb) return 1; return 0; }; + +var update_highlight = function() { + $("#board").find('.square-55d63').removeClass('nonuglyhighlight'); + if (highlight_from !== undefined && highlight_to !== undefined) { + $("#board").find('.square-' + highlight_from).addClass('nonuglyhighlight'); + $("#board").find('.square-' + highlight_to).addClass('nonuglyhighlight'); + } +} -var update_board = function(board, data) { +var update_board = function(board, data, num_viewers) { // The headline. var headline = 'Analysis'; if (data.position.last_move !== 'none') { @@ -245,6 +292,14 @@ var update_board = function(board, data) { $("#headline").text(headline); + if (num_viewers === null) { + $("#numviewers").text(""); + } else if (num_viewers == 1) { + $("#numviewers").text("You are the only current viewer"); + } else { + $("#numviewers").text(num_viewers + " current viewers"); + } + // The score. if (data.score !== null) { $("#score").text(data.score); @@ -271,13 +326,13 @@ var update_board = function(board, data) { // Update the board itself. board.position(data.position.fen); - $("#board").find('.square-55d63').removeClass('nonuglyhighlight'); if (data.position.last_move_uci) { - var from = data.position.last_move_uci.substr(0, 2); - var to = data.position.last_move_uci.substr(2, 4); - $("#board").find('.square-' + from).addClass('nonuglyhighlight'); - $("#board").find('.square-' + to).addClass('nonuglyhighlight'); + highlight_from = data.position.last_move_uci.substr(0, 2); + highlight_to = data.position.last_move_uci.substr(2, 4); + } else { + highlight_from = highlight_to = undefined; } + update_highlight(); // Print the PV. var pv = print_pv(data.pv_pretty, data.position.move_num, data.position.toplay); @@ -378,9 +433,13 @@ var update_board = function(board, data) { var init = function() { // Create board. - var board = new ChessBoard('board', 'start'); + board = new ChessBoard('board', 'start'); request_update(board, 1); - + $(window).resize(function() { + board.resize(); + update_highlight(); + redraw_arrows(); + }); }; $(document).ready(init);