X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=c9ff8d8291f4f8f2799a6e83a1003868d59fa4b0;hp=9be71822debbec5bf96122d111051a83ac0fe481;hb=f662b895fc40db21c3d667b16e5a8f2d3f55dfd7;hpb=ede960749ac60470a75bda41d0121eb055ce2905 diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index 9be7182..c9ff8d8 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -1,4 +1,5 @@ -var board = []; +var board = null; +var hiddenboard = null; var arrows = []; var arrow_targets = []; var occupied_by_arrows = []; @@ -11,6 +12,11 @@ var highlight_from = undefined; var highlight_to = undefined; var unique = Math.random(); +var fen = null; +var display_lines = []; +var current_display_line = null; +var current_display_move = null; + var request_update = function(board) { $.ajax({ url: "http://analysis.sesse.net/analysis.pl?ims=" + ims + "&unique=" + unique @@ -128,6 +134,11 @@ var position_arrow = function(arrow) { if (arrow.connection2) { jsPlumb.detach(arrow.connection2); } + if (current_display_line !== null) { + delete arrow.connection1; + delete arrow.connection2; + return; + } arrow.connection1 = jsPlumb.connect({ source: arrow.s1, target: arrow.d1, @@ -260,16 +271,25 @@ var thousands = function(x) { return String(x).split('').reverse().join('').replace(/(\d{3}\B)/g, '$1,').split('').reverse().join(''); } -var print_pv = function(pretty_pv, move_num, toplay, limit) { +var print_pv = function(fen, uci_pv, pretty_pv, move_num, toplay, limit) { + display_lines.push({ + start_fen: fen, + uci_pv: uci_pv, + pretty_pv: pretty_pv + }); + var pv = ''; var i = 0; if (toplay == 'B') { - pv = move_num + '. … ' + pretty_pv[0]; + var move = "" + pretty_pv[0] + ""; + pv = move_num + '. … ' + move; toplay = 'W'; ++i; } ++move_num; for ( ; i < pretty_pv.length; ++i) { + var move = "" + pretty_pv[i] + ""; + if (toplay == 'W') { if (i > limit) { return pv + ' (…)'; @@ -277,11 +297,11 @@ var print_pv = function(pretty_pv, move_num, toplay, limit) { if (pv != '') { pv += ' '; } - pv += move_num + '. ' + pretty_pv[i]; + pv += move_num + '. ' + move; ++move_num; toplay = 'B'; } else { - pv += ' ' + pretty_pv[i]; + pv += ' ' + move; toplay = 'W'; } } @@ -290,7 +310,7 @@ var print_pv = function(pretty_pv, move_num, toplay, limit) { var update_highlight = function() { $("#board").find('.square-55d63').removeClass('nonuglyhighlight'); - if (highlight_from !== undefined && highlight_to !== undefined) { + if (current_display_line === null && highlight_from !== undefined && highlight_to !== undefined) { $("#board").find('.square-' + highlight_from).addClass('nonuglyhighlight'); $("#board").find('.square-' + highlight_to).addClass('nonuglyhighlight'); } @@ -314,7 +334,12 @@ var update_refutation_lines = function(board) { var move_td = document.createElement("td"); tr.appendChild(move_td); $(move_td).addClass("move"); - $(move_td).text(line.pretty_move); + if (line.pv_uci.length == 0) { + $(move_td).text(line.pretty_move); + } else { + var move = "" + line.pretty_move + ""; + $(move_td).html(move); + } var score_td = document.createElement("td"); tr.appendChild(score_td); @@ -329,7 +354,7 @@ var update_refutation_lines = function(board) { var pv_td = document.createElement("td"); tr.appendChild(pv_td); $(pv_td).addClass("pv"); - $(pv_td).text(print_pv(line.pv_pretty, move_num, toplay, 10)); + $(pv_td).html(print_pv(fen, line.pv_uci, line.pv_pretty, move_num, toplay, 10)); tbl.append(tr); } @@ -389,7 +414,8 @@ var update_board = function(board, data, num_viewers) { } // Update the board itself. - board.position(data.position.fen); + fen = data.position.fen; + update_displayed_line(); if (data.position.last_move_uci) { highlight_from = data.position.last_move_uci.substr(0, 2); @@ -400,8 +426,7 @@ var update_board = function(board, data, num_viewers) { update_highlight(); // Print the PV. - var pv = print_pv(data.pv_pretty, data.position.move_num, data.position.toplay); - $("#pv").text(pv); + $("#pv").html(print_pv(data.position.fen, data.pv_uci, data.pv_pretty, data.position.move_num, data.position.toplay)); // Update the PV arrow. clear_arrows(); @@ -456,6 +481,7 @@ var update_board = function(board, data, num_viewers) { } // Update the refutation lines. + fen = data.position.fen; move_num = data.position.move_num; toplay = data.position.toplay; refutation_lines = data.refutation_lines; @@ -470,9 +496,64 @@ var resort_refutation_lines = function(sort_by_score) { update_refutation_lines(board); } +var show_line = function(line_num, move_num) { + if (line_num == -1) { + current_display_line = null; + current_display_move = null; + } else { + current_display_line = display_lines[line_num]; + current_display_move = move_num; + } + update_displayed_line(); + update_highlight(); + redraw_arrows(); +} + +var prev_move = function() { + --current_display_move; + update_displayed_line(); +} + +var next_move = function() { + ++current_display_move; + update_displayed_line(); +} + +var update_displayed_line = function() { + if (current_display_line === null) { + $("#linenav").hide(); + $("#linemsg").show(); + board.position(fen); + return; + } + + $("#linenav").show(); + $("#linemsg").hide(); + + if (current_display_move == 0) { + $("#prevmove").html("Previous"); + } else { + $("#prevmove").html("Previous"); + } + if (current_display_move == current_display_line.uci_pv.length - 1) { + $("#nextmove").html("Next"); + } else { + $("#nextmove").html("Next"); + } + + hiddenboard.position(current_display_line.start_fen, false); + for (var i = 0; i <= current_display_move; ++i) { + var move = current_display_line.uci_pv[i]; + move = move.substr(0, 2) + "-" + move.substr(2, 4); + hiddenboard.move(move, false); + } + board.position(hiddenboard.position()); +} + var init = function() { // Create board. board = new ChessBoard('board', 'start'); + hiddenboard = new ChessBoard('hiddenboard', 'start'); request_update(board); $(window).resize(function() {