X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;h=9be71822debbec5bf96122d111051a83ac0fe481;hp=f6b4c43c7d7409a23385ee39c5273d7efc9d45c5;hb=ede960749ac60470a75bda41d0121eb055ce2905;hpb=879aaf22be4d79b966f43e10bff70e82971cb622 diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index f6b4c43..9be7182 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -1,10 +1,12 @@ -(function() { - var board = []; var arrows = []; var arrow_targets = []; var occupied_by_arrows = []; +var refutation_lines = []; +var move_num = 1; +var toplay = 'W'; var ims = 0; +var sort_refutation_lines_by_score = 0; var highlight_from = undefined; var highlight_to = undefined; var unique = Math.random(); @@ -196,6 +198,24 @@ var create_arrow = function(from_square, to_square, fg_color, line_width, arrow_ arrows.push(arrow); } +var compare_by_sort_key = function(refutation_lines, toplay, a, b) { + var ska = refutation_lines[a].sort_key; + var skb = refutation_lines[b].sort_key; + if (ska < skb) return -1; + if (ska > skb) return 1; + return 0; +}; + +var compare_by_score = function(refutation_lines, toplay, a, b) { + var sa = parseInt(refutation_lines[b].score_sort_key); + var sb = parseInt(refutation_lines[a].score_sort_key); + if (toplay == 'B') { + return sb - sa; + } else { + return sa - sb; + } +} + // Fake multi-PV using the refutation lines. Find all “relevant” moves, // sorted by quality, descending. var find_nonstupid_moves = function(data, margin) { @@ -230,7 +250,7 @@ var find_nonstupid_moves = function(data, margin) { moves.push(move); } } - moves = moves.sort(function(a, b) { return parseInt(data.refutation_lines[b].score_sort_key) - parseInt(data.refutation_lines[a].score_sort_key); }); + moves = moves.sort(function(a, b) { return compare_by_score(data.refutation_lines, a, b) }); moves.unshift(data.pv_uci[0]); return moves; @@ -268,14 +288,6 @@ var print_pv = function(pretty_pv, move_num, toplay, limit) { return pv; } -var compare_by_sort_key = function(data, a, b) { - var ska = data.refutation_lines[a].sort_key; - var skb = data.refutation_lines[b].sort_key; - if (ska < skb) return -1; - if (ska > skb) return 1; - return 0; -}; - var update_highlight = function() { $("#board").find('.square-55d63').removeClass('nonuglyhighlight'); if (highlight_from !== undefined && highlight_to !== undefined) { @@ -284,6 +296,54 @@ var update_highlight = function() { } } +var update_refutation_lines = function(board) { + var tbl = $("#refutationlines"); + tbl.empty(); + + moves = []; + for (var move in refutation_lines) { + moves.push(move); + } + var compare = sort_refutation_lines_by_score ? compare_by_score : compare_by_sort_key; + moves = moves.sort(function(a, b) { return compare(refutation_lines, toplay, a, b) }); + for (var i = 0; i < moves.length; ++i) { + var line = refutation_lines[moves[i]]; + + var tr = document.createElement("tr"); + + var move_td = document.createElement("td"); + tr.appendChild(move_td); + $(move_td).addClass("move"); + $(move_td).text(line.pretty_move); + + var score_td = document.createElement("td"); + tr.appendChild(score_td); + $(score_td).addClass("score"); + $(score_td).text(line.pretty_score); + + var depth_td = document.createElement("td"); + tr.appendChild(depth_td); + $(depth_td).addClass("depth"); + $(depth_td).text("d" + line.depth); + + 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)); + + tbl.append(tr); + } + + // Make one of the links clickable and the other nonclickable. + if (sort_refutation_lines_by_score) { + $("#sortbyscore0").html("Move"); + $("#sortbyscore1").html("Score"); + } else { + $("#sortbyscore0").html("Move"); + $("#sortbyscore1").html("Score"); + } +} + var update_board = function(board, data, num_viewers) { // The headline. var headline = 'Analysis'; @@ -395,47 +455,21 @@ var update_board = function(board, data, num_viewers) { } } - // Show the refutation lines. - var tbl = $("#refutationlines"); - tbl.empty(); - - moves = []; - for (var move in data.refutation_lines) { - moves.push(move); - } - moves = moves.sort(function(a, b) { return compare_by_sort_key(data, a, b) }); - for (var i = 0; i < moves.length; ++i) { - var line = data.refutation_lines[moves[i]]; - - var tr = document.createElement("tr"); - - var move_td = document.createElement("td"); - tr.appendChild(move_td); - $(move_td).addClass("move"); - $(move_td).text(line.pretty_move); - - var score_td = document.createElement("td"); - tr.appendChild(score_td); - $(score_td).addClass("score"); - $(score_td).text(line.pretty_score); - - var depth_td = document.createElement("td"); - tr.appendChild(depth_td); - $(depth_td).addClass("depth"); - $(depth_td).text("d" + line.depth); - - var pv_td = document.createElement("td"); - tr.appendChild(pv_td); - $(pv_td).addClass("pv"); - $(pv_td).text(print_pv(line.pv_pretty, data.position.move_num, data.position.toplay, 10)); - - tbl.append(tr); - } + // Update the refutation lines. + move_num = data.position.move_num; + toplay = data.position.toplay; + refutation_lines = data.refutation_lines; + update_refutation_lines(board); // Next update. setTimeout(function() { request_update(board); }, 100); } +var resort_refutation_lines = function(sort_by_score) { + sort_refutation_lines_by_score = sort_by_score; + update_refutation_lines(board); +} + var init = function() { // Create board. board = new ChessBoard('board', 'start'); @@ -448,5 +482,3 @@ var init = function() { }); }; $(document).ready(init); - -})();