From ede960749ac60470a75bda41d0121eb055ce2905 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 21 Nov 2013 20:08:19 +0100 Subject: [PATCH 1/1] Allow sorting refutation lines by score instead of move. --- www/css/remoteglot.css | 5 ++ www/index.html | 2 + www/js/remoteglot.js | 130 +++++++++++++++++++++++++---------------- 3 files changed, 88 insertions(+), 49 deletions(-) diff --git a/www/css/remoteglot.css b/www/css/remoteglot.css index 186ef1f..f44c11f 100644 --- a/www/css/remoteglot.css +++ b/www/css/remoteglot.css @@ -39,6 +39,11 @@ td { p { margin-top: 0; } +#sortbyscoreholder { + font-size: smaller; + margin: 0; + font-style: italic; +} #refutationlines { font-size: smaller; } diff --git a/www/index.html b/www/index.html index 52535fb..ce8cb42 100644 --- a/www/index.html +++ b/www/index.html @@ -20,6 +20,8 @@

PV:

Shallow search of all legal moves (multi-PV)

+

Sort by: Move + Score

Symbol explanation

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); - -})(); -- 2.39.2